@trinityui/design-system 2.11.0 → 2.13.0

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.
Files changed (518) hide show
  1. package/CHANGELOG.md +2209 -0
  2. package/CONTRIBUTING.md +180 -69
  3. package/LICENSE +21 -0
  4. package/MIGRATION.md +523 -21
  5. package/README.md +281 -120
  6. package/dist/IllustratedMessage.js +546 -1341
  7. package/dist/accessibility.d.ts +596 -18
  8. package/dist/accessibility.d.ts.map +1 -1
  9. package/dist/accessibility.js +458 -0
  10. package/dist/app-shell.js +17230 -9097
  11. package/dist/assets/index.d.ts +1 -1
  12. package/dist/charts.js +8507 -6059
  13. package/dist/color-contrast.d.ts +35 -0
  14. package/dist/color-contrast.d.ts.map +1 -0
  15. package/dist/commonjs-helpers.js +8 -0
  16. package/dist/component-color-references.d.ts +175 -0
  17. package/dist/component-color-references.d.ts.map +1 -0
  18. package/dist/components/AI/AIActions.d.ts +72 -12
  19. package/dist/components/AI/AIActions.d.ts.map +1 -1
  20. package/dist/components/AI/AIAvatar.d.ts +31 -3
  21. package/dist/components/AI/AIAvatar.d.ts.map +1 -1
  22. package/dist/components/AI/AIChainOfThought.d.ts +192 -72
  23. package/dist/components/AI/AIChainOfThought.d.ts.map +1 -1
  24. package/dist/components/AI/AIChainOfThought.types.d.ts +296 -34
  25. package/dist/components/AI/AIChainOfThought.types.d.ts.map +1 -1
  26. package/dist/components/AI/AIChainOfThought.utils.d.ts +25 -7
  27. package/dist/components/AI/AIChainOfThought.utils.d.ts.map +1 -1
  28. package/dist/components/AI/AIChat.d.ts +12 -0
  29. package/dist/components/AI/AIChat.d.ts.map +1 -1
  30. package/dist/components/AI/AIChatWelcome.d.ts +254 -0
  31. package/dist/components/AI/AIChatWelcome.d.ts.map +1 -0
  32. package/dist/components/AI/AIClarificationPrompt.d.ts +134 -0
  33. package/dist/components/AI/AIClarificationPrompt.d.ts.map +1 -0
  34. package/dist/components/AI/AIConfidenceBadge.d.ts +117 -0
  35. package/dist/components/AI/AIConfidenceBadge.d.ts.map +1 -0
  36. package/dist/components/AI/AIConfigContext.d.ts +100 -0
  37. package/dist/components/AI/AIConfigContext.d.ts.map +1 -0
  38. package/dist/components/AI/AIConfigProvider.d.ts +66 -0
  39. package/dist/components/AI/AIConfigProvider.d.ts.map +1 -0
  40. package/dist/components/AI/AIContainer.d.ts +80 -11
  41. package/dist/components/AI/AIContainer.d.ts.map +1 -1
  42. package/dist/components/AI/AIExplainability.d.ts +39 -5
  43. package/dist/components/AI/AIExplainability.d.ts.map +1 -1
  44. package/dist/components/AI/AIFeedbackControl.d.ts +113 -0
  45. package/dist/components/AI/AIFeedbackControl.d.ts.map +1 -0
  46. package/dist/components/AI/AIFeedbackForm.d.ts +117 -0
  47. package/dist/components/AI/AIFeedbackForm.d.ts.map +1 -0
  48. package/dist/components/AI/AIFeedbackHostContext.d.ts +16 -0
  49. package/dist/components/AI/AIFeedbackHostContext.d.ts.map +1 -0
  50. package/dist/components/AI/AILabel.d.ts +39 -6
  51. package/dist/components/AI/AILabel.d.ts.map +1 -1
  52. package/dist/components/AI/AIMessage.d.ts +337 -42
  53. package/dist/components/AI/AIMessage.d.ts.map +1 -1
  54. package/dist/components/AI/AIPlanReview.d.ts +194 -0
  55. package/dist/components/AI/AIPlanReview.d.ts.map +1 -0
  56. package/dist/components/AI/AIQueryDisclosure.d.ts +119 -0
  57. package/dist/components/AI/AIQueryDisclosure.d.ts.map +1 -0
  58. package/dist/components/AI/AIRelatedQuestions.d.ts +50 -11
  59. package/dist/components/AI/AIRelatedQuestions.d.ts.map +1 -1
  60. package/dist/components/AI/AIResponseRenderer.d.ts +133 -21
  61. package/dist/components/AI/AIResponseRenderer.d.ts.map +1 -1
  62. package/dist/components/AI/AIResponseSourcesContext.d.ts +83 -0
  63. package/dist/components/AI/AIResponseSourcesContext.d.ts.map +1 -0
  64. package/dist/components/AI/AIReviewItem.d.ts +142 -0
  65. package/dist/components/AI/AIReviewItem.d.ts.map +1 -0
  66. package/dist/components/AI/AISourceChip.d.ts +135 -0
  67. package/dist/components/AI/AISourceChip.d.ts.map +1 -0
  68. package/dist/components/AI/AISources.d.ts +91 -13
  69. package/dist/components/AI/AISources.d.ts.map +1 -1
  70. package/dist/components/AI/AISourcesPanel.d.ts +43 -7
  71. package/dist/components/AI/AISourcesPanel.d.ts.map +1 -1
  72. package/dist/components/AI/AITextBlock.d.ts +107 -17
  73. package/dist/components/AI/AITextBlock.d.ts.map +1 -1
  74. package/dist/components/AI/AITextBlock.parser.d.ts +153 -0
  75. package/dist/components/AI/AITextBlock.parser.d.ts.map +1 -0
  76. package/dist/components/AI/AIVerificationBadge.d.ts +94 -0
  77. package/dist/components/AI/AIVerificationBadge.d.ts.map +1 -0
  78. package/dist/components/AI/AIVisuals.d.ts +92 -23
  79. package/dist/components/AI/AIVisuals.d.ts.map +1 -1
  80. package/dist/components/AI/AIVoiceInput.d.ts +42 -11
  81. package/dist/components/AI/AIVoiceInput.d.ts.map +1 -1
  82. package/dist/components/AI/AIVoiceMode.d.ts +16 -2
  83. package/dist/components/AI/AIVoiceMode.d.ts.map +1 -1
  84. package/dist/components/AI/BlockErrorBoundary.d.ts +77 -0
  85. package/dist/components/AI/BlockErrorBoundary.d.ts.map +1 -0
  86. package/dist/components/AI/ChatHeader.d.ts +41 -4
  87. package/dist/components/AI/ChatHeader.d.ts.map +1 -1
  88. package/dist/components/AI/ChatHistoryList.d.ts +25 -12
  89. package/dist/components/AI/ChatHistoryList.d.ts.map +1 -1
  90. package/dist/components/AI/ChatThread.d.ts +263 -13
  91. package/dist/components/AI/ChatThread.d.ts.map +1 -1
  92. package/dist/components/AI/InThreadContext.d.ts +14 -0
  93. package/dist/components/AI/InThreadContext.d.ts.map +1 -0
  94. package/dist/components/AI/InsightEngine.d.ts +270 -46
  95. package/dist/components/AI/InsightEngine.d.ts.map +1 -1
  96. package/dist/components/AI/InsightEngineInput.d.ts +52 -5
  97. package/dist/components/AI/InsightEngineInput.d.ts.map +1 -1
  98. package/dist/components/AI/MessageActionButton.d.ts +72 -0
  99. package/dist/components/AI/MessageActionButton.d.ts.map +1 -0
  100. package/dist/components/AI/QueryInput.d.ts.map +1 -1
  101. package/dist/components/AI/UserAvatar.d.ts +50 -4
  102. package/dist/components/AI/UserAvatar.d.ts.map +1 -1
  103. package/dist/components/AI/UserMessage.d.ts +32 -3
  104. package/dist/components/AI/UserMessage.d.ts.map +1 -1
  105. package/dist/components/AI/blockRendererContext.d.ts +64 -0
  106. package/dist/components/AI/blockRendererContext.d.ts.map +1 -0
  107. package/dist/components/AI/hitlBlockRenderers.d.ts +48 -0
  108. package/dist/components/AI/hitlBlockRenderers.d.ts.map +1 -0
  109. package/dist/components/AI/index.d.ts +23 -6
  110. package/dist/components/AI/index.d.ts.map +1 -1
  111. package/dist/components/AI/moleculeBlockRenderers.d.ts +15 -0
  112. package/dist/components/AI/moleculeBlockRenderers.d.ts.map +1 -0
  113. package/dist/components/AI/planReviewBlockRenderer.d.ts +8 -0
  114. package/dist/components/AI/planReviewBlockRenderer.d.ts.map +1 -0
  115. package/dist/components/AI/strings/defaults.d.ts +31 -0
  116. package/dist/components/AI/strings/defaults.d.ts.map +1 -0
  117. package/dist/components/AI/tokens.d.ts +185 -20
  118. package/dist/components/AI/tokens.d.ts.map +1 -1
  119. package/dist/components/AI/types/hitl.d.ts +2294 -0
  120. package/dist/components/AI/types/hitl.d.ts.map +1 -0
  121. package/dist/components/AI/types/index.d.ts +2 -1
  122. package/dist/components/AI/types/index.d.ts.map +1 -1
  123. package/dist/components/AI/types/response.d.ts +428 -40
  124. package/dist/components/AI/types/response.d.ts.map +1 -1
  125. package/dist/components/AI/useBlockSources.d.ts +67 -0
  126. package/dist/components/AI/useBlockSources.d.ts.map +1 -0
  127. package/dist/components/AI/useBrowserVoiceMode.d.ts +31 -2
  128. package/dist/components/AI/useBrowserVoiceMode.d.ts.map +1 -1
  129. package/dist/components/AI/useWelcomeComposerHandoff.d.ts +30 -0
  130. package/dist/components/AI/useWelcomeComposerHandoff.d.ts.map +1 -0
  131. package/dist/components/AI/utils/alphaIndex.d.ts +19 -0
  132. package/dist/components/AI/utils/alphaIndex.d.ts.map +1 -0
  133. package/dist/components/AI/utils/blockReady.d.ts +54 -0
  134. package/dist/components/AI/utils/blockReady.d.ts.map +1 -0
  135. package/dist/components/AI/utils/blocks.d.ts +28 -0
  136. package/dist/components/AI/utils/blocks.d.ts.map +1 -0
  137. package/dist/components/AI/utils/confidence.d.ts +182 -0
  138. package/dist/components/AI/utils/confidence.d.ts.map +1 -0
  139. package/dist/components/AI/utils/filters.d.ts +31 -0
  140. package/dist/components/AI/utils/filters.d.ts.map +1 -0
  141. package/dist/components/AI/utils/responseText.d.ts +8 -0
  142. package/dist/components/AI/utils/responseText.d.ts.map +1 -0
  143. package/dist/components/AI/utils/sources.d.ts +110 -0
  144. package/dist/components/AI/utils/sources.d.ts.map +1 -0
  145. package/dist/components/AIDigestCard/AIDigestCard.d.ts.map +1 -1
  146. package/dist/components/AIDigestCard/types.d.ts +42 -5
  147. package/dist/components/AIDigestCard/types.d.ts.map +1 -1
  148. package/dist/components/AppLayout/AIFab.d.ts +33 -6
  149. package/dist/components/AppLayout/AIFab.d.ts.map +1 -1
  150. package/dist/components/AppLayout/AIFabLayout.deprecated.d.ts.map +1 -1
  151. package/dist/components/AppLayout/AppLayout.d.ts +135 -7
  152. package/dist/components/AppLayout/AppLayout.d.ts.map +1 -1
  153. package/dist/components/AppLayout/InsightEnginePanel.d.ts +315 -21
  154. package/dist/components/AppLayout/InsightEnginePanel.d.ts.map +1 -1
  155. package/dist/components/AppLayout/ResizablePanel.d.ts +145 -8
  156. package/dist/components/AppLayout/ResizablePanel.d.ts.map +1 -1
  157. package/dist/components/AppLayout/ThreadHistorySidebar.d.ts +6 -0
  158. package/dist/components/AppLayout/ThreadHistorySidebar.d.ts.map +1 -1
  159. package/dist/components/AppLayout/index.d.ts +3 -3
  160. package/dist/components/AppLayout/index.d.ts.map +1 -1
  161. package/dist/components/AppLayout/insightEnginePanel.demo.d.ts +32 -0
  162. package/dist/components/AppLayout/insightEnginePanel.demo.d.ts.map +1 -0
  163. package/dist/components/AppLayout/panelPropsPath.d.ts +26 -0
  164. package/dist/components/AppLayout/panelPropsPath.d.ts.map +1 -0
  165. package/dist/components/AppLayout/panelResizeTransition.d.ts +49 -0
  166. package/dist/components/AppLayout/panelResizeTransition.d.ts.map +1 -0
  167. package/dist/components/AppLayout/toChatThreadMessage.d.ts +40 -0
  168. package/dist/components/AppLayout/toChatThreadMessage.d.ts.map +1 -0
  169. package/dist/components/AssessmentDrawer/AssessmentDrawer.d.ts +5 -1
  170. package/dist/components/AssessmentDrawer/AssessmentDrawer.d.ts.map +1 -1
  171. package/dist/components/AuditDrawer/AuditDrawer.d.ts +4 -3
  172. package/dist/components/AuditDrawer/AuditDrawer.d.ts.map +1 -1
  173. package/dist/components/AuditDrawer/index.d.ts +1 -1
  174. package/dist/components/AuditDrawer/index.d.ts.map +1 -1
  175. package/dist/components/AuditDrawer/types.d.ts +39 -5
  176. package/dist/components/AuditDrawer/types.d.ts.map +1 -1
  177. package/dist/components/Autocomplete/Autocomplete.d.ts +6 -1
  178. package/dist/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  179. package/dist/components/BulkActionDock/BulkActionDock.d.ts.map +1 -1
  180. package/dist/components/Carousel/Carousel.d.ts +10 -2
  181. package/dist/components/Carousel/Carousel.d.ts.map +1 -1
  182. package/dist/components/Charts/AreaChart.d.ts.map +1 -1
  183. package/dist/components/Charts/BarChart.d.ts.map +1 -1
  184. package/dist/components/Charts/ChartWrapper.d.ts.map +1 -1
  185. package/dist/components/Charts/ComposedChart.d.ts.map +1 -1
  186. package/dist/components/Charts/CustomLegend.d.ts +11 -2
  187. package/dist/components/Charts/CustomLegend.d.ts.map +1 -1
  188. package/dist/components/Charts/LineChart.d.ts.map +1 -1
  189. package/dist/components/Charts/PieChart.d.ts.map +1 -1
  190. package/dist/components/Charts/RadialChart.d.ts.map +1 -1
  191. package/dist/components/Charts/ScatterChart.d.ts.map +1 -1
  192. package/dist/components/Charts/Sparkline.d.ts.map +1 -1
  193. package/dist/components/Charts/gaugeGeometry.d.ts +35 -0
  194. package/dist/components/Charts/gaugeGeometry.d.ts.map +1 -0
  195. package/dist/components/Charts/highcharts.d.ts +23 -0
  196. package/dist/components/Charts/highcharts.d.ts.map +1 -0
  197. package/dist/components/Charts/highchartsUtils.d.ts +101 -6
  198. package/dist/components/Charts/highchartsUtils.d.ts.map +1 -1
  199. package/dist/components/Charts/index.d.ts +1 -1
  200. package/dist/components/Charts/index.d.ts.map +1 -1
  201. package/dist/components/Charts/tokens.d.ts +21 -0
  202. package/dist/components/Charts/tokens.d.ts.map +1 -1
  203. package/dist/components/Charts/types.d.ts +7 -7
  204. package/dist/components/Charts/types.d.ts.map +1 -1
  205. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  206. package/dist/components/ChoiceChips/ChoiceChips.d.ts +106 -0
  207. package/dist/components/ChoiceChips/ChoiceChips.d.ts.map +1 -0
  208. package/dist/components/ClearableTextField/ClearableTextField.d.ts +23 -2
  209. package/dist/components/ClearableTextField/ClearableTextField.d.ts.map +1 -1
  210. package/dist/components/CodeBlock/CodeBlock.d.ts +80 -0
  211. package/dist/components/CodeBlock/CodeBlock.d.ts.map +1 -0
  212. package/dist/components/Combobox/Combobox.d.ts +3 -2
  213. package/dist/components/Combobox/Combobox.d.ts.map +1 -1
  214. package/dist/components/CommandPalette/CommandPalette.d.ts +54 -3
  215. package/dist/components/CommandPalette/CommandPalette.d.ts.map +1 -1
  216. package/dist/components/CommandPalette/index.d.ts +1 -1
  217. package/dist/components/CommandPalette/index.d.ts.map +1 -1
  218. package/dist/components/CopyButton/CopyButton.d.ts +80 -0
  219. package/dist/components/CopyButton/CopyButton.d.ts.map +1 -0
  220. package/dist/components/DataCard/DataCard.d.ts +11 -1
  221. package/dist/components/DataCard/DataCard.d.ts.map +1 -1
  222. package/dist/components/DataTable/CellRenderers.d.ts +8 -11
  223. package/dist/components/DataTable/CellRenderers.d.ts.map +1 -1
  224. package/dist/components/DataTable/DataTable.d.ts +1 -1
  225. package/dist/components/DataTable/DataTable.d.ts.map +1 -1
  226. package/dist/components/DataTable/InlineAddRow.d.ts.map +1 -1
  227. package/dist/components/DataTable/columnContext.d.ts +8 -0
  228. package/dist/components/DataTable/columnContext.d.ts.map +1 -0
  229. package/dist/components/DataTable/index.d.ts +2 -2
  230. package/dist/components/DataTable/index.d.ts.map +1 -1
  231. package/dist/components/DataTable/labels.d.ts +13 -0
  232. package/dist/components/DataTable/labels.d.ts.map +1 -0
  233. package/dist/components/DataTable/types.d.ts +34 -0
  234. package/dist/components/DataTable/types.d.ts.map +1 -1
  235. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  236. package/dist/components/DetailsPopover/DetailsPopover.d.ts +185 -0
  237. package/dist/components/DetailsPopover/DetailsPopover.d.ts.map +1 -0
  238. package/dist/components/DiffViewer/DiffViewer.d.ts +3 -2
  239. package/dist/components/DiffViewer/DiffViewer.d.ts.map +1 -1
  240. package/dist/components/Disclosure/Disclosure.d.ts +83 -0
  241. package/dist/components/Disclosure/Disclosure.d.ts.map +1 -0
  242. package/dist/components/DockLayout/DockLayout.d.ts +58 -0
  243. package/dist/components/DockLayout/DockLayout.d.ts.map +1 -1
  244. package/dist/components/DockLayout/index.d.ts +1 -1
  245. package/dist/components/DockLayout/index.d.ts.map +1 -1
  246. package/dist/components/DocumentCard/DocumentCard.d.ts +5 -1
  247. package/dist/components/DocumentCard/DocumentCard.d.ts.map +1 -1
  248. package/dist/components/EntityDetailPanel/EntityDetailPanel.d.ts +6 -2
  249. package/dist/components/EntityDetailPanel/EntityDetailPanel.d.ts.map +1 -1
  250. package/dist/components/FileUpload/FileUpload.d.ts +141 -6
  251. package/dist/components/FileUpload/FileUpload.d.ts.map +1 -1
  252. package/dist/components/FileUpload/index.d.ts +1 -1
  253. package/dist/components/FileUpload/index.d.ts.map +1 -1
  254. package/dist/components/FilterBar/FilterBar.d.ts +27 -1
  255. package/dist/components/FilterBar/FilterBar.d.ts.map +1 -1
  256. package/dist/components/FilterBar/index.d.ts +1 -1
  257. package/dist/components/FilterBar/index.d.ts.map +1 -1
  258. package/dist/components/FlowAutoLayout/useFlowAutoLayout.d.ts.map +1 -1
  259. package/dist/components/GanttView/GanttView.d.ts +24 -0
  260. package/dist/components/GanttView/GanttView.d.ts.map +1 -1
  261. package/dist/components/GanttView/types.d.ts +33 -7
  262. package/dist/components/GanttView/types.d.ts.map +1 -1
  263. package/dist/components/GaugeCard/GaugeCard.d.ts +4 -3
  264. package/dist/components/GaugeCard/GaugeCard.d.ts.map +1 -1
  265. package/dist/components/GaugeCard/geometry.d.ts +59 -0
  266. package/dist/components/GaugeCard/geometry.d.ts.map +1 -0
  267. package/dist/components/GeoStatusMap/GeoStatusMap.d.ts.map +1 -1
  268. package/dist/components/GeoStatusMap/types.d.ts +8 -5
  269. package/dist/components/GeoStatusMap/types.d.ts.map +1 -1
  270. package/dist/components/GoToTop/GoToTop.d.ts +1 -1
  271. package/dist/components/GoToTop/GoToTop.d.ts.map +1 -1
  272. package/dist/components/HierarchicalDrillDown/HierarchicalDrillDown.d.ts.map +1 -1
  273. package/dist/components/HistoricalDataIndicator/HistoricalDataIndicator.d.ts.map +1 -1
  274. package/dist/components/HtmlToMui/HtmlToMui.d.ts +32 -2
  275. package/dist/components/HtmlToMui/HtmlToMui.d.ts.map +1 -1
  276. package/dist/components/Icon.d.ts +567 -10
  277. package/dist/components/Icon.d.ts.map +1 -1
  278. package/dist/components/IllustratedMessage.d.ts +52 -3
  279. package/dist/components/IllustratedMessage.d.ts.map +1 -1
  280. package/dist/components/InlineEditableText/InlineEditableText.d.ts +117 -0
  281. package/dist/components/InlineEditableText/InlineEditableText.d.ts.map +1 -0
  282. package/dist/components/InsightCard/InsightCard.d.ts.map +1 -1
  283. package/dist/components/InsightCard/types.d.ts +10 -3
  284. package/dist/components/InsightCard/types.d.ts.map +1 -1
  285. package/dist/components/KeyValueList/KeyValueList.d.ts +94 -0
  286. package/dist/components/KeyValueList/KeyValueList.d.ts.map +1 -0
  287. package/dist/components/LandingPage/FeatureCard.d.ts +4 -0
  288. package/dist/components/LandingPage/FeatureCard.d.ts.map +1 -1
  289. package/dist/components/LandingPage/LandingPage.d.ts +43 -4
  290. package/dist/components/LandingPage/LandingPage.d.ts.map +1 -1
  291. package/dist/components/LandingPage/heroTone.d.ts +54 -0
  292. package/dist/components/LandingPage/heroTone.d.ts.map +1 -0
  293. package/dist/components/MentionsInput/MentionsInput.d.ts.map +1 -1
  294. package/dist/components/MetaChip/MetaChip.d.ts +113 -0
  295. package/dist/components/MetaChip/MetaChip.d.ts.map +1 -0
  296. package/dist/components/Modal/Modal.d.ts +222 -20
  297. package/dist/components/Modal/Modal.d.ts.map +1 -1
  298. package/dist/components/Modal/index.d.ts +1 -1
  299. package/dist/components/Modal/index.d.ts.map +1 -1
  300. package/dist/components/NotificationCenter/NotificationCenter.d.ts.map +1 -1
  301. package/dist/components/OrgChart/OrgChart.d.ts +5 -0
  302. package/dist/components/OrgChart/OrgChart.d.ts.map +1 -1
  303. package/dist/components/OrgChart/types.d.ts +31 -7
  304. package/dist/components/OrgChart/types.d.ts.map +1 -1
  305. package/dist/components/OverflowTooltip/OverflowTooltip.d.ts +1 -1
  306. package/dist/components/OverflowTooltip/OverflowTooltip.d.ts.map +1 -1
  307. package/dist/components/PageHeader/PageHeader.d.ts.map +1 -1
  308. package/dist/components/PageTOC/PageTOC.d.ts +2 -1
  309. package/dist/components/PageTOC/PageTOC.d.ts.map +1 -1
  310. package/dist/components/Popper/Popper.d.ts +80 -9
  311. package/dist/components/Popper/Popper.d.ts.map +1 -1
  312. package/dist/components/Popper/index.d.ts +1 -1
  313. package/dist/components/Popper/index.d.ts.map +1 -1
  314. package/dist/components/PredictiveTextInput/PredictiveTextInput.d.ts +5 -1
  315. package/dist/components/PredictiveTextInput/PredictiveTextInput.d.ts.map +1 -1
  316. package/dist/components/SandboxedIframeRenderer/SandboxedIframeRenderer.d.ts +48 -4
  317. package/dist/components/SandboxedIframeRenderer/SandboxedIframeRenderer.d.ts.map +1 -1
  318. package/dist/components/SearchInput/SearchInput.d.ts +49 -0
  319. package/dist/components/SearchInput/SearchInput.d.ts.map +1 -1
  320. package/dist/components/SearchInput/index.d.ts +1 -1
  321. package/dist/components/SearchInput/index.d.ts.map +1 -1
  322. package/dist/components/SimpleTable/SimpleTable.d.ts +11 -2
  323. package/dist/components/SimpleTable/SimpleTable.d.ts.map +1 -1
  324. package/dist/components/SplitPane/SplitPane.d.ts +2 -1
  325. package/dist/components/SplitPane/SplitPane.d.ts.map +1 -1
  326. package/dist/components/StatusHero/StatusHero.d.ts.map +1 -1
  327. package/dist/components/StatusIndicator/Badge.d.ts +6 -1
  328. package/dist/components/StatusIndicator/Badge.d.ts.map +1 -1
  329. package/dist/components/StatusIndicator/Chip.d.ts +3 -1
  330. package/dist/components/StatusIndicator/Chip.d.ts.map +1 -1
  331. package/dist/components/StatusIndicator/Indicators.d.ts +5 -1
  332. package/dist/components/StatusIndicator/Indicators.d.ts.map +1 -1
  333. package/dist/components/StatusIndicator/Legend.d.ts.map +1 -1
  334. package/dist/components/StatusIndicator/StatusIndicator.d.ts +98 -4
  335. package/dist/components/StatusIndicator/StatusIndicator.d.ts.map +1 -1
  336. package/dist/components/StatusIndicator/index.d.ts +2 -2
  337. package/dist/components/StatusIndicator/index.d.ts.map +1 -1
  338. package/dist/components/StatusIndicator/types.d.ts +48 -1
  339. package/dist/components/StatusIndicator/types.d.ts.map +1 -1
  340. package/dist/components/StepList/StepList.d.ts +80 -0
  341. package/dist/components/StepList/StepList.d.ts.map +1 -0
  342. package/dist/components/StepList/StepStatusMarker.d.ts +39 -0
  343. package/dist/components/StepList/StepStatusMarker.d.ts.map +1 -0
  344. package/dist/components/StepList/stepStatus.d.ts +30 -0
  345. package/dist/components/StepList/stepStatus.d.ts.map +1 -0
  346. package/dist/components/SystemBanner/SystemBanner.d.ts.map +1 -1
  347. package/dist/components/Timeline/Timeline.d.ts +57 -3
  348. package/dist/components/Timeline/Timeline.d.ts.map +1 -1
  349. package/dist/components/Timeline/index.d.ts +1 -1
  350. package/dist/components/Timeline/index.d.ts.map +1 -1
  351. package/dist/components/Timeline/timelineLabels.d.ts +70 -0
  352. package/dist/components/Timeline/timelineLabels.d.ts.map +1 -0
  353. package/dist/components/Toast/Toast.d.ts.map +1 -1
  354. package/dist/components/TopNavHeader.d.ts +6 -0
  355. package/dist/components/TopNavHeader.d.ts.map +1 -1
  356. package/dist/components/TopNavWithSidebar.d.ts +49 -1
  357. package/dist/components/TopNavWithSidebar.d.ts.map +1 -1
  358. package/dist/components/Tour/Tour.d.ts +18 -1
  359. package/dist/components/Tour/Tour.d.ts.map +1 -1
  360. package/dist/components/TransferList/TransferList.d.ts +123 -4
  361. package/dist/components/TransferList/TransferList.d.ts.map +1 -1
  362. package/dist/components/TransferList/index.d.ts +1 -1
  363. package/dist/components/TransferList/index.d.ts.map +1 -1
  364. package/dist/components/TreeView/TreeView.d.ts +97 -8
  365. package/dist/components/TreeView/TreeView.d.ts.map +1 -1
  366. package/dist/components/TreeView/index.d.ts +1 -1
  367. package/dist/components/TreeView/index.d.ts.map +1 -1
  368. package/dist/components/TrinityLoader.d.ts.map +1 -1
  369. package/dist/components/icons/featherExtensions.d.ts +55 -0
  370. package/dist/components/icons/featherExtensions.d.ts.map +1 -0
  371. package/dist/components/icons/materialExtensions.d.ts +20 -0
  372. package/dist/components/icons/materialExtensions.d.ts.map +1 -0
  373. package/dist/components/internal/index.d.ts +87 -0
  374. package/dist/components/internal/index.d.ts.map +1 -1
  375. package/dist/components/navigation/MenuListWithHeading.d.ts +33 -0
  376. package/dist/components/navigation/MenuListWithHeading.d.ts.map +1 -0
  377. package/dist/components/navigation/clientSelectorLabels.d.ts +13 -0
  378. package/dist/components/navigation/clientSelectorLabels.d.ts.map +1 -0
  379. package/dist/components/navigation/components.d.ts +6 -0
  380. package/dist/components/navigation/components.d.ts.map +1 -1
  381. package/dist/components/shared/AsyncOutcomeAlert.d.ts +91 -0
  382. package/dist/components/shared/AsyncOutcomeAlert.d.ts.map +1 -0
  383. package/dist/components/shared/TrinityIconSvg.d.ts.map +1 -1
  384. package/dist/components/shared/TrinityLogoSvg.d.ts.map +1 -1
  385. package/dist/components/shared/bidi.d.ts +44 -0
  386. package/dist/components/shared/bidi.d.ts.map +1 -0
  387. package/dist/components/shared/bidiText.d.ts +25 -0
  388. package/dist/components/shared/bidiText.d.ts.map +1 -0
  389. package/dist/components/shared/containerQueries.d.ts +73 -0
  390. package/dist/components/shared/containerQueries.d.ts.map +1 -0
  391. package/dist/components/shared/createStringsContext.d.ts +69 -0
  392. package/dist/components/shared/createStringsContext.d.ts.map +1 -0
  393. package/dist/components/shared/direction.d.ts +46 -0
  394. package/dist/components/shared/direction.d.ts.map +1 -0
  395. package/dist/components/shared/focusTrap.d.ts +36 -0
  396. package/dist/components/shared/focusTrap.d.ts.map +1 -0
  397. package/dist/components/shared/getInitials.d.ts +29 -0
  398. package/dist/components/shared/getInitials.d.ts.map +1 -0
  399. package/dist/components/shared/headingLevel.d.ts +69 -0
  400. package/dist/components/shared/headingLevel.d.ts.map +1 -0
  401. package/dist/components/shared/mergeSlotProps.d.ts +50 -0
  402. package/dist/components/shared/mergeSlotProps.d.ts.map +1 -0
  403. package/dist/components/shared/mergeSx.d.ts +26 -0
  404. package/dist/components/shared/mergeSx.d.ts.map +1 -0
  405. package/dist/components/shared/motion.d.ts +110 -0
  406. package/dist/components/shared/motion.d.ts.map +1 -0
  407. package/dist/components/shared/occurrenceKeys.d.ts +23 -0
  408. package/dist/components/shared/occurrenceKeys.d.ts.map +1 -0
  409. package/dist/components/shared/primaryAction.d.ts +89 -0
  410. package/dist/components/shared/primaryAction.d.ts.map +1 -0
  411. package/dist/components/shared/resizeKeyboard.d.ts +68 -0
  412. package/dist/components/shared/resizeKeyboard.d.ts.map +1 -0
  413. package/dist/components/shared/rootProps.d.ts +117 -0
  414. package/dist/components/shared/rootProps.d.ts.map +1 -0
  415. package/dist/components/shared/safeContent.d.ts +136 -0
  416. package/dist/components/shared/safeContent.d.ts.map +1 -0
  417. package/dist/components/shared/targetSize.d.ts +64 -0
  418. package/dist/components/shared/targetSize.d.ts.map +1 -0
  419. package/dist/components/shared/useContainerInlineSize.d.ts +43 -0
  420. package/dist/components/shared/useContainerInlineSize.d.ts.map +1 -0
  421. package/dist/components/shared/useCopyAction.d.ts +35 -0
  422. package/dist/components/shared/useCopyAction.d.ts.map +1 -0
  423. package/dist/components/shared/useOverflow.d.ts +44 -0
  424. package/dist/components/shared/useOverflow.d.ts.map +1 -0
  425. package/dist/components/shared/useResizable.d.ts +106 -7
  426. package/dist/components/shared/useResizable.d.ts.map +1 -1
  427. package/dist/components/shared/warnDeprecated.d.ts +89 -15
  428. package/dist/components/shared/warnDeprecated.d.ts.map +1 -1
  429. package/dist/components/shared/zIndexRoles.d.ts +62 -0
  430. package/dist/components/shared/zIndexRoles.d.ts.map +1 -0
  431. package/dist/components/templates/AIReviewQueue/AIReviewQueueTemplate.d.ts +213 -0
  432. package/dist/components/templates/AIReviewQueue/AIReviewQueueTemplate.d.ts.map +1 -0
  433. package/dist/components/templates/AIReviewQueue/index.d.ts +2 -0
  434. package/dist/components/templates/AIReviewQueue/index.d.ts.map +1 -0
  435. package/dist/components/templates/Auth/AuthTemplate.d.ts.map +1 -1
  436. package/dist/components/templates/Auth/types.d.ts +4 -1
  437. package/dist/components/templates/Auth/types.d.ts.map +1 -1
  438. package/dist/components/templates/Catalog/CatalogTemplate.d.ts.map +1 -1
  439. package/dist/components/templates/ConnectorWizard/ConnectorWizardTemplate.d.ts.map +1 -1
  440. package/dist/components/templates/InsightsCenter/InsightsCenterTemplate.d.ts.map +1 -1
  441. package/dist/components/templates/IntegrationDetail/IntegrationDetailTemplate.d.ts.map +1 -1
  442. package/dist/components/templates/ListDetail/ListDetailTemplate.d.ts +168 -10
  443. package/dist/components/templates/ListDetail/ListDetailTemplate.d.ts.map +1 -1
  444. package/dist/components/templates/ListDetail/index.d.ts +1 -1
  445. package/dist/components/templates/ListDetail/index.d.ts.map +1 -1
  446. package/dist/components/templates/ListDetail/listDetailLabels.d.ts +106 -0
  447. package/dist/components/templates/ListDetail/listDetailLabels.d.ts.map +1 -0
  448. package/dist/components/templates/Onboarding/OnboardingTemplate.d.ts.map +1 -1
  449. package/dist/components/templates/Settings/SettingsTemplate.d.ts +0 -3
  450. package/dist/components/templates/Settings/SettingsTemplate.d.ts.map +1 -1
  451. package/dist/components/templates/Wizard/WizardTemplate.d.ts +4 -1
  452. package/dist/components/templates/Wizard/WizardTemplate.d.ts.map +1 -1
  453. package/dist/components/templates/index.d.ts +2 -1
  454. package/dist/components/templates/index.d.ts.map +1 -1
  455. package/dist/data-table.d.ts +1 -1
  456. package/dist/data-table.d.ts.map +1 -1
  457. package/dist/data-table.js +1 -0
  458. package/dist/data-table2.js +13522 -13465
  459. package/dist/data.js +213 -194
  460. package/dist/elk.bundled.js +47371 -0
  461. package/dist/essentials.d.ts +3 -3
  462. package/dist/essentials.d.ts.map +1 -1
  463. package/dist/essentials.js +179 -147
  464. package/dist/focus-on-replace.js +49 -0
  465. package/dist/form.d.ts +26 -4
  466. package/dist/form.d.ts.map +1 -1
  467. package/dist/forms.js +575 -483
  468. package/dist/foundation.js +3704 -0
  469. package/dist/hooks/storageStore.d.ts +51 -0
  470. package/dist/hooks/storageStore.d.ts.map +1 -0
  471. package/dist/hooks/useAsyncAction.d.ts +65 -0
  472. package/dist/hooks/useAsyncAction.d.ts.map +1 -0
  473. package/dist/hooks/useDisclosure.d.ts +190 -0
  474. package/dist/hooks/useDisclosure.d.ts.map +1 -0
  475. package/dist/hooks/useFocusOnReplace.d.ts +95 -0
  476. package/dist/hooks/useFocusOnReplace.d.ts.map +1 -0
  477. package/dist/hooks/useTrinityPalette.d.ts +38 -40
  478. package/dist/hooks/useTrinityPalette.d.ts.map +1 -1
  479. package/dist/hooks.d.ts +44 -6
  480. package/dist/hooks.d.ts.map +1 -1
  481. package/dist/hooks.js +301 -0
  482. package/dist/index.d.ts +71 -26
  483. package/dist/index.d.ts.map +1 -1
  484. package/dist/index.js +13923 -60619
  485. package/dist/patterns/AICopilotPattern/AICopilotPattern.d.ts +203 -0
  486. package/dist/patterns/AICopilotPattern/AICopilotPattern.d.ts.map +1 -0
  487. package/dist/patterns/AICopilotPattern/index.d.ts +3 -0
  488. package/dist/patterns/AICopilotPattern/index.d.ts.map +1 -0
  489. package/dist/patterns/index.d.ts +15 -0
  490. package/dist/patterns/index.d.ts.map +1 -0
  491. package/dist/presets/analytics.d.ts +8 -1
  492. package/dist/presets/analytics.d.ts.map +1 -1
  493. package/dist/presets/crm.d.ts +8 -1
  494. package/dist/presets/crm.d.ts.map +1 -1
  495. package/dist/presets/index.d.ts +1 -1
  496. package/dist/presets/portal.d.ts +8 -1
  497. package/dist/presets/portal.d.ts.map +1 -1
  498. package/dist/safe-content.js +792 -0
  499. package/dist/theme-augmentation.d.ts +388 -0
  500. package/dist/theme-augmentation.d.ts.map +1 -0
  501. package/dist/theme.d.ts +116 -30
  502. package/dist/theme.d.ts.map +1 -1
  503. package/dist/theme.js +891 -436
  504. package/dist/token-color.d.ts +14 -0
  505. package/dist/token-color.d.ts.map +1 -0
  506. package/dist/token-merge.d.ts +56 -0
  507. package/dist/token-merge.d.ts.map +1 -0
  508. package/dist/token-serialization.d.ts +65 -0
  509. package/dist/token-serialization.d.ts.map +1 -0
  510. package/dist/tokens.d.ts +882 -13
  511. package/dist/tokens.d.ts.map +1 -1
  512. package/dist/tokens.js +21 -19
  513. package/dist/trinity.css +1077 -414
  514. package/package.json +111 -90
  515. package/dist/components/index.d.ts +0 -145
  516. package/dist/components/index.d.ts.map +0 -1
  517. package/dist/components/shared.d.ts +0 -92
  518. package/dist/components/shared.d.ts.map +0 -1
@@ -0,0 +1,3704 @@
1
+ import { jsxs as V, jsx as b } from "react/jsx-runtime";
2
+ import * as g from "react";
3
+ import Ve, { createContext as fr, useContext as ze, useMemo as pr, createElement as mr, useRef as br, useEffect as hr, forwardRef as yr } from "react";
4
+ import { Link as xr, InputBase as Fr, IconButton as vr, Button as je, Alert as wr, Box as Sr } from "@mui/material";
5
+ import { styled as G, alpha as Ue, decomposeColor as $e, hslToRgb as Cr } from "@mui/material/styles";
6
+ import { u as Er, R as Ye, a as Ar, w as kr } from "./accessibility.js";
7
+ import { u as Rr, a as zr } from "./hooks.js";
8
+ import $r from "@mui/utils/useEnhancedEffect";
9
+ import Hr from "@mui/utils/useForkRef";
10
+ import { u as Or } from "./focus-on-replace.js";
11
+ import Dr from "@mui/utils/useControlled";
12
+ import K from "@mui/utils/useEventCallback";
13
+ import Tr from "@mui/material/Unstable_TrapFocus";
14
+ const Ir = /^#(?:([0-9a-f]{3,4})|([0-9a-f]{6})|([0-9a-f]{8}))$/i, Mr = /^rgba?\(\s*([^)]+)\)$/i, Br = /^hsla?\(\s*([^)]+)\)$/i;
15
+ function Nr(e) {
16
+ const t = Ir.exec(e);
17
+ if (!t) return null;
18
+ let o = t[1] ?? t[2] ?? t[3];
19
+ return o.length <= 4 && (o = o.split("").map((n) => n + n).join("")), [0, 2, 4].map((n) => parseInt(o.slice(n, n + 2), 16));
20
+ }
21
+ function A(e, t) {
22
+ const o = Math.min(1, Math.max(0, t)), n = e.trim(), i = Nr(n);
23
+ if (i) return `rgba(${i.join(", ")}, ${o})`;
24
+ const s = Mr.exec(n);
25
+ if (s) {
26
+ const c = s[1].split(",").map((d) => d.trim());
27
+ if (c.length >= 3) return `rgba(${c.slice(0, 3).join(", ")}, ${o})`;
28
+ }
29
+ const a = Br.exec(n);
30
+ if (a) {
31
+ const c = a[1].split(",").map((d) => d.trim());
32
+ if (c.length >= 3) return `hsla(${c.slice(0, 3).join(", ")}, ${o})`;
33
+ }
34
+ return `color-mix(in srgb, ${n} ${Math.round(o * 1e3) / 10}%, transparent)`;
35
+ }
36
+ const r = {
37
+ // Color Primitives
38
+ colors: {
39
+ // Blues & Purples
40
+ navy: {
41
+ 50: "#E8E8F0",
42
+ 100: "#C5C6D9",
43
+ 200: "#9FA1C0",
44
+ 300: "#7879A7",
45
+ 400: "#5B5C94",
46
+ 500: "#3E3F81",
47
+ 600: "#383979",
48
+ 700: "#30316E",
49
+ 800: "#282964",
50
+ 900: "#050742"
51
+ // Primary Navy
52
+ },
53
+ purple: {
54
+ 50: "#F3EAFA",
55
+ 100: "#E1CBF2",
56
+ 200: "#CDA8EA",
57
+ 300: "#B985E1",
58
+ 400: "#A96ADA",
59
+ 500: "#9950D3",
60
+ 600: "#8D49CE",
61
+ 700: "#7841C9",
62
+ // Primary Purple
63
+ 800: "#6939B5",
64
+ 900: "#4E2A97"
65
+ },
66
+ indigo: {
67
+ 50: "#EDE7FD",
68
+ 100: "#D2C3FA",
69
+ 200: "#B49CF6",
70
+ 300: "#9574F2",
71
+ 400: "#7E57F0",
72
+ 500: "#6739ED",
73
+ 600: "#5F33EB",
74
+ 700: "#542CE8",
75
+ 800: "#4A24E5",
76
+ 900: "#3816A0",
77
+ // Deep Indigo
78
+ electric: "#6B12ED"
79
+ // Electric Indigo - vibrant accent
80
+ },
81
+ // Warm Colors
82
+ coral: {
83
+ 50: "#FFEFEE",
84
+ 100: "#FFD7D4",
85
+ 200: "#FFBCB7",
86
+ 300: "#FFA19A",
87
+ 400: "#FF8D85",
88
+ 500: "#FF796F",
89
+ 600: "#FF7167",
90
+ 700: "#FF665C",
91
+ 800: "#FF6150",
92
+ // Primary Coral
93
+ 900: "#FF5241"
94
+ },
95
+ // Cool Colors
96
+ azure: {
97
+ 50: "#E5F5FC",
98
+ 100: "#BEE5F7",
99
+ 200: "#93D4F2",
100
+ 300: "#67C3ED",
101
+ 400: "#47B6E9",
102
+ 500: "#27AAE1",
103
+ // Primary Azure
104
+ 600: "#239DDD",
105
+ 700: "#1D8DD8",
106
+ 800: "#177ED3",
107
+ 900: "#0E62CA"
108
+ },
109
+ // Neutrals
110
+ gray: {
111
+ 0: "#FFFFFF",
112
+ 50: "#FAFAFA",
113
+ 100: "#F4F4F5",
114
+ 200: "#E5E7EB",
115
+ 300: "#D4D4D8",
116
+ 400: "#9CA3AF",
117
+ 500: "#6B7280",
118
+ 600: "#374151",
119
+ 700: "#27272A",
120
+ 800: "#18181B",
121
+ 900: "#09090B"
122
+ }
123
+ },
124
+ // Spacing Scale (in pixels, use for padding, margin, gaps)
125
+ spacing: {
126
+ 0: 0,
127
+ 0.5: 2,
128
+ // Half step for fine-grained control
129
+ 1: 4,
130
+ 1.5: 6,
131
+ // Half step for fine-grained control
132
+ 2: 8,
133
+ 2.5: 10,
134
+ // Half step for fine-grained control
135
+ 3: 12,
136
+ 4: 16,
137
+ 5: 20,
138
+ 6: 24,
139
+ 7: 28,
140
+ 8: 32,
141
+ 9: 36,
142
+ 10: 40,
143
+ 12: 48,
144
+ 14: 56,
145
+ 16: 64,
146
+ 20: 80,
147
+ 24: 96,
148
+ 32: 128
149
+ },
150
+ // Typography Scale
151
+ fontSize: {
152
+ xs: "0.75rem",
153
+ // 12px
154
+ sm: "0.875rem",
155
+ // 14px
156
+ base: "1rem",
157
+ // 16px
158
+ lg: "1.125rem",
159
+ // 18px
160
+ xl: "1.25rem",
161
+ // 20px
162
+ "2xl": "1.5rem",
163
+ // 24px
164
+ "3xl": "1.875rem",
165
+ // 30px
166
+ "4xl": "2.25rem",
167
+ // 36px
168
+ "5xl": "3rem",
169
+ // 48px
170
+ "6xl": "3.75rem"
171
+ // 60px
172
+ },
173
+ fontWeight: {
174
+ light: 300,
175
+ regular: 400,
176
+ medium: 500,
177
+ semibold: 600,
178
+ bold: 700,
179
+ extrabold: 800
180
+ },
181
+ lineHeight: {
182
+ none: 1,
183
+ tight: 1.25,
184
+ snug: 1.375,
185
+ normal: 1.5,
186
+ relaxed: 1.625,
187
+ loose: 2
188
+ },
189
+ letterSpacing: {
190
+ tighter: "-0.05em",
191
+ tight: "-0.025em",
192
+ normal: "0em",
193
+ wide: "0.025em",
194
+ wider: "0.05em",
195
+ widest: "0.1em"
196
+ },
197
+ /**
198
+ * Border Radius Scale
199
+ *
200
+ * Designed for consistent nesting using: Outer = Inner + Padding
201
+ *
202
+ * Common nesting patterns:
203
+ * - Button (sm:6px) inside Card (md:8px) with 8px padding: 6 + 8 = 12 (use lg for container)
204
+ * - Card (md:8px) inside Modal (lg:12px) with 16px padding: 8 + 16 = 24 (use 3xl for modal)
205
+ * - Input (sm:6px) inside Panel (md:8px) with 8px padding: 6 + 8 = 12 (use lg for panel)
206
+ *
207
+ * Usage by element type:
208
+ * - xs (4px): Small badges, icon containers, status dots with corners
209
+ * - sm (6px): Buttons, inputs, chips, tags, small interactive elements
210
+ * - md (8px): Cards, list items, small panels, menu items
211
+ * - lg (12px): Large cards, dialogs, dropdown menus, panels
212
+ * - xl (16px): Modals, popovers, large containers
213
+ * - 2xl (20px): Very large modals with nested content
214
+ * - 3xl (24px): Maximum nesting scenarios
215
+ * - full (9999px): Pills, avatars, fully rounded elements
216
+ */
217
+ borderRadius: {
218
+ none: 0,
219
+ xs: 4,
220
+ sm: 6,
221
+ md: 8,
222
+ lg: 12,
223
+ xl: 16,
224
+ "2xl": 20,
225
+ "3xl": 24,
226
+ full: 9999
227
+ },
228
+ // Border Width
229
+ borderWidth: {
230
+ 0: 0,
231
+ 1: 1,
232
+ 2: 2,
233
+ 4: 4,
234
+ 8: 8
235
+ },
236
+ // Shadows
237
+ shadows: {
238
+ none: "none",
239
+ sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
240
+ base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
241
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
242
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
243
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
244
+ "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
245
+ inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"
246
+ },
247
+ // Z-Index Scale
248
+ zIndex: {
249
+ auto: "auto",
250
+ 0: 0,
251
+ 10: 10,
252
+ 20: 20,
253
+ 30: 30,
254
+ 40: 40,
255
+ 50: 50,
256
+ dropdown: 1e3,
257
+ sticky: 1020,
258
+ fixed: 1030,
259
+ modalBackdrop: 1040,
260
+ modal: 1050,
261
+ popover: 1060,
262
+ tooltip: 1070
263
+ },
264
+ // Transitions
265
+ duration: {
266
+ fastest: "50ms",
267
+ faster: "100ms",
268
+ fast: "150ms",
269
+ normal: "200ms",
270
+ slow: "300ms",
271
+ slower: "400ms",
272
+ slowest: "500ms"
273
+ },
274
+ easing: {
275
+ linear: "linear",
276
+ in: "cubic-bezier(0.4, 0, 1, 1)",
277
+ out: "cubic-bezier(0, 0, 0.2, 1)",
278
+ inOut: "cubic-bezier(0.4, 0, 0.2, 1)",
279
+ smooth: "cubic-bezier(0.45, 0, 0.55, 1)",
280
+ // Smooth, natural feel
281
+ bounce: "cubic-bezier(0.34, 1.56, 0.64, 1)",
282
+ // Slight overshoot
283
+ elastic: "cubic-bezier(0.68, -0.55, 0.27, 1.55)",
284
+ // Elastic spring
285
+ expoOut: "cubic-bezier(0.16, 1, 0.3, 1)"
286
+ // Fast start, soft settle (E-13)
287
+ },
288
+ // Opacity
289
+ opacity: {
290
+ 0: 0,
291
+ 5: 0.05,
292
+ 10: 0.1,
293
+ 20: 0.2,
294
+ 25: 0.25,
295
+ 30: 0.3,
296
+ 40: 0.4,
297
+ 50: 0.5,
298
+ 60: 0.6,
299
+ 70: 0.7,
300
+ 75: 0.75,
301
+ 80: 0.8,
302
+ 90: 0.9,
303
+ 95: 0.95,
304
+ 100: 1
305
+ },
306
+ // Breakpoints
307
+ breakpoints: {
308
+ xs: 0,
309
+ sm: 600,
310
+ md: 900,
311
+ lg: 1200,
312
+ xl: 1536
313
+ }
314
+ }, L = "#DA1E28", T = "#15803D", se = "#0F62FE", Ge = [
315
+ r.colors.gray[0],
316
+ // on indigo[600], 6.64:1
317
+ r.colors.gray[0],
318
+ // on purple[600], 5.28:1
319
+ r.colors.gray[900],
320
+ // on coral[600], 7.39:1
321
+ r.colors.gray[900],
322
+ // on azure[600], 6.57:1
323
+ r.colors.gray[0],
324
+ // on navy[700], 11.73:1
325
+ r.colors.gray[0],
326
+ // on indigo[500], 6.20:1
327
+ r.colors.gray[0],
328
+ // on purple[500], 4.72:1
329
+ r.colors.gray[900]
330
+ // on coral[500], 7.78:1
331
+ ], Wr = "#E0E0E0", ae = "#008A7E", Lr = "#A66600", _r = "#C13E7C", Pr = "#2F8E0F", Vr = "#00859C", l = {
332
+ colors: {
333
+ // Brand
334
+ brand: {
335
+ primary: r.colors.navy[900],
336
+ secondary: r.colors.purple[700],
337
+ tertiary: r.colors.indigo[900],
338
+ accent: r.colors.coral[800]
339
+ },
340
+ // Text
341
+ text: {
342
+ primary: r.colors.gray[900],
343
+ secondary: r.colors.gray[500],
344
+ tertiary: r.colors.gray[400],
345
+ // gray[500] gives 4.83:1 on white (WCAG AA). Prior gray[300] was 1.9:1 and failed AA.
346
+ disabled: r.colors.gray[500],
347
+ inverse: r.colors.gray[0],
348
+ brand: r.colors.navy[900],
349
+ // Brand-color tokens updated to WCAG AA values per BRAND_COLOR_CONTRAST_PROPOSAL (Option A).
350
+ // link: azure[500] (#27AAE1, ~2.5:1) -> azure[900] (#0E62CA, ~5.9:1)
351
+ link: r.colors.azure[900],
352
+ linkHover: r.colors.azure[700],
353
+ error: L,
354
+ // success: #16A34A (3.3:1) -> #15803D (4.6:1)
355
+ success: T,
356
+ // warning: #D97706 (2.6:1) -> #B45309 (4.8:1)
357
+ warning: "#B45309"
358
+ },
359
+ // Backgrounds
360
+ background: {
361
+ primary: r.colors.gray[0],
362
+ secondary: r.colors.gray[50],
363
+ tertiary: r.colors.gray[100],
364
+ inverse: r.colors.gray[800],
365
+ brand: r.colors.navy[900],
366
+ brandSubtle: r.colors.navy[50],
367
+ accent: r.colors.coral[800],
368
+ accentSubtle: r.colors.coral[50]
369
+ },
370
+ // Surface colors for elevated/sunken elements
371
+ surface: {
372
+ elevated: r.colors.gray[0],
373
+ // Cards, modals, popovers
374
+ sunken: r.colors.gray[100],
375
+ // Inputs, code blocks, wells
376
+ // A neutral fill under an icon, such as a user avatar's fallback (ADR-03-R9, E-49+): MUI
377
+ // grey[300], the value UserAvatar uses today. @since 2.13.0
378
+ neutralFill: Wr,
379
+ overlay: "rgba(0, 0, 0, 0.5)",
380
+ // Modal/dialog backdrops
381
+ // Status surface colors (subtle backgrounds)
382
+ success: "#F0FDF4",
383
+ // Success state backgrounds
384
+ error: "#FEF2F2",
385
+ // Error state backgrounds
386
+ warning: "#FFFBEB",
387
+ // Warning state backgrounds
388
+ info: r.colors.azure[50]
389
+ // Info state backgrounds
390
+ },
391
+ // Borders. `strong` is the only WCAG 1.4.11-compliant tier (3:1 UI). `subtle` is decorative only.
392
+ border: {
393
+ default: r.colors.gray[300],
394
+ subtle: r.colors.gray[200],
395
+ strong: r.colors.gray[500],
396
+ focus: r.colors.purple[700],
397
+ error: L,
398
+ success: "#16A34A"
399
+ },
400
+ // Interactive States
401
+ interactive: {
402
+ default: r.colors.navy[900],
403
+ hover: r.colors.coral[800],
404
+ active: r.colors.indigo[900],
405
+ disabled: r.colors.gray[300],
406
+ focus: r.colors.purple[700]
407
+ },
408
+ // Focus ring styles (accessibility)
409
+ focus: {
410
+ ring: r.colors.navy[900],
411
+ // Focus outline color
412
+ ringOffset: r.colors.gray[0]
413
+ // Gap color between element and ring
414
+ },
415
+ // Selection styles
416
+ selection: {
417
+ background: r.colors.azure[100],
418
+ text: r.colors.gray[900]
419
+ },
420
+ // Status/Feedback - Used for alerts, toasts, form validation
421
+ status: {
422
+ error: {
423
+ text: L,
424
+ background: "#FEF2F2",
425
+ border: "#FECACA"
426
+ },
427
+ warning: {
428
+ // text updated to #B45309 for WCAG AA (was #D97706, 2.6:1)
429
+ text: "#B45309",
430
+ background: "#FFFBEB",
431
+ border: "#FDE68A"
432
+ },
433
+ success: {
434
+ // text updated to #15803D for WCAG AA (was #16A34A, 3.3:1)
435
+ text: T,
436
+ background: "#F0FDF4",
437
+ border: "#BBF7D0"
438
+ },
439
+ info: {
440
+ // text updated to azure[900] for WCAG AA (was azure[500], ~2.5:1)
441
+ text: r.colors.azure[900],
442
+ background: r.colors.azure[50],
443
+ border: r.colors.azure[200]
444
+ }
445
+ },
446
+ // Content on a solid fill of status.<x>.text (ADR-03-R7, C-OD-6 A): MUI's
447
+ // palette.<x>.contrastText. White is 5.00:1 on error, 5.02:1 on warning, 5.01:1 on
448
+ // success and 5.80:1 on info.
449
+ onStatus: {
450
+ error: r.colors.gray[0],
451
+ warning: r.colors.gray[0],
452
+ success: r.colors.gray[0],
453
+ info: r.colors.gray[0]
454
+ },
455
+ // Favorite (ADR-03-R10, E-03 section 9): the pinned/favorite star. A reference to
456
+ // status.warning.text (semanticRoleReferences): the CSS emits var(--trinity-status-warning-text)
457
+ // and an override of the status role reaches it. 5.02:1 on paper, 4.81:1 on default, 4.56:1
458
+ // on sunken (3:1 needed).
459
+ favorite: "#B45309",
460
+ /**
461
+ * Status Indicator Colors
462
+ * Semantic colors for StatusIndicator components (dots, badges, chips)
463
+ * These are intentionally distinct from status.* which are for alerts/toasts
464
+ * @intentional-color - Status indicators require specific colors for visual distinction
465
+ */
466
+ indicator: {
467
+ // High severity - Red/Critical
468
+ // The prior coral fill was 2.97:1 with white. The semantic error red is
469
+ // 4.83:1 both as a fill under white and as on-surface status text.
470
+ error: { fg: r.colors.gray[0], bg: L },
471
+ critical: { fg: "#FFFFFF", bg: "#DA1E28" },
472
+ failed: { fg: r.colors.gray[0], bg: L },
473
+ rejected: { fg: r.colors.gray[0], bg: L },
474
+ // Medium severity - Orange/Yellow
475
+ warning: { fg: "#000000", bg: "#F1C21B", outline: "#8E6A00" },
476
+ caution: { fg: "#000000", bg: "#FF832B", outline: "#BA4E00" },
477
+ pending: { fg: "#000000", bg: "#F1C21B", outline: "#8E6A00" },
478
+ inProgress: { fg: "#FFFFFF", bg: r.colors.navy[900] },
479
+ running: { fg: "#FFFFFF", bg: r.colors.navy[900] },
480
+ // Low severity - Green/Success
481
+ // The prior green was 3.35:1 with white. Reuse the approved semantic
482
+ // success text color, which provides 5.02:1 in both directions.
483
+ success: { fg: r.colors.gray[0], bg: T },
484
+ complete: { fg: r.colors.gray[0], bg: T },
485
+ approved: { fg: r.colors.gray[0], bg: T },
486
+ active: { fg: r.colors.gray[0], bg: T },
487
+ enabled: { fg: r.colors.gray[0], bg: T },
488
+ // Informational - Blue
489
+ info: { fg: "#FFFFFF", bg: "#0043CE" },
490
+ new: { fg: "#FFFFFF", bg: "#0043CE" },
491
+ updated: { fg: "#FFFFFF", bg: "#0043CE" },
492
+ // Neutral - Gray
493
+ neutral: { fg: "#FFFFFF", bg: "#6F6F6F" },
494
+ draft: { fg: "#FFFFFF", bg: "#6F6F6F" },
495
+ inactive: { fg: "#FFFFFF", bg: "#6F6F6F" },
496
+ disabled: { fg: "#FFFFFF", bg: "#6F6F6F" },
497
+ cancelled: { fg: "#FFFFFF", bg: "#6F6F6F" },
498
+ unknown: { fg: "#FFFFFF", bg: "#6F6F6F" },
499
+ // Special
500
+ beta: { fg: "#FFFFFF", bg: "#8A3FFC" },
501
+ experimental: { fg: "#FFFFFF", bg: "#8A3FFC" }
502
+ },
503
+ chart: {
504
+ // Fixed order. A ninth series must use another encoding or an "Other"
505
+ // aggregate; consumers must not cycle categorical colors.
506
+ categorical: {
507
+ 1: r.colors.purple[700],
508
+ 2: r.colors.coral[900],
509
+ 3: ae,
510
+ 4: Lr,
511
+ 5: r.colors.azure[900],
512
+ 6: _r,
513
+ 7: Pr,
514
+ 8: Vr
515
+ },
516
+ sequential: {
517
+ 1: r.colors.indigo[300],
518
+ 2: r.colors.indigo[400],
519
+ 3: r.colors.indigo[500],
520
+ 4: r.colors.indigo[600],
521
+ 5: r.colors.indigo[800],
522
+ 6: r.colors.indigo[900]
523
+ },
524
+ diverging: {
525
+ negative: r.colors.coral[900],
526
+ neutral: r.colors.gray[500],
527
+ positive: ae
528
+ },
529
+ grid: r.colors.gray[200],
530
+ axis: r.colors.gray[400]
531
+ },
532
+ // AI roles (ADR-03-R15, Step 5 record section 13). primary, primaryFill,
533
+ // typingIndicator and accent are references (semanticRoleReferences): the
534
+ // CSS emits var(--trinity-brand-*). surface, border and badgeBackground
535
+ // derive from brand.secondary; resolveTrinityTokens recomputes them when
536
+ // brand.secondary is overridden. Values equal the legacy aiTokens colors.
537
+ ai: {
538
+ primary: r.colors.purple[700],
539
+ primaryFill: r.colors.purple[700],
540
+ onPrimaryFill: r.colors.gray[0],
541
+ accent: r.colors.coral[800],
542
+ surface: /* @__PURE__ */ A(r.colors.purple[700], 0.05),
543
+ surfaceHover: r.colors.indigo[50],
544
+ surfaceEmphasis: r.colors.indigo[50],
545
+ surfaceEmphasisHover: r.colors.indigo[100],
546
+ border: /* @__PURE__ */ A(r.colors.purple[700], 0.2),
547
+ badgeBackground: /* @__PURE__ */ A(r.colors.purple[700], 0.15),
548
+ typingIndicator: r.colors.purple[700],
549
+ focusRing: r.colors.indigo[50],
550
+ presence: {
551
+ blue: r.colors.azure[500],
552
+ violet: r.colors.indigo[500],
553
+ purple: r.colors.purple[700],
554
+ coral: r.colors.coral[800],
555
+ base: r.colors.navy[900]
556
+ },
557
+ // AIAvatar's brand gradient (owner decision 2026-10-08): coral 800 to purple 700, the
558
+ // legacy aiTokens.gradient.primary. Light references brand.accent and brand.secondary.
559
+ avatarFill: {
560
+ start: r.colors.coral[800],
561
+ end: r.colors.purple[700]
562
+ },
563
+ // AI progress (owner mockups 2026-10-08): the teal of the completed phase dots and the
564
+ // confidence bar. The validated chart teal: 4.25:1 on the paper, 3.95:1 on the AI surface.
565
+ progress: ae,
566
+ // AIChatWelcome's canvas wash (owner concepts 2026-10-08): white to faint lavender and
567
+ // pink toward the bottom right, through gradient.canvas.
568
+ canvasFill: {
569
+ start: r.colors.purple[50],
570
+ end: r.colors.coral[50]
571
+ }
572
+ },
573
+ // Avatar color palette - Used for avatar backgrounds and badges
574
+ avatar: {
575
+ /**
576
+ * Solid avatar fills. Not every entry carries white text: render the initials or icon in
577
+ * the aligned `foregrounds` entry (ADR-03-R9, E-49+). Measured with WCAG relative luminance,
578
+ * the same in light and dark mode:
579
+ *
580
+ * | # | Fill | White | gray[900] | Text |
581
+ * |---|---|---|---|---|
582
+ * | 0 | indigo[600] #5F33EB | 6.64:1 | 2.99:1 | white |
583
+ * | 1 | purple[600] #8D49CE | 5.28:1 | 3.76:1 | white |
584
+ * | 2 | coral[600] #FF7167 | 2.68:1 | 7.39:1 | gray[900] |
585
+ * | 3 | azure[600] #239DDD | 3.02:1 | 6.57:1 | gray[900] |
586
+ * | 4 | navy[700] #30316E | 11.73:1 | 1.69:1 | white |
587
+ * | 5 | indigo[500] #6739ED | 6.20:1 | 3.20:1 | white |
588
+ * | 6 | purple[500] #9950D3 | 4.72:1 | 4.20:1 | white |
589
+ * | 7 | coral[500] #FF796F | 2.55:1 | 7.78:1 | gray[900] |
590
+ *
591
+ * The values are unchanged (a token value change is major). A later value change for the
592
+ * three light fills is a v3.0 candidate.
593
+ */
594
+ backgrounds: [
595
+ r.colors.indigo[600],
596
+ // Deep indigo
597
+ r.colors.purple[600],
598
+ // Purple
599
+ r.colors.coral[600],
600
+ // Coral/red-orange
601
+ r.colors.azure[600],
602
+ // Azure/teal
603
+ r.colors.navy[700],
604
+ // Navy
605
+ r.colors.indigo[500],
606
+ // Medium indigo
607
+ r.colors.purple[500],
608
+ // Medium purple
609
+ r.colors.coral[500]
610
+ // Medium coral
611
+ ],
612
+ /**
613
+ * The text or icon colour for each `backgrounds` entry, index for index (ADR-03-R9): every
614
+ * pair is 4.72:1 or more. Pick a pair by one index, never a background alone.
615
+ *
616
+ * @since 2.13.0
617
+ */
618
+ foregrounds: Ge,
619
+ // Online/activity indicator
620
+ online: "#44b700",
621
+ offline: r.colors.gray[400],
622
+ busy: r.colors.coral[600],
623
+ away: "#FFA726"
624
+ },
625
+ // Gradient definitions - Reusable across components
626
+ gradients: {
627
+ // Brand gradients
628
+ primary: `linear-gradient(135deg, ${r.colors.indigo[600]} 0%, ${r.colors.purple[600]} 100%)`,
629
+ secondary: `linear-gradient(135deg, ${r.colors.coral[500]} 0%, ${r.colors.coral[700]} 100%)`,
630
+ accent: `linear-gradient(135deg, ${r.colors.azure[400]} 0%, ${r.colors.azure[600]} 100%)`,
631
+ // Avatar-specific gradients
632
+ avatarPrimary: `linear-gradient(135deg, ${r.colors.indigo[500]} 0%, ${r.colors.purple[600]} 100%)`,
633
+ avatarWarm: `linear-gradient(135deg, ${r.colors.coral[400]} 0%, ${r.colors.coral[600]} 100%)`,
634
+ avatarCool: `linear-gradient(135deg, ${r.colors.azure[400]} 0%, ${r.colors.indigo[500]} 100%)`,
635
+ // Dark overlay for text readability
636
+ darkOverlay: "linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.7) 100%)"
637
+ }
638
+ },
639
+ typography: {
640
+ // Display styles
641
+ display: {
642
+ large: {
643
+ fontSize: r.fontSize["5xl"],
644
+ fontWeight: r.fontWeight.bold,
645
+ lineHeight: r.lineHeight.tight,
646
+ letterSpacing: r.letterSpacing.tight
647
+ },
648
+ medium: {
649
+ fontSize: r.fontSize["4xl"],
650
+ fontWeight: r.fontWeight.bold,
651
+ lineHeight: r.lineHeight.tight,
652
+ letterSpacing: r.letterSpacing.tight
653
+ },
654
+ small: {
655
+ fontSize: r.fontSize["3xl"],
656
+ fontWeight: r.fontWeight.semibold,
657
+ lineHeight: r.lineHeight.snug,
658
+ letterSpacing: r.letterSpacing.normal
659
+ }
660
+ },
661
+ // Heading styles
662
+ heading: {
663
+ h1: {
664
+ fontSize: r.fontSize["3xl"],
665
+ fontWeight: r.fontWeight.bold,
666
+ lineHeight: r.lineHeight.tight
667
+ },
668
+ h2: {
669
+ fontSize: r.fontSize["2xl"],
670
+ fontWeight: r.fontWeight.semibold,
671
+ lineHeight: r.lineHeight.snug
672
+ },
673
+ h3: {
674
+ fontSize: r.fontSize.xl,
675
+ fontWeight: r.fontWeight.semibold,
676
+ lineHeight: r.lineHeight.snug
677
+ },
678
+ h4: {
679
+ fontSize: r.fontSize.lg,
680
+ fontWeight: r.fontWeight.semibold,
681
+ lineHeight: r.lineHeight.normal
682
+ },
683
+ h5: {
684
+ fontSize: r.fontSize.base,
685
+ fontWeight: r.fontWeight.semibold,
686
+ lineHeight: r.lineHeight.normal
687
+ },
688
+ h6: {
689
+ fontSize: r.fontSize.sm,
690
+ fontWeight: r.fontWeight.semibold,
691
+ lineHeight: r.lineHeight.normal
692
+ }
693
+ },
694
+ // Body styles
695
+ body: {
696
+ large: {
697
+ fontSize: r.fontSize.lg,
698
+ fontWeight: r.fontWeight.regular,
699
+ lineHeight: r.lineHeight.relaxed
700
+ },
701
+ medium: {
702
+ fontSize: r.fontSize.base,
703
+ fontWeight: r.fontWeight.regular,
704
+ lineHeight: r.lineHeight.normal
705
+ },
706
+ small: {
707
+ fontSize: r.fontSize.sm,
708
+ fontWeight: r.fontWeight.regular,
709
+ lineHeight: r.lineHeight.normal
710
+ }
711
+ },
712
+ // Label styles
713
+ label: {
714
+ large: {
715
+ fontSize: r.fontSize.base,
716
+ fontWeight: r.fontWeight.medium,
717
+ lineHeight: r.lineHeight.tight
718
+ },
719
+ medium: {
720
+ fontSize: r.fontSize.sm,
721
+ fontWeight: r.fontWeight.medium,
722
+ lineHeight: r.lineHeight.tight
723
+ },
724
+ small: {
725
+ fontSize: r.fontSize.xs,
726
+ fontWeight: r.fontWeight.medium,
727
+ lineHeight: r.lineHeight.tight
728
+ }
729
+ },
730
+ // === Micro Typography (Phase A Addition) ===
731
+ // For inline UI elements, badges, status indicators where xs is too large
732
+ micro: {
733
+ /** 10px - Absolute minimum for brief status text */
734
+ xs: {
735
+ fontSize: "0.625rem",
736
+ // 10px - smallest readable
737
+ fontWeight: r.fontWeight.medium,
738
+ lineHeight: r.lineHeight.tight,
739
+ letterSpacing: r.letterSpacing.wide
740
+ // Improve readability at small sizes
741
+ },
742
+ /** 11px - Primary micro size for badges, counters */
743
+ sm: {
744
+ fontSize: "0.6875rem",
745
+ // 11px
746
+ fontWeight: r.fontWeight.medium,
747
+ lineHeight: r.lineHeight.tight,
748
+ letterSpacing: r.letterSpacing.normal
749
+ }
750
+ },
751
+ // === Dense Typography (Phase D.1 Addition) ===
752
+ // Intent-based tokens for compact UI elements
753
+ dense: {
754
+ /** Badge counts, status dots - 10px */
755
+ badge: "0.625rem",
756
+ /** Metadata, timestamps, dense tables - 12px */
757
+ text: "0.75rem"
758
+ },
759
+ // === Data Typography (Phase A Addition) ===
760
+ // For tabular data, code snippets, and numeric displays
761
+ data: {
762
+ /** Monospace styling for numeric values in tables */
763
+ numeric: {
764
+ fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace',
765
+ fontWeight: r.fontWeight.regular,
766
+ fontFeatureSettings: '"tnum" 1'
767
+ // Tabular numbers for alignment
768
+ },
769
+ /** Code/technical content styling */
770
+ code: {
771
+ fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace',
772
+ fontSize: r.fontSize.sm,
773
+ fontWeight: r.fontWeight.regular,
774
+ lineHeight: r.lineHeight.relaxed
775
+ }
776
+ }
777
+ },
778
+ spacing: {
779
+ // Component-specific spacing
780
+ component: {
781
+ paddingXs: r.spacing[1],
782
+ paddingSm: r.spacing[2],
783
+ paddingMd: r.spacing[4],
784
+ paddingLg: r.spacing[6],
785
+ paddingXl: r.spacing[8],
786
+ gapXs: r.spacing[1],
787
+ gapSm: r.spacing[2],
788
+ gapMd: r.spacing[4],
789
+ gapLg: r.spacing[6]
790
+ },
791
+ // Layout spacing
792
+ layout: {
793
+ pagePadding: r.spacing[6],
794
+ sectionGap: r.spacing[12],
795
+ containerMaxWidth: 1280,
796
+ headerHeight: 64,
797
+ sidebarWidthExpanded: 200,
798
+ sidebarWidthCollapsed: 56,
799
+ aiPanelWidth: 420,
800
+ gutter: r.spacing[6],
801
+ // 24px
802
+ contentPadding: 64,
803
+ // E-19: container widths for container queries (JavaScript-only, no CSS variable)
804
+ containerQuery: {
805
+ narrow: 320,
806
+ compact: 360,
807
+ regular: 600
808
+ }
809
+ }
810
+ },
811
+ borders: {
812
+ /**
813
+ * Semantic border radius assignments
814
+ * Based on component size and nesting requirements:
815
+ * - Outer radius = Inner radius + Padding
816
+ */
817
+ radius: {
818
+ // === Component-specific tokens (backwards compatible) ===
819
+ /** Buttons use full pill shape */
820
+ button: r.borderRadius.full,
821
+ /** Inputs use sm (6px) for 32-40px height elements */
822
+ input: r.borderRadius.sm,
823
+ /** Cards use lg (12px) for visible rounding */
824
+ card: r.borderRadius.lg,
825
+ /** Modals use lg (12px) - allows nested cards with md */
826
+ modal: r.borderRadius.lg,
827
+ /** Large modals use xl (16px) for complex nested content */
828
+ modalLarge: r.borderRadius.xl,
829
+ /** Badges use sm (6px) for subtle pill */
830
+ badge: r.borderRadius.sm,
831
+ /** Avatars use full for circular shape */
832
+ avatar: r.borderRadius.full,
833
+ /** Chips/tags use sm (6px) */
834
+ chip: r.borderRadius.sm,
835
+ /** Menu items use sm (6px) */
836
+ menuItem: r.borderRadius.sm,
837
+ /** Dropdown/popover menus use lg (12px) - corrected to match actual usage */
838
+ menu: r.borderRadius.lg,
839
+ /** Tooltips use md (8px) */
840
+ tooltip: r.borderRadius.md,
841
+ /** Small icon containers use xs (4px) */
842
+ iconContainer: r.borderRadius.xs,
843
+ // === Intent-based shape vocabulary (Phase A Addition) ===
844
+ /** Sharp edges - 0px */
845
+ none: 0,
846
+ /** Minimal softening - 4px */
847
+ subtle: r.borderRadius.xs,
848
+ /** Noticeable curves - 6px */
849
+ soft: r.borderRadius.sm,
850
+ /** Prominent curves - 8px */
851
+ rounded: r.borderRadius.md,
852
+ /** Maximum curvature - 9999px */
853
+ pill: r.borderRadius.full,
854
+ /** Perfect circle - 50% */
855
+ circle: "50%",
856
+ // === Additional component contexts (Phase A Addition) ===
857
+ /** Skeleton loaders - 4px */
858
+ skeleton: r.borderRadius.xs,
859
+ /** Table cells - 0px for data density */
860
+ tableCell: 0
861
+ },
862
+ /**
863
+ * Pre-formatted px strings for MUI sx prop
864
+ * Use these when MUI would interpret numbers as spacing multipliers
865
+ */
866
+ radiusPx: {
867
+ none: "0px",
868
+ xs: `${r.borderRadius.xs}px`,
869
+ sm: `${r.borderRadius.sm}px`,
870
+ md: `${r.borderRadius.md}px`,
871
+ lg: `${r.borderRadius.lg}px`,
872
+ xl: `${r.borderRadius.xl}px`,
873
+ "2xl": `${r.borderRadius["2xl"]}px`,
874
+ "3xl": `${r.borderRadius["3xl"]}px`,
875
+ full: `${r.borderRadius.full}px`
876
+ },
877
+ width: {
878
+ default: r.borderWidth[1],
879
+ focus: r.borderWidth[2],
880
+ thick: r.borderWidth[4]
881
+ }
882
+ },
883
+ shadows: {
884
+ card: r.shadows.md,
885
+ dropdown: r.shadows.lg,
886
+ modal: r.shadows["2xl"],
887
+ button: r.shadows.sm,
888
+ input: r.shadows.none,
889
+ inputFocus: r.shadows.base
890
+ },
891
+ motion: {
892
+ duration: {
893
+ instant: r.duration.fastest,
894
+ fast: r.duration.fast,
895
+ normal: r.duration.normal,
896
+ slow: r.duration.slow,
897
+ slower: r.duration.slower
898
+ },
899
+ easing: {
900
+ default: r.easing.inOut,
901
+ enter: r.easing.out,
902
+ exit: r.easing.in,
903
+ emphasized: r.easing.expoOut,
904
+ overshoot: r.easing.bounce
905
+ },
906
+ // E-13: looping cycles and stagger delays (docs/TOKEN_USAGE_RULES.md, "Motion")
907
+ loop: {
908
+ spin: "800ms",
909
+ typing: "1200ms",
910
+ shimmer: "1500ms",
911
+ pulse: "2000ms"
912
+ },
913
+ stagger: {
914
+ tight: r.duration.fastest,
915
+ normal: r.duration.faster
916
+ }
917
+ },
918
+ // ============================================
919
+ // SEMANTIC EFFECTS (Phase A Addition)
920
+ // Intent-based opacity, shadow, and state effects
921
+ // ============================================
922
+ effects: {
923
+ /**
924
+ * Overlay effects for interaction states and backdrops
925
+ */
926
+ overlay: {
927
+ /** Modal/drawer backdrop - 50% black */
928
+ scrim: "rgba(0, 0, 0, 0.5)",
929
+ /** Standard hover - 8% black */
930
+ hover: "rgba(0, 0, 0, 0.08)",
931
+ /** Subtle hover for dense UI - 4% black */
932
+ hoverSubtle: "rgba(0, 0, 0, 0.04)",
933
+ /** Pressed/active - 12% black */
934
+ pressed: "rgba(0, 0, 0, 0.12)",
935
+ /** Selected row/item - 8% black */
936
+ selected: "rgba(0, 0, 0, 0.08)",
937
+ /** Disabled overlay - 38% black */
938
+ disabled: "rgba(0, 0, 0, 0.38)"
939
+ },
940
+ /**
941
+ * White text/icon opacity for dark backgrounds
942
+ * Based on Material Design text emphasis levels
943
+ */
944
+ onDark: {
945
+ /** High emphasis - 87% white */
946
+ primary: "rgba(255, 255, 255, 0.87)",
947
+ /** Medium emphasis - 70% white */
948
+ secondary: "rgba(255, 255, 255, 0.7)",
949
+ /** Low emphasis - 50% white */
950
+ tertiary: "rgba(255, 255, 255, 0.5)",
951
+ /** Borders/dividers - 12% white */
952
+ subtle: "rgba(255, 255, 255, 0.12)",
953
+ /** Background overlays on dark surfaces - 10% white */
954
+ tint: "rgba(255, 255, 255, 0.1)",
955
+ /** Visible dividers on dark backgrounds - 24% white */
956
+ divider: "rgba(255, 255, 255, 0.24)",
957
+ /** High-visibility text/icons on dark - 80% white */
958
+ emphasis: "rgba(255, 255, 255, 0.8)",
959
+ /** Maximum contrast - avoids pure white - 95% white */
960
+ contrast: "rgba(255, 255, 255, 0.95)",
961
+ /** Interactive hover background on dark surfaces - 15% white */
962
+ hover: "rgba(255, 255, 255, 0.15)",
963
+ /** Pressed/active button background on dark - 90% white */
964
+ strongEmphasis: "rgba(255, 255, 255, 0.9)"
965
+ },
966
+ /**
967
+ * Shadow effects for elevation hierarchy
968
+ * Replaces hardcoded rgba shadows
969
+ */
970
+ shadow: {
971
+ /** Resting card elevation */
972
+ surface: "0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)",
973
+ /** Hovered/focused elevation */
974
+ raised: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)",
975
+ /** Dropdown/popover/nav menus */
976
+ floating: "0 4px 20px rgba(0, 0, 0, 0.15)",
977
+ /** Modal dialogs */
978
+ dialog: "0 25px 50px -12px rgba(0, 0, 0, 0.25)",
979
+ /** Pressed/inset appearance */
980
+ inset: "inset 0 2px 4px 0 rgba(0, 0, 0, 0.05)"
981
+ },
982
+ /**
983
+ * Focus ring effects for accessibility
984
+ */
985
+ focus: {
986
+ /** Standard focus ring - purple brand */
987
+ ring: "0 0 0 3px rgba(120, 65, 201, 0.25)",
988
+ /** Focus on dark backgrounds */
989
+ ringOnDark: "0 0 0 3px rgba(255, 255, 255, 0.3)",
990
+ /** Emphasized focus for primary actions */
991
+ glow: "0 0 0 3px rgba(120, 65, 201, 0.4)"
992
+ },
993
+ /**
994
+ * State indicator effects (subtle fills and emphasis borders)
995
+ */
996
+ state: {
997
+ /** Error background - 5% red */
998
+ errorSubtle: "rgba(218, 30, 40, 0.05)",
999
+ /** Error border - 30% red */
1000
+ errorEmphasis: "rgba(218, 30, 40, 0.3)",
1001
+ /** Warning background - 10% yellow */
1002
+ warningSubtle: "rgba(241, 194, 27, 0.1)",
1003
+ /** Warning border - 40% yellow */
1004
+ warningEmphasis: "rgba(241, 194, 27, 0.4)",
1005
+ /** Success background - 5% green */
1006
+ successSubtle: "rgba(36, 161, 72, 0.05)",
1007
+ /** Success border - 30% green */
1008
+ successEmphasis: "rgba(36, 161, 72, 0.3)",
1009
+ /** Info background - 5% blue */
1010
+ infoSubtle: "rgba(0, 67, 206, 0.05)",
1011
+ /** Info border - 30% blue */
1012
+ infoEmphasis: "rgba(0, 67, 206, 0.3)"
1013
+ }
1014
+ },
1015
+ // ============================================
1016
+ // ICON SIZE SCALE (Phase A Addition)
1017
+ // Intent-based icon sizing
1018
+ // ============================================
1019
+ iconSize: {
1020
+ /** Within text flow - 14px */
1021
+ inline: 14,
1022
+ /** Standard controls (buttons, inputs) - 16px */
1023
+ control: 16,
1024
+ /** Navigation and toolbar - 20px */
1025
+ navigation: 20,
1026
+ /** Visual anchor (empty states) - 24px */
1027
+ prominent: 24,
1028
+ /** Hero sections - 28px */
1029
+ hero: 28,
1030
+ /** Maximum impact - 36px */
1031
+ display: 36
1032
+ },
1033
+ // ============================================
1034
+ // INTENT-BASED SPACING (Phase A Addition)
1035
+ // ============================================
1036
+ inline: {
1037
+ /** Minimum internal space - 4px */
1038
+ tight: r.spacing[1],
1039
+ /** Dense but readable - 8px */
1040
+ compact: r.spacing[2],
1041
+ /** Balanced density - 12px */
1042
+ snug: r.spacing[3],
1043
+ /** Standard breathing room - 16px */
1044
+ comfortable: r.spacing[4],
1045
+ /** Generous without excess - 20px */
1046
+ relaxed: r.spacing[5],
1047
+ /** Maximum breathing room - 24px */
1048
+ spacious: r.spacing[6]
1049
+ },
1050
+ stack: {
1051
+ /** Minimum vertical space - 4px */
1052
+ tight: r.spacing[1],
1053
+ /** Dense but readable - 8px */
1054
+ compact: r.spacing[2],
1055
+ /** Balanced density - 12px */
1056
+ snug: r.spacing[3],
1057
+ /** Standard vertical space - 16px */
1058
+ comfortable: r.spacing[4],
1059
+ /** Generous without excess - 20px */
1060
+ relaxed: r.spacing[5],
1061
+ /** Maximum vertical space - 24px */
1062
+ spacious: r.spacing[6],
1063
+ // Legacy aliases for backwards compatibility
1064
+ /** @deprecated Use tight instead */
1065
+ related: r.spacing[1],
1066
+ /** @deprecated Use compact instead */
1067
+ grouped: r.spacing[2],
1068
+ /** @deprecated Use comfortable instead */
1069
+ separated: r.spacing[4],
1070
+ /** @deprecated Use spacious instead */
1071
+ distinct: r.spacing[8]
1072
+ },
1073
+ density: {
1074
+ /** Maximum info density */
1075
+ compact: {
1076
+ rowHeight: 36,
1077
+ cellPadding: 6,
1078
+ gap: 4
1079
+ },
1080
+ /** Balanced readability/density */
1081
+ standard: {
1082
+ rowHeight: 48,
1083
+ cellPadding: 12,
1084
+ gap: 8
1085
+ },
1086
+ /** Prioritize readability */
1087
+ comfortable: {
1088
+ rowHeight: 64,
1089
+ cellPadding: 16,
1090
+ gap: 12
1091
+ }
1092
+ }
1093
+ }, j = {
1094
+ primary: {
1095
+ main: r.colors.navy[900],
1096
+ // #050742 - Deep Navy
1097
+ light: r.colors.purple[700],
1098
+ // #7841C9 - Light Violet/Purple
1099
+ dark: r.colors.indigo[900]
1100
+ // #3816A0 - Deep Indigo
1101
+ },
1102
+ secondary: {
1103
+ main: r.colors.coral[800],
1104
+ // #FF6150 - Coral
1105
+ light: r.colors.azure[500],
1106
+ // #27AAE1 - Azure
1107
+ dark: r.colors.indigo.electric
1108
+ // #6B12ED - Electric Indigo
1109
+ },
1110
+ neutral: {
1111
+ white: r.colors.gray[0],
1112
+ // #FFFFFF
1113
+ lightGray: r.colors.gray[50],
1114
+ // #FAFAFA - alias: gray50
1115
+ gray50: r.colors.gray[50],
1116
+ // #FAFAFA
1117
+ gray100: r.colors.gray[200],
1118
+ // #E5E7EB - NOTE: Misnamed, actually gray200
1119
+ gray200: r.colors.gray[200],
1120
+ // #E5E7EB
1121
+ gray300: r.colors.gray[300],
1122
+ // #D4D4D8
1123
+ gray400: r.colors.gray[400],
1124
+ // #9CA3AF
1125
+ gray500: r.colors.gray[500],
1126
+ // #6B7280
1127
+ gray600: r.colors.gray[600],
1128
+ // #374151
1129
+ gray700: r.colors.gray[700],
1130
+ // #27272A
1131
+ gray800: r.colors.gray[800],
1132
+ // #18181B
1133
+ gray900: r.colors.gray[900],
1134
+ // #09090B
1135
+ /**
1136
+ * @deprecated Not the dark theme's page colour. Use `theme.palette.background.default`
1137
+ * (or `palette.trinity.surface`). Removed in v3.0.
1138
+ */
1139
+ darkBg: r.colors.gray[800],
1140
+ // #18181B - alias
1141
+ /**
1142
+ * @deprecated Not the dark theme's paper colour. Use `theme.palette.background.paper`
1143
+ * (or `palette.trinity.surface.elevated`). Removed in v3.0.
1144
+ */
1145
+ darkPaper: r.colors.gray[700]
1146
+ // #27272A - alias
1147
+ }
1148
+ }, jr = {
1149
+ button: {
1150
+ // Sizing
1151
+ height: {
1152
+ small: 32,
1153
+ medium: 40,
1154
+ large: 48
1155
+ },
1156
+ padding: {
1157
+ small: { x: 16, y: 8 },
1158
+ medium: { x: 20, y: 10 },
1159
+ large: { x: 24, y: 12 }
1160
+ },
1161
+ fontSize: {
1162
+ small: r.fontSize.sm,
1163
+ medium: r.fontSize.base,
1164
+ large: r.fontSize.lg
1165
+ },
1166
+ borderRadius: r.borderRadius.full,
1167
+ // Colors by variant. Each interactive state owns both sides of its pair;
1168
+ // hover and active can match simultaneously in CSS.
1169
+ primary: {
1170
+ background: l.colors.brand.primary,
1171
+ backgroundHover: l.colors.brand.accent,
1172
+ backgroundActive: r.colors.navy[800],
1173
+ text: l.colors.text.inverse,
1174
+ textHover: l.colors.brand.primary,
1175
+ textActive: l.colors.text.inverse
1176
+ },
1177
+ secondary: {
1178
+ background: l.colors.brand.tertiary,
1179
+ backgroundHover: l.colors.brand.accent,
1180
+ backgroundActive: r.colors.indigo[700],
1181
+ text: l.colors.text.inverse,
1182
+ textHover: l.colors.brand.primary,
1183
+ textActive: l.colors.text.inverse
1184
+ },
1185
+ outlined: {
1186
+ background: "transparent",
1187
+ backgroundHover: l.colors.brand.accent,
1188
+ backgroundActive: r.colors.navy[800],
1189
+ border: l.colors.brand.primary,
1190
+ text: l.colors.brand.primary,
1191
+ textHover: l.colors.brand.primary,
1192
+ textActive: l.colors.text.inverse
1193
+ },
1194
+ // On-brand buttons, for navy brand surfaces (bg-brand, nav header and sidebar), where the
1195
+ // navy primary button disappears (owner decision 2026-10-10). The navy chrome stays navy in
1196
+ // dark mode, so these have no dark values. Ratios on navy 900 (#050742): rest 18.83:1,
1197
+ // hover 6.34:1, pressed 11.16:1, disabled label 4.68:1 (filled) and 5.12:1 (outlined), focus
1198
+ // outline 18.83:1. The pressed fill is navy 100, the darker shade of the white fill, as the
1199
+ // primary family presses to navy 800.
1200
+ onBrand: {
1201
+ background: r.colors.gray[0],
1202
+ backgroundHover: l.colors.brand.accent,
1203
+ backgroundActive: r.colors.navy[100],
1204
+ text: l.colors.brand.primary,
1205
+ textHover: l.colors.brand.primary,
1206
+ textActive: l.colors.brand.primary,
1207
+ backgroundDisabled: l.effects.onDark.subtle,
1208
+ textDisabled: l.effects.onDark.tertiary,
1209
+ focusOutline: r.colors.gray[0]
1210
+ },
1211
+ onBrandOutlined: {
1212
+ background: "transparent",
1213
+ backgroundHover: l.colors.brand.accent,
1214
+ backgroundActive: r.colors.navy[100],
1215
+ border: r.colors.gray[0],
1216
+ borderHover: l.colors.brand.accent,
1217
+ borderActive: r.colors.navy[100],
1218
+ text: r.colors.gray[0],
1219
+ textHover: l.colors.brand.primary,
1220
+ textActive: l.colors.brand.primary,
1221
+ backgroundDisabled: "transparent",
1222
+ textDisabled: l.effects.onDark.tertiary,
1223
+ borderDisabled: l.effects.onDark.divider,
1224
+ focusOutline: r.colors.gray[0]
1225
+ }
1226
+ },
1227
+ input: {
1228
+ height: {
1229
+ small: 36,
1230
+ medium: 44,
1231
+ large: 52
1232
+ },
1233
+ padding: {
1234
+ small: { x: 12, y: 8 },
1235
+ medium: { x: 14, y: 10 },
1236
+ large: { x: 16, y: 12 }
1237
+ },
1238
+ fontSize: {
1239
+ small: r.fontSize.sm,
1240
+ medium: r.fontSize.base,
1241
+ large: r.fontSize.lg
1242
+ },
1243
+ borderRadius: r.borderRadius.sm,
1244
+ // 6px for 36-52px height inputs
1245
+ borderColor: {
1246
+ default: l.colors.border.default,
1247
+ hover: l.colors.border.strong,
1248
+ focus: l.colors.border.focus,
1249
+ error: l.colors.border.error
1250
+ },
1251
+ background: {
1252
+ default: l.colors.surface.elevated,
1253
+ disabled: l.colors.background.tertiary
1254
+ }
1255
+ },
1256
+ card: {
1257
+ padding: {
1258
+ small: r.spacing[4],
1259
+ medium: r.spacing[6],
1260
+ large: r.spacing[8]
1261
+ },
1262
+ borderRadius: r.borderRadius.lg,
1263
+ // 12px for cards - inner elements use sm:6px or md:8px
1264
+ shadow: l.shadows.card,
1265
+ background: l.colors.surface.elevated,
1266
+ border: l.colors.border.subtle
1267
+ },
1268
+ avatar: {
1269
+ size: {
1270
+ xs: 24,
1271
+ sm: 32,
1272
+ md: 40,
1273
+ lg: 48,
1274
+ xl: 64,
1275
+ "2xl": 96
1276
+ },
1277
+ borderRadius: r.borderRadius.full,
1278
+ fontSize: {
1279
+ xs: r.fontSize.xs,
1280
+ sm: r.fontSize.xs,
1281
+ md: r.fontSize.sm,
1282
+ lg: r.fontSize.base,
1283
+ xl: r.fontSize.xl,
1284
+ "2xl": r.fontSize["2xl"]
1285
+ }
1286
+ },
1287
+ badge: {
1288
+ padding: { x: 8, y: 2 },
1289
+ borderRadius: r.borderRadius.full,
1290
+ fontSize: r.fontSize.xs,
1291
+ fontWeight: r.fontWeight.medium
1292
+ },
1293
+ chip: {
1294
+ height: {
1295
+ small: 24,
1296
+ medium: 32
1297
+ },
1298
+ padding: {
1299
+ small: { x: 8, y: 4 },
1300
+ medium: { x: 12, y: 6 }
1301
+ },
1302
+ borderRadius: r.borderRadius.sm,
1303
+ // 6px for 24-32px height chips
1304
+ fontSize: {
1305
+ small: r.fontSize.xs,
1306
+ medium: r.fontSize.sm
1307
+ }
1308
+ },
1309
+ tooltip: {
1310
+ padding: { x: 12, y: 8 },
1311
+ borderRadius: r.borderRadius.sm,
1312
+ // 6px for small tooltip elements
1313
+ fontSize: r.fontSize.sm,
1314
+ background: l.colors.background.inverse,
1315
+ text: l.colors.text.inverse
1316
+ },
1317
+ modal: {
1318
+ padding: r.spacing[6],
1319
+ borderRadius: r.borderRadius.xl,
1320
+ // 16px - allows nested cards with lg:12px
1321
+ shadow: l.shadows.modal,
1322
+ background: l.colors.surface.elevated,
1323
+ backdropOpacity: r.opacity[50],
1324
+ width: {
1325
+ small: 400,
1326
+ medium: 560,
1327
+ large: 720,
1328
+ fullWidth: "90vw"
1329
+ }
1330
+ },
1331
+ switch: {
1332
+ width: {
1333
+ small: 36,
1334
+ medium: 48
1335
+ },
1336
+ height: {
1337
+ small: 20,
1338
+ medium: 28
1339
+ },
1340
+ thumb: {
1341
+ small: 16,
1342
+ medium: 24
1343
+ },
1344
+ track: {
1345
+ off: r.colors.gray[200],
1346
+ on: l.colors.brand.primary,
1347
+ border: r.colors.gray[300]
1348
+ }
1349
+ },
1350
+ navigation: {
1351
+ header: {
1352
+ height: 64,
1353
+ background: l.colors.brand.primary,
1354
+ text: l.colors.text.inverse
1355
+ },
1356
+ sidebar: {
1357
+ width: 240,
1358
+ collapsedWidth: 64,
1359
+ background: l.colors.brand.primary
1360
+ },
1361
+ item: {
1362
+ height: 44,
1363
+ padding: { x: 16, y: 12 },
1364
+ borderRadius: r.borderRadius.md
1365
+ // 8px for 44px height nav items
1366
+ },
1367
+ footer: {
1368
+ height: 40,
1369
+ padding: { x: 24, y: 8 },
1370
+ light: {
1371
+ background: l.colors.background.tertiary,
1372
+ text: l.colors.text.secondary,
1373
+ divider: l.colors.border.default,
1374
+ linkHover: l.colors.brand.secondary
1375
+ },
1376
+ dark: {
1377
+ background: l.colors.background.brand,
1378
+ text: l.effects.onDark.secondary,
1379
+ divider: l.effects.onDark.divider,
1380
+ linkHover: l.effects.onDark.contrast
1381
+ }
1382
+ }
1383
+ }
1384
+ }, Ze = {
1385
+ /** Most important actions/content - demands immediate attention */
1386
+ primary: {
1387
+ prominence: 5,
1388
+ usage: ["Primary CTAs", "Critical alerts", "Page titles", "Current navigation"],
1389
+ minContrast: 7
1390
+ // WCAG AAA for normal text
1391
+ },
1392
+ /** Important but not critical - strong visual presence */
1393
+ secondary: {
1394
+ prominence: 4,
1395
+ usage: ["Secondary buttons", "Section headings", "Key information", "Active states"],
1396
+ minContrast: 4.5
1397
+ // WCAG AA for normal text
1398
+ },
1399
+ /** Supportive content - visible but not competing */
1400
+ tertiary: {
1401
+ prominence: 3,
1402
+ usage: ["Body text", "Form labels", "Navigation items", "Card content"],
1403
+ minContrast: 4.5
1404
+ // WCAG AA
1405
+ },
1406
+ /** Background/supporting information */
1407
+ muted: {
1408
+ prominence: 2,
1409
+ usage: ["Helper text", "Timestamps", "Metadata", "Placeholders"],
1410
+ minContrast: 3
1411
+ // Acceptable for large text
1412
+ },
1413
+ /** Non-interactive or unavailable */
1414
+ disabled: {
1415
+ prominence: 1,
1416
+ usage: ["Disabled controls", "Inactive states", "Read-only fields"],
1417
+ minContrast: 2.5
1418
+ // Minimum perceivable
1419
+ }
1420
+ }, ve = {
1421
+ // Display - Hero content, marketing headlines
1422
+ display: {
1423
+ level: 1,
1424
+ scale: {
1425
+ large: { size: "3rem", weight: 700, lineHeight: 1.1, tracking: "-0.02em" },
1426
+ medium: { size: "2.25rem", weight: 700, lineHeight: 1.15, tracking: "-0.01em" },
1427
+ small: { size: "1.875rem", weight: 600, lineHeight: 1.2, tracking: "0" }
1428
+ }
1429
+ },
1430
+ // Headings - Page and section structure
1431
+ heading: {
1432
+ level: 2,
1433
+ scale: {
1434
+ h1: { size: "1.875rem", weight: 700, lineHeight: 1.25 },
1435
+ h2: { size: "1.5rem", weight: 600, lineHeight: 1.3 },
1436
+ h3: { size: "1.25rem", weight: 600, lineHeight: 1.35 },
1437
+ h4: { size: "1.125rem", weight: 600, lineHeight: 1.4 },
1438
+ h5: { size: "1rem", weight: 600, lineHeight: 1.45 },
1439
+ h6: { size: "0.875rem", weight: 600, lineHeight: 1.5 }
1440
+ }
1441
+ },
1442
+ // Body - Main content
1443
+ body: {
1444
+ level: 3,
1445
+ scale: {
1446
+ large: { size: "1.125rem", weight: 400, lineHeight: 1.6 },
1447
+ medium: { size: "1rem", weight: 400, lineHeight: 1.5 },
1448
+ small: { size: "0.875rem", weight: 400, lineHeight: 1.5 }
1449
+ }
1450
+ },
1451
+ // Labels - Form and UI labels
1452
+ label: {
1453
+ level: 4,
1454
+ scale: {
1455
+ large: { size: "1rem", weight: 500, lineHeight: 1.25 },
1456
+ medium: { size: "0.875rem", weight: 500, lineHeight: 1.25 },
1457
+ small: { size: "0.75rem", weight: 500, lineHeight: 1.25 }
1458
+ }
1459
+ },
1460
+ // Caption - Supporting/metadata
1461
+ caption: {
1462
+ level: 5,
1463
+ scale: {
1464
+ default: { size: "0.75rem", weight: 400, lineHeight: 1.4 },
1465
+ emphasis: { size: "0.75rem", weight: 500, lineHeight: 1.4 }
1466
+ }
1467
+ },
1468
+ // Overline - Category/type indicators
1469
+ overline: {
1470
+ level: 6,
1471
+ scale: {
1472
+ default: { size: "0.625rem", weight: 600, lineHeight: 1.5, tracking: "0.1em", transform: "uppercase" }
1473
+ }
1474
+ }
1475
+ }, ne = {
1476
+ /** Ground level - page background, sunken areas */
1477
+ ground: {
1478
+ level: 0,
1479
+ zIndex: 0,
1480
+ shadow: "none",
1481
+ description: "Page backgrounds, wells, sunken inputs"
1482
+ },
1483
+ /** Resting - default content surfaces */
1484
+ resting: {
1485
+ level: 1,
1486
+ zIndex: 1,
1487
+ shadow: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
1488
+ description: "Cards, panels at rest"
1489
+ },
1490
+ /** Raised - interactive/hover states */
1491
+ raised: {
1492
+ level: 2,
1493
+ zIndex: 10,
1494
+ shadow: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
1495
+ description: "Hovered cards, active buttons"
1496
+ },
1497
+ /** Floating - dropdowns, menus */
1498
+ floating: {
1499
+ level: 3,
1500
+ zIndex: 1e3,
1501
+ shadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
1502
+ description: "Dropdown menus, popovers"
1503
+ },
1504
+ /** Sticky - headers, navigation */
1505
+ sticky: {
1506
+ level: 4,
1507
+ zIndex: 1020,
1508
+ shadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
1509
+ description: "Sticky headers, fixed navigation"
1510
+ },
1511
+ /** Overlay - backdrop for modals */
1512
+ overlay: {
1513
+ level: 5,
1514
+ zIndex: 1040,
1515
+ shadow: "none",
1516
+ description: "Modal/dialog backdrops"
1517
+ },
1518
+ /** Dialog - modals, alerts */
1519
+ dialog: {
1520
+ level: 6,
1521
+ zIndex: 1050,
1522
+ shadow: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
1523
+ description: "Modal dialogs, alerts"
1524
+ },
1525
+ /** Popover - tooltips, notifications */
1526
+ popover: {
1527
+ level: 7,
1528
+ zIndex: 1060,
1529
+ shadow: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
1530
+ description: "Popovers, floating panels"
1531
+ },
1532
+ /** Tooltip - highest priority overlays */
1533
+ tooltip: {
1534
+ level: 8,
1535
+ zIndex: 1070,
1536
+ shadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
1537
+ description: "Tooltips, critical notifications"
1538
+ }
1539
+ }, q = {
1540
+ /** Scale ratio for size progression */
1541
+ ratio: 1.25,
1542
+ // Major third
1543
+ /** Size scale multipliers */
1544
+ sizes: {
1545
+ "3xs": 0.512,
1546
+ // ratio^-3
1547
+ "2xs": 0.64,
1548
+ // ratio^-2
1549
+ xs: 0.8,
1550
+ // ratio^-1
1551
+ sm: 1,
1552
+ // base
1553
+ md: 1.25,
1554
+ // ratio^1
1555
+ lg: 1.563,
1556
+ // ratio^2
1557
+ xl: 1.953,
1558
+ // ratio^3
1559
+ "2xl": 2.441,
1560
+ // ratio^4
1561
+ "3xl": 3.052
1562
+ // ratio^5
1563
+ },
1564
+ /** Icon sizes following the scale */
1565
+ icons: {
1566
+ xs: 12,
1567
+ sm: 16,
1568
+ md: 20,
1569
+ lg: 24,
1570
+ xl: 32,
1571
+ "2xl": 40
1572
+ },
1573
+ /** Touch target minimums (accessibility) */
1574
+ touchTargets: {
1575
+ minimum: 44,
1576
+ // WCAG 2.2 SC 2.5.5 Target Size (Enhanced, AAA)
1577
+ comfortable: 48,
1578
+ spacious: 56,
1579
+ /**
1580
+ * The program-wide floor for every pointer target: 24 by 24 CSS pixels, WCAG 2.2 SC 2.5.8
1581
+ * Target Size (Minimum, AA), ratified by DN-12 (2026-10-05). Compact controls reach it
1582
+ * through the shared hit-area recipe (C-40+), which grows the hit area to this size
1583
+ * without changing the visual size. CSS: `--trinity-touch-target-floor`.
1584
+ */
1585
+ floor: 24
1586
+ }
1587
+ }, Ke = {
1588
+ /** High contrast - primary actions, critical info */
1589
+ high: {
1590
+ foreground: r.colors.navy[900],
1591
+ background: r.colors.gray[0],
1592
+ ratio: 12.5
1593
+ // Well above AAA
1594
+ },
1595
+ /** Medium contrast - body content */
1596
+ medium: {
1597
+ foreground: r.colors.gray[700],
1598
+ background: r.colors.gray[0],
1599
+ ratio: 7.5
1600
+ // Above AAA
1601
+ },
1602
+ /** Low contrast - secondary/muted content */
1603
+ low: {
1604
+ foreground: r.colors.gray[500],
1605
+ background: r.colors.gray[0],
1606
+ ratio: 4.5
1607
+ // AA compliant
1608
+ },
1609
+ /** Subtle - disabled/decorative */
1610
+ subtle: {
1611
+ foreground: r.colors.gray[400],
1612
+ background: r.colors.gray[0],
1613
+ ratio: 3
1614
+ // Minimum perceivable
1615
+ }
1616
+ }, Xe = {
1617
+ /** Default resting state */
1618
+ default: {
1619
+ opacity: 1,
1620
+ transform: "none",
1621
+ transition: "all 150ms ease-out"
1622
+ },
1623
+ /** Mouse hovering over element */
1624
+ hover: {
1625
+ opacity: 1,
1626
+ transform: "translateY(-1px)",
1627
+ transition: "all 150ms ease-out"
1628
+ },
1629
+ /** Element being pressed */
1630
+ active: {
1631
+ opacity: 0.9,
1632
+ transform: "translateY(0) scale(0.98)",
1633
+ transition: "all 50ms ease-out"
1634
+ },
1635
+ /** Keyboard focused */
1636
+ focus: {
1637
+ outline: `2px solid ${r.colors.navy[900]}`,
1638
+ outlineOffset: "2px",
1639
+ transition: "outline-offset 100ms ease-out"
1640
+ },
1641
+ /** Element is disabled */
1642
+ disabled: {
1643
+ opacity: 0.5,
1644
+ cursor: "not-allowed",
1645
+ pointerEvents: "none"
1646
+ }
1647
+ }, E = {
1648
+ /** Micro spacing - between related elements */
1649
+ micro: {
1650
+ 1: 4,
1651
+ // Tightest
1652
+ 2: 8
1653
+ // Very tight
1654
+ },
1655
+ /** Component spacing - within components */
1656
+ component: {
1657
+ 3: 12,
1658
+ // Compact
1659
+ 4: 16,
1660
+ // Default
1661
+ 5: 20
1662
+ // Comfortable
1663
+ },
1664
+ /** Section spacing - between sections */
1665
+ section: {
1666
+ 6: 24,
1667
+ // Tight sections
1668
+ 8: 32,
1669
+ // Default sections
1670
+ 10: 40
1671
+ // Spacious sections
1672
+ },
1673
+ /** Layout spacing - page-level */
1674
+ layout: {
1675
+ 12: 48,
1676
+ // Section gaps
1677
+ 16: 64,
1678
+ // Major sections
1679
+ 24: 96,
1680
+ // Page sections
1681
+ 32: 128
1682
+ // Hero/major breaks
1683
+ }
1684
+ };
1685
+ function ro(e) {
1686
+ const t = ne[e];
1687
+ return {
1688
+ zIndex: t.zIndex,
1689
+ boxShadow: t.shadow
1690
+ };
1691
+ }
1692
+ function to(e, t) {
1693
+ const n = ve[e].scale[t];
1694
+ return n || null;
1695
+ }
1696
+ function _(e, t = "light") {
1697
+ return (t === "light" ? {
1698
+ primary: r.colors.navy[900],
1699
+ secondary: r.colors.gray[700],
1700
+ tertiary: r.colors.gray[600],
1701
+ muted: r.colors.gray[500],
1702
+ disabled: r.colors.gray[400]
1703
+ } : {
1704
+ primary: r.colors.gray[50],
1705
+ secondary: r.colors.gray[200],
1706
+ tertiary: r.colors.gray[300],
1707
+ muted: r.colors.gray[400],
1708
+ disabled: r.colors.gray[500]
1709
+ })[e];
1710
+ }
1711
+ function Ur(e, t) {
1712
+ return E[e][t] ?? null;
1713
+ }
1714
+ const R = {
1715
+ none: "none",
1716
+ sm: "0 1px 2px 0 rgb(0 0 0 / 0.3), 0 0 0 1px rgb(255 255 255 / 0.05)",
1717
+ base: "0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.3), 0 0 0 1px rgb(255 255 255 / 0.05)",
1718
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3), 0 0 0 1px rgb(255 255 255 / 0.05)",
1719
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4), 0 0 0 1px rgb(255 255 255 / 0.05)",
1720
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.4), 0 0 0 1px rgb(255 255 255 / 0.07)",
1721
+ "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.6), 0 0 0 1px rgb(255 255 255 / 0.1)",
1722
+ inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.3)"
1723
+ }, ue = {
1724
+ scale: R,
1725
+ semantic: {
1726
+ card: R.md,
1727
+ dropdown: R.lg,
1728
+ modal: R["2xl"],
1729
+ button: R.sm,
1730
+ input: R.none,
1731
+ inputFocus: R.base
1732
+ },
1733
+ glow: {
1734
+ primary: `0 0 20px ${r.colors.purple[500]}40`,
1735
+ accent: `0 0 20px ${r.colors.coral[500]}40`,
1736
+ info: `0 0 20px ${r.colors.azure[500]}40`
1737
+ }
1738
+ }, Yr = "#14B8A6", ge = /* @__PURE__ */ A(r.colors.purple[400], 0.45), Qe = {
1739
+ overlay: {
1740
+ scrim: "rgba(0, 0, 0, 0.7)",
1741
+ hover: "rgba(255, 255, 255, 0.08)",
1742
+ hoverSubtle: "rgba(255, 255, 255, 0.04)",
1743
+ pressed: "rgba(255, 255, 255, 0.12)",
1744
+ selected: "rgba(255, 255, 255, 0.10)",
1745
+ disabled: "rgba(0, 0, 0, 0.5)"
1746
+ },
1747
+ shadow: {
1748
+ surface: R.base,
1749
+ raised: R.md,
1750
+ floating: R.lg,
1751
+ dialog: R["2xl"],
1752
+ inset: R.inner
1753
+ },
1754
+ focus: {
1755
+ // A box-shadow like the light ring (same 3px spread), in the dark focus color. Without it the
1756
+ // static stylesheet's dark blocks declared --trinity-focus-ring as the bare colour
1757
+ // colors.focus.ring, so `box-shadow: var(--trinity-focus-ring)` was invalid in dark mode.
1758
+ ring: `0 0 0 3px ${ge}`,
1759
+ glow: `0 0 0 3px ${ge}`
1760
+ },
1761
+ state: {
1762
+ errorSubtle: "rgba(248, 113, 113, 0.15)",
1763
+ errorEmphasis: "rgba(248, 113, 113, 0.4)",
1764
+ warningSubtle: "rgba(253, 230, 138, 0.15)",
1765
+ warningEmphasis: "rgba(253, 230, 138, 0.4)",
1766
+ successSubtle: "rgba(74, 222, 128, 0.15)",
1767
+ successEmphasis: "rgba(74, 222, 128, 0.4)",
1768
+ infoSubtle: "rgba(125, 211, 252, 0.15)",
1769
+ infoEmphasis: "rgba(125, 211, 252, 0.4)"
1770
+ }
1771
+ }, Gr = {
1772
+ colors: {
1773
+ text: {
1774
+ // Improved contrast ratios for dark mode (WCAG AA+ compliant)
1775
+ primary: "#F9FAFB",
1776
+ // Gray 50 - 15.8:1 contrast on gray[800]
1777
+ secondary: "#D1D5DB",
1778
+ // Gray 300 - 10.2:1 contrast
1779
+ tertiary: "#9CA3AF",
1780
+ // Gray 400 - 6.1:1 contrast
1781
+ disabled: "#6B7280",
1782
+ // Gray 500 - 3.9:1 contrast (meets large text AA)
1783
+ inverse: "#18181B",
1784
+ // Near-black text on the light inverse surface
1785
+ brand: "#C5C6D9",
1786
+ // Navy 100 remains visibly branded on dark
1787
+ link: "#47B6E9",
1788
+ // Azure 400 - 8.1:1 on the dark page
1789
+ linkHover: "#7ACBF0",
1790
+ // Azure hover - 10.4:1
1791
+ error: "#FCA5A5",
1792
+ success: "#86EFAC",
1793
+ warning: "#FDE68A"
1794
+ },
1795
+ background: {
1796
+ // Refined dark backgrounds with better elevation differentiation
1797
+ primary: "#121214",
1798
+ // Darker base for better contrast
1799
+ secondary: "#1C1C1F",
1800
+ // Slightly elevated
1801
+ tertiary: "#262629",
1802
+ // More elevated surfaces
1803
+ inverse: "#F9FAFB",
1804
+ // Light inverted panel in a dark application
1805
+ brandSubtle: "#1A1B30",
1806
+ // Navy-tinted dark wash
1807
+ accentSubtle: "#2A1512"
1808
+ // Coral-tinted dark wash
1809
+ },
1810
+ border: {
1811
+ // Improved border visibility in dark mode
1812
+ default: "#3F3F46",
1813
+ // Gray 600 - visible but subtle
1814
+ subtle: "#27272A",
1815
+ // Gray 700 - very subtle dividers
1816
+ strong: "#52525B",
1817
+ // Gray 500 - emphasis borders
1818
+ focus: "#A96ADA",
1819
+ // 5.1:1 against the dark page
1820
+ error: "#F87171",
1821
+ // 6.8:1
1822
+ success: "#4ADE80"
1823
+ // 10.7:1
1824
+ },
1825
+ // Interactive state overrides for dark mode
1826
+ interactive: {
1827
+ default: r.colors.purple[400],
1828
+ hover: r.colors.coral[400],
1829
+ // Lighter coral for dark mode
1830
+ active: r.colors.indigo[400],
1831
+ disabled: r.colors.gray[600],
1832
+ focus: r.colors.purple[400]
1833
+ },
1834
+ // Status color overrides for dark mode (improved contrast)
1835
+ status: {
1836
+ error: {
1837
+ text: "#FCA5A5",
1838
+ // Red 300 - good contrast
1839
+ background: "#1F1315",
1840
+ // Very dark red - elevated feel
1841
+ border: "#991B1B"
1842
+ // Red 800 - visible border
1843
+ },
1844
+ warning: {
1845
+ text: "#FDE68A",
1846
+ // Amber 200 - excellent contrast
1847
+ background: "#1A1607",
1848
+ // Very dark amber
1849
+ border: "#92400E"
1850
+ // Amber 800
1851
+ },
1852
+ success: {
1853
+ text: "#86EFAC",
1854
+ // Green 300
1855
+ background: "#0A1A10",
1856
+ // Very dark green
1857
+ border: "#166534"
1858
+ // Green 800
1859
+ },
1860
+ info: {
1861
+ text: "#7DD3FC",
1862
+ // Sky 300
1863
+ background: "#0C1929",
1864
+ // Very dark blue
1865
+ border: "#075985"
1866
+ // Sky 800
1867
+ }
1868
+ },
1869
+ // Content on a solid fill of the dark status.<x>.text (ADR-03-R7): gray 900 is 10.48:1 on
1870
+ // error, 15.97:1 on warning, 14.16:1 on success and 11.93:1 on info.
1871
+ onStatus: {
1872
+ error: r.colors.gray[900],
1873
+ warning: r.colors.gray[900],
1874
+ success: r.colors.gray[900],
1875
+ info: r.colors.gray[900]
1876
+ },
1877
+ // Favorite (ADR-03-R10): a reference to the dark status.warning.text
1878
+ // (darkSemanticRoleReferences): 15.02:1 on the page, 13.65:1 on the paper, 12.11:1 on #262629.
1879
+ favorite: "#FDE68A",
1880
+ indicator: {
1881
+ inProgress: {
1882
+ bg: r.colors.indigo[400]
1883
+ },
1884
+ running: {
1885
+ bg: r.colors.indigo[400]
1886
+ },
1887
+ // The light info fill #0043CE is 1.93-2.40:1 on the dark surfaces (ADR-03-R8, E-43+).
1888
+ info: { bg: se },
1889
+ new: { bg: se },
1890
+ updated: { bg: se }
1891
+ },
1892
+ chart: {
1893
+ grid: r.colors.gray[700],
1894
+ axis: r.colors.gray[500]
1895
+ },
1896
+ // Dark AI roles (Step 5 record section 13): primary purple 300 (6.07:1 on
1897
+ // the paper), primaryFill purple 600 (white 5.28:1, 3.21:1 on the paper).
1898
+ ai: {
1899
+ primary: r.colors.purple[300],
1900
+ primaryFill: r.colors.purple[600],
1901
+ onPrimaryFill: r.colors.gray[0],
1902
+ accent: r.colors.coral[400],
1903
+ surface: /* @__PURE__ */ A(r.colors.purple[700], 0.15),
1904
+ surfaceHover: /* @__PURE__ */ A(r.colors.purple[300], 0.16),
1905
+ surfaceEmphasis: /* @__PURE__ */ A(r.colors.purple[700], 0.25),
1906
+ surfaceEmphasisHover: /* @__PURE__ */ A(r.colors.purple[700], 0.35),
1907
+ border: /* @__PURE__ */ A(r.colors.purple[700], 0.3),
1908
+ badgeBackground: /* @__PURE__ */ A(r.colors.purple[700], 0.25),
1909
+ typingIndicator: r.colors.coral[800],
1910
+ focusRing: ge,
1911
+ presence: {
1912
+ blue: r.colors.azure[400],
1913
+ violet: r.colors.indigo[300],
1914
+ purple: r.colors.purple[300],
1915
+ coral: r.colors.coral[400],
1916
+ base: r.colors.gray[900]
1917
+ },
1918
+ // The same stops as light (owner decision 2026-10-08): the dark accent and primaryFill
1919
+ // (coral 400, purple 600) leave the white icon at 2.5-2.9:1, coral 800 to purple 700 at
1920
+ // 3.35:1 or more where the icon sits (WCAG 1.4.11, 3:1).
1921
+ avatarFill: {
1922
+ start: r.colors.coral[800],
1923
+ end: r.colors.purple[700]
1924
+ },
1925
+ // The dark AI progress teal (owner mockups 2026-10-08): the mockups' own teal, which is
1926
+ // 2.5:1 on a light paper but 6.82:1 on the dark paper.
1927
+ progress: Yr,
1928
+ // The canvas wash as faint tints over the dark paper, so the canvas stays dark (text.primary
1929
+ // and text.secondary keep their contrast on it).
1930
+ canvasFill: {
1931
+ start: /* @__PURE__ */ A(r.colors.purple[700], 0.16),
1932
+ end: /* @__PURE__ */ A(r.colors.coral[800], 0.1)
1933
+ }
1934
+ },
1935
+ surface: {
1936
+ elevated: "#1C1C1F",
1937
+ sunken: "#0C0C0E",
1938
+ // gray[600]: the light icon is 9.37:1 on it (ADR-03-R9); grey[300] was 1.20:1.
1939
+ neutralFill: r.colors.gray[600],
1940
+ overlay: "rgba(0, 0, 0, 0.7)",
1941
+ success: "#0A1A10",
1942
+ error: "#1F1315",
1943
+ warning: "#1A1607",
1944
+ info: "#0C1929"
1945
+ },
1946
+ avatar: { foregrounds: Ge },
1947
+ focus: {
1948
+ ring: "#A96ADA",
1949
+ ringOffset: "#121214"
1950
+ },
1951
+ selection: {
1952
+ background: "#2A5D8F",
1953
+ text: "#F9FAFB"
1954
+ },
1955
+ switch: {
1956
+ track: {
1957
+ off: r.colors.gray[500],
1958
+ on: r.colors.indigo[400],
1959
+ border: r.colors.gray[500]
1960
+ }
1961
+ },
1962
+ button: {
1963
+ primary: {
1964
+ background: r.colors.indigo[400]
1965
+ },
1966
+ secondary: {
1967
+ background: r.colors.purple[600]
1968
+ },
1969
+ outlined: {
1970
+ border: r.colors.purple[400],
1971
+ text: r.colors.purple[400]
1972
+ }
1973
+ }
1974
+ },
1975
+ shadows: ue,
1976
+ effects: Qe
1977
+ }, oo = {
1978
+ ...ue.scale,
1979
+ glow: ue.glow
1980
+ }, no = Qe, Zr = {
1981
+ // Default Trinity brand
1982
+ trinity: {
1983
+ name: "Trinity",
1984
+ primary: {
1985
+ main: r.colors.navy[900],
1986
+ light: r.colors.purple[700],
1987
+ dark: r.colors.indigo[900],
1988
+ contrast: "#FFFFFF"
1989
+ },
1990
+ secondary: {
1991
+ main: r.colors.coral[800],
1992
+ light: r.colors.coral[500],
1993
+ dark: r.colors.coral[900],
1994
+ contrast: "#FFFFFF"
1995
+ },
1996
+ accent: r.colors.azure[500]
1997
+ },
1998
+ // Professional/Corporate variant
1999
+ corporate: {
2000
+ name: "Corporate",
2001
+ primary: {
2002
+ main: "#1E3A5F",
2003
+ // Deep blue
2004
+ light: "#2E5A8F",
2005
+ dark: "#0F1D30",
2006
+ contrast: "#FFFFFF"
2007
+ },
2008
+ secondary: {
2009
+ main: "#0891B2",
2010
+ // Cyan
2011
+ light: "#22D3EE",
2012
+ dark: "#0E7490",
2013
+ contrast: "#FFFFFF"
2014
+ },
2015
+ accent: "#F59E0B"
2016
+ // Amber
2017
+ },
2018
+ // Modern/Tech variant
2019
+ tech: {
2020
+ name: "Tech",
2021
+ primary: {
2022
+ main: "#6366F1",
2023
+ // Indigo
2024
+ light: "#818CF8",
2025
+ dark: "#4338CA",
2026
+ contrast: "#FFFFFF"
2027
+ },
2028
+ secondary: {
2029
+ main: "#EC4899",
2030
+ // Pink
2031
+ light: "#F472B6",
2032
+ dark: "#DB2777",
2033
+ contrast: "#FFFFFF"
2034
+ },
2035
+ accent: "#10B981"
2036
+ // Emerald
2037
+ },
2038
+ // Nature/Organic variant
2039
+ nature: {
2040
+ name: "Nature",
2041
+ primary: {
2042
+ main: "#059669",
2043
+ // Emerald
2044
+ light: "#34D399",
2045
+ dark: "#047857",
2046
+ contrast: "#FFFFFF"
2047
+ },
2048
+ secondary: {
2049
+ main: "#D97706",
2050
+ // Amber
2051
+ light: "#FBBF24",
2052
+ dark: "#B45309",
2053
+ contrast: "#FFFFFF"
2054
+ },
2055
+ accent: "#0EA5E9"
2056
+ // Sky
2057
+ },
2058
+ // Dark/Sleek variant
2059
+ midnight: {
2060
+ name: "Midnight",
2061
+ primary: {
2062
+ main: "#1F2937",
2063
+ // Gray 800
2064
+ light: "#4B5563",
2065
+ dark: "#111827",
2066
+ contrast: "#FFFFFF"
2067
+ },
2068
+ secondary: {
2069
+ main: "#8B5CF6",
2070
+ // Violet
2071
+ light: "#A78BFA",
2072
+ dark: "#7C3AED",
2073
+ contrast: "#FFFFFF"
2074
+ },
2075
+ accent: "#F43F5E"
2076
+ // Rose
2077
+ }
2078
+ };
2079
+ function io(e) {
2080
+ const t = Zr[e];
2081
+ return t ? {
2082
+ ...l,
2083
+ colors: {
2084
+ ...l.colors,
2085
+ brand: {
2086
+ primary: t.primary.main,
2087
+ secondary: t.secondary.main,
2088
+ tertiary: t.primary.dark,
2089
+ accent: t.accent
2090
+ },
2091
+ interactive: {
2092
+ ...l.colors.interactive,
2093
+ default: t.primary.main,
2094
+ hover: t.secondary.main,
2095
+ active: t.primary.dark,
2096
+ focus: t.primary.light
2097
+ }
2098
+ }
2099
+ } : l;
2100
+ }
2101
+ const Kr = {
2102
+ /** Attention/importance levels */
2103
+ attention: Ze,
2104
+ /** Typography scale and weights */
2105
+ typography: ve,
2106
+ /** Z-axis elevation system */
2107
+ elevation: ne,
2108
+ /** Size scaling system */
2109
+ scale: q,
2110
+ /** Contrast levels */
2111
+ contrast: Ke,
2112
+ /** Interactive states */
2113
+ interactive: Xe,
2114
+ /** Spacing rhythm */
2115
+ spacing: E
2116
+ }, qe = {
2117
+ base: r,
2118
+ semantic: l,
2119
+ component: jr,
2120
+ darkMode: Gr,
2121
+ hierarchy: Kr
2122
+ }, so = ({
2123
+ height: e = 28,
2124
+ className: t
2125
+ }) => {
2126
+ const n = e * 4.018867924528302, i = Ve.useId(), s = `trinity-logo-gradient-${i}`, a = `trinity-logo-clip-${i}`;
2127
+ return /* @__PURE__ */ V(
2128
+ "svg",
2129
+ {
2130
+ xmlns: "http://www.w3.org/2000/svg",
2131
+ width: n,
2132
+ height: e,
2133
+ viewBox: "0 0 213 53",
2134
+ fill: "none",
2135
+ className: t,
2136
+ "aria-label": "Trinity",
2137
+ role: "img",
2138
+ children: [
2139
+ /* @__PURE__ */ V("g", { clipPath: `url(#${a})`, children: [
2140
+ /* @__PURE__ */ b(
2141
+ "path",
2142
+ {
2143
+ d: "M212.525 18.8744C212.304 19.023 212.157 19.1716 211.936 19.3944C208.844 23.8516 205.826 28.3087 202.735 32.7659C202.44 33.2116 202.367 33.6573 202.367 34.1773C202.367 37.0744 202.367 40.0459 202.367 43.0173H199.496V42.0516C199.496 39.4516 199.496 36.8516 199.496 34.2516C199.496 33.6573 199.349 33.1373 198.981 32.6173C196.036 28.2344 193.018 23.8516 190 19.4687C189.853 19.2459 189.706 18.9487 189.411 18.5773C190.515 18.5773 191.472 18.503 192.503 18.5773C192.724 18.5773 193.018 18.8744 193.165 19.1716C195.521 22.663 197.95 26.2287 200.306 29.7201L200.968 30.6859L204.575 25.3373C205.974 23.2573 207.372 21.1773 208.771 19.0973C208.992 18.7259 209.433 18.4287 209.949 18.503C210.832 18.503 211.642 18.4287 212.525 18.4287V18.8744Z",
2144
+ fill: "white"
2145
+ }
2146
+ ),
2147
+ /* @__PURE__ */ b(
2148
+ "path",
2149
+ {
2150
+ d: "M134.645 38.0401V18.6515H137.295V43.0172C136.706 43.0915 136.117 43.0915 135.528 43.0172C135.16 42.9429 134.865 42.7201 134.645 42.4229C129.86 36.3315 125.075 30.2401 120.364 24.1486C120.143 23.9258 119.996 23.6286 119.628 23.2572V43.0172H116.904V18.5772C117.714 18.5029 118.45 18.5029 119.26 18.5772C119.481 18.5772 119.775 18.9486 119.996 19.1715C124.707 25.1143 129.345 31.0572 134.056 37.0743L134.645 38.0401Z",
2151
+ fill: "white"
2152
+ }
2153
+ ),
2154
+ /* @__PURE__ */ b(
2155
+ "path",
2156
+ {
2157
+ d: "M84.0006 33.1371L91.4353 43.0171C90.2575 43.0171 89.3006 43.0914 88.27 43.0171C87.9756 43.0171 87.6811 42.6457 87.5339 42.4228C85.4728 39.6742 83.4853 36.9999 81.4978 34.2514C81.2034 33.8057 80.7617 33.5828 80.2464 33.6571C78.2589 33.7314 76.2714 33.6571 74.1367 33.6571V43.0171H71.4131V18.7257C71.4867 18.6514 71.4867 18.6514 71.5603 18.6514C75.3881 18.6514 79.1423 18.6514 82.97 18.7257C83.8534 18.7999 84.8103 18.9485 85.62 19.2457C88.8589 20.2857 90.552 22.7371 90.552 26.0057C90.552 29.2742 88.7853 31.5771 85.62 32.6914C85.1048 32.8399 84.5895 32.9142 84.0006 33.1371ZM74.0631 31.2057C77.302 31.0571 80.4673 31.0571 83.6325 30.7599C85.3992 30.6114 86.945 29.3485 87.3867 27.5657C88.3436 24.5199 86.6506 21.8457 83.2645 21.3999C81.0561 21.2514 78.8478 21.1771 76.6395 21.1771C75.7561 21.1771 74.8728 21.1771 73.9895 21.1771L74.0631 31.2057Z",
2158
+ fill: "white"
2159
+ }
2160
+ ),
2161
+ /* @__PURE__ */ b(
2162
+ "path",
2163
+ {
2164
+ d: "M2.43945 24.0742C3.47001 23.7771 4.50035 24.2228 5.01562 25.1143C5.23639 25.5599 5.38343 26.0797 5.45703 26.5996V49.7021C5.45703 51.3364 4.50053 52.3769 3.02832 52.377C1.5561 52.377 0.599609 51.3364 0.599609 49.7021V26.5254C0.525999 25.4111 1.33531 24.3714 2.43945 24.0742ZM11.7881 8.40039C12.745 7.50903 14.2905 7.58314 15.1738 8.54883C15.4682 8.84595 15.6155 9.2175 15.7627 9.58887C15.8363 9.96021 15.9102 10.3318 15.9102 10.7031V41.7539C15.9102 43.5368 15.1001 44.5771 13.6279 44.6514C12.0821 44.7257 11.0518 43.611 11.0518 41.8281V28.8281L10.9775 26.1543V10.6289C10.9039 9.81176 11.1992 8.99468 11.7881 8.40039ZM23.2715 0.525391C24.302 0.22826 25.3324 0.674007 25.8477 1.56543C26.0684 2.01105 26.2154 2.53089 26.2891 3.05078V26.1543C26.2889 27.7883 25.3324 28.8281 23.8604 28.8281C22.3883 28.8281 21.4318 27.7883 21.4316 26.1543V2.97656C21.3581 1.86233 22.1674 0.822521 23.2715 0.525391Z",
2165
+ fill: `url(#${s})`
2166
+ }
2167
+ ),
2168
+ /* @__PURE__ */ b(
2169
+ "path",
2170
+ {
2171
+ d: "M50.4341 21.2513H42.3369V18.7256H61.3286V21.2513H53.2314V43.017H50.3605V21.2513H50.4341Z",
2172
+ fill: "white"
2173
+ }
2174
+ ),
2175
+ /* @__PURE__ */ b(
2176
+ "path",
2177
+ {
2178
+ d: "M181.24 18.6514V21.1771H173.217V42.9428H170.419V21.2514H162.322V18.7257H181.24V18.6514Z",
2179
+ fill: "white"
2180
+ }
2181
+ ),
2182
+ /* @__PURE__ */ b("path", { d: "M152.679 42.9428H150.029V18.6514H152.679V42.9428Z", fill: "white" }),
2183
+ /* @__PURE__ */ b("path", { d: "M104.17 42.9427H101.446V18.7256H104.17V42.9427Z", fill: "white" })
2184
+ ] }),
2185
+ /* @__PURE__ */ V("defs", { children: [
2186
+ /* @__PURE__ */ V(
2187
+ "linearGradient",
2188
+ {
2189
+ id: s,
2190
+ x1: "0.594727",
2191
+ y1: "52.3768",
2192
+ x2: "26.2904",
2193
+ y2: "0.434374",
2194
+ gradientUnits: "userSpaceOnUse",
2195
+ children: [
2196
+ /* @__PURE__ */ b("stop", { stopColor: "#FF6150" }),
2197
+ /* @__PURE__ */ b("stop", { offset: "1", stopColor: "#6B12ED" })
2198
+ ]
2199
+ }
2200
+ ),
2201
+ /* @__PURE__ */ b("clipPath", { id: a, children: /* @__PURE__ */ b("rect", { width: "212", height: "52", fill: "white", transform: "translate(0.525391 0.451172)" }) })
2202
+ ] })
2203
+ ]
2204
+ }
2205
+ );
2206
+ }, ao = ({
2207
+ height: e = 28,
2208
+ className: t
2209
+ }) => {
2210
+ const n = e * 1, i = `trinity-icon-gradient-${Ve.useId()}`;
2211
+ return /* @__PURE__ */ V(
2212
+ "svg",
2213
+ {
2214
+ xmlns: "http://www.w3.org/2000/svg",
2215
+ width: n,
2216
+ height: e,
2217
+ viewBox: "0 0 160 160",
2218
+ fill: "none",
2219
+ className: t,
2220
+ "aria-label": "Trinity",
2221
+ role: "img",
2222
+ children: [
2223
+ /* @__PURE__ */ b("defs", { children: /* @__PURE__ */ V(
2224
+ "linearGradient",
2225
+ {
2226
+ id: i,
2227
+ x1: "44",
2228
+ y1: "5.2",
2229
+ x2: "117.8",
2230
+ y2: "154.5",
2231
+ gradientTransform: "translate(0 162) scale(1 -1)",
2232
+ gradientUnits: "userSpaceOnUse",
2233
+ children: [
2234
+ /* @__PURE__ */ b("stop", { offset: "0", stopColor: "#FF6150" }),
2235
+ /* @__PURE__ */ b("stop", { offset: "1", stopColor: "#6B12ED" })
2236
+ ]
2237
+ }
2238
+ ) }),
2239
+ /* @__PURE__ */ b(
2240
+ "path",
2241
+ {
2242
+ d: "M49.3,75.5c3-.9,5.9.4,7.4,3,.6,1.3,1.1,2.8,1.3,4.3v66.4c0,4.7-2.7,7.7-7,7.7-4.2,0-7-3-7-7.7v-66.6c-.2-3.2,2.1-6.2,5.3-7ZM76.1,30.4c2.7-2.6,7.2-2.3,9.7.4.8.9,1.3,1.9,1.7,3,.2,1.1.4,2.1.4,3.2v89.2c0,5.1-2.3,8.1-6.6,8.3-4.4.2-7.4-3-7.4-8.1v-37.4l-.2-7.7v-44.6c-.2-2.3.6-4.7,2.3-6.4ZM109.1,7.8c3-.9,5.9.4,7.4,3,.6,1.3,1.1,2.8,1.3,4.3v66.4c0,4.7-2.7,7.7-7,7.7s-7-3-7-7.7V14.8c-.2-3.2,2.1-6.2,5.3-7Z",
2243
+ fill: `url(#${i})`
2244
+ }
2245
+ )
2246
+ ]
2247
+ }
2248
+ );
2249
+ }, co = /* @__PURE__ */ G("div")(({ theme: e, focused: t }) => ({
2250
+ position: "relative",
2251
+ borderRadius: `${l.borders.radius.menu}px`,
2252
+ // 12px
2253
+ backgroundColor: t === "true" ? e.palette.common.white : l.effects.onDark.subtle,
2254
+ // 12% white
2255
+ "&:hover": {
2256
+ backgroundColor: t === "true" ? e.palette.common.white : l.effects.onDark.hover
2257
+ },
2258
+ marginRight: e.spacing(2),
2259
+ marginLeft: e.spacing(2),
2260
+ width: "100%",
2261
+ maxWidth: 400,
2262
+ transition: e.transitions.create(["background-color"]),
2263
+ [e.breakpoints.up("sm")]: {
2264
+ marginLeft: e.spacing(3),
2265
+ width: "auto",
2266
+ minWidth: 300
2267
+ }
2268
+ })), lo = /* @__PURE__ */ G("div")(({ theme: e, focused: t }) => ({
2269
+ padding: e.spacing(0, 2),
2270
+ height: "100%",
2271
+ position: "absolute",
2272
+ pointerEvents: "none",
2273
+ display: "flex",
2274
+ alignItems: "center",
2275
+ justifyContent: "center",
2276
+ color: t === "true" ? j.primary.main : Ue(e.palette.common.white, 0.5)
2277
+ })), uo = /* @__PURE__ */ G(Fr)(({ theme: e, focused: t }) => ({
2278
+ color: t === "true" ? j.primary.main : "inherit",
2279
+ width: "100%",
2280
+ "& .MuiInputBase-input": {
2281
+ padding: e.spacing(1, 4, 1, 0),
2282
+ paddingLeft: `calc(1em + ${e.spacing(4)})`,
2283
+ transition: e.transitions.create("width"),
2284
+ width: "100%",
2285
+ fontSize: l.typography.body.small.fontSize,
2286
+ // 14px
2287
+ "&::placeholder": {
2288
+ color: t === "true" ? j.neutral.gray500 : Ue(e.palette.common.white, 0.5),
2289
+ opacity: 1
2290
+ }
2291
+ }
2292
+ })), go = /* @__PURE__ */ G(vr)(({ show: e }) => ({
2293
+ position: "absolute",
2294
+ right: l.inline.tight,
2295
+ // 4px
2296
+ top: "50%",
2297
+ transform: "translateY(-50%)",
2298
+ padding: l.inline.tight,
2299
+ // 4px
2300
+ opacity: e === "true" ? 1 : 0,
2301
+ pointerEvents: e === "true" ? "auto" : "none",
2302
+ color: j.neutral.gray500,
2303
+ "&:hover": {
2304
+ backgroundColor: "action.hover"
2305
+ // Theme-aware hover
2306
+ }
2307
+ })), fo = /* @__PURE__ */ G(xr)(({ theme: e }) => ({
2308
+ position: "absolute",
2309
+ left: e.spacing(1),
2310
+ top: e.spacing(1),
2311
+ zIndex: e.zIndex.tooltip,
2312
+ backgroundColor: e.palette.common.white,
2313
+ color: j.primary.main,
2314
+ padding: e.spacing(1, 2),
2315
+ fontSize: l.typography.body.small.fontSize,
2316
+ fontWeight: l.typography.body.small.fontWeight,
2317
+ borderRadius: `${l.borders.radius.menu}px`,
2318
+ textDecoration: "none",
2319
+ // Visually hide by translating off-screen unless focused.
2320
+ transform: "translateY(-200%)",
2321
+ transition: e.transitions.create("transform"),
2322
+ "&:focus, &:focus-visible": {
2323
+ transform: "translateY(0)",
2324
+ outline: `2px solid ${j.primary.main}`,
2325
+ outlineOffset: 2
2326
+ }
2327
+ })), po = /* @__PURE__ */ G(je)(({ theme: e }) => ({
2328
+ backgroundColor: l.effects.onDark.subtle,
2329
+ // 12% white
2330
+ color: e.palette.common.white,
2331
+ borderRadius: `${l.borders.radius.menu}px`,
2332
+ // 12px
2333
+ padding: `${l.density.compact.cellPadding}px ${l.density.standard.cellPadding}px`,
2334
+ // 6px 12px
2335
+ textTransform: "none",
2336
+ fontSize: l.typography.body.small.fontSize,
2337
+ // 14px
2338
+ fontWeight: l.typography.body.small.fontWeight,
2339
+ // 400
2340
+ minWidth: 180,
2341
+ justifyContent: "space-between",
2342
+ "&:hover": {
2343
+ backgroundColor: l.effects.onDark.hover
2344
+ }
2345
+ })), Xr = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i, Qr = /^(rgba?|hsla?)\(/i;
2346
+ function qr(e) {
2347
+ return e.every((t) => Number.isFinite(t));
2348
+ }
2349
+ function ce(e) {
2350
+ if (typeof e != "string") return null;
2351
+ const t = e.trim();
2352
+ if (!Xr.test(t) && !Qr.test(t)) return null;
2353
+ try {
2354
+ let o = $e(t);
2355
+ if ((o.type === "hsl" || o.type === "hsla") && (o = $e(Cr(t))), o.type !== "rgb" && o.type !== "rgba") return null;
2356
+ const [n, i, s, a = 1] = o.values;
2357
+ return o.values.length < 3 || o.values.length > 4 || !qr([n, i, s, a]) || [n, i, s].some((c) => c < 0 || c > 255) || a < 0 || a > 1 ? null : { r: n, g: i, b: s, a };
2358
+ } catch {
2359
+ return null;
2360
+ }
2361
+ }
2362
+ function le(e, t) {
2363
+ const o = e.a;
2364
+ return o >= 1 ? { ...e, a: 1 } : {
2365
+ r: e.r * o + t.r * (1 - o),
2366
+ g: e.g * o + t.g * (1 - o),
2367
+ b: e.b * o + t.b * (1 - o),
2368
+ a: 1
2369
+ };
2370
+ }
2371
+ function de(e) {
2372
+ const t = e / 255;
2373
+ return t <= 0.03928 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4);
2374
+ }
2375
+ function He({ r: e, g: t, b: o }) {
2376
+ return 0.2126 * de(e) + 0.7152 * de(t) + 0.0722 * de(o);
2377
+ }
2378
+ function Jr(e, t) {
2379
+ const o = He(e), n = He(t);
2380
+ return (Math.max(o, n) + 0.05) / (Math.min(o, n) + 0.05);
2381
+ }
2382
+ const Oe = { r: 255, g: 255, b: 255, a: 1 }, De = /* @__PURE__ */ new Set();
2383
+ function et(e) {
2384
+ process.env.NODE_ENV !== "production" && (De.has(e) || (De.add(e), console.warn(
2385
+ `[Trinity] Cannot read the color "${e}" for a contrast check. Use hex, rgb(a) or hsl(a); the ratio is NaN.`
2386
+ )));
2387
+ }
2388
+ function mo(e, t, o = {}) {
2389
+ const n = ce(e), i = ce(t), s = o.over === void 0 ? Oe : ce(o.over);
2390
+ for (const [d, u] of [
2391
+ [e, n],
2392
+ [t, i],
2393
+ [o.over ?? "", s]
2394
+ ])
2395
+ if (!u)
2396
+ return et(d), Number.NaN;
2397
+ const a = le(i, le(s, Oe)), c = le(n, a);
2398
+ return Jr(c, a);
2399
+ }
2400
+ const Je = [
2401
+ ["card.background", "surface.elevated"],
2402
+ ["card.border", "border.subtle"],
2403
+ ["input.background.default", "surface.elevated"],
2404
+ ["input.background.disabled", "background.tertiary"],
2405
+ ["input.borderColor.default", "border.default"],
2406
+ ["input.borderColor.hover", "border.strong"],
2407
+ ["input.borderColor.focus", "border.focus"],
2408
+ ["input.borderColor.error", "border.error"],
2409
+ ["tooltip.background", "background.inverse"],
2410
+ ["tooltip.text", "text.inverse"],
2411
+ ["modal.background", "surface.elevated"]
2412
+ ];
2413
+ function te(e) {
2414
+ return e.replace(/([A-Z])/g, "-$1").toLowerCase();
2415
+ }
2416
+ function rt(e) {
2417
+ return e.split(".").map(te).join("-");
2418
+ }
2419
+ function tt(e, t) {
2420
+ return `--trinity-component-${rt(e)}`;
2421
+ }
2422
+ function U(e, t) {
2423
+ const [o, ...n] = e.split(".");
2424
+ o === "background" || te(o);
2425
+ const i = "--trinity-semantic-", s = [
2426
+ te(o),
2427
+ ...n.map(te)
2428
+ ];
2429
+ return `${i}${s.join("-")}`;
2430
+ }
2431
+ function ot(e, t, o) {
2432
+ for (const [n, i] of t) {
2433
+ const s = e.get(n), a = e.get(i);
2434
+ if (s === void 0 || a === void 0) {
2435
+ if (o.onMissing === "throw")
2436
+ throw new Error(`${o.context}missing color reference endpoint: ${n} -> ${i}`);
2437
+ continue;
2438
+ }
2439
+ if (s !== a) {
2440
+ if (o.onMismatch === "throw")
2441
+ throw new Error(
2442
+ `${o.context}color reference changes light output: ${n} (${s}) != ${i} (${a})`
2443
+ );
2444
+ continue;
2445
+ }
2446
+ e.set(n, `var(${i})`);
2447
+ }
2448
+ }
2449
+ function bo(e) {
2450
+ return Je.map(([t, o]) => [
2451
+ tt(t),
2452
+ U(o)
2453
+ ]);
2454
+ }
2455
+ const ie = [
2456
+ ["confidence.high", "status.success"],
2457
+ ["confidence.medium", "status.info"],
2458
+ ["confidence.low", "status.warning"],
2459
+ ["verification.verified", "status.success"],
2460
+ // Golden shares the success colors; its glyph (`award`) tells it apart.
2461
+ ["verification.golden", "status.success"],
2462
+ ["verification.pending", "status.info"],
2463
+ ["verification.flagged", "status.warning"],
2464
+ ["verification.rejected", "status.error"],
2465
+ // AI roles (E-03, ADR-03-R15, ADR-03-R11). Light values only: the dark AI
2466
+ // roles are their own values, emitted in the dark blocks.
2467
+ ["ai.primary", "brand.secondary"],
2468
+ ["ai.primaryFill", "brand.secondary"],
2469
+ ["ai.typingIndicator", "brand.secondary"],
2470
+ ["ai.accent", "brand.accent"],
2471
+ ["ai.presence.purple", "brand.secondary"],
2472
+ ["ai.presence.coral", "brand.accent"],
2473
+ ["ai.avatarFill.start", "brand.accent"],
2474
+ ["ai.avatarFill.end", "brand.secondary"],
2475
+ // Favorite (ADR-03-R10, H-12): the pinned/favorite star of ThreadHistorySidebar. The dark
2476
+ // reference is in darkSemanticRoleReferences.
2477
+ ["favorite", "status.warning.text"]
2478
+ ], fe = [
2479
+ // Favorite (ADR-03-R10): the dark star references the dark warning text.
2480
+ ["favorite", "status.warning.text"]
2481
+ ];
2482
+ function ho(e) {
2483
+ const t = pe(fe);
2484
+ if (t) throw new Error(`Dark role reference cycle: ${t.join(" -> ")}`);
2485
+ return fe.map(([o, n]) => [
2486
+ U(o),
2487
+ U(n)
2488
+ ]);
2489
+ }
2490
+ const nt = [
2491
+ ["ai.surface", "brand.secondary", 0.05],
2492
+ ["ai.border", "brand.secondary", 0.2],
2493
+ ["ai.badgeBackground", "brand.secondary", 0.15]
2494
+ ], it = ["confidence", "verification"];
2495
+ function er(e, t) {
2496
+ return t.split(".").reduce((o, n) => o && typeof o == "object" ? o[n] : void 0, e);
2497
+ }
2498
+ function rr(e, t = ie) {
2499
+ const o = [];
2500
+ for (const [n, i] of t) {
2501
+ const s = er(e, i);
2502
+ if (typeof s == "string") o.push([n, i]);
2503
+ else if (s && typeof s == "object")
2504
+ for (const [a, c] of Object.entries(s))
2505
+ typeof c == "string" && o.push([`${n}.${a}`, `${i}.${a}`]);
2506
+ else
2507
+ throw new Error(`Semantic role reference ${n} -> ${i}: the source does not exist`);
2508
+ }
2509
+ return o;
2510
+ }
2511
+ function pe(e) {
2512
+ const t = /* @__PURE__ */ new Map();
2513
+ for (const [s, a] of e)
2514
+ t.set(s, [...t.get(s) ?? [], a]);
2515
+ const o = /* @__PURE__ */ new Map(), n = [], i = (s) => {
2516
+ if (o.get(s) === "done") return null;
2517
+ if (o.get(s) === "visiting") return [...n.slice(n.indexOf(s)), s];
2518
+ o.set(s, "visiting"), n.push(s);
2519
+ for (const a of t.get(s) ?? []) {
2520
+ const c = i(a);
2521
+ if (c) return c;
2522
+ }
2523
+ return n.pop(), o.set(s, "done"), null;
2524
+ };
2525
+ for (const s of t.keys()) {
2526
+ const a = i(s);
2527
+ if (a) return a;
2528
+ }
2529
+ return null;
2530
+ }
2531
+ function yo(e) {
2532
+ var n;
2533
+ const t = {}, o = ie.filter(
2534
+ ([i]) => it.includes(i.split(".")[0])
2535
+ );
2536
+ for (const [i, s] of rr(e, o)) {
2537
+ const [a, c, d] = i.split(".");
2538
+ if (d === void 0) continue;
2539
+ const u = er(e, s);
2540
+ ((n = t[a] ?? (t[a] = {}))[c] ?? (n[c] = {}))[d] = u;
2541
+ }
2542
+ return t;
2543
+ }
2544
+ function xo(e, t) {
2545
+ const o = rr(e), n = pe(ie) ?? pe(o);
2546
+ if (n) throw new Error(`Semantic role reference cycle: ${n.join(" -> ")}`);
2547
+ return o.map(([i, s]) => [
2548
+ U(i),
2549
+ U(s)
2550
+ ]);
2551
+ }
2552
+ function Fo(e, t, o) {
2553
+ const n = [], i = [];
2554
+ for (const [s, a] of t) {
2555
+ if (!e.has(a))
2556
+ throw new Error(`${o.context}missing semantic role reference source: ${s} -> ${a}`);
2557
+ if (e.has(s) && !n.includes(s)) {
2558
+ i.push([s, a]);
2559
+ continue;
2560
+ }
2561
+ if (n.includes(s))
2562
+ throw new Error(`${o.context}semantic role reference emits ${s} twice`);
2563
+ e.set(s, `var(${a})`), n.push(s);
2564
+ }
2565
+ return ot(e, i, { ...o, onMissing: "throw" }), n;
2566
+ }
2567
+ const st = {
2568
+ error: ["error", "critical", "failed", "rejected"],
2569
+ warning: ["warning", "caution", "pending"],
2570
+ success: ["success", "complete", "approved", "active", "enabled"],
2571
+ info: ["info", "new", "updated"],
2572
+ neutral: ["neutral", "draft", "inactive", "disabled", "cancelled", "unknown"],
2573
+ progress: ["inProgress", "running"],
2574
+ beta: ["beta", "experimental"]
2575
+ };
2576
+ function vo(e, t = {}, o) {
2577
+ const n = {};
2578
+ for (const [i, s] of Object.entries(st))
2579
+ for (const a of s) {
2580
+ const c = { ...e[a], ...t[a] }, d = c.outline;
2581
+ n[a] = {
2582
+ fill: c.bg,
2583
+ onFill: c.fg,
2584
+ ...d === void 0 ? {} : { outline: d },
2585
+ onSurface: o ? o[i] : d ?? c.bg
2586
+ };
2587
+ }
2588
+ return n;
2589
+ }
2590
+ function Te(e) {
2591
+ return Array.from(e.matchAll(/var\((--[\w-]+)/g), (t) => t[1]);
2592
+ }
2593
+ function wo(e, t, o) {
2594
+ const n = /* @__PURE__ */ new Map(), i = (s, a) => {
2595
+ if (o.has(s)) return !0;
2596
+ const c = n.get(s);
2597
+ if (c !== void 0) return c;
2598
+ if (a.has(s)) throw new Error(`custom-property reference cycle at ${s}`);
2599
+ const d = new Set(a).add(s), u = Te(t.get(s) ?? "").some((m) => i(m, d));
2600
+ return n.set(s, u), u;
2601
+ };
2602
+ return e.filter((s) => {
2603
+ const a = t.get(s) ?? "";
2604
+ return a.includes("var(") && Te(a).some((c) => i(c, /* @__PURE__ */ new Set([s])));
2605
+ });
2606
+ }
2607
+ function at({ accent: e, primaryFill: t, surface: o, avatarFill: n, canvasFill: i }) {
2608
+ return {
2609
+ primary: `linear-gradient(180deg, ${e} 0%, ${t} 100%)`,
2610
+ horizontal: `linear-gradient(90deg, ${e} 0%, ${t} 100%)`,
2611
+ diagonal: `linear-gradient(135deg, ${e} 0%, ${t} 100%)`,
2612
+ subtle: `linear-gradient(180deg, transparent 0%, ${o} 100%)`,
2613
+ text: `linear-gradient(180deg, ${e} 0%, ${t} 100%)`,
2614
+ border: `linear-gradient(180deg, ${e}, ${t})`,
2615
+ avatar: `linear-gradient(180deg, ${n.start} 0%, ${n.end} 100%)`,
2616
+ brandDiagonal: `linear-gradient(135deg, ${n.start} 0%, ${n.end} 100%)`,
2617
+ canvas: `linear-gradient(135deg, transparent 0%, ${i.start} 60%, ${i.end} 100%)`
2618
+ };
2619
+ }
2620
+ function So(e) {
2621
+ const t = (n) => U(`ai.${n}`), o = at({
2622
+ accent: `var(${t("accent")})`,
2623
+ primaryFill: `var(${t("primaryFill")})`,
2624
+ surface: `var(${t("surface")})`,
2625
+ avatarFill: { start: `var(${t("avatarFill.start")})`, end: `var(${t("avatarFill.end")})` },
2626
+ canvasFill: { start: `var(${t("canvasFill.start")})`, end: `var(${t("canvasFill.end")})` }
2627
+ });
2628
+ return Object.entries(o).map(([n, i]) => [t(`gradient.${n}`), i]);
2629
+ }
2630
+ const Co = {
2631
+ containerType: "inline-size",
2632
+ width: "100%",
2633
+ containIntrinsicInlineSize: `${l.spacing.layout.containerQuery.narrow}px`
2634
+ };
2635
+ function ct(e, t) {
2636
+ return e.trinityTokens?.semantic.spacing.layout.containerQuery?.[t] ?? l.spacing.layout.containerQuery[t];
2637
+ }
2638
+ function Eo(e, t, o) {
2639
+ const n = ct(e, t);
2640
+ return o ? e.containerQueries(o).down(n) : e.containerQueries.down(n);
2641
+ }
2642
+ const me = (e, t, o) => typeof e == "number" && Number.isInteger(e) && e >= t && e <= o;
2643
+ function be(e, t, o, n) {
2644
+ const i = Math.round(Number(e));
2645
+ return Number.isFinite(i) ? Math.min(o, Math.max(t, i)) : n;
2646
+ }
2647
+ function Ao(e) {
2648
+ if (me(e, 2, 6)) return `h${e}`;
2649
+ if (process.env.NODE_ENV !== "production")
2650
+ throw new RangeError(`[trinity] headingLevel must be 2, 3, 4, 5 or 6; got ${String(e)}. Level 1 is reserved for the page title.`);
2651
+ return `h${be(e, 2, 6, 2)}`;
2652
+ }
2653
+ function ko(e, t = 0) {
2654
+ if (!me(e, 1, 6) || !me(t, 0, 5)) {
2655
+ if (process.env.NODE_ENV !== "production")
2656
+ throw new RangeError(`[trinity] heading level must be 1-6 and headingOffset 0-5; got level ${String(e)}, offset ${String(t)}.`);
2657
+ return `h${Math.min(6, be(e, 1, 6, 1) + be(t, 0, 5, 0))}`;
2658
+ }
2659
+ return `h${Math.min(6, e + t)}`;
2660
+ }
2661
+ function Ie(e) {
2662
+ return e != null && typeof e != "boolean";
2663
+ }
2664
+ function tr(...e) {
2665
+ const t = [];
2666
+ for (const o of e)
2667
+ if (Array.isArray(o))
2668
+ for (const n of o) Ie(n) && t.push(n);
2669
+ else Ie(o) && t.push(o);
2670
+ return t;
2671
+ }
2672
+ const lt = ["role", "aria-live", "aria-busy", "aria-relevant", "aria-atomic", "aria-modal"], dt = /* @__PURE__ */ new Set(lt);
2673
+ function he(...e) {
2674
+ const t = [];
2675
+ for (const o of e) {
2676
+ const n = typeof o == "string" ? [o] : Array.isArray(o) ? o : [];
2677
+ for (const i of n)
2678
+ if (i)
2679
+ for (const s of i.split(/\s+/))
2680
+ s && !t.includes(s) && t.push(s);
2681
+ }
2682
+ return t.length > 0 ? t.join(" ") : void 0;
2683
+ }
2684
+ function or(e) {
2685
+ return dt.has(e);
2686
+ }
2687
+ const Me = /* @__PURE__ */ new Set();
2688
+ function nr(e, t, o) {
2689
+ if (process.env.NODE_ENV === "production" || t.length === 0 || Me.has(e)) return;
2690
+ Me.add(e);
2691
+ const n = o ? `slotProps.${o}` : "its root", i = t.map((s) => `"${s}"`).join(", ");
2692
+ console.warn(
2693
+ `[trinity] ${e}: ${i} on ${n} is owned by the component and was ignored. The component sets its own role and live-region attributes (ADR-04). Use the documented props instead.`
2694
+ );
2695
+ }
2696
+ function Ro(e) {
2697
+ const { rest: t, owned: o, id: n, describedBy: i, labelledBy: s, componentName: a } = e, c = g.useId(), d = t ?? {}, u = {}, m = [];
2698
+ for (const [w, S] of Object.entries(d)) {
2699
+ if (or(w)) {
2700
+ S !== void 0 && m.push(w);
2701
+ continue;
2702
+ }
2703
+ u[w] = S;
2704
+ }
2705
+ for (const [w, S] of Object.entries(o ?? {}))
2706
+ S !== void 0 && (u[w] = S);
2707
+ u.id = n || typeof d.id == "string" && d.id || c;
2708
+ const F = he(i, d["aria-describedby"]), y = he(s, d["aria-labelledby"]);
2709
+ F ? u["aria-describedby"] = F : delete u["aria-describedby"], y ? u["aria-labelledby"] = y : delete u["aria-labelledby"];
2710
+ const v = m.join(" ");
2711
+ return g.useEffect(() => {
2712
+ v && nr(a, v.split(" "));
2713
+ }, [a, v]), u;
2714
+ }
2715
+ const ut = /^on[A-Z]/;
2716
+ function gt(e, t) {
2717
+ return [e, t].filter((n) => typeof n == "string" && n).join(" ") || void 0;
2718
+ }
2719
+ function zo(e, t, o = {}) {
2720
+ const n = e ?? {}, i = { ...n }, s = [];
2721
+ for (const [a, c] of Object.entries(t ?? {}))
2722
+ if (c !== void 0)
2723
+ if (or(a))
2724
+ s.push(a);
2725
+ else if (a === "className")
2726
+ i.className = gt(n.className, c);
2727
+ else if (a === "sx")
2728
+ i.sx = tr(n.sx, c);
2729
+ else if (a === "style")
2730
+ i.style = { ...n.style, ...c };
2731
+ else if (a === "aria-describedby" || a === "aria-labelledby")
2732
+ i[a] = he(n[a], c);
2733
+ else if (ut.test(a) && typeof c == "function" && typeof n[a] == "function") {
2734
+ const d = n[a], u = c;
2735
+ i[a] = (...m) => {
2736
+ d(...m), u(...m);
2737
+ };
2738
+ } else
2739
+ i[a] = c;
2740
+ return s.length > 0 && nr(o.componentName ?? "A Trinity component", s, o.slotName), i;
2741
+ }
2742
+ const ft = /^-?(?:\d+(?:\.\d+)?|\.\d+)(?:cap|ch|cm|dvh|dvw|em|ex|ic|in|lh|mm|pc|pt|px|Q|rem|rlh|svh|svw|vmax|vmin|vh|vw|%)$/, pt = /^(?:calc|clamp|max|min|var)\(.+\)$/, mt = /^-?(?:\d+(?:\.\d+)?|\.\d+)(?:ms|s)$/;
2743
+ function H(e, t, o) {
2744
+ const n = o ? ` for ${o}` : "";
2745
+ throw new TypeError(
2746
+ `Invalid ${e} token${n}: ${JSON.stringify(t)}`
2747
+ );
2748
+ }
2749
+ function ee(e, t, o) {
2750
+ (typeof e != "number" || !Number.isFinite(e)) && H(t, e, o);
2751
+ }
2752
+ function $o(e, t, o) {
2753
+ switch (t) {
2754
+ case "dimension":
2755
+ return typeof e == "number" ? (Number.isFinite(e) || H(t, e, o), `${e}px`) : typeof e == "string" && (e === "0" || ft.test(e) || pt.test(e)) ? e : H(t, e, o);
2756
+ case "duration":
2757
+ return typeof e == "string" && mt.test(e) ? e : H(t, e, o);
2758
+ case "fontWeight":
2759
+ return ee(e, t, o), !Number.isInteger(e) || e < 1 || e > 1e3 ? H(t, e, o) : String(e);
2760
+ case "lineHeight":
2761
+ return ee(e, t, o), e < 0 ? H(t, e, o) : String(e);
2762
+ case "opacity":
2763
+ return ee(e, t, o), e < 0 || e > 1 ? H(t, e, o) : String(e);
2764
+ case "zIndex":
2765
+ return e === "auto" ? e : (ee(e, t, o), Number.isInteger(e) ? String(e) : H(t, e, o));
2766
+ case "raw":
2767
+ return typeof e == "string" ? e : typeof e == "number" && Number.isFinite(e) ? String(e) : Array.isArray(e) && e.every(
2768
+ (n) => typeof n == "string" || typeof n == "number" && Number.isFinite(n)
2769
+ ) ? e.join(",") : H(t, e, o);
2770
+ }
2771
+ }
2772
+ const Ho = (e) => e[0] === "easing" ? "raw" : "duration", bt = {
2773
+ "badge.fontWeight": "fontWeight",
2774
+ "modal.backdropOpacity": "opacity"
2775
+ }, Oo = (e, t) => bt[e.join(".")] ?? (typeof t == "number" ? "dimension" : "raw");
2776
+ function Do(e) {
2777
+ return `--trinity-${e.map((o) => String(o).replace(/([A-Z])/g, "-$1").toLowerCase()).join("-").replace(/[^a-z0-9-]+/g, "-").replace(/-{2,}/g, "-").replace(/^-|-$/g, "")}`;
2778
+ }
2779
+ const ht = /^\s*(-?(?:\d+(?:\.\d+)?|\.\d+))(ms|s)\s*$/;
2780
+ function oe(e, t) {
2781
+ const o = t ? ` for ${t}` : "";
2782
+ if (typeof e == "number") {
2783
+ if (!Number.isFinite(e)) throw new TypeError(`Not a finite duration${o}: ${e}`);
2784
+ return e;
2785
+ }
2786
+ const n = ht.exec(e);
2787
+ if (!n) throw new TypeError(`Not a CSS time${o}: ${JSON.stringify(e)}`);
2788
+ const i = Number(n[1]);
2789
+ return n[2] === "s" ? Math.round(i * 1e3) : i;
2790
+ }
2791
+ const yt = {
2792
+ layout: ["containerQuery"]
2793
+ };
2794
+ function To(e) {
2795
+ const t = { ...e };
2796
+ for (const [o, n] of Object.entries(yt)) {
2797
+ const i = t[o];
2798
+ if (i && typeof i == "object") {
2799
+ const s = { ...i };
2800
+ for (const a of n) delete s[a];
2801
+ t[o] = s;
2802
+ }
2803
+ }
2804
+ return t;
2805
+ }
2806
+ function xt(e) {
2807
+ return oe(e);
2808
+ }
2809
+ function Io(e) {
2810
+ return Er() ? 0 : xt(e);
2811
+ }
2812
+ function Mo(e) {
2813
+ return { [Ye]: e };
2814
+ }
2815
+ const Ft = "trinity-essential-motion", Be = "0.01ms";
2816
+ function Bo(e) {
2817
+ return {
2818
+ duration: {
2819
+ shortest: oe(e.duration.fast, "motion.duration.fast"),
2820
+ shorter: oe(e.duration.normal, "motion.duration.normal"),
2821
+ standard: oe(e.duration.slow, "motion.duration.slow")
2822
+ },
2823
+ easing: {
2824
+ easeInOut: e.easing.default,
2825
+ easeOut: e.easing.enter,
2826
+ easeIn: e.easing.exit
2827
+ }
2828
+ };
2829
+ }
2830
+ function No() {
2831
+ const e = `:not(.${Ft})`;
2832
+ return {
2833
+ [Ye]: {
2834
+ [`*${e}, *${e}::before, *${e}::after`]: {
2835
+ animationDuration: `${Be} !important`,
2836
+ animationIterationCount: "1 !important",
2837
+ transitionDuration: `${Be} !important`,
2838
+ scrollBehavior: "auto !important"
2839
+ }
2840
+ }
2841
+ };
2842
+ }
2843
+ const vt = q.touchTargets.floor, Wo = {
2844
+ position: "relative",
2845
+ "&::after": {
2846
+ content: '""',
2847
+ position: "absolute",
2848
+ inset: `min(0px, calc((100% - ${vt}px) / 2))`
2849
+ }
2850
+ }, ye = (e) => typeof e == "object" && e !== null && Object.getPrototypeOf(e) === Object.prototype;
2851
+ function ir(e, t) {
2852
+ if (t == null) return e;
2853
+ const o = { ...e };
2854
+ for (const [n, i] of Object.entries(t)) {
2855
+ if (i === void 0) continue;
2856
+ const s = o[n];
2857
+ o[n] = ye(i) && ye(s) ? ir(s, i) : i;
2858
+ }
2859
+ return o;
2860
+ }
2861
+ function wt(e) {
2862
+ return JSON.stringify(e, (t, o) => typeof o == "function" ? `fn:${String(o)}` : ye(o) ? Object.fromEntries(Object.keys(o).sort().map((n) => [n, o[n]])) : o);
2863
+ }
2864
+ const St = 3;
2865
+ function Ct(e, t) {
2866
+ const o = br({
2867
+ seen: !1,
2868
+ value: void 0,
2869
+ hash: "",
2870
+ streak: 0,
2871
+ warned: !1
2872
+ });
2873
+ hr(() => {
2874
+ if (process.env.NODE_ENV === "production" || process.env.NODE_ENV === "test") return;
2875
+ const n = o.current;
2876
+ if (n.seen && t === n.value) {
2877
+ n.streak = 0;
2878
+ return;
2879
+ }
2880
+ const i = wt(t);
2881
+ n.streak = n.seen && i === n.hash ? n.streak + 1 : 0, n.seen = !0, n.value = t, n.hash = i, n.streak > St && !n.warned && (n.warned = !0, console.warn(
2882
+ `[trinity] ${e} got a new object with the same content on ${n.streak} renders in a row. Hoist it out of the component or wrap it in useMemo, so the context does not re-render its consumers.`
2883
+ ));
2884
+ });
2885
+ }
2886
+ function Lo(e, t, o = {}) {
2887
+ const n = o.providerName ?? `StringsProvider(${e})`, i = fr(t);
2888
+ i.displayName = `StringsContext(${e})`;
2889
+ function s({ strings: c, children: d }) {
2890
+ const u = ze(i), m = pr(() => ir(u, c), [u, c]);
2891
+ return Ct(`${n}: the \`strings\` prop`, c), mr(i.Provider, { value: m }, d);
2892
+ }
2893
+ s.displayName = `StringsProvider(${e})`;
2894
+ function a() {
2895
+ return ze(i);
2896
+ }
2897
+ return { namespace: e, defaults: t, Context: i, StringsProvider: s, useStrings: a };
2898
+ }
2899
+ function _o(e, t) {
2900
+ const o = /* @__PURE__ */ new Map();
2901
+ return e.map((n) => {
2902
+ const i = t(n), s = (o.get(i) ?? 0) + 1;
2903
+ return o.set(i, s), JSON.stringify([i, s]);
2904
+ });
2905
+ }
2906
+ const Po = /* @__PURE__ */ yr(function({ dir: t = "auto", style: o, ...n }, i) {
2907
+ return /* @__PURE__ */ b("span", { ref: i, ...n, dir: t, style: { ...o, unicodeBidi: "isolate" } });
2908
+ });
2909
+ function Et(e) {
2910
+ const t = globalThis.reportError;
2911
+ typeof t == "function" ? t(e) : queueMicrotask(() => {
2912
+ throw e;
2913
+ });
2914
+ }
2915
+ function Vo(e = {}) {
2916
+ const { messages: t, onCopied: o, onCopyError: n, feedbackDuration: i = 2e3 } = e, s = g.useRef(null), a = g.useRef(o);
2917
+ g.useEffect(() => {
2918
+ a.current = o;
2919
+ });
2920
+ const c = Rr({
2921
+ successDuration: i,
2922
+ onError: (x) => {
2923
+ s.current = x;
2924
+ }
2925
+ }), { copy: d, reset: u } = c, m = zr(
2926
+ async (x) => {
2927
+ if (s.current = null, !await d(x))
2928
+ throw s.current ?? new Error("Clipboard write failed");
2929
+ try {
2930
+ a.current?.(x);
2931
+ } catch (I) {
2932
+ Et(I);
2933
+ }
2934
+ },
2935
+ { onError: n, announce: { success: t?.success, error: t?.error } }
2936
+ ), { run: F, reset: y, status: v } = m;
2937
+ g.useEffect(() => {
2938
+ if (v !== "error") return;
2939
+ const x = setTimeout(y, i);
2940
+ return () => clearTimeout(x);
2941
+ }, [v, i, y]);
2942
+ const w = g.useCallback(() => {
2943
+ y(), u();
2944
+ }, [y, u]);
2945
+ let S = "idle";
2946
+ return v === "pending" ? S = "pending" : v === "error" ? S = "error" : c.copied && (S = "copied"), { copy: F, status: S, reset: w };
2947
+ }
2948
+ const sr = [
2949
+ "a[href]",
2950
+ "button",
2951
+ "input",
2952
+ "select",
2953
+ "textarea",
2954
+ "label",
2955
+ "summary",
2956
+ '[role="button"]',
2957
+ '[role="link"]',
2958
+ '[role="checkbox"]',
2959
+ '[role="switch"]',
2960
+ '[role="menuitem"]',
2961
+ '[role="tab"]',
2962
+ '[tabindex]:not([tabindex="-1"])',
2963
+ '[contenteditable="true"]'
2964
+ ], jo = sr.join(", "), At = sr.map((e) => `& ${e}`).join(", "), Uo = {
2965
+ position: "relative"
2966
+ }, Yo = {
2967
+ position: "absolute",
2968
+ inset: 0,
2969
+ zIndex: 0,
2970
+ borderRadius: "inherit",
2971
+ "&.Mui-focusVisible, &:focus-visible": {
2972
+ outlineOffset: -l.borders.width.focus
2973
+ }
2974
+ }, Go = {
2975
+ position: "relative",
2976
+ zIndex: 1,
2977
+ pointerEvents: "none",
2978
+ [At]: {
2979
+ pointerEvents: "auto"
2980
+ }
2981
+ }, xe = { overflowX: !1, overflowY: !1 };
2982
+ function kt(e, t) {
2983
+ return e ? {
2984
+ overflowX: t !== "y" && e.scrollWidth > e.clientWidth,
2985
+ overflowY: t !== "x" && e.scrollHeight > e.clientHeight
2986
+ } : xe;
2987
+ }
2988
+ function Zo(e, t = {}) {
2989
+ const { axis: o = "both" } = t, [n, i] = g.useState(xe), s = g.useRef(xe), a = g.useCallback(() => {
2990
+ const c = kt(e.current, o), d = s.current;
2991
+ (c.overflowX !== d.overflowX || c.overflowY !== d.overflowY) && (s.current = c, i(c));
2992
+ }, [e, o]);
2993
+ return $r(() => {
2994
+ a();
2995
+ }), g.useEffect(() => {
2996
+ const c = e.current;
2997
+ if (!c) return;
2998
+ let d = null;
2999
+ typeof ResizeObserver < "u" && (d = new ResizeObserver(() => a()), d.observe(c));
3000
+ const u = () => a();
3001
+ return window.addEventListener("resize", u), () => {
3002
+ d?.disconnect(), window.removeEventListener("resize", u);
3003
+ };
3004
+ }, [e, a]), n;
3005
+ }
3006
+ const Rt = {
3007
+ flexWrap: "wrap",
3008
+ "& .MuiAlert-message": { flex: "1 1 12rem", minWidth: 0, overflowWrap: "anywhere" },
3009
+ "& .MuiAlert-action": { marginInlineStart: "auto" }
3010
+ };
3011
+ function Ne(e) {
3012
+ const t = e.activeElement;
3013
+ return t === null || t === e.body || t === e.documentElement;
3014
+ }
3015
+ const Ko = /* @__PURE__ */ g.forwardRef(function({ message: t, error: o, focusFallbackRef: n, onRetry: i, retryLabel: s, sx: a, "aria-labelledby": c, ...d }, u) {
3016
+ const m = Ar(), F = g.useId(), y = g.useRef(null), v = Hr(u, y), w = g.useRef(null), S = g.useRef(null), x = g.useRef(!1), I = g.useRef(n);
3017
+ I.current = n;
3018
+ const { focusAfterCommit: $ } = Or({
3019
+ target: () => n?.current ?? null,
3020
+ fallbackRef: y
3021
+ });
3022
+ return g.useEffect(() => {
3023
+ const f = w.current?.textContent?.replace(/\s+/g, " ").trim() ?? "";
3024
+ !f || f === S.current || (S.current = f, m(f, "assertive"));
3025
+ }), g.useEffect(() => {
3026
+ const f = y.current;
3027
+ f && Ne(f.ownerDocument) && f.focus();
3028
+ }, []), g.useLayoutEffect(
3029
+ () => () => {
3030
+ if (!x.current) return;
3031
+ const f = y.current?.ownerDocument ?? (typeof document > "u" ? void 0 : document);
3032
+ queueMicrotask(() => {
3033
+ const M = I.current?.current;
3034
+ f && M?.isConnected && Ne(f) && M.focus();
3035
+ });
3036
+ },
3037
+ []
3038
+ ), g.useEffect(() => {
3039
+ process.env.NODE_ENV !== "production" && i && !s && kr("AsyncOutcomeAlert.retryLabel", "AsyncOutcomeAlert: `onRetry` needs `retryLabel` (the button text); the retry button is not shown without it.");
3040
+ }, [i, s]), /* @__PURE__ */ b(
3041
+ wr,
3042
+ {
3043
+ ...d,
3044
+ ref: v,
3045
+ severity: "error",
3046
+ role: "group",
3047
+ "aria-labelledby": c ?? F,
3048
+ tabIndex: -1,
3049
+ onFocus: (f) => {
3050
+ x.current = !0, d.onFocus?.(f);
3051
+ },
3052
+ onBlur: (f) => {
3053
+ f.currentTarget.contains(f.relatedTarget) || (x.current = !1), d.onBlur?.(f);
3054
+ },
3055
+ action: i && s ? /* @__PURE__ */ b(je, { color: "inherit", size: "small", onClick: () => {
3056
+ $(), i?.();
3057
+ }, children: s }) : void 0,
3058
+ sx: tr(Rt, a),
3059
+ children: /* @__PURE__ */ b(Sr, { id: F, ref: w, children: t })
3060
+ }
3061
+ );
3062
+ });
3063
+ function Xo(e, t) {
3064
+ return e.trim().split(/\s+/).filter(Boolean).slice(0, 2).map((o) => (Array.from(o)[0] ?? "").toUpperCase()).join("");
3065
+ }
3066
+ function zt(e) {
3067
+ return e.direction === "rtl";
3068
+ }
3069
+ function $t(e) {
3070
+ return zt(e) ? -1 : 1;
3071
+ }
3072
+ function Qo(e, t) {
3073
+ const o = -8 * $t(e);
3074
+ return `translateX(${o === 0 ? 0 : o}px)`;
3075
+ }
3076
+ const Ht = 10, Ot = 50;
3077
+ function Dt(e, t, o, n) {
3078
+ const i = t === "horizontal";
3079
+ return e === "ArrowLeft" || e === "ArrowRight" ? i ? e === (o ? "ArrowLeft" : "ArrowRight") ? 1 : -1 : n ? e === "ArrowRight" ? 1 : -1 : 0 : (e === "ArrowUp" || e === "ArrowDown") && (!i || n) ? e === "ArrowDown" ? 1 : -1 : 0;
3080
+ }
3081
+ function qo(e, t) {
3082
+ const {
3083
+ shiftKey: o = !1,
3084
+ orientation: n,
3085
+ growDirection: i,
3086
+ isRtl: s,
3087
+ current: a,
3088
+ min: c,
3089
+ max: d,
3090
+ step: u = Ht,
3091
+ largeStep: m = Ot,
3092
+ crossAxisKeys: F = !1
3093
+ } = t;
3094
+ if (e === "Home") return c;
3095
+ if (e === "End") return d;
3096
+ const y = Dt(e, n, s, F);
3097
+ if (y === 0) return null;
3098
+ const v = i === "forward" ? y : -y, w = a + v * (o ? m : u);
3099
+ return Math.max(c, Math.min(d, w));
3100
+ }
3101
+ const Tt = (e) => e;
3102
+ function Jo(e) {
3103
+ const {
3104
+ initialSize: t,
3105
+ size: o,
3106
+ onSizeChange: n,
3107
+ name: i = "useResizable",
3108
+ stateName: s = "size",
3109
+ disabled: a = !1,
3110
+ axis: c,
3111
+ direction: d = "forward",
3112
+ clamp: u = Tt,
3113
+ onResize: m,
3114
+ onResizeStart: F,
3115
+ onResizeEnd: y,
3116
+ lockBodyCursor: v = !0,
3117
+ dragCursor: w = c === "x" ? "col-resize" : "row-resize"
3118
+ } = e, [S] = g.useState(
3119
+ () => typeof t == "function" ? t() : t
3120
+ ), [x, I] = Dr({
3121
+ controlled: o,
3122
+ default: S,
3123
+ name: i,
3124
+ state: s
3125
+ }), [$, Z] = g.useState(!1), f = g.useRef(0), M = g.useRef(0), O = K((p) => u(p)), we = K((p) => m?.(p)), J = K(() => F?.()), Se = K((p) => y?.(p)), B = K((p, k) => {
3126
+ I(p), n?.(p, k);
3127
+ }), cr = g.useCallback(
3128
+ (p, k = "set") => B(p, k),
3129
+ [B]
3130
+ ), lr = g.useCallback(
3131
+ (p, k = "set") => B(O(p), k),
3132
+ [B, O]
3133
+ );
3134
+ a && $ && Z(!1);
3135
+ const dr = g.useCallback(
3136
+ (p) => {
3137
+ a || (p.preventDefault(), f.current = c === "x" ? p.clientX : p.clientY, M.current = O(x), Z(!0), J());
3138
+ },
3139
+ [c, x, a, O, J]
3140
+ ), ur = g.useCallback(
3141
+ (p) => {
3142
+ if (a) return;
3143
+ const k = p.touches[0];
3144
+ k && (f.current = c === "x" ? k.clientX : k.clientY, M.current = O(x), Z(!0), J());
3145
+ },
3146
+ [c, x, a, O, J]
3147
+ );
3148
+ g.useEffect(() => {
3149
+ if (!$) return;
3150
+ const p = (D) => {
3151
+ const W = D - f.current, gr = d === "reverse" ? -W : W, Re = O(M.current + gr);
3152
+ B(Re, "drag"), we(Re);
3153
+ }, k = (D) => {
3154
+ p(c === "x" ? D.clientX : D.clientY);
3155
+ }, Ee = (D) => {
3156
+ const W = D.touches[0];
3157
+ W && (D.preventDefault(), p(c === "x" ? W.clientX : W.clientY));
3158
+ }, N = () => {
3159
+ Z(!1);
3160
+ };
3161
+ document.addEventListener("mousemove", k), document.addEventListener("mouseup", N), document.addEventListener("touchmove", Ee, { passive: !1 }), document.addEventListener("touchend", N), document.addEventListener("touchcancel", N);
3162
+ let Ae = "", ke = "";
3163
+ return v && (Ae = document.body.style.cursor, ke = document.body.style.userSelect, document.body.style.cursor = w, document.body.style.userSelect = "none"), () => {
3164
+ document.removeEventListener("mousemove", k), document.removeEventListener("mouseup", N), document.removeEventListener("touchmove", Ee), document.removeEventListener("touchend", N), document.removeEventListener("touchcancel", N), v && (document.body.style.cursor = Ae, document.body.style.userSelect = ke);
3165
+ };
3166
+ }, [
3167
+ $,
3168
+ c,
3169
+ d,
3170
+ v,
3171
+ w,
3172
+ O,
3173
+ B,
3174
+ we
3175
+ ]);
3176
+ const Ce = g.useRef(!1);
3177
+ return g.useEffect(() => {
3178
+ Ce.current && !$ && Se(x), Ce.current = $;
3179
+ }, [$, x, Se]), {
3180
+ size: x,
3181
+ isResizing: $,
3182
+ onMouseDown: dr,
3183
+ onTouchStart: ur,
3184
+ setSize: cr,
3185
+ setSizeClamped: lr
3186
+ };
3187
+ }
3188
+ const en = Tr, It = [
3189
+ "a[href]",
3190
+ "area[href]",
3191
+ "button:not([disabled])",
3192
+ 'input:not([disabled]):not([type="hidden"])',
3193
+ "select:not([disabled])",
3194
+ "textarea:not([disabled])",
3195
+ "iframe",
3196
+ "audio[controls]",
3197
+ "video[controls]",
3198
+ '[contenteditable]:not([contenteditable="false"])',
3199
+ '[tabindex]:not([tabindex="-1"])'
3200
+ ].join(",");
3201
+ function rn(e) {
3202
+ if (!e) return null;
3203
+ for (const t of Array.from(e.querySelectorAll(It)))
3204
+ if (t.tabIndex >= 0 && !t.closest('[inert], [aria-hidden="true"]')) return t;
3205
+ return null;
3206
+ }
3207
+ function C(e) {
3208
+ const t = ne[e], o = {
3209
+ zIndex: t.zIndex,
3210
+ boxShadow: t.shadow
3211
+ };
3212
+ return t.level > 0 && (o.position = "relative"), o;
3213
+ }
3214
+ const tn = {
3215
+ /** For sunken/recessed areas like code blocks, wells */
3216
+ sunken: () => C("ground"),
3217
+ /** For standard cards at rest */
3218
+ card: () => C("resting"),
3219
+ /** For hovered/focused cards */
3220
+ cardHover: () => C("raised"),
3221
+ /** For dropdown menus */
3222
+ dropdown: () => C("floating"),
3223
+ /** For sticky headers */
3224
+ header: () => C("sticky"),
3225
+ /** For modal backdrops */
3226
+ backdrop: () => C("overlay"),
3227
+ /** For modal dialogs */
3228
+ modal: () => C("dialog"),
3229
+ /** For popovers */
3230
+ popover: () => C("popover"),
3231
+ /** For tooltips */
3232
+ tooltip: () => C("tooltip")
3233
+ };
3234
+ function h(e, t) {
3235
+ const n = ve[e].scale[t];
3236
+ if (!n) return null;
3237
+ const i = {
3238
+ fontSize: n.size,
3239
+ fontWeight: n.weight,
3240
+ lineHeight: n.lineHeight
3241
+ };
3242
+ return "tracking" in n && (i.letterSpacing = n.tracking), "transform" in n && (i.textTransform = n.transform), i;
3243
+ }
3244
+ const Mt = {
3245
+ // Display typography
3246
+ heroTitle: () => h("display", "large"),
3247
+ pageTitle: () => h("display", "medium"),
3248
+ sectionTitle: () => h("display", "small"),
3249
+ // Heading typography
3250
+ h1: () => h("heading", "h1"),
3251
+ h2: () => h("heading", "h2"),
3252
+ h3: () => h("heading", "h3"),
3253
+ h4: () => h("heading", "h4"),
3254
+ h5: () => h("heading", "h5"),
3255
+ h6: () => h("heading", "h6"),
3256
+ // Body typography
3257
+ bodyLarge: () => h("body", "large"),
3258
+ body: () => h("body", "medium"),
3259
+ bodySmall: () => h("body", "small"),
3260
+ // Label typography
3261
+ labelLarge: () => h("label", "large"),
3262
+ label: () => h("label", "medium"),
3263
+ labelSmall: () => h("label", "small"),
3264
+ // Caption & overline
3265
+ caption: () => h("caption", "default"),
3266
+ captionEmphasis: () => h("caption", "emphasis"),
3267
+ overline: () => h("overline", "default")
3268
+ };
3269
+ function Bt(e, t = "light") {
3270
+ const o = _(e, t);
3271
+ return Ze[e], e === "disabled" ? { color: o, opacity: 0.6 } : { color: o };
3272
+ }
3273
+ const on = {
3274
+ /** Primary importance - CTAs, titles, critical info */
3275
+ primary: (e = "light") => ({
3276
+ color: _("primary", e),
3277
+ fontWeight: 600
3278
+ }),
3279
+ /** Secondary importance - section headers, key info */
3280
+ secondary: (e = "light") => ({
3281
+ color: _("secondary", e),
3282
+ fontWeight: 500
3283
+ }),
3284
+ /** Tertiary - body text, regular content */
3285
+ tertiary: (e = "light") => ({
3286
+ color: _("tertiary", e),
3287
+ fontWeight: 400
3288
+ }),
3289
+ /** Muted - helper text, metadata */
3290
+ muted: (e = "light") => ({
3291
+ color: _("muted", e),
3292
+ fontWeight: 400
3293
+ }),
3294
+ /** Disabled - unavailable items */
3295
+ disabled: (e = "light") => ({
3296
+ color: _("disabled", e),
3297
+ fontWeight: 400,
3298
+ opacity: 0.6,
3299
+ cursor: "not-allowed"
3300
+ })
3301
+ };
3302
+ function Nt(e, t) {
3303
+ return Ur(e, t);
3304
+ }
3305
+ const z = {
3306
+ // Micro spacing (1-2)
3307
+ inline: E.micro[1],
3308
+ // 4px - tight inline elements
3309
+ inlineRelaxed: E.micro[2],
3310
+ // 8px - comfortable inline
3311
+ // Component spacing (3-5)
3312
+ componentTight: E.component[3],
3313
+ // 12px
3314
+ component: E.component[4],
3315
+ // 16px
3316
+ componentRelaxed: E.component[5],
3317
+ // 20px
3318
+ // Section spacing (6-10)
3319
+ sectionTight: E.section[6],
3320
+ // 24px
3321
+ section: E.section[8],
3322
+ // 32px
3323
+ sectionRelaxed: E.section[10],
3324
+ // 40px
3325
+ // Layout spacing (12-32)
3326
+ layoutTight: E.layout[12],
3327
+ // 48px
3328
+ layout: E.layout[16],
3329
+ // 64px
3330
+ layoutRelaxed: E.layout[24],
3331
+ // 96px
3332
+ layoutHero: E.layout[32]
3333
+ // 128px
3334
+ };
3335
+ function nn(e, t) {
3336
+ return Math.round(e * q.sizes[t]);
3337
+ }
3338
+ function sn(e) {
3339
+ return q.icons[e];
3340
+ }
3341
+ function an(e, t = "minimum") {
3342
+ const o = q.touchTargets[t];
3343
+ return Math.max(e, o);
3344
+ }
3345
+ function cn(e) {
3346
+ const t = Xe[e], o = {};
3347
+ return "transition" in t && (o.transition = t.transition), "opacity" in t && t.opacity !== 1 && (o.opacity = t.opacity), "transform" in t && t.transform !== "none" && (o.transform = t.transform), "outline" in t && (o.outline = t.outline, o.outlineOffset = t.outlineOffset), "cursor" in t && (o.cursor = t.cursor), "pointerEvents" in t && (o.pointerEvents = t.pointerEvents), o;
3348
+ }
3349
+ function We(e) {
3350
+ return {
3351
+ outline: `2px solid ${e || r.colors.navy[900]}`,
3352
+ outlineOffset: "2px"
3353
+ };
3354
+ }
3355
+ const ln = {
3356
+ /** Subtle lift effect */
3357
+ lift: {
3358
+ transition: "transform 150ms ease-out, box-shadow 150ms ease-out",
3359
+ "&:hover": {
3360
+ transform: "translateY(-2px)",
3361
+ boxShadow: ne.raised.shadow
3362
+ }
3363
+ },
3364
+ /** Scale effect */
3365
+ scale: {
3366
+ transition: "transform 150ms ease-out",
3367
+ "&:hover": {
3368
+ transform: "scale(1.02)"
3369
+ }
3370
+ },
3371
+ /** Highlight effect */
3372
+ highlight: {
3373
+ transition: "background-color 150ms ease-out",
3374
+ "&:hover": {
3375
+ backgroundColor: "rgba(0, 0, 0, 0.04)"
3376
+ }
3377
+ }
3378
+ };
3379
+ function dn(e) {
3380
+ return Ke[e];
3381
+ }
3382
+ function un(e, t = "AA", o = !1) {
3383
+ return t === "AAA" ? o ? e >= 4.5 : e >= 7 : o ? e >= 3 : e >= 4.5;
3384
+ }
3385
+ function gn(e) {
3386
+ const t = {};
3387
+ if (e.elevation && Object.assign(t, C(e.elevation)), e.attention && Object.assign(t, Bt(e.attention)), e.typography) {
3388
+ const o = h(
3389
+ e.typography.category,
3390
+ e.typography.variant
3391
+ );
3392
+ o && Object.assign(t, o);
3393
+ }
3394
+ if (e.spacing) {
3395
+ const o = Nt(e.spacing.category, e.spacing.size);
3396
+ o && (t.gap = o);
3397
+ }
3398
+ return t;
3399
+ }
3400
+ const fn = {
3401
+ /** Card with hover effect */
3402
+ interactiveCard: () => ({
3403
+ ...C("resting"),
3404
+ borderRadius: 12,
3405
+ transition: "transform 150ms ease-out, box-shadow 150ms ease-out",
3406
+ cursor: "pointer",
3407
+ "&:hover": {
3408
+ ...C("raised"),
3409
+ transform: "translateY(-2px)"
3410
+ },
3411
+ "&:focus-visible": We()
3412
+ }),
3413
+ /** Modal dialog */
3414
+ modal: () => ({
3415
+ ...C("dialog"),
3416
+ borderRadius: 16,
3417
+ padding: z.section
3418
+ }),
3419
+ /** Dropdown menu */
3420
+ dropdown: () => ({
3421
+ ...C("floating"),
3422
+ borderRadius: 8,
3423
+ padding: z.inline
3424
+ }),
3425
+ /** Tooltip */
3426
+ tooltip: () => ({
3427
+ ...C("tooltip"),
3428
+ borderRadius: 6,
3429
+ padding: `${z.inline}px ${z.inlineRelaxed}px`
3430
+ }),
3431
+ /** Primary button */
3432
+ primaryButton: () => ({
3433
+ ...Mt.label(),
3434
+ padding: `${z.inlineRelaxed}px ${z.component}px`,
3435
+ borderRadius: 9999,
3436
+ fontWeight: 600,
3437
+ transition: "all 150ms ease-out",
3438
+ "&:hover": {
3439
+ transform: "translateY(-1px)"
3440
+ },
3441
+ "&:active": {
3442
+ transform: "scale(0.98)"
3443
+ },
3444
+ "&:focus-visible": We()
3445
+ }),
3446
+ /** Section container */
3447
+ section: () => ({
3448
+ paddingTop: z.section,
3449
+ paddingBottom: z.section,
3450
+ display: "flex",
3451
+ flexDirection: "column",
3452
+ gap: z.componentRelaxed
3453
+ }),
3454
+ /** Page container */
3455
+ page: () => ({
3456
+ maxWidth: 1280,
3457
+ margin: "0 auto",
3458
+ padding: z.section,
3459
+ display: "flex",
3460
+ flexDirection: "column",
3461
+ gap: z.layout
3462
+ })
3463
+ }, pn = {
3464
+ foundations: "Layer 1: Raw design primitives (colors, spacing, typography scales)",
3465
+ tokens: "Layer 2: Semantic mappings of foundations to use cases",
3466
+ components: "Layer 3: UI component specifications",
3467
+ hierarchy: "Layer 4: Visual hierarchy rules for consistent importance",
3468
+ patterns: "Layer 5: Composed solutions for common UI tasks"
3469
+ }, Wt = {
3470
+ "darkMode.colors.indicator.inProgress": ["fg", "bg", "outline"],
3471
+ "darkMode.colors.indicator.running": ["fg", "bg", "outline"],
3472
+ // E-43+: the dark info family sets only its fill; every catalog entry may add an outline.
3473
+ "darkMode.colors.indicator.info": ["fg", "bg", "outline"],
3474
+ "darkMode.colors.indicator.new": ["fg", "bg", "outline"],
3475
+ "darkMode.colors.indicator.updated": ["fg", "bg", "outline"],
3476
+ ...Object.fromEntries(
3477
+ Object.keys(qe.semantic.colors.indicator ?? {}).map((e) => [
3478
+ `semantic.colors.indicator.${e}`,
3479
+ ["outline"]
3480
+ ])
3481
+ )
3482
+ }, Le = /* @__PURE__ */ new Set();
3483
+ function X(e) {
3484
+ return e === null ? "null" : Array.isArray(e) ? "an array" : Y(e) ? "a group" : `a ${typeof e}`;
3485
+ }
3486
+ function P(e, t, o) {
3487
+ if (process.env.NODE_ENV === "production") return;
3488
+ const n = `${e}:${t}`;
3489
+ Le.has(n) || (Le.add(n), console.warn(`[Trinity] Token override "${t}": ${o}`));
3490
+ }
3491
+ function Y(e) {
3492
+ if (e === null || typeof e != "object") return !1;
3493
+ const t = Object.getPrototypeOf(e);
3494
+ return t === Object.prototype || t === null;
3495
+ }
3496
+ function ar(e, t, o) {
3497
+ let n;
3498
+ for (const i of Object.keys(t)) {
3499
+ const s = o ? `${o}.${i}` : i, a = t[i], c = Object.prototype.hasOwnProperty.call(e, i), d = c ? e[i] : void 0;
3500
+ if (a === void 0) {
3501
+ P("undefined", s, "explicit undefined is ignored; omit the key to keep the default");
3502
+ continue;
3503
+ }
3504
+ let u;
3505
+ if (d === void 0)
3506
+ !c && !Wt[o]?.includes(i) && P("unknown", s, "not a key of the token set; the value is kept but nothing reads it"), u = a;
3507
+ else if (Y(d)) {
3508
+ if (!Y(a)) {
3509
+ P("type", s, `expected a group, got ${X(a)}; the override is ignored`);
3510
+ continue;
3511
+ }
3512
+ u = ar(d, a, s);
3513
+ } else if (Array.isArray(d)) {
3514
+ if (!Array.isArray(a)) {
3515
+ P("type", s, `expected an array, got ${X(a)}; the override is ignored`);
3516
+ continue;
3517
+ }
3518
+ u = a;
3519
+ } else if (typeof a != typeof d) {
3520
+ P("type", s, `expected ${X(d)}, got ${X(a)}; the override is ignored`);
3521
+ continue;
3522
+ } else
3523
+ u = a;
3524
+ u !== d && (n ?? (n = { ...e }), n[i] = u);
3525
+ }
3526
+ return n ?? e;
3527
+ }
3528
+ function Lt(e, t) {
3529
+ return t == null ? e : Y(t) ? ar(e, t, "") : (P("type", "(root)", `expected a token group, got ${X(t)}; the overrides are ignored`), e);
3530
+ }
3531
+ function _e(e, t) {
3532
+ let o = e;
3533
+ for (const n of t) {
3534
+ if (!Y(o) || !Object.prototype.hasOwnProperty.call(o, n)) return !1;
3535
+ o = o[n];
3536
+ }
3537
+ return o !== void 0;
3538
+ }
3539
+ function re(e, t) {
3540
+ let o = e;
3541
+ for (const n of t) {
3542
+ if (!Y(o)) return;
3543
+ o = o[n];
3544
+ }
3545
+ return o;
3546
+ }
3547
+ function Fe(e, t, o) {
3548
+ const [n, ...i] = t, s = e, a = i.length === 0 ? o : Fe(s[n], i, o);
3549
+ return a === s[n] ? e : { ...s, [n]: a };
3550
+ }
3551
+ const Q = (e) => ["semantic", "colors", ...e.split(".")], Pe = (e) => ["darkMode", "colors", ...e.split(".")];
3552
+ function _t() {
3553
+ return [
3554
+ ...Je.map(
3555
+ ([e, t]) => [["component", ...e.split(".")], Q(t)]
3556
+ ),
3557
+ ...ie.map(([e, t]) => [Q(e), Q(t)]),
3558
+ ...fe.map(([e, t]) => [Pe(e), Pe(t)])
3559
+ ];
3560
+ }
3561
+ function mn(e) {
3562
+ const t = qe;
3563
+ if (e == null || e === t) return t;
3564
+ let o = Lt(t, e);
3565
+ if (o === t) return t;
3566
+ for (const [n, i] of _t()) {
3567
+ if (_e(e, n)) continue;
3568
+ const s = re(o, i), a = re(o, n);
3569
+ typeof s != "string" || typeof a != "string" || s !== a && (o = Fe(o, n, s));
3570
+ }
3571
+ for (const [n, i, s] of nt) {
3572
+ const a = Q(n);
3573
+ if (_e(e, a)) continue;
3574
+ const c = re(o, Q(i)), d = re(o, a);
3575
+ if (typeof c != "string" || typeof d != "string") continue;
3576
+ const u = A(c, s);
3577
+ u !== d && (o = Fe(o, a, u));
3578
+ }
3579
+ return o;
3580
+ }
3581
+ function Pt(e) {
3582
+ const t = e.contentBoxSize, o = Array.isArray(t) ? t[0] : t;
3583
+ return o && typeof o.inlineSize == "number" ? o.inlineSize : e.contentRect.width;
3584
+ }
3585
+ function bn(e = {}) {
3586
+ const { enabled: t = !0 } = e, [o, n] = g.useState(null), [i, s] = g.useState(null);
3587
+ return g.useEffect(() => {
3588
+ if (!t || !o || typeof ResizeObserver > "u") return;
3589
+ const c = new ResizeObserver((d) => {
3590
+ const u = d[d.length - 1];
3591
+ if (!u) return;
3592
+ const m = Pt(u);
3593
+ s((F) => F && F.node === o && F.size === m ? F : { node: o, size: m });
3594
+ });
3595
+ return c.observe(o), () => c.disconnect();
3596
+ }, [t, o]), [t && typeof ResizeObserver < "u" && o && i?.node === o ? i.size : null, n];
3597
+ }
3598
+ export {
3599
+ oo as $,
3600
+ vt as A,
3601
+ Po as B,
3602
+ _o as C,
3603
+ Vo as D,
3604
+ xt as E,
3605
+ Eo as F,
3606
+ Co as G,
3607
+ Zo as H,
3608
+ Yo as I,
3609
+ Go as J,
3610
+ Uo as K,
3611
+ ko as L,
3612
+ he as M,
3613
+ fo as N,
3614
+ Ko as O,
3615
+ Xo as P,
3616
+ or as Q,
3617
+ nr as R,
3618
+ A as S,
3619
+ ao as T,
3620
+ Qo as U,
3621
+ zt as V,
3622
+ Jo as W,
3623
+ qo as X,
3624
+ jo as Y,
3625
+ qe as Z,
3626
+ mn as _,
3627
+ co as a,
3628
+ no as a0,
3629
+ ve as a1,
3630
+ Bo as a2,
3631
+ To as a3,
3632
+ ot as a4,
3633
+ bo as a5,
3634
+ Fo as a6,
3635
+ xo as a7,
3636
+ So as a8,
3637
+ ho as a9,
3638
+ C as aA,
3639
+ We as aB,
3640
+ sn as aC,
3641
+ cn as aD,
3642
+ nn as aE,
3643
+ Nt as aF,
3644
+ h as aG,
3645
+ ln as aH,
3646
+ un as aI,
3647
+ z as aJ,
3648
+ Mt as aK,
3649
+ tn as aL,
3650
+ fn as aM,
3651
+ Zr as aN,
3652
+ io as aO,
3653
+ wo as aa,
3654
+ No as ab,
3655
+ $o as ac,
3656
+ Do as ad,
3657
+ Ho as ae,
3658
+ Oo as af,
3659
+ Ze as ag,
3660
+ Ke as ah,
3661
+ ne as ai,
3662
+ _ as aj,
3663
+ ro as ak,
3664
+ Ur as al,
3665
+ to as am,
3666
+ Kr as an,
3667
+ Xe as ao,
3668
+ q as ap,
3669
+ E as aq,
3670
+ en as ar,
3671
+ rn as as,
3672
+ bn as at,
3673
+ gn as au,
3674
+ pn as av,
3675
+ on as aw,
3676
+ an as ax,
3677
+ Bt as ay,
3678
+ dn as az,
3679
+ j as b,
3680
+ lo as c,
3681
+ uo as d,
3682
+ go as e,
3683
+ po as f,
3684
+ jr as g,
3685
+ so as h,
3686
+ r as i,
3687
+ Gr as j,
3688
+ at as k,
3689
+ st as l,
3690
+ vo as m,
3691
+ mo as n,
3692
+ zo as o,
3693
+ Ao as p,
3694
+ ct as q,
3695
+ yo as r,
3696
+ l as s,
3697
+ tr as t,
3698
+ Io as u,
3699
+ ir as v,
3700
+ Lo as w,
3701
+ Ro as x,
3702
+ Wo as y,
3703
+ Mo as z
3704
+ };