@titan-design/react-ui 0.12.0 → 0.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 (509) hide show
  1. package/README.md +46 -47
  2. package/dist/bodymap.js +768 -701
  3. package/dist/bodymap.js.map +1 -1
  4. package/dist/bodymap.mjs +770 -703
  5. package/dist/bodymap.mjs.map +1 -1
  6. package/dist/index.d.mts +1320 -215
  7. package/dist/index.d.ts +1320 -215
  8. package/dist/index.js +5996 -4498
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +5773 -4357
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/{pages-CvsFqNtx.d.mts → pages-CpW3OB3g.d.mts} +21 -3
  13. package/dist/{pages-B1hqnGIC.d.ts → pages-_3Ajpiqu.d.ts} +21 -3
  14. package/dist/pages.d.mts +1 -1
  15. package/dist/pages.d.ts +1 -1
  16. package/dist/pages.js +1435 -1428
  17. package/dist/pages.js.map +1 -1
  18. package/dist/pages.mjs +1443 -1436
  19. package/dist/pages.mjs.map +1 -1
  20. package/dist/theme/index.d.mts +202 -1042
  21. package/dist/theme/index.d.ts +202 -1042
  22. package/dist/theme/index.js +215 -300
  23. package/dist/theme/index.js.map +1 -1
  24. package/dist/theme/index.mjs +202 -296
  25. package/dist/theme/index.mjs.map +1 -1
  26. package/dist/theme/tokens-css.js +62 -5
  27. package/dist/theme/tokens-css.js.map +1 -1
  28. package/dist/theme/tokens-css.mjs +62 -5
  29. package/dist/theme/tokens-css.mjs.map +1 -1
  30. package/dist/theme/tokens.d.mts +972 -0
  31. package/dist/theme/tokens.d.ts +972 -0
  32. package/dist/theme/tokens.js +904 -0
  33. package/dist/theme/tokens.js.map +1 -0
  34. package/dist/theme/tokens.mjs +880 -0
  35. package/dist/theme/tokens.mjs.map +1 -0
  36. package/docs/audits/2026-09-08-critique-addenda.md +51 -0
  37. package/docs/audits/2026-09-08-library-critique.md +212 -0
  38. package/docs/library-roadmap.md +99 -0
  39. package/package.json +7 -1
  40. package/src/arch/arch-graph.freshness.test.ts +52 -0
  41. package/src/arch/arch-graph.json +5021 -1617
  42. package/src/components/custom/ActiveWork/CoChangeChip.stories.tsx +44 -0
  43. package/src/components/custom/ActiveWork/CoChangeChip.test.tsx +29 -0
  44. package/src/components/custom/ActiveWork/CoChangeChip.tsx +48 -0
  45. package/src/components/custom/ActiveWork/Eyebrow.stories.tsx +25 -0
  46. package/src/components/custom/ActiveWork/Eyebrow.test.tsx +16 -0
  47. package/src/components/custom/ActiveWork/Eyebrow.tsx +26 -0
  48. package/src/components/custom/ActiveWork/FileActivityDetail.stories.tsx +50 -0
  49. package/src/components/custom/ActiveWork/FileActivityDetail.test.tsx +66 -0
  50. package/src/components/custom/ActiveWork/FileActivityDetail.tsx +202 -0
  51. package/src/components/custom/ActiveWork/FileActivityRow.stories.tsx +70 -0
  52. package/src/components/custom/ActiveWork/FileActivityRow.test.tsx +67 -0
  53. package/src/components/custom/ActiveWork/FileActivityRow.tsx +130 -0
  54. package/src/components/custom/ActiveWork/FileHistoryExplorer.stories.tsx +84 -0
  55. package/src/components/custom/ActiveWork/FileHistoryExplorer.test.tsx +99 -0
  56. package/src/components/custom/ActiveWork/FileHistoryExplorer.tsx +138 -0
  57. package/src/components/custom/ActiveWork/FilePathLabel.stories.tsx +39 -0
  58. package/src/components/custom/ActiveWork/FilePathLabel.test.tsx +53 -0
  59. package/src/components/custom/ActiveWork/FilePathLabel.tsx +63 -0
  60. package/src/components/custom/ActiveWork/InitiativeBrief.stories.tsx +50 -0
  61. package/src/components/custom/ActiveWork/InitiativeBrief.test.tsx +62 -0
  62. package/src/components/custom/ActiveWork/InitiativeBrief.tsx +181 -0
  63. package/src/components/custom/ActiveWork/InitiativeCard.stories.tsx +73 -0
  64. package/src/components/custom/ActiveWork/InitiativeCard.test.tsx +68 -0
  65. package/src/components/custom/ActiveWork/InitiativeCard.tsx +136 -0
  66. package/src/components/custom/ActiveWork/InitiativeHeader.stories.tsx +59 -0
  67. package/src/components/custom/ActiveWork/InitiativeHeader.test.tsx +40 -0
  68. package/src/components/custom/ActiveWork/InitiativeHeader.tsx +73 -0
  69. package/src/components/custom/ActiveWork/InitiativeReader.stories.tsx +145 -0
  70. package/src/components/custom/ActiveWork/OpenLoops.stories.tsx +58 -0
  71. package/src/components/custom/ActiveWork/OpenLoops.test.tsx +61 -0
  72. package/src/components/custom/ActiveWork/OpenLoops.tsx +107 -0
  73. package/src/components/custom/ActiveWork/PortfolioOverview.stories.tsx +101 -0
  74. package/src/components/custom/ActiveWork/PortfolioOverview.test.tsx +81 -0
  75. package/src/components/custom/ActiveWork/PortfolioOverview.tsx +83 -0
  76. package/src/components/custom/ActiveWork/README.md +305 -0
  77. package/src/components/custom/ActiveWork/SessionDetail.stories.tsx +71 -0
  78. package/src/components/custom/ActiveWork/SessionDetail.test.tsx +84 -0
  79. package/src/components/custom/ActiveWork/SessionDetail.tsx +180 -0
  80. package/src/components/custom/ActiveWork/SessionList.stories.tsx +69 -0
  81. package/src/components/custom/ActiveWork/SessionList.test.tsx +78 -0
  82. package/src/components/custom/ActiveWork/SessionList.tsx +103 -0
  83. package/src/components/custom/ActiveWork/SessionListItem.stories.tsx +64 -0
  84. package/src/components/custom/ActiveWork/SessionListItem.test.tsx +62 -0
  85. package/src/components/custom/ActiveWork/SessionListItem.tsx +152 -0
  86. package/src/components/custom/ActiveWork/SessionReader.stories.tsx +113 -0
  87. package/src/components/custom/ActiveWork/SeverityLabel.stories.tsx +51 -0
  88. package/src/components/custom/ActiveWork/SeverityLabel.test.tsx +68 -0
  89. package/src/components/custom/ActiveWork/SeverityLabel.tsx +97 -0
  90. package/src/components/custom/ActiveWork/TaskRow.stories.tsx +63 -0
  91. package/src/components/custom/ActiveWork/TaskRow.test.tsx +112 -0
  92. package/src/components/custom/ActiveWork/TaskRow.tsx +176 -0
  93. package/src/components/custom/ActiveWork/TaskTable.stories.tsx +123 -0
  94. package/src/components/custom/ActiveWork/TaskTable.test.tsx +233 -0
  95. package/src/components/custom/ActiveWork/TaskTable.tsx +321 -0
  96. package/src/components/custom/ActiveWork/active-work-depth.test.tsx +102 -0
  97. package/src/components/custom/ActiveWork/file-history-fixture.ts +91 -0
  98. package/src/components/custom/ActiveWork/format-time.test.ts +23 -0
  99. package/src/components/custom/ActiveWork/format-time.ts +32 -0
  100. package/src/components/custom/ActiveWork/index.ts +19 -0
  101. package/src/components/custom/ActiveWork/initiative-fixture.ts +104 -0
  102. package/src/components/custom/ActiveWork/session-fixture.ts +267 -0
  103. package/src/components/custom/ActiveWork/session-linkers.ts +56 -0
  104. package/src/components/custom/ActiveWork/task-list-fixture.ts +97 -0
  105. package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +4 -3
  106. package/src/components/custom/DateTime/DateTime.stories.tsx +2 -1
  107. package/src/components/custom/DateTime/DateTime.test.tsx +3 -1
  108. package/src/components/custom/EmptyState/EmptyState.stories.tsx +22 -9
  109. package/src/components/custom/EmptyState/EmptyState.test.tsx +7 -13
  110. package/src/components/custom/EmptyState/EmptyState.tsx +4 -18
  111. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +4 -3
  112. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
  113. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +4 -3
  114. package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +2 -2
  115. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +8 -4
  116. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +116 -6
  117. package/src/components/custom/Fatigue/LiveFatiguePanel.test.tsx +134 -0
  118. package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +54 -83
  119. package/src/components/custom/Fatigue/README.md +40 -3
  120. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
  121. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +2 -1
  122. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +4 -3
  123. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
  124. package/src/components/custom/Fatigue/fatigue-mock.test.ts +0 -5
  125. package/src/components/custom/Fatigue/fatigue-mock.ts +2 -10
  126. package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -0
  127. package/src/components/custom/Fatigue/index.ts +17 -5
  128. package/src/components/custom/Fatigue/panel-layout.test.ts +149 -0
  129. package/src/components/custom/Fatigue/panel-layout.ts +185 -0
  130. package/src/components/custom/Gauge/Gauge.stories.tsx +2 -2
  131. package/src/components/custom/Gauge/Gauge.test.tsx +1 -1
  132. package/src/components/custom/Gauge/Gauge.tsx +4 -1
  133. package/src/components/custom/Metric/Metric.stories.tsx +10 -1
  134. package/src/components/custom/Metric/Metric.test.tsx +1 -3
  135. package/src/components/custom/Metric/Metric.tsx +5 -20
  136. package/src/components/custom/Prose/MarkdownProse.stories.tsx +88 -0
  137. package/src/components/custom/Prose/MarkdownProse.test.tsx +87 -0
  138. package/src/components/custom/Prose/MarkdownProse.tsx +201 -0
  139. package/src/components/custom/Prose/README.md +58 -0
  140. package/src/components/custom/Prose/index.ts +1 -0
  141. package/src/components/custom/Scatter/Scatter.stories.tsx +46 -8
  142. package/src/components/custom/Scatter/Scatter.test.tsx +2 -2
  143. package/src/components/custom/Scatter/Scatter.tsx +116 -14
  144. package/src/components/custom/Sidebar/Sidebar.stories.tsx +40 -7
  145. package/src/components/custom/Sidebar/Sidebar.test.tsx +5 -1
  146. package/src/components/custom/Sidebar/Sidebar.tsx +16 -33
  147. package/src/components/custom/Table/Table.stories.tsx +98 -15
  148. package/src/components/custom/Table/Table.test.tsx +273 -86
  149. package/src/components/custom/Table/Table.tsx +159 -67
  150. package/src/components/custom/Table/column-fit.test.ts +75 -0
  151. package/src/components/custom/Table/column-fit.ts +116 -0
  152. package/src/components/custom/Table/index.ts +9 -0
  153. package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +8 -6
  154. package/src/components/custom/Treemap/Treemap.stories.tsx +2 -2
  155. package/src/components/custom/Treemap/Treemap.test.tsx +1 -1
  156. package/src/components/custom/Treemap/Treemap.tsx +7 -2
  157. package/src/components/custom/Typography/Typography.stories.tsx +28 -1
  158. package/src/components/custom/Typography/Typography.test.tsx +34 -0
  159. package/src/components/custom/Typography/Typography.tsx +6 -0
  160. package/src/components/custom/Typography/index.ts +1 -8
  161. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +9 -1
  162. package/src/components/custom/Workout/BaseBadge.stories.tsx +19 -7
  163. package/src/components/custom/Workout/BaseBadge.test.tsx +31 -11
  164. package/src/components/custom/Workout/BaseBadge.tsx +3 -0
  165. package/src/components/custom/Workout/BodyMap.stories.tsx +4 -1
  166. package/src/components/custom/Workout/BodyMap.tsx +3 -1
  167. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +16 -4
  168. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +11 -15
  169. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +45 -9
  170. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +10 -8
  171. package/src/components/custom/Workout/CapacityBandChart.test.tsx +24 -51
  172. package/src/components/custom/Workout/CapacityBandChart.tsx +139 -108
  173. package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
  174. package/src/components/custom/Workout/DeviationBar.test.tsx +5 -2
  175. package/src/components/custom/Workout/DeviationBar.tsx +21 -16
  176. package/src/components/custom/Workout/DualVelocityStrip.stories.tsx +182 -0
  177. package/src/components/custom/Workout/DualVelocityStrip.test.tsx +3 -2
  178. package/src/components/custom/Workout/ExerciseCard.stories.tsx +8 -7
  179. package/src/components/custom/Workout/ExerciseCard.test.tsx +13 -3
  180. package/src/components/custom/Workout/ExerciseCard.tsx +42 -51
  181. package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +7 -7
  182. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +9 -1
  183. package/src/components/custom/Workout/ExerciseHeading.stories.tsx +8 -8
  184. package/src/components/custom/Workout/ExerciseHeading.tsx +8 -5
  185. package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +6 -4
  186. package/src/components/custom/Workout/ExerciseIndicator.test.tsx +27 -11
  187. package/src/components/custom/Workout/ExerciseIndicator.tsx +14 -15
  188. package/src/components/custom/Workout/FatigueMeter.stories.tsx +5 -5
  189. package/src/components/custom/Workout/InputBar.stories.tsx +4 -5
  190. package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
  191. package/src/components/custom/Workout/IntensityBar.test.tsx +5 -1
  192. package/src/components/custom/Workout/IntensityBar.tsx +4 -2
  193. package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +5 -4
  194. package/src/components/custom/Workout/MesoCard.stories.tsx +4 -1
  195. package/src/components/custom/Workout/MesoCard.test.tsx +7 -18
  196. package/src/components/custom/Workout/MesoCard.tsx +12 -9
  197. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
  198. package/src/components/custom/Workout/MesoProgressBar.test.tsx +18 -11
  199. package/src/components/custom/Workout/MesoProgressBar.tsx +15 -13
  200. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +2 -1
  201. package/src/components/custom/Workout/MesoStatusCard.test.tsx +14 -44
  202. package/src/components/custom/Workout/MesoStatusCard.tsx +9 -23
  203. package/src/components/custom/Workout/MetricTiles.stories.tsx +3 -2
  204. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +2 -8
  205. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +23 -31
  206. package/src/components/custom/Workout/MuscleGroupChip.tsx +28 -67
  207. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +1 -1
  208. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +17 -10
  209. package/src/components/custom/Workout/PlaceholderStrip.tsx +9 -8
  210. package/src/components/custom/Workout/PrBadge.stories.tsx +2 -1
  211. package/src/components/custom/Workout/PrBadge.test.tsx +3 -9
  212. package/src/components/custom/Workout/PrBadge.tsx +13 -17
  213. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +4 -1
  214. package/src/components/custom/Workout/PrHistoryModal.test.tsx +13 -36
  215. package/src/components/custom/Workout/PrHistoryModal.tsx +8 -4
  216. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +6 -1
  217. package/src/components/custom/Workout/README.md +12 -7
  218. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +3 -2
  219. package/src/components/custom/Workout/ReadinessCheck.test.tsx +12 -18
  220. package/src/components/custom/Workout/ReadinessCheck.tsx +19 -3
  221. package/src/components/custom/Workout/RestTimer.stories.tsx +3 -2
  222. package/src/components/custom/Workout/ScheduleTiles.stories.tsx +3 -2
  223. package/src/components/custom/Workout/ScheduleTiles.test.tsx +3 -4
  224. package/src/components/custom/Workout/ScheduleTiles.tsx +4 -7
  225. package/src/components/custom/Workout/SegmentedBar.stories.tsx +5 -5
  226. package/src/components/custom/Workout/SegmentedBar.tsx +6 -2
  227. package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +5 -5
  228. package/src/components/custom/Workout/SessionHeader.stories.tsx +6 -6
  229. package/src/components/custom/Workout/SessionHeader.tsx +12 -12
  230. package/src/components/custom/Workout/SessionRail.stories.tsx +12 -11
  231. package/src/components/custom/Workout/SessionRail.tsx +7 -9
  232. package/src/components/custom/Workout/SetBar.stories.tsx +10 -6
  233. package/src/components/custom/Workout/SetBar.test.tsx +49 -4
  234. package/src/components/custom/Workout/SetBar.tsx +38 -12
  235. package/src/components/custom/Workout/SetRow.stories.tsx +3 -2
  236. package/src/components/custom/Workout/SetRow.test.tsx +16 -2
  237. package/src/components/custom/Workout/SetRow.tsx +61 -23
  238. package/src/components/custom/Workout/SetStrip.stories.tsx +60 -5
  239. package/src/components/custom/Workout/SetStrip.test.tsx +25 -0
  240. package/src/components/custom/Workout/SetStrip.tsx +24 -4
  241. package/src/components/custom/Workout/SetTableHeader.stories.tsx +6 -6
  242. package/src/components/custom/Workout/SetTableHeader.tsx +9 -12
  243. package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +7 -7
  244. package/src/components/custom/Workout/SetsRepsLoad.tsx +3 -5
  245. package/src/components/custom/Workout/Sparkline.stories.tsx +1 -1
  246. package/src/components/custom/Workout/Sparkline.test.tsx +37 -19
  247. package/src/components/custom/Workout/Sparkline.tsx +14 -18
  248. package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
  249. package/src/components/custom/Workout/StatusDot.test.tsx +44 -5
  250. package/src/components/custom/Workout/StatusDot.tsx +93 -63
  251. package/src/components/custom/Workout/StatusPill.stories.tsx +1 -1
  252. package/src/components/custom/Workout/StatusPill.test.tsx +6 -15
  253. package/src/components/custom/Workout/StatusPill.tsx +27 -38
  254. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +9 -3
  255. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +15 -37
  256. package/src/components/custom/Workout/StrengthTrendChart.tsx +31 -30
  257. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +27 -64
  258. package/src/components/custom/Workout/SupersetWrapper.test.tsx +16 -14
  259. package/src/components/custom/Workout/SupersetWrapper.tsx +17 -21
  260. package/src/components/custom/Workout/TempoDisplay.stories.tsx +22 -7
  261. package/src/components/custom/Workout/TempoDisplay.test.tsx +18 -4
  262. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +9 -1
  263. package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +4 -1
  264. package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +7 -4
  265. package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +4 -1
  266. package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +4 -1
  267. package/src/components/custom/Workout/VelocityStrip.stories.tsx +12 -6
  268. package/src/components/custom/Workout/VelocityStrip.tsx +3 -0
  269. package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +6 -7
  270. package/src/components/custom/Workout/VolumeLandmarkBar.tsx +15 -6
  271. package/src/components/custom/Workout/WeekRow.stories.tsx +4 -1
  272. package/src/components/custom/Workout/WeekRow.test.tsx +18 -15
  273. package/src/components/custom/Workout/WeekRow.tsx +23 -16
  274. package/src/components/custom/Workout/WeightBadge.stories.tsx +2 -1
  275. package/src/components/custom/Workout/WeightBadge.test.tsx +50 -19
  276. package/src/components/custom/Workout/WeightBadge.tsx +28 -27
  277. package/src/components/custom/Workout/WorkoutCard.stories.tsx +6 -1
  278. package/src/components/custom/Workout/WorkoutCard.test.tsx +18 -0
  279. package/src/components/custom/Workout/WorkoutCard.tsx +35 -57
  280. package/src/components/custom/Workout/WorkoutPill.stories.tsx +5 -2
  281. package/src/components/custom/Workout/WorkoutPill.test.tsx +39 -7
  282. package/src/components/custom/Workout/WorkoutPill.tsx +88 -57
  283. package/src/components/custom/Workout/ZoneTrack.stories.tsx +7 -6
  284. package/src/components/custom/Workout/ZoneTrack.tsx +10 -9
  285. package/src/components/custom/Workout/index.ts +5 -0
  286. package/src/components/custom/Workout/metricText.stories.tsx +6 -5
  287. package/src/components/custom/Workout/metricText.tsx +4 -0
  288. package/src/components/custom/Workout/setHeadingKit.tsx +207 -26
  289. package/src/components/custom/charts/README.md +61 -0
  290. package/src/components/custom/charts/SetBarChart.test.tsx +30 -1
  291. package/src/components/custom/charts/SetBarChart.tsx +42 -4
  292. package/src/components/custom/charts/SparkBars.stories.tsx +55 -0
  293. package/src/components/custom/charts/SparkBars.test.tsx +69 -0
  294. package/src/components/custom/charts/SparkBars.tsx +85 -0
  295. package/src/components/custom/charts/index.ts +3 -0
  296. package/src/components/custom/index.ts +3 -0
  297. package/src/components/custom/stepper/Stepper.stories.tsx +13 -10
  298. package/src/components/custom/stepper/Stepper.test.tsx +1 -7
  299. package/src/components/custom/stepper/Stepper.tsx +13 -28
  300. package/src/components/icons/icons.stories.tsx +1 -1
  301. package/src/components/icons/icons.tsx +51 -0
  302. package/src/components/shell/AppShell.stories.tsx +150 -0
  303. package/src/components/shell/AppShell.test.tsx +70 -0
  304. package/src/components/shell/AppShell.tsx +90 -0
  305. package/src/components/shell/BrandLockup.stories.tsx +66 -5
  306. package/src/components/shell/BrandLockup.test.tsx +34 -1
  307. package/src/components/shell/BrandLockup.tsx +27 -11
  308. package/src/components/shell/NavItem.stories.tsx +4 -4
  309. package/src/components/shell/NavItem.test.tsx +17 -0
  310. package/src/components/shell/NavItem.tsx +17 -5
  311. package/src/components/shell/README.md +90 -27
  312. package/src/components/shell/SideNav.stories.tsx +38 -7
  313. package/src/components/shell/SideNav.test.tsx +16 -8
  314. package/src/components/shell/SideNav.tsx +17 -17
  315. package/src/components/shell/TopBar.stories.tsx +44 -19
  316. package/src/components/shell/TopBar.test.tsx +34 -12
  317. package/src/components/shell/TopBar.tsx +61 -40
  318. package/src/components/shell/brands.tsx +66 -0
  319. package/src/components/shell/index.ts +9 -8
  320. package/src/components/shell/{DeviceIndicator.stories.tsx → workout/DeviceIndicator.stories.tsx} +2 -2
  321. package/src/components/shell/{DeviceIndicator.tsx → workout/DeviceIndicator.tsx} +2 -2
  322. package/src/components/shell/{DeviceMenu.stories.tsx → workout/DeviceMenu.stories.tsx} +2 -2
  323. package/src/components/shell/{DeviceMenu.tsx → workout/DeviceMenu.tsx} +3 -3
  324. package/src/components/shell/{DeviceRow.stories.tsx → workout/DeviceRow.stories.tsx} +2 -2
  325. package/src/components/shell/{DeviceRow.tsx → workout/DeviceRow.tsx} +3 -3
  326. package/src/components/shell/{SessionStatePill.stories.tsx → workout/SessionStatePill.stories.tsx} +2 -2
  327. package/src/components/shell/{SessionStatePill.tsx → workout/SessionStatePill.tsx} +5 -3
  328. package/src/components/shell/workout/WorkoutShell.stories.tsx +71 -0
  329. package/src/components/shell/{DashboardShell.test.tsx → workout/WorkoutShell.test.tsx} +19 -8
  330. package/src/components/shell/workout/WorkoutShell.tsx +77 -0
  331. package/src/components/shell/workout/WorkoutTopBar.stories.tsx +58 -0
  332. package/src/components/shell/workout/WorkoutTopBar.test.tsx +39 -0
  333. package/src/components/shell/workout/WorkoutTopBar.tsx +52 -0
  334. package/src/components/shell/workout/index.ts +9 -0
  335. package/src/components/shell/workout/workoutNavItems.tsx +16 -0
  336. package/src/components/ui/README.md +110 -0
  337. package/src/components/ui/alert/Alert.stories.tsx +1 -1
  338. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +11 -13
  339. package/src/components/ui/autocomplete/Autocomplete.test.tsx +7 -25
  340. package/src/components/ui/autocomplete/Autocomplete.tsx +21 -28
  341. package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
  342. package/src/components/ui/avatar/Avatar.tsx +2 -10
  343. package/src/components/ui/badge/Badge.stories.tsx +83 -28
  344. package/src/components/ui/badge/Badge.test.tsx +19 -3
  345. package/src/components/ui/badge/Badge.tsx +48 -55
  346. package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  347. package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +4 -16
  348. package/src/components/ui/button/Button.stories.tsx +46 -12
  349. package/src/components/ui/button/Button.tsx +32 -25
  350. package/src/components/ui/card/Card.stories.tsx +90 -94
  351. package/src/components/ui/card/Card.test.tsx +80 -6
  352. package/src/components/ui/card/Card.tsx +150 -203
  353. package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
  354. package/src/components/ui/checkbox/Checkbox.tsx +6 -26
  355. package/src/components/ui/chip/Chip.stories.tsx +37 -13
  356. package/src/components/ui/chip/Chip.test.tsx +10 -6
  357. package/src/components/ui/chip/Chip.tsx +76 -91
  358. package/src/components/ui/collapse/Collapse.stories.tsx +23 -23
  359. package/src/components/ui/collapse/Collapse.tsx +6 -11
  360. package/src/components/ui/data-row/DataRow.stories.tsx +9 -2
  361. package/src/components/ui/data-row/DataRow.test.tsx +5 -15
  362. package/src/components/ui/data-row/DataRow.tsx +18 -7
  363. package/src/components/ui/divider/Divider.stories.tsx +1 -1
  364. package/src/components/ui/divider/Divider.tsx +1 -5
  365. package/src/components/ui/drawer/Drawer.stories.tsx +5 -16
  366. package/src/components/ui/drawer/Drawer.tsx +13 -30
  367. package/src/components/ui/floating-overlay-depth.test.tsx +143 -0
  368. package/src/components/ui/form-field/FormField.stories.tsx +6 -20
  369. package/src/components/ui/form-field/FormField.test.tsx +1 -5
  370. package/src/components/ui/form-field/FormField.tsx +10 -46
  371. package/src/components/ui/help-tip/HelpTip.stories.tsx +8 -19
  372. package/src/components/ui/help-tip/HelpTip.test.tsx +1 -3
  373. package/src/components/ui/help-tip/HelpTip.tsx +21 -22
  374. package/src/components/ui/help-tip/index.ts +7 -1
  375. package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
  376. package/src/components/ui/icon-box/IconBox.test.tsx +1 -7
  377. package/src/components/ui/icon-box/IconBox.tsx +2 -12
  378. package/src/components/ui/indicator/Indicator.stories.tsx +1 -1
  379. package/src/components/ui/indicator/Indicator.tsx +20 -14
  380. package/src/components/ui/input/Input.stories.tsx +3 -11
  381. package/src/components/ui/input/Input.test.tsx +2 -10
  382. package/src/components/ui/input/Input.tsx +10 -25
  383. package/src/components/ui/input/index.ts +7 -1
  384. package/src/components/ui/link/Link.stories.tsx +19 -7
  385. package/src/components/ui/list-item/ListItem.stories.tsx +11 -2
  386. package/src/components/ui/list-item/ListItem.tsx +2 -9
  387. package/src/components/ui/menu/Menu.stories.tsx +21 -15
  388. package/src/components/ui/menu/Menu.test.tsx +2 -11
  389. package/src/components/ui/menu/Menu.tsx +12 -14
  390. package/src/components/ui/menu/index.ts +8 -1
  391. package/src/components/ui/modal/Modal.stories.tsx +2 -2
  392. package/src/components/ui/modal/Modal.tsx +29 -19
  393. package/src/components/ui/pill/Pill.stories.tsx +58 -23
  394. package/src/components/ui/pill/Pill.test.tsx +101 -3
  395. package/src/components/ui/pill/Pill.tsx +164 -49
  396. package/src/components/ui/pill/index.ts +1 -1
  397. package/src/components/ui/popover/Popover.stories.tsx +5 -7
  398. package/src/components/ui/popover/Popover.test.tsx +1 -6
  399. package/src/components/ui/popover/Popover.tsx +20 -15
  400. package/src/components/ui/popover/index.ts +7 -1
  401. package/src/components/ui/progress/Progress.stories.tsx +3 -12
  402. package/src/components/ui/progress/Progress.test.tsx +1 -5
  403. package/src/components/ui/radio/Radio.stories.tsx +42 -21
  404. package/src/components/ui/radio/Radio.test.tsx +6 -2
  405. package/src/components/ui/radio/Radio.tsx +23 -22
  406. package/src/components/ui/section/Section.stories.tsx +5 -14
  407. package/src/components/ui/section/Section.test.tsx +1 -6
  408. package/src/components/ui/section/Section.tsx +1 -3
  409. package/src/components/ui/section/index.ts +1 -5
  410. package/src/components/ui/select/Select.stories.tsx +3 -13
  411. package/src/components/ui/select/Select.test.tsx +2 -11
  412. package/src/components/ui/select/Select.tsx +14 -14
  413. package/src/components/ui/skeleton/Skeleton.stories.tsx +3 -11
  414. package/src/components/ui/skeleton/Skeleton.tsx +3 -14
  415. package/src/components/ui/skeleton/index.ts +1 -7
  416. package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
  417. package/src/components/ui/spinner/Spinner.tsx +1 -4
  418. package/src/components/ui/stack/Stack.stories.tsx +1 -1
  419. package/src/components/ui/stack/Stack.tsx +1 -1
  420. package/src/components/ui/surface/Surface.stories.tsx +17 -5
  421. package/src/components/ui/surface/Surface.test.tsx +88 -28
  422. package/src/components/ui/surface/Surface.tsx +37 -87
  423. package/src/components/ui/surface/SurfaceContext.ts +22 -62
  424. package/src/components/ui/surface/index.ts +8 -0
  425. package/src/components/ui/surface/resolveSurface.ts +98 -0
  426. package/src/components/ui/surface/surface.contract.test.ts +6 -1
  427. package/src/components/ui/switch/Switch.stories.tsx +1 -1
  428. package/src/components/ui/switch/Switch.tsx +7 -6
  429. package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
  430. package/src/components/ui/tabs/Tabs.tsx +7 -22
  431. package/src/components/ui/tabs/index.ts +1 -7
  432. package/src/components/ui/tile/Tile.stories.tsx +1 -1
  433. package/src/components/ui/tile/Tile.tsx +3 -0
  434. package/src/components/ui/toast/Toast.stories.tsx +1 -1
  435. package/src/components/ui/toast/Toast.test.tsx +2 -8
  436. package/src/components/ui/toast/Toast.tsx +43 -53
  437. package/src/components/ui/toast/index.ts +0 -1
  438. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +92 -71
  439. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +3 -18
  440. package/src/components/ui/toolbar-button/ToolbarButton.tsx +25 -43
  441. package/src/components/ui/tooltip/Tooltip.stories.tsx +12 -3
  442. package/src/components/ui/tooltip/Tooltip.test.tsx +21 -3
  443. package/src/components/ui/tooltip/Tooltip.tsx +55 -36
  444. package/src/components/ui/tooltip/index.ts +1 -1
  445. package/src/components/ui/trigger/TriggerSurface.test.tsx +215 -0
  446. package/src/components/ui/trigger/TriggerSurface.tsx +81 -0
  447. package/src/components/ui/trigger/index.ts +2 -0
  448. package/src/stories/PresetShowcase.stories.tsx +100 -47
  449. package/src/test/no-device-internals.test.ts +3 -3
  450. package/src/theme/ChoosingTokens.stories.tsx +48 -0
  451. package/src/theme/ColorPalettes.stories.tsx +62 -45
  452. package/src/theme/ColorPrimitives.stories.tsx +35 -35
  453. package/src/theme/Depth.stories.tsx +132 -65
  454. package/src/theme/DepthCalibration.stories.tsx +24 -22
  455. package/src/theme/ThemeProvider.test.tsx +4 -4
  456. package/src/theme/barrel.ts +7 -6
  457. package/src/theme/color-stories.coverage.test.ts +1 -1
  458. package/src/theme/color-utils.ts +41 -29
  459. package/src/theme/config.completeness.test.ts +1 -1
  460. package/src/theme/config.ts +28 -0
  461. package/src/theme/elevation.test.ts +82 -56
  462. package/src/theme/elevation.ts +77 -561
  463. package/src/theme/global.css +30 -2
  464. package/src/theme/grey-ramp.test.ts +24 -8
  465. package/src/theme/lift.test.ts +39 -0
  466. package/src/theme/lift.ts +102 -0
  467. package/src/theme/materials.test.ts +5 -2
  468. package/src/theme/materials.ts +38 -4
  469. package/src/theme/native-theming-guard.test.ts +5 -5
  470. package/src/theme/presets/apply.ts +4 -0
  471. package/src/theme/presets/audiobook.ts +5 -2
  472. package/src/theme/presets/default.ts +4 -0
  473. package/src/theme/presets/index.ts +14 -1
  474. package/src/theme/presets/types.ts +1 -1
  475. package/src/theme/semantic-contrast.test.ts +13 -4
  476. package/src/theme/status-distinctness.test.ts +66 -0
  477. package/src/theme/surface-planes.test.ts +37 -0
  478. package/src/theme/surface-planes.ts +68 -0
  479. package/src/theme/token-export-guard.test.ts +102 -0
  480. package/src/theme/tokens/primitives.test.ts +15 -7
  481. package/src/theme/tokens/primitives.ts +67 -35
  482. package/src/theme/tokens/semantic.ts +71 -37
  483. package/src/theme/wash-ladder.test.ts +58 -0
  484. package/src/theme/workout-tokens.ts +1 -7
  485. package/src/types/jest-axe.d.ts +2 -6
  486. package/src/types/raw-md.d.ts +5 -0
  487. package/src/utils/colors.ts +4 -4
  488. package/src/utils/form.ts +1 -3
  489. package/src/utils/index.ts +2 -7
  490. package/src/utils/number-format.ts +17 -0
  491. package/src/utils/workout-format.ts +15 -6
  492. package/src/web-jsx/jsx-runtime.ts +1 -5
  493. package/tailwind.config.js +5 -0
  494. package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +0 -151
  495. package/src/components/custom/Workout/RowInventory.stories.tsx +0 -408
  496. package/src/components/custom/Workout/S3FullRail.stories.tsx +0 -46
  497. package/src/components/custom/Workout/S3SessionPace.stories.tsx +0 -95
  498. package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +0 -61
  499. package/src/components/custom/Workout/S3SetTypes.stories.tsx +0 -176
  500. package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +0 -240
  501. package/src/components/shell/DashboardShell.stories.tsx +0 -65
  502. package/src/components/shell/DashboardShell.tsx +0 -75
  503. package/src/components/shell/SessionRailSpecimen.stories.tsx +0 -753
  504. package/src/theme/elevation.stories.tsx +0 -346
  505. package/src/utils/useTheme.ts +0 -72
  506. /package/src/components/shell/{DeviceIndicator.test.tsx → workout/DeviceIndicator.test.tsx} +0 -0
  507. /package/src/components/shell/{DeviceMenu.test.tsx → workout/DeviceMenu.test.tsx} +0 -0
  508. /package/src/components/shell/{DeviceRow.test.tsx → workout/DeviceRow.test.tsx} +0 -0
  509. /package/src/components/shell/{SessionStatePill.test.tsx → workout/SessionStatePill.test.tsx} +0 -0
@@ -0,0 +1,972 @@
1
+ /**
2
+ * Semantic Design Tokens
3
+ *
4
+ * Meaningful tokens following DTCG (Design Tokens Community Group) naming conventions.
5
+ * Pattern: {category}-{intent}-{variant?}-{state?}
6
+ *
7
+ * Categories:
8
+ * - brand-* : Brand colors (primary, secondary, accent)
9
+ * - status-* : Feedback colors (success, error, warning, info)
10
+ * - result-* : Outcome indicators (improve, degrade, inconclusive, neutral)
11
+ * - data-* : Data visualization colors (chart series)
12
+ * - on-* : Text on colored backgrounds
13
+ * - surface-* : Elevated containers (NOT "paper")
14
+ * - background-* : Page backgrounds
15
+ * - text-* : Text colors
16
+ * - border-* : Border colors
17
+ * - interactive-* : Hover/focus/active/disabled states
18
+ */
19
+ /**
20
+ * GREY MAPPING (TD-07.14) — how the old cool scales resolved onto `greyRamp`.
21
+ *
22
+ * Every grey below came off `grey` (pure R=G=B) or `neutral` (cool, R−B
23
+ * down to −26). They were snapped by NEAREST L*, not by matching step numbers,
24
+ * because the two old scales were numbered incompatibly: `grey` ran
25
+ * INVERTED and compressed (0 = #6E6E6E lightest, 900 = #101010 darkest), so
26
+ * `grey[400]` and `greyRamp[400]` have nothing to do with each other.
27
+ *
28
+ * grey 200→800 300→900 400→925 500→950
29
+ * neutral 50→50 100→100 300→200 400→400 500→600 600→700 900→950
30
+ *
31
+ * Surfaces move ΔE 1.9–4.8 — at or near imperceptible. The TEXT roles move
32
+ * further (8.6–12.8), and that is the intended part of the change: they are
33
+ * picking up the warmth the surfaces already had.
34
+ *
35
+ * Light gets its own column because strict L*-nearest collapsed `neutral[50]`
36
+ * and `[100]` onto one step, flattening surface-elevated into surface-raised.
37
+ * Light is still deferred as a design question — there is no `surfaceRampLight`.
38
+ *
39
+ * `border-default`, `-subtle` and `-strong` are GONE, replaced by `hairline-*`.
40
+ * Once the planes became ramp steps, every value dark enough to read as a
41
+ * border was also a plane's fill. Alpha composites instead of colliding.
42
+ *
43
+ * `text-tertiary` on dark is the one role that ignores L*-nearest; see it.
44
+ */
45
+ declare const semanticColorsLight: {
46
+ readonly 'brand-primary': "#FF7900";
47
+ readonly 'brand-primary-light': "#FFA063";
48
+ readonly 'brand-primary-dark': "#DA5F00";
49
+ readonly 'brand-primary-subtle': "rgba(255, 121, 0, 0.08)";
50
+ readonly 'brand-primary-muted': "rgba(255, 121, 0, 0.30)";
51
+ readonly 'brand-primary-strong': "rgba(255, 121, 0, 0.50)";
52
+ readonly 'brand-primary-hover': "#DA5F00";
53
+ readonly 'brand-primary-active': "#B94A00";
54
+ readonly 'brand-secondary': "#307B9B";
55
+ readonly 'brand-secondary-light': "#2697B7";
56
+ readonly 'brand-secondary-dark': "#2A617F";
57
+ readonly 'brand-secondary-subtle': "rgba(48, 123, 155, 0.08)";
58
+ readonly 'brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
59
+ readonly 'brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
60
+ readonly 'brand-secondary-hover': "#2A617F";
61
+ readonly 'brand-secondary-active': "#22465F";
62
+ readonly 'on-brand-primary': "#FFFFFF";
63
+ readonly 'on-brand-secondary': "#FFFFFF";
64
+ readonly 'status-success': "#2ED573";
65
+ readonly 'status-success-light': "#58F69E";
66
+ readonly 'status-success-dark': "#298732";
67
+ readonly 'status-success-subtle': "#E3FFEE";
68
+ readonly 'status-success-muted': "rgba(46, 213, 115, 0.30)";
69
+ readonly 'status-success-strong': "rgba(46, 213, 115, 0.50)";
70
+ readonly 'status-live': "#2ED573";
71
+ readonly 'status-live-muted': "#22A444";
72
+ readonly 'status-error': "#D14343";
73
+ readonly 'status-error-light': "#E05254";
74
+ readonly 'status-error-dark': "#A4221C";
75
+ readonly 'status-error-subtle': "#FFF4F4";
76
+ readonly 'status-error-muted': "rgba(209, 67, 67, 0.30)";
77
+ readonly 'status-error-strong': "rgba(209, 67, 67, 0.50)";
78
+ readonly 'status-error-vivid': "#FF4757";
79
+ readonly 'status-error-vivid-light': "#E05254";
80
+ readonly 'status-error-vivid-dark': "#A4221C";
81
+ readonly 'status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
82
+ readonly 'status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
83
+ readonly 'status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
84
+ readonly 'status-warning': "#F9B415";
85
+ readonly 'status-warning-light': "#FFD352";
86
+ readonly 'status-warning-dark': "#C27400";
87
+ readonly 'status-warning-subtle': "#FFF7DD";
88
+ readonly 'status-warning-muted': "rgba(249, 180, 21, 0.30)";
89
+ readonly 'status-warning-strong': "rgba(249, 180, 21, 0.50)";
90
+ readonly 'status-info': "#2196F3";
91
+ readonly 'status-info-light': "#78C2FF";
92
+ readonly 'status-info-dark': "#1072CB";
93
+ readonly 'status-info-subtle': "#EFF8FF";
94
+ readonly 'status-info-muted': "rgba(33, 150, 243, 0.30)";
95
+ readonly 'status-info-strong': "rgba(33, 150, 243, 0.50)";
96
+ readonly 'on-status-success': "#FFFFFF";
97
+ readonly 'on-status-error': "#FFFFFF";
98
+ readonly 'on-status-warning': "#FFFFFF";
99
+ readonly 'on-status-info': "#FFFFFF";
100
+ readonly 'result-improve': "#4caf50";
101
+ readonly 'result-improve-light': "rgba(76, 175, 80, 0.12)";
102
+ readonly 'result-improve-dark': "#248a24";
103
+ readonly 'result-degrade': "#ef5350";
104
+ readonly 'result-degrade-light': "rgba(239, 83, 80, 0.12)";
105
+ readonly 'result-degrade-dark': "#b30000";
106
+ readonly 'result-inconclusive': "#9E9A97";
107
+ readonly 'result-inconclusive-light': "rgba(158, 154, 151, 0.12)";
108
+ readonly 'result-neutral': "#72716F";
109
+ readonly 'on-result-improve': "#FFFFFF";
110
+ readonly 'on-result-degrade': "#FFFFFF";
111
+ readonly 'on-result-inconclusive': "#FFFFFF";
112
+ readonly 'data-1': "#1965B0";
113
+ readonly 'data-2': "#4EB265";
114
+ readonly 'data-3': "#F7F056";
115
+ readonly 'data-4': "#DC050C";
116
+ readonly 'data-5': "#882E72";
117
+ readonly 'data-6': "#F4A736";
118
+ readonly 'data-7': "#7BAFDE";
119
+ readonly 'data-8': "#90C987";
120
+ readonly 'data-9': "#CAACCB";
121
+ readonly 'data-10': "#EE8026";
122
+ readonly 'text-primary': "#121828";
123
+ readonly 'text-secondary': "#65748B";
124
+ readonly 'text-tertiary': "#A29F9D";
125
+ readonly 'text-disabled': "rgba(55, 65, 81, 0.48)";
126
+ readonly 'text-inverse': "#FFFFFF";
127
+ readonly 'text-link': "#1072CB";
128
+ readonly 'text-link-hover': "#135AA8";
129
+ readonly 'surface-base': "#FFFFFF";
130
+ readonly 'surface-elevated': "#F9F6F3";
131
+ readonly 'surface-raised': "#EDEAE7";
132
+ readonly 'surface-overlay': "#FFFFFF";
133
+ readonly 'surface-input': "#F9F6F3";
134
+ readonly 'background-base': "#EBEBEB";
135
+ readonly 'background-default': "#FFFFFF";
136
+ readonly 'background-subtle': "#F9F6F3";
137
+ readonly 'background-frame': "#A29F9D";
138
+ readonly 'border-prominent': "#A29F9D";
139
+ readonly 'border-focus': "#1072CB";
140
+ readonly 'border-input': "#D4D1CE";
141
+ readonly 'border-input-hover': "#A29F9D";
142
+ readonly 'border-input-focus': "#1072CB";
143
+ readonly 'border-input-error': "#D14343";
144
+ readonly 'hairline-subtle': "rgba(0, 0, 0, 0.06)";
145
+ readonly 'hairline-default': "rgba(0, 0, 0, 0.09)";
146
+ readonly 'hairline-strong': "rgba(0, 0, 0, 0.14)";
147
+ readonly 'interactive-hover': "rgba(55, 65, 81, 0.04)";
148
+ readonly 'interactive-focus': "rgba(55, 65, 81, 0.12)";
149
+ readonly 'interactive-active': "rgba(55, 65, 81, 0.16)";
150
+ readonly 'interactive-selected': "rgba(55, 65, 81, 0.08)";
151
+ readonly 'interactive-disabled': "rgba(55, 65, 81, 0.12)";
152
+ readonly 'interactive-disabled-text': "rgba(55, 65, 81, 0.26)";
153
+ readonly divider: "#E8E9EB";
154
+ readonly 'avatar-background': "#72716F";
155
+ readonly 'avatar-text': "#FFFFFF";
156
+ };
157
+ declare const semanticColorsDark: {
158
+ readonly 'brand-primary': "#FF7900";
159
+ readonly 'brand-primary-light': "#FFA063";
160
+ readonly 'brand-primary-dark': "#DA5F00";
161
+ readonly 'brand-primary-subtle': "rgba(255, 121, 0, 0.12)";
162
+ readonly 'brand-primary-muted': "rgba(255, 121, 0, 0.30)";
163
+ readonly 'brand-primary-strong': "rgba(255, 121, 0, 0.50)";
164
+ readonly 'brand-primary-hover': "#FFA063";
165
+ readonly 'brand-primary-active': "#FFC7A2";
166
+ readonly 'brand-secondary': "#307B9B";
167
+ readonly 'brand-secondary-light': "#2697B7";
168
+ readonly 'brand-secondary-dark': "#2A617F";
169
+ readonly 'brand-secondary-subtle': "rgba(48, 123, 155, 0.12)";
170
+ readonly 'brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
171
+ readonly 'brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
172
+ readonly 'brand-secondary-hover': "#2697B7";
173
+ readonly 'brand-secondary-active': "#01B5D1";
174
+ readonly 'on-brand-primary': "#FFFFFF";
175
+ readonly 'on-brand-secondary': "#FFFFFF";
176
+ readonly 'status-success': "#2ED573";
177
+ readonly 'status-success-light': "#58F69E";
178
+ readonly 'status-success-dark': "#298732";
179
+ readonly 'status-success-subtle': "rgba(46, 213, 115, 0.12)";
180
+ readonly 'status-success-muted': "rgba(46, 213, 115, 0.30)";
181
+ readonly 'status-success-strong': "rgba(46, 213, 115, 0.50)";
182
+ readonly 'status-live': "#2ED573";
183
+ readonly 'status-live-muted': "#22A444";
184
+ readonly 'status-error': "#D14343";
185
+ readonly 'status-error-light': "#E05254";
186
+ readonly 'status-error-dark': "#A4221C";
187
+ readonly 'status-error-subtle': "rgba(209, 67, 67, 0.12)";
188
+ readonly 'status-error-muted': "rgba(209, 67, 67, 0.30)";
189
+ readonly 'status-error-strong': "rgba(209, 67, 67, 0.50)";
190
+ readonly 'status-error-vivid': "#FF4757";
191
+ readonly 'status-error-vivid-light': "#E05254";
192
+ readonly 'status-error-vivid-dark': "#A4221C";
193
+ readonly 'status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
194
+ readonly 'status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
195
+ readonly 'status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
196
+ readonly 'status-warning': "#F9B415";
197
+ readonly 'status-warning-light': "#FFD352";
198
+ readonly 'status-warning-dark': "#C27400";
199
+ readonly 'status-warning-subtle': "rgba(249, 180, 21, 0.12)";
200
+ readonly 'status-warning-muted': "rgba(249, 180, 21, 0.30)";
201
+ readonly 'status-warning-strong': "rgba(249, 180, 21, 0.50)";
202
+ readonly 'status-info': "#2196F3";
203
+ readonly 'status-info-light': "#78C2FF";
204
+ readonly 'status-info-dark': "#1072CB";
205
+ readonly 'status-info-subtle': "rgba(33, 150, 243, 0.12)";
206
+ readonly 'status-info-muted': "rgba(33, 150, 243, 0.30)";
207
+ readonly 'status-info-strong': "rgba(33, 150, 243, 0.50)";
208
+ readonly 'on-status-success': "#FFFFFF";
209
+ readonly 'on-status-error': "#FFFFFF";
210
+ readonly 'on-status-warning': "#FFFFFF";
211
+ readonly 'on-status-info': "#FFFFFF";
212
+ readonly 'result-improve': "#4caf50";
213
+ readonly 'result-improve-light': "rgba(76, 175, 80, 0.16)";
214
+ readonly 'result-improve-dark': "#248a24";
215
+ readonly 'result-degrade': "#ef5350";
216
+ readonly 'result-degrade-light': "rgba(239, 83, 80, 0.16)";
217
+ readonly 'result-degrade-dark': "#b30000";
218
+ readonly 'result-inconclusive': "#9E9A97";
219
+ readonly 'result-inconclusive-light': "rgba(158, 154, 151, 0.16)";
220
+ readonly 'result-neutral': "#A29F9D";
221
+ readonly 'on-result-improve': "#FFFFFF";
222
+ readonly 'on-result-degrade': "#FFFFFF";
223
+ readonly 'on-result-inconclusive': "#FFFFFF";
224
+ readonly 'data-1': "#1965B0";
225
+ readonly 'data-2': "#4EB265";
226
+ readonly 'data-3': "#F7F056";
227
+ readonly 'data-4': "#DC050C";
228
+ readonly 'data-5': "#882E72";
229
+ readonly 'data-6': "#F4A736";
230
+ readonly 'data-7': "#7BAFDE";
231
+ readonly 'data-8': "#90C987";
232
+ readonly 'data-9': "#CAACCB";
233
+ readonly 'data-10': "#EE8026";
234
+ readonly 'text-primary': "#F9F6F3";
235
+ readonly 'text-secondary': "#A29F9D";
236
+ readonly 'text-tertiary': "#888684";
237
+ readonly 'text-disabled': "rgba(255, 255, 255, 0.38)";
238
+ readonly 'text-inverse': "#1C1916";
239
+ readonly 'text-link': "#828DF8";
240
+ readonly 'text-link-hover': "#3CA8FF";
241
+ readonly 'surface-base': "#252321";
242
+ readonly 'surface-elevated': "#2C2A28";
243
+ readonly 'surface-raised': "#31302F";
244
+ readonly 'surface-overlay': "#373635";
245
+ readonly 'surface-input': "#2C2A28";
246
+ readonly 'background-base': "#1C1916";
247
+ readonly 'background-default': "#252321";
248
+ readonly 'background-subtle': "#2C2A28";
249
+ readonly 'background-frame': "#100D0A";
250
+ readonly 'border-prominent': "#424140";
251
+ readonly 'border-focus': "#828DF8";
252
+ readonly 'border-input': "#5A5958";
253
+ readonly 'border-input-hover': "#72716F";
254
+ readonly 'border-input-focus': "#828DF8";
255
+ readonly 'border-input-error': "#E05254";
256
+ readonly 'hairline-subtle': "rgba(255, 255, 255, 0.10)";
257
+ readonly 'hairline-default': "rgba(255, 255, 255, 0.15)";
258
+ readonly 'hairline-strong': "rgba(255, 255, 255, 0.22)";
259
+ readonly 'interactive-hover': "rgba(255, 255, 255, 0.04)";
260
+ readonly 'interactive-focus': "rgba(255, 255, 255, 0.12)";
261
+ readonly 'interactive-active': "rgba(255, 255, 255, 0.16)";
262
+ readonly 'interactive-selected': "rgba(255, 255, 255, 0.08)";
263
+ readonly 'interactive-disabled': "rgba(255, 255, 255, 0.12)";
264
+ readonly 'interactive-disabled-text': "rgba(255, 255, 255, 0.26)";
265
+ readonly divider: "rgba(255, 255, 255, 0.09)";
266
+ readonly 'avatar-background': "#5A5958";
267
+ readonly 'avatar-text': "#FFFFFF";
268
+ };
269
+ declare const semanticTypography: {
270
+ readonly h1: {
271
+ readonly fontFamily: "heading";
272
+ readonly fontSize: "3.5rem";
273
+ readonly fontWeight: 700;
274
+ readonly lineHeight: 1.375;
275
+ };
276
+ readonly h2: {
277
+ readonly fontFamily: "heading";
278
+ readonly fontSize: "3rem";
279
+ readonly fontWeight: 700;
280
+ readonly lineHeight: 1.375;
281
+ };
282
+ readonly h3: {
283
+ readonly fontFamily: "heading";
284
+ readonly fontSize: "2.25rem";
285
+ readonly fontWeight: 700;
286
+ readonly lineHeight: 1.375;
287
+ };
288
+ readonly h4: {
289
+ readonly fontFamily: "heading";
290
+ readonly fontSize: "2rem";
291
+ readonly fontWeight: 700;
292
+ readonly lineHeight: 1.375;
293
+ };
294
+ readonly h5: {
295
+ readonly fontFamily: "heading";
296
+ readonly fontSize: "1.5rem";
297
+ readonly fontWeight: 600;
298
+ readonly lineHeight: 1.375;
299
+ };
300
+ readonly h6: {
301
+ readonly fontFamily: "heading";
302
+ readonly fontSize: "1.125rem";
303
+ readonly fontWeight: 600;
304
+ readonly lineHeight: 1.375;
305
+ };
306
+ readonly body1: {
307
+ readonly fontFamily: "body";
308
+ readonly fontSize: "1rem";
309
+ readonly fontWeight: 400;
310
+ readonly lineHeight: 1.5;
311
+ };
312
+ readonly body2: {
313
+ readonly fontFamily: "body";
314
+ readonly fontSize: "0.875rem";
315
+ readonly fontWeight: 400;
316
+ readonly lineHeight: 1.57;
317
+ };
318
+ readonly subtitle1: {
319
+ readonly fontFamily: "body";
320
+ readonly fontSize: "1rem";
321
+ readonly fontWeight: 500;
322
+ readonly lineHeight: 1.75;
323
+ };
324
+ readonly subtitle2: {
325
+ readonly fontFamily: "body";
326
+ readonly fontSize: "0.875rem";
327
+ readonly fontWeight: 500;
328
+ readonly lineHeight: 1.57;
329
+ };
330
+ readonly caption: {
331
+ readonly fontFamily: "body";
332
+ readonly fontSize: "0.75rem";
333
+ readonly fontWeight: 400;
334
+ readonly lineHeight: 1.66;
335
+ };
336
+ readonly overline: {
337
+ readonly fontFamily: "body";
338
+ readonly fontSize: "0.75rem";
339
+ readonly fontWeight: 600;
340
+ readonly lineHeight: 2.5;
341
+ readonly letterSpacing: "0.5px";
342
+ readonly textTransform: "uppercase";
343
+ };
344
+ readonly button: {
345
+ readonly fontFamily: "sans";
346
+ readonly fontSize: "0.875rem";
347
+ readonly fontWeight: 600;
348
+ readonly lineHeight: 1.75;
349
+ };
350
+ };
351
+ declare const buttonSizes: {
352
+ readonly sm: {
353
+ readonly paddingX: "16px";
354
+ readonly paddingY: "6px";
355
+ readonly fontSize: "0.875rem";
356
+ };
357
+ readonly md: {
358
+ readonly paddingX: "20px";
359
+ readonly paddingY: "8px";
360
+ readonly fontSize: "0.875rem";
361
+ };
362
+ readonly lg: {
363
+ readonly paddingX: "24px";
364
+ readonly paddingY: "11px";
365
+ readonly fontSize: "1rem";
366
+ };
367
+ };
368
+ type ThemeMode = 'light' | 'dark';
369
+ declare function getSemanticColors(mode: ThemeMode): {
370
+ readonly 'brand-primary': "#FF7900";
371
+ readonly 'brand-primary-light': "#FFA063";
372
+ readonly 'brand-primary-dark': "#DA5F00";
373
+ readonly 'brand-primary-subtle': "rgba(255, 121, 0, 0.08)";
374
+ readonly 'brand-primary-muted': "rgba(255, 121, 0, 0.30)";
375
+ readonly 'brand-primary-strong': "rgba(255, 121, 0, 0.50)";
376
+ readonly 'brand-primary-hover': "#DA5F00";
377
+ readonly 'brand-primary-active': "#B94A00";
378
+ readonly 'brand-secondary': "#307B9B";
379
+ readonly 'brand-secondary-light': "#2697B7";
380
+ readonly 'brand-secondary-dark': "#2A617F";
381
+ readonly 'brand-secondary-subtle': "rgba(48, 123, 155, 0.08)";
382
+ readonly 'brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
383
+ readonly 'brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
384
+ readonly 'brand-secondary-hover': "#2A617F";
385
+ readonly 'brand-secondary-active': "#22465F";
386
+ readonly 'on-brand-primary': "#FFFFFF";
387
+ readonly 'on-brand-secondary': "#FFFFFF";
388
+ readonly 'status-success': "#2ED573";
389
+ readonly 'status-success-light': "#58F69E";
390
+ readonly 'status-success-dark': "#298732";
391
+ readonly 'status-success-subtle': "#E3FFEE";
392
+ readonly 'status-success-muted': "rgba(46, 213, 115, 0.30)";
393
+ readonly 'status-success-strong': "rgba(46, 213, 115, 0.50)";
394
+ readonly 'status-live': "#2ED573";
395
+ readonly 'status-live-muted': "#22A444";
396
+ readonly 'status-error': "#D14343";
397
+ readonly 'status-error-light': "#E05254";
398
+ readonly 'status-error-dark': "#A4221C";
399
+ readonly 'status-error-subtle': "#FFF4F4";
400
+ readonly 'status-error-muted': "rgba(209, 67, 67, 0.30)";
401
+ readonly 'status-error-strong': "rgba(209, 67, 67, 0.50)";
402
+ readonly 'status-error-vivid': "#FF4757";
403
+ readonly 'status-error-vivid-light': "#E05254";
404
+ readonly 'status-error-vivid-dark': "#A4221C";
405
+ readonly 'status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
406
+ readonly 'status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
407
+ readonly 'status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
408
+ readonly 'status-warning': "#F9B415";
409
+ readonly 'status-warning-light': "#FFD352";
410
+ readonly 'status-warning-dark': "#C27400";
411
+ readonly 'status-warning-subtle': "#FFF7DD";
412
+ readonly 'status-warning-muted': "rgba(249, 180, 21, 0.30)";
413
+ readonly 'status-warning-strong': "rgba(249, 180, 21, 0.50)";
414
+ readonly 'status-info': "#2196F3";
415
+ readonly 'status-info-light': "#78C2FF";
416
+ readonly 'status-info-dark': "#1072CB";
417
+ readonly 'status-info-subtle': "#EFF8FF";
418
+ readonly 'status-info-muted': "rgba(33, 150, 243, 0.30)";
419
+ readonly 'status-info-strong': "rgba(33, 150, 243, 0.50)";
420
+ readonly 'on-status-success': "#FFFFFF";
421
+ readonly 'on-status-error': "#FFFFFF";
422
+ readonly 'on-status-warning': "#FFFFFF";
423
+ readonly 'on-status-info': "#FFFFFF";
424
+ readonly 'result-improve': "#4caf50";
425
+ readonly 'result-improve-light': "rgba(76, 175, 80, 0.12)";
426
+ readonly 'result-improve-dark': "#248a24";
427
+ readonly 'result-degrade': "#ef5350";
428
+ readonly 'result-degrade-light': "rgba(239, 83, 80, 0.12)";
429
+ readonly 'result-degrade-dark': "#b30000";
430
+ readonly 'result-inconclusive': "#9E9A97";
431
+ readonly 'result-inconclusive-light': "rgba(158, 154, 151, 0.12)";
432
+ readonly 'result-neutral': "#72716F";
433
+ readonly 'on-result-improve': "#FFFFFF";
434
+ readonly 'on-result-degrade': "#FFFFFF";
435
+ readonly 'on-result-inconclusive': "#FFFFFF";
436
+ readonly 'data-1': "#1965B0";
437
+ readonly 'data-2': "#4EB265";
438
+ readonly 'data-3': "#F7F056";
439
+ readonly 'data-4': "#DC050C";
440
+ readonly 'data-5': "#882E72";
441
+ readonly 'data-6': "#F4A736";
442
+ readonly 'data-7': "#7BAFDE";
443
+ readonly 'data-8': "#90C987";
444
+ readonly 'data-9': "#CAACCB";
445
+ readonly 'data-10': "#EE8026";
446
+ readonly 'text-primary': "#121828";
447
+ readonly 'text-secondary': "#65748B";
448
+ readonly 'text-tertiary': "#A29F9D";
449
+ readonly 'text-disabled': "rgba(55, 65, 81, 0.48)";
450
+ readonly 'text-inverse': "#FFFFFF";
451
+ readonly 'text-link': "#1072CB";
452
+ readonly 'text-link-hover': "#135AA8";
453
+ readonly 'surface-base': "#FFFFFF";
454
+ readonly 'surface-elevated': "#F9F6F3";
455
+ readonly 'surface-raised': "#EDEAE7";
456
+ readonly 'surface-overlay': "#FFFFFF";
457
+ readonly 'surface-input': "#F9F6F3";
458
+ readonly 'background-base': "#EBEBEB";
459
+ readonly 'background-default': "#FFFFFF";
460
+ readonly 'background-subtle': "#F9F6F3";
461
+ readonly 'background-frame': "#A29F9D";
462
+ readonly 'border-prominent': "#A29F9D";
463
+ readonly 'border-focus': "#1072CB";
464
+ readonly 'border-input': "#D4D1CE";
465
+ readonly 'border-input-hover': "#A29F9D";
466
+ readonly 'border-input-focus': "#1072CB";
467
+ readonly 'border-input-error': "#D14343";
468
+ readonly 'hairline-subtle': "rgba(0, 0, 0, 0.06)";
469
+ readonly 'hairline-default': "rgba(0, 0, 0, 0.09)";
470
+ readonly 'hairline-strong': "rgba(0, 0, 0, 0.14)";
471
+ readonly 'interactive-hover': "rgba(55, 65, 81, 0.04)";
472
+ readonly 'interactive-focus': "rgba(55, 65, 81, 0.12)";
473
+ readonly 'interactive-active': "rgba(55, 65, 81, 0.16)";
474
+ readonly 'interactive-selected': "rgba(55, 65, 81, 0.08)";
475
+ readonly 'interactive-disabled': "rgba(55, 65, 81, 0.12)";
476
+ readonly 'interactive-disabled-text': "rgba(55, 65, 81, 0.26)";
477
+ readonly divider: "#E8E9EB";
478
+ readonly 'avatar-background': "#72716F";
479
+ readonly 'avatar-text': "#FFFFFF";
480
+ } | {
481
+ readonly 'brand-primary': "#FF7900";
482
+ readonly 'brand-primary-light': "#FFA063";
483
+ readonly 'brand-primary-dark': "#DA5F00";
484
+ readonly 'brand-primary-subtle': "rgba(255, 121, 0, 0.12)";
485
+ readonly 'brand-primary-muted': "rgba(255, 121, 0, 0.30)";
486
+ readonly 'brand-primary-strong': "rgba(255, 121, 0, 0.50)";
487
+ readonly 'brand-primary-hover': "#FFA063";
488
+ readonly 'brand-primary-active': "#FFC7A2";
489
+ readonly 'brand-secondary': "#307B9B";
490
+ readonly 'brand-secondary-light': "#2697B7";
491
+ readonly 'brand-secondary-dark': "#2A617F";
492
+ readonly 'brand-secondary-subtle': "rgba(48, 123, 155, 0.12)";
493
+ readonly 'brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
494
+ readonly 'brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
495
+ readonly 'brand-secondary-hover': "#2697B7";
496
+ readonly 'brand-secondary-active': "#01B5D1";
497
+ readonly 'on-brand-primary': "#FFFFFF";
498
+ readonly 'on-brand-secondary': "#FFFFFF";
499
+ readonly 'status-success': "#2ED573";
500
+ readonly 'status-success-light': "#58F69E";
501
+ readonly 'status-success-dark': "#298732";
502
+ readonly 'status-success-subtle': "rgba(46, 213, 115, 0.12)";
503
+ readonly 'status-success-muted': "rgba(46, 213, 115, 0.30)";
504
+ readonly 'status-success-strong': "rgba(46, 213, 115, 0.50)";
505
+ readonly 'status-live': "#2ED573";
506
+ readonly 'status-live-muted': "#22A444";
507
+ readonly 'status-error': "#D14343";
508
+ readonly 'status-error-light': "#E05254";
509
+ readonly 'status-error-dark': "#A4221C";
510
+ readonly 'status-error-subtle': "rgba(209, 67, 67, 0.12)";
511
+ readonly 'status-error-muted': "rgba(209, 67, 67, 0.30)";
512
+ readonly 'status-error-strong': "rgba(209, 67, 67, 0.50)";
513
+ readonly 'status-error-vivid': "#FF4757";
514
+ readonly 'status-error-vivid-light': "#E05254";
515
+ readonly 'status-error-vivid-dark': "#A4221C";
516
+ readonly 'status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
517
+ readonly 'status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
518
+ readonly 'status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
519
+ readonly 'status-warning': "#F9B415";
520
+ readonly 'status-warning-light': "#FFD352";
521
+ readonly 'status-warning-dark': "#C27400";
522
+ readonly 'status-warning-subtle': "rgba(249, 180, 21, 0.12)";
523
+ readonly 'status-warning-muted': "rgba(249, 180, 21, 0.30)";
524
+ readonly 'status-warning-strong': "rgba(249, 180, 21, 0.50)";
525
+ readonly 'status-info': "#2196F3";
526
+ readonly 'status-info-light': "#78C2FF";
527
+ readonly 'status-info-dark': "#1072CB";
528
+ readonly 'status-info-subtle': "rgba(33, 150, 243, 0.12)";
529
+ readonly 'status-info-muted': "rgba(33, 150, 243, 0.30)";
530
+ readonly 'status-info-strong': "rgba(33, 150, 243, 0.50)";
531
+ readonly 'on-status-success': "#FFFFFF";
532
+ readonly 'on-status-error': "#FFFFFF";
533
+ readonly 'on-status-warning': "#FFFFFF";
534
+ readonly 'on-status-info': "#FFFFFF";
535
+ readonly 'result-improve': "#4caf50";
536
+ readonly 'result-improve-light': "rgba(76, 175, 80, 0.16)";
537
+ readonly 'result-improve-dark': "#248a24";
538
+ readonly 'result-degrade': "#ef5350";
539
+ readonly 'result-degrade-light': "rgba(239, 83, 80, 0.16)";
540
+ readonly 'result-degrade-dark': "#b30000";
541
+ readonly 'result-inconclusive': "#9E9A97";
542
+ readonly 'result-inconclusive-light': "rgba(158, 154, 151, 0.16)";
543
+ readonly 'result-neutral': "#A29F9D";
544
+ readonly 'on-result-improve': "#FFFFFF";
545
+ readonly 'on-result-degrade': "#FFFFFF";
546
+ readonly 'on-result-inconclusive': "#FFFFFF";
547
+ readonly 'data-1': "#1965B0";
548
+ readonly 'data-2': "#4EB265";
549
+ readonly 'data-3': "#F7F056";
550
+ readonly 'data-4': "#DC050C";
551
+ readonly 'data-5': "#882E72";
552
+ readonly 'data-6': "#F4A736";
553
+ readonly 'data-7': "#7BAFDE";
554
+ readonly 'data-8': "#90C987";
555
+ readonly 'data-9': "#CAACCB";
556
+ readonly 'data-10': "#EE8026";
557
+ readonly 'text-primary': "#F9F6F3";
558
+ readonly 'text-secondary': "#A29F9D";
559
+ readonly 'text-tertiary': "#888684";
560
+ readonly 'text-disabled': "rgba(255, 255, 255, 0.38)";
561
+ readonly 'text-inverse': "#1C1916";
562
+ readonly 'text-link': "#828DF8";
563
+ readonly 'text-link-hover': "#3CA8FF";
564
+ readonly 'surface-base': "#252321";
565
+ readonly 'surface-elevated': "#2C2A28";
566
+ readonly 'surface-raised': "#31302F";
567
+ readonly 'surface-overlay': "#373635";
568
+ readonly 'surface-input': "#2C2A28";
569
+ readonly 'background-base': "#1C1916";
570
+ readonly 'background-default': "#252321";
571
+ readonly 'background-subtle': "#2C2A28";
572
+ readonly 'background-frame': "#100D0A";
573
+ readonly 'border-prominent': "#424140";
574
+ readonly 'border-focus': "#828DF8";
575
+ readonly 'border-input': "#5A5958";
576
+ readonly 'border-input-hover': "#72716F";
577
+ readonly 'border-input-focus': "#828DF8";
578
+ readonly 'border-input-error': "#E05254";
579
+ readonly 'hairline-subtle': "rgba(255, 255, 255, 0.10)";
580
+ readonly 'hairline-default': "rgba(255, 255, 255, 0.15)";
581
+ readonly 'hairline-strong': "rgba(255, 255, 255, 0.22)";
582
+ readonly 'interactive-hover': "rgba(255, 255, 255, 0.04)";
583
+ readonly 'interactive-focus': "rgba(255, 255, 255, 0.12)";
584
+ readonly 'interactive-active': "rgba(255, 255, 255, 0.16)";
585
+ readonly 'interactive-selected': "rgba(255, 255, 255, 0.08)";
586
+ readonly 'interactive-disabled': "rgba(255, 255, 255, 0.12)";
587
+ readonly 'interactive-disabled-text': "rgba(255, 255, 255, 0.26)";
588
+ readonly divider: "rgba(255, 255, 255, 0.09)";
589
+ readonly 'avatar-background': "#5A5958";
590
+ readonly 'avatar-text': "#FFFFFF";
591
+ };
592
+
593
+ /**
594
+ * Primitive Design Tokens
595
+ *
596
+ * Raw values with no semantic meaning. These are the foundation of the design system
597
+ * and should rarely be used directly in components. Use semantic tokens instead.
598
+ */
599
+ /**
600
+ * Absolute colour keywords.
601
+ *
602
+ * This used to hold five scales — `blue`, `red`, `redVivid`, `neutral` and
603
+ * `charcoal`. All five are gone (TD-07.14): the greys folded into `greyRamp`
604
+ * below and the chromatics into the OKLCH `primitiveRamps`. What is left has no
605
+ * scale because these three are not colours you tune, they are keywords.
606
+ */
607
+ declare const primitiveColors: {
608
+ readonly white: "#FFFFFF";
609
+ readonly black: "#000000";
610
+ readonly transparent: "transparent";
611
+ };
612
+ /**
613
+ * The vivid alert red: the one chromatic anchor outside the OKLCH ramps.
614
+ *
615
+ * It survived the TD-07.14 fold of the old `redVivid` scale only as the
616
+ * `-rgb`, `-subtle` and glow encodings of `status-error-vivid`, while the token
617
+ * itself was pinned to `red[600]` and collapsed onto `status-error`. Owning it
618
+ * here means the semantic layer references a primitive instead of carrying a
619
+ * literal. The red ramp has no step this saturated, and adding one means
620
+ * regenerating the ramp, so it stays a pin.
621
+ */
622
+ declare const alertRedVivid: "#FF4757";
623
+ /**
624
+ * Unified warm-neutral grey ramp (TD-07.14)
625
+ *
626
+ * The ONE achromatic scale. Regenerate with `scripts/generate-grey-ramp.mjs` —
627
+ * preserve the generator, not just the hexes.
628
+ *
629
+ * The surface planes ARE steps here rather than a parallel object: `850` is
630
+ * overlay, `975` is the bezel. That is the whole point of the ramp. `grey`,
631
+ * `neutral`, `surfaceRampDark` and `backgroundFrameDark` all resolve into it,
632
+ * which is why every plane step below is byte-identical to the value that
633
+ * shipped in v0.10.0 — the surfaces do not move, only their names.
634
+ *
635
+ * TWO THINGS ABOUT THE NUMBERING, both deliberate and both previously re-derived
636
+ * from scratch more than once because they were never written down:
637
+ *
638
+ * 1. `975` sits BELOW the standard grid. `canonL` — the median L* of the seven
639
+ * chromatic `primitiveRamps` at each step — ends at L*10.3, which is step
640
+ * `950`. The bezel is L*3.8, darker than the grid's last rung, so there is
641
+ * simply no step number left for it and `975` extends past the end.
642
+ * 2. `850`/`875` are quarter-steps because overlay/raised/elevated are only
643
+ * ~2.7 L* apart and all three collide on `900` at normal resolution. `800`
644
+ * is a generated bridge between `700` (L*37.9) and overlay (L*22.7) so the
645
+ * spacing stays even across the join.
646
+ *
647
+ * There is no `inset`. It was retired, not renamed: at ΔE 1.10 from `975` it was
648
+ * an imperceptible duplicate of the frame, which is exactly why `<Surface pressed>`
649
+ * (surface − 1) kept collapsing into it. `975` is the floor.
650
+ *
651
+ * Spec, generator and the rejected v1/v2 cuts:
652
+ * sources/design/foundations/warm-grey-ramp/
653
+ */
654
+ declare const greyRamp: {
655
+ readonly 50: "#F9F6F3";
656
+ readonly 100: "#EDEAE7";
657
+ readonly 200: "#D4D1CE";
658
+ readonly 300: "#BDBAB7";
659
+ readonly 400: "#A29F9D";
660
+ readonly 500: "#888684";
661
+ readonly 600: "#72716F";
662
+ readonly 700: "#5A5958";
663
+ readonly 800: "#424140";
664
+ readonly 850: "#373635";
665
+ readonly 875: "#31302F";
666
+ readonly 900: "#2C2A28";
667
+ readonly 925: "#252321";
668
+ readonly 950: "#1C1916";
669
+ readonly 975: "#100D0A";
670
+ };
671
+ /**
672
+ * The surface planes, as ramp steps — the mapping `<Surface level>` resolves through.
673
+ *
674
+ * Ordered darkest -> lightest, which is the order `pressedLevel()` walks.
675
+ */
676
+ declare const SURFACE_PLANE_STEPS: {
677
+ readonly frame: 975;
678
+ readonly background: 950;
679
+ readonly base: 925;
680
+ readonly elevated: 900;
681
+ readonly raised: 875;
682
+ readonly overlay: 850;
683
+ };
684
+ /**
685
+ * Derived tonal ramps (TD-05.09 color foundations)
686
+ *
687
+ * Seven OKLCH-generated hue ramps, 11 perceptual lightness steps each (50 -> 950).
688
+ * Built with hue-torsion + a chroma arc, anchored through existing brand/semantic
689
+ * hexes. `pin` marks the step each ramp flows through its anchor.
690
+ * This is the single source of truth for chromatic hexes — the categorical palette
691
+ * below references these steps rather than duplicating values.
692
+ * See sources/design/foundations.
693
+ */
694
+ declare const primitiveRamps: {
695
+ readonly red: {
696
+ readonly 50: "#FFF4F4";
697
+ readonly 100: "#FFE3E5";
698
+ readonly 200: "#FFC2C5";
699
+ readonly 300: "#FF9A9D";
700
+ readonly 400: "#F77175";
701
+ readonly 500: "#E05254";
702
+ readonly 600: "#D14343";
703
+ readonly 700: "#A4221C";
704
+ readonly 800: "#7E1002";
705
+ readonly 900: "#5A0900";
706
+ readonly 950: "#3D0400";
707
+ };
708
+ readonly orange: {
709
+ readonly 50: "#FFF5ED";
710
+ readonly 100: "#FFE6D4";
711
+ readonly 200: "#FFC7A2";
712
+ readonly 300: "#FFA063";
713
+ readonly 400: "#FF7900";
714
+ readonly 500: "#DA5F00";
715
+ readonly 600: "#B94A00";
716
+ readonly 700: "#983804";
717
+ readonly 800: "#6F290F";
718
+ readonly 900: "#4E1C0C";
719
+ readonly 950: "#331107";
720
+ };
721
+ readonly amber: {
722
+ readonly 50: "#FFF7DD";
723
+ readonly 100: "#FFEAA9";
724
+ readonly 200: "#FFD352";
725
+ readonly 300: "#F9B415";
726
+ readonly 400: "#E08C00";
727
+ readonly 500: "#C27400";
728
+ readonly 600: "#A45E00";
729
+ readonly 700: "#814D14";
730
+ readonly 800: "#5B3A1A";
731
+ readonly 900: "#442503";
732
+ readonly 950: "#301500";
733
+ };
734
+ readonly green: {
735
+ readonly 50: "#E3FFEE";
736
+ readonly 100: "#B5FFD2";
737
+ readonly 200: "#58F69E";
738
+ readonly 300: "#2ED573";
739
+ readonly 400: "#21C05D";
740
+ readonly 500: "#22A444";
741
+ readonly 600: "#298732";
742
+ readonly 700: "#2B6B25";
743
+ readonly 800: "#264D1C";
744
+ readonly 900: "#1B3515";
745
+ readonly 950: "#11220D";
746
+ };
747
+ readonly cyan: {
748
+ readonly 50: "#E6FBFF";
749
+ readonly 100: "#C2F6FF";
750
+ readonly 200: "#62EAFF";
751
+ readonly 300: "#22D3EE";
752
+ readonly 400: "#01B5D1";
753
+ readonly 500: "#2697B7";
754
+ readonly 600: "#307B9B";
755
+ readonly 700: "#2A617F";
756
+ readonly 800: "#22465F";
757
+ readonly 900: "#0B3149";
758
+ readonly 950: "#001F36";
759
+ };
760
+ readonly blue: {
761
+ readonly 50: "#EFF8FF";
762
+ readonly 100: "#D9EFFF";
763
+ readonly 200: "#ACDBFF";
764
+ readonly 300: "#78C2FF";
765
+ readonly 400: "#3CA8FF";
766
+ readonly 500: "#2196F3";
767
+ readonly 600: "#1072CB";
768
+ readonly 700: "#135AA8";
769
+ readonly 800: "#14407E";
770
+ readonly 900: "#112C5A";
771
+ readonly 950: "#091B3C";
772
+ };
773
+ readonly magenta: {
774
+ readonly 50: "#FFF3F9";
775
+ readonly 100: "#FFE2F1";
776
+ readonly 200: "#FFBDE2";
777
+ readonly 300: "#FF8FD5";
778
+ readonly 400: "#ED69C3";
779
+ readonly 500: "#D548AF";
780
+ readonly 600: "#BA2996";
781
+ readonly 700: "#9C0D7A";
782
+ readonly 800: "#77005A";
783
+ readonly 900: "#56003F";
784
+ readonly 950: "#3B0029";
785
+ };
786
+ };
787
+ /**
788
+ * Categorical (qualitative) palette — an ordered, CVD-safe series expressed as
789
+ * references into {@link primitiveRamps} (one source of truth; the palette moves
790
+ * with the ramps).
791
+ *
792
+ * Design: a single canonical hue order (blue, magenta, red, orange, green, cyan,
793
+ * amber), with steps chosen vivid-midtone-first and fanned lighter/darker as the
794
+ * series grows to preserve separation. The sequence is nested-stable — a chart
795
+ * with N series uses the first N colors, and the series index is stable as N
796
+ * changes. Colorblind-safe worst-case deuteranopia/protanopia floor 8 holds
797
+ * through {@link CATEGORICAL_CVD_SAFE_MAX} colors; the 7th is an extended color
798
+ * that should be paired with a legend or other secondary encoding.
799
+ *
800
+ * Two variants: `default` (vivid, sits on neutral/light surfaces, legible under
801
+ * black text) and `dark` (deeper shades legible under white text on a fill). A
802
+ * separate "light" variant was dropped — the vivid `default` picks already clear
803
+ * black-text contrast, so it doubles as the light-context palette.
804
+ */
805
+ declare const categoricalPalette: {
806
+ readonly default: readonly ["#2196F3", "#D548AF", "#E05254", "#FF7900", "#2ED573", "#22D3EE", "#A45E00"];
807
+ readonly dark: readonly ["#1072CB", "#BA2996", "#E05254", "#B94A00", "#264D1C", "#22465F", "#C27400"];
808
+ };
809
+ /** Largest series count that holds the CVD floor without a legend. */
810
+ declare const CATEGORICAL_CVD_SAFE_MAX = 6;
811
+ /**
812
+ * Categorical palette variant.
813
+ * - `default` : vivid; neutral/light surfaces, legible under black text
814
+ * - `dark` : deeper shades, legible under white text on a filled swatch
815
+ */
816
+ type CategoricalVariant = keyof typeof categoricalPalette;
817
+ /**
818
+ * Get a color from the ordered categorical palette by series index.
819
+ * The palette is nested-stable, so the color for a given index does not change
820
+ * with the total series count; `index` simply wraps past the end.
821
+ *
822
+ * @param index - 0-based series index (wraps past the end)
823
+ * @param variant - `default` (black-text / light surfaces) or `dark` (white text)
824
+ * @returns The hex color string
825
+ */
826
+ declare function getCategoricalColor(index: number, variant?: CategoricalVariant): string;
827
+ /**
828
+ * Diverging status scale (BodyMap training-status: under → optimal → over) as
829
+ * references into {@link primitiveRamps}. A true diverging shape — `optimal` is
830
+ * the lightest center, the extremes go darker — so the signal reads in lightness
831
+ * (colorblind-robust; worst-case deut/protanopia min ΔE ~10.9) and the direction
832
+ * reads in the blue↔red axis (the CVD-safe hue pair).
833
+ *
834
+ * Tuned so every stop is dark enough for the fill yet light enough that BLACK
835
+ * text clears 4.5:1 on all five — no per-cell white/black flipping. The value
836
+ * valley is symmetric: the two mid-arms (maintenance / approaching) sit at equal
837
+ * lightness (both ~0.53 relative luminance), the ends darker.
838
+ */
839
+ declare const divergingScale: readonly ["#2196F3", "#22D3EE", "#58F69E", "#F9B415", "#D14343"];
840
+ /**
841
+ * Sequential "effort" scale (low → high intensity: green → yellow → orange → red)
842
+ * as references into {@link primitiveRamps}. A 6-stop ordinal palette; the
843
+ * velocity/RPE strip sub-samples it. Every adjacent pair clears the CVD floor
844
+ * (min deut/protan ΔE ≥ 4.5), and within that the hue walk is kept smooth —
845
+ * the amber-200 → amber-300 → orange-400 run steps the yellow→orange transition
846
+ * gradually rather than lurching. Order encodes magnitude, so it tolerates the
847
+ * green↔red CVD pair. Stops 0–3 take black text; the dark reds take white.
848
+ */
849
+ declare const sequentialEffort: readonly ["#2ED573", "#FFD352", "#F9B415", "#FF7900", "#D14343", "#A4221C"];
850
+ /**
851
+ * Best-contrast text color (black or white) for a solid fill — for labels sitting
852
+ * on categorical/diverging/effort swatches. Uses the WCAG relative-luminance ratio.
853
+ */
854
+ declare function bestTextColor(hex: string): '#000000' | '#FFFFFF';
855
+ /**
856
+ * Discrete rainbow palette for data visualization
857
+ * Based on Paul Tol's color schemes: https://personal.sron.nl/~pault/#fig:scheme_rainbow_discrete
858
+ */
859
+ declare const discreteRainbow: readonly ["#E8ECFB", "#D9CCE3", "#D1BBD7", "#CAACCB", "#BA8DB4", "#AE76A3", "#AA6F9E", "#994F88", "#882E72", "#1965B0", "#437DBF", "#5289C7", "#6195CF", "#7BAFDE", "#4EB265", "#90C987", "#CAE0AB", "#F7F056", "#F7CB45", "#F6C141", "#F4A736", "#F1932D", "#EE8026", "#E8601C", "#E65518", "#DC050C", "#A5170E", "#72190E", "#42150A"];
860
+ /**
861
+ * Get a color from the discrete rainbow palette for a given index and palette size.
862
+ * Colors are optimized for visual distinction at each palette size.
863
+ *
864
+ * @param index - The index of the color in the series (0-based)
865
+ * @param size - The total number of colors needed (1-23)
866
+ * @returns The hex color string
867
+ */
868
+ declare function getDiscreteRainbowColor(index: number, size: number): string;
869
+ declare const primitiveTypography: {
870
+ readonly fontFamilies: {
871
+ readonly sans: readonly ["Inter", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Helvetica", "Arial", "sans-serif"];
872
+ readonly body: readonly ["Nunito Sans", "sans-serif"];
873
+ readonly heading: readonly ["Space Grotesk", "sans-serif"];
874
+ readonly mono: readonly ["SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", "monospace"];
875
+ };
876
+ readonly fontSizes: {
877
+ readonly '2xs': "0.625rem";
878
+ readonly xs: "0.75rem";
879
+ readonly sm: "0.875rem";
880
+ readonly base: "1rem";
881
+ readonly lg: "1.125rem";
882
+ readonly xl: "1.5rem";
883
+ readonly '2xl': "2rem";
884
+ readonly '3xl': "2.25rem";
885
+ readonly '4xl': "3rem";
886
+ readonly '5xl': "3.5rem";
887
+ };
888
+ readonly fontWeights: {
889
+ readonly normal: 400;
890
+ readonly medium: 500;
891
+ readonly semibold: 600;
892
+ readonly bold: 700;
893
+ };
894
+ readonly lineHeights: {
895
+ readonly none: 1;
896
+ readonly tight: 1.375;
897
+ readonly snug: 1.5;
898
+ readonly normal: 1.57;
899
+ readonly relaxed: 1.66;
900
+ readonly loose: 1.75;
901
+ };
902
+ readonly letterSpacing: {
903
+ readonly tighter: "-0.05em";
904
+ readonly tight: "-0.025em";
905
+ readonly normal: "0em";
906
+ readonly wide: "0.025em";
907
+ readonly wider: "0.05em";
908
+ readonly widest: "0.5px";
909
+ };
910
+ };
911
+ declare const primitiveSpacing: {
912
+ readonly 0: "0";
913
+ readonly px: "1px";
914
+ readonly 0.5: "0.125rem";
915
+ readonly 1: "0.25rem";
916
+ readonly 1.5: "0.375rem";
917
+ readonly 2: "0.5rem";
918
+ readonly 2.5: "0.625rem";
919
+ readonly 3: "0.75rem";
920
+ readonly 3.5: "0.875rem";
921
+ readonly 4: "1rem";
922
+ readonly 5: "1.25rem";
923
+ readonly 6: "1.5rem";
924
+ readonly 7: "1.75rem";
925
+ readonly 8: "2rem";
926
+ readonly 9: "2.25rem";
927
+ readonly 10: "2.5rem";
928
+ readonly 11: "2.75rem";
929
+ readonly 12: "3rem";
930
+ readonly 14: "3.5rem";
931
+ readonly 16: "4rem";
932
+ readonly 20: "5rem";
933
+ readonly 24: "6rem";
934
+ readonly 28: "7rem";
935
+ readonly 32: "8rem";
936
+ };
937
+ declare const primitiveBorderRadius: {
938
+ readonly none: "0";
939
+ readonly sm: "4px";
940
+ readonly DEFAULT: "8px";
941
+ readonly md: "8px";
942
+ readonly lg: "12px";
943
+ readonly xl: "16px";
944
+ readonly '2xl': "24px";
945
+ readonly full: "9999px";
946
+ };
947
+ declare const primitiveBreakpoints: {
948
+ readonly xs: 0;
949
+ readonly sm: 600;
950
+ readonly md: 1000;
951
+ readonly lg: 1200;
952
+ readonly xl: 1920;
953
+ };
954
+ declare const primitiveZIndex: {
955
+ readonly hide: -1;
956
+ readonly auto: "auto";
957
+ readonly base: 0;
958
+ readonly docked: 10;
959
+ readonly dropdown: 1000;
960
+ readonly sticky: 1100;
961
+ readonly drawer: 1100;
962
+ readonly banner: 1200;
963
+ readonly appBar: 1200;
964
+ readonly overlay: 1300;
965
+ readonly modal: 1400;
966
+ readonly popover: 1500;
967
+ readonly skipLink: 1600;
968
+ readonly toast: 1700;
969
+ readonly tooltip: 1800;
970
+ };
971
+
972
+ export { CATEGORICAL_CVD_SAFE_MAX, type CategoricalVariant, SURFACE_PLANE_STEPS, type ThemeMode, alertRedVivid, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, getSemanticColors, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort };