@titan-design/react-ui 0.12.1 → 0.14.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 (531) hide show
  1. package/README.md +60 -47
  2. package/dist/bodymap.js +856 -736
  3. package/dist/bodymap.js.map +1 -1
  4. package/dist/bodymap.mjs +858 -738
  5. package/dist/bodymap.mjs.map +1 -1
  6. package/dist/index.d.mts +1431 -237
  7. package/dist/index.d.ts +1431 -237
  8. package/dist/index.js +6506 -4781
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +6280 -4642
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/{pages-B1hqnGIC.d.ts → pages-CsjsUn0G.d.ts} +51 -16
  13. package/dist/{pages-CvsFqNtx.d.mts → pages-ZbT_pD_U.d.mts} +51 -16
  14. package/dist/pages.d.mts +1 -1
  15. package/dist/pages.d.ts +1 -1
  16. package/dist/pages.js +1919 -1937
  17. package/dist/pages.js.map +1 -1
  18. package/dist/pages.mjs +1927 -1945
  19. package/dist/pages.mjs.map +1 -1
  20. package/dist/theme/index.d.mts +225 -140
  21. package/dist/theme/index.d.ts +225 -140
  22. package/dist/theme/index.js +298 -319
  23. package/dist/theme/index.js.map +1 -1
  24. package/dist/theme/index.mjs +283 -315
  25. package/dist/theme/index.mjs.map +1 -1
  26. package/dist/theme/tokens-css.js +145 -24
  27. package/dist/theme/tokens-css.js.map +1 -1
  28. package/dist/theme/tokens-css.mjs +145 -24
  29. package/dist/theme/tokens-css.mjs.map +1 -1
  30. package/dist/theme/tokens.d.mts +128 -11
  31. package/dist/theme/tokens.d.ts +128 -11
  32. package/dist/theme/tokens.js +126 -26
  33. package/dist/theme/tokens.js.map +1 -1
  34. package/dist/theme/tokens.mjs +124 -27
  35. package/dist/theme/tokens.mjs.map +1 -1
  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/docs/render-testing-pattern.md +130 -0
  40. package/package.json +1 -1
  41. package/src/arch/Architecture.stories.tsx +3 -1
  42. package/src/arch/arch-graph.freshness.test.ts +52 -0
  43. package/src/arch/arch-graph.json +4989 -1583
  44. package/src/components/custom/ActiveWork/CoChangeChip.stories.tsx +44 -0
  45. package/src/components/custom/ActiveWork/CoChangeChip.test.tsx +29 -0
  46. package/src/components/custom/ActiveWork/CoChangeChip.tsx +48 -0
  47. package/src/components/custom/ActiveWork/Eyebrow.stories.tsx +25 -0
  48. package/src/components/custom/ActiveWork/Eyebrow.test.tsx +16 -0
  49. package/src/components/custom/ActiveWork/Eyebrow.tsx +26 -0
  50. package/src/components/custom/ActiveWork/FileActivityDetail.stories.tsx +50 -0
  51. package/src/components/custom/ActiveWork/FileActivityDetail.test.tsx +66 -0
  52. package/src/components/custom/ActiveWork/FileActivityDetail.tsx +202 -0
  53. package/src/components/custom/ActiveWork/FileActivityRow.stories.tsx +70 -0
  54. package/src/components/custom/ActiveWork/FileActivityRow.test.tsx +67 -0
  55. package/src/components/custom/ActiveWork/FileActivityRow.tsx +130 -0
  56. package/src/components/custom/ActiveWork/FileHistoryExplorer.stories.tsx +84 -0
  57. package/src/components/custom/ActiveWork/FileHistoryExplorer.test.tsx +99 -0
  58. package/src/components/custom/ActiveWork/FileHistoryExplorer.tsx +138 -0
  59. package/src/components/custom/ActiveWork/FilePathLabel.stories.tsx +39 -0
  60. package/src/components/custom/ActiveWork/FilePathLabel.test.tsx +53 -0
  61. package/src/components/custom/ActiveWork/FilePathLabel.tsx +63 -0
  62. package/src/components/custom/ActiveWork/InitiativeBrief.stories.tsx +50 -0
  63. package/src/components/custom/ActiveWork/InitiativeBrief.test.tsx +62 -0
  64. package/src/components/custom/ActiveWork/InitiativeBrief.tsx +182 -0
  65. package/src/components/custom/ActiveWork/InitiativeCard.stories.tsx +73 -0
  66. package/src/components/custom/ActiveWork/InitiativeCard.test.tsx +68 -0
  67. package/src/components/custom/ActiveWork/InitiativeCard.tsx +136 -0
  68. package/src/components/custom/ActiveWork/InitiativeHeader.stories.tsx +59 -0
  69. package/src/components/custom/ActiveWork/InitiativeHeader.test.tsx +40 -0
  70. package/src/components/custom/ActiveWork/InitiativeHeader.tsx +73 -0
  71. package/src/components/custom/ActiveWork/InitiativeReader.stories.tsx +145 -0
  72. package/src/components/custom/ActiveWork/OpenLoops.stories.tsx +58 -0
  73. package/src/components/custom/ActiveWork/OpenLoops.test.tsx +61 -0
  74. package/src/components/custom/ActiveWork/OpenLoops.tsx +107 -0
  75. package/src/components/custom/ActiveWork/PortfolioOverview.stories.tsx +101 -0
  76. package/src/components/custom/ActiveWork/PortfolioOverview.test.tsx +81 -0
  77. package/src/components/custom/ActiveWork/PortfolioOverview.tsx +83 -0
  78. package/src/components/custom/ActiveWork/README.md +305 -0
  79. package/src/components/custom/ActiveWork/SessionDetail.stories.tsx +71 -0
  80. package/src/components/custom/ActiveWork/SessionDetail.test.tsx +84 -0
  81. package/src/components/custom/ActiveWork/SessionDetail.tsx +180 -0
  82. package/src/components/custom/ActiveWork/SessionList.stories.tsx +69 -0
  83. package/src/components/custom/ActiveWork/SessionList.test.tsx +78 -0
  84. package/src/components/custom/ActiveWork/SessionList.tsx +103 -0
  85. package/src/components/custom/ActiveWork/SessionListItem.stories.tsx +64 -0
  86. package/src/components/custom/ActiveWork/SessionListItem.test.tsx +62 -0
  87. package/src/components/custom/ActiveWork/SessionListItem.tsx +152 -0
  88. package/src/components/custom/ActiveWork/SessionReader.stories.tsx +113 -0
  89. package/src/components/custom/ActiveWork/SeverityLabel.stories.tsx +51 -0
  90. package/src/components/custom/ActiveWork/SeverityLabel.test.tsx +68 -0
  91. package/src/components/custom/ActiveWork/SeverityLabel.tsx +97 -0
  92. package/src/components/custom/ActiveWork/TaskRow.stories.tsx +63 -0
  93. package/src/components/custom/ActiveWork/TaskRow.test.tsx +112 -0
  94. package/src/components/custom/ActiveWork/TaskRow.tsx +176 -0
  95. package/src/components/custom/ActiveWork/TaskTable.stories.tsx +123 -0
  96. package/src/components/custom/ActiveWork/TaskTable.test.tsx +233 -0
  97. package/src/components/custom/ActiveWork/TaskTable.tsx +321 -0
  98. package/src/components/custom/ActiveWork/active-work-depth.test.tsx +102 -0
  99. package/src/components/custom/ActiveWork/file-history-fixture.ts +91 -0
  100. package/src/components/custom/ActiveWork/format-time.test.ts +23 -0
  101. package/src/components/custom/ActiveWork/format-time.ts +32 -0
  102. package/src/components/custom/ActiveWork/index.ts +19 -0
  103. package/src/components/custom/ActiveWork/initiative-fixture.ts +104 -0
  104. package/src/components/custom/ActiveWork/session-fixture.ts +267 -0
  105. package/src/components/custom/ActiveWork/session-linkers.ts +56 -0
  106. package/src/components/custom/ActiveWork/task-list-fixture.ts +97 -0
  107. package/src/components/custom/CircularTimer/CircularTimer.stories.tsx +12 -6
  108. package/src/components/custom/DateTime/DateTime.stories.tsx +2 -1
  109. package/src/components/custom/DateTime/DateTime.test.tsx +3 -1
  110. package/src/components/custom/EmptyState/EmptyState.stories.tsx +22 -9
  111. package/src/components/custom/EmptyState/EmptyState.test.tsx +7 -13
  112. package/src/components/custom/EmptyState/EmptyState.tsx +4 -18
  113. package/src/components/custom/Fatigue/DualGhostSpark.stories.tsx +4 -3
  114. package/src/components/custom/Fatigue/FatigueLights.stories.tsx +2 -2
  115. package/src/components/custom/Fatigue/GhostSpark.stories.tsx +4 -3
  116. package/src/components/custom/Fatigue/LiveFatigueCard.stories.tsx +2 -2
  117. package/src/components/custom/Fatigue/LiveFatigueCard.tsx +8 -4
  118. package/src/components/custom/Fatigue/LiveFatiguePanel.stories.tsx +116 -6
  119. package/src/components/custom/Fatigue/LiveFatiguePanel.test.tsx +134 -0
  120. package/src/components/custom/Fatigue/LiveFatiguePanel.tsx +54 -83
  121. package/src/components/custom/Fatigue/README.md +40 -3
  122. package/src/components/custom/Fatigue/RomProgressionChart.stories.tsx +2 -2
  123. package/src/components/custom/Fatigue/SilverRedPalette.stories.tsx +2 -1
  124. package/src/components/custom/Fatigue/VelocityHero.stories.tsx +4 -3
  125. package/src/components/custom/Fatigue/VerdictHero.stories.tsx +2 -2
  126. package/src/components/custom/Fatigue/fatigue-mock.test.ts +0 -5
  127. package/src/components/custom/Fatigue/fatigue-mock.ts +2 -10
  128. package/src/components/custom/Fatigue/fatigue-tokens.ts +12 -0
  129. package/src/components/custom/Fatigue/index.ts +17 -5
  130. package/src/components/custom/Fatigue/panel-layout.test.ts +149 -0
  131. package/src/components/custom/Fatigue/panel-layout.ts +185 -0
  132. package/src/components/custom/Gauge/Gauge.stories.tsx +6 -3
  133. package/src/components/custom/Gauge/Gauge.test.tsx +1 -1
  134. package/src/components/custom/Gauge/Gauge.tsx +7 -2
  135. package/src/components/custom/Metric/Metric.stories.tsx +10 -1
  136. package/src/components/custom/Metric/Metric.test.tsx +1 -3
  137. package/src/components/custom/Metric/Metric.tsx +5 -20
  138. package/src/components/custom/Prose/MarkdownProse.stories.tsx +88 -0
  139. package/src/components/custom/Prose/MarkdownProse.test.tsx +87 -0
  140. package/src/components/custom/Prose/MarkdownProse.tsx +201 -0
  141. package/src/components/custom/Prose/README.md +58 -0
  142. package/src/components/custom/Prose/index.ts +1 -0
  143. package/src/components/custom/Scatter/Scatter.stories.tsx +55 -14
  144. package/src/components/custom/Scatter/Scatter.test.tsx +2 -2
  145. package/src/components/custom/Scatter/Scatter.tsx +122 -18
  146. package/src/components/custom/Sidebar/Sidebar.stories.tsx +41 -8
  147. package/src/components/custom/Sidebar/Sidebar.test.tsx +5 -1
  148. package/src/components/custom/Sidebar/Sidebar.tsx +16 -33
  149. package/src/components/custom/Table/Table.stories.tsx +99 -16
  150. package/src/components/custom/Table/Table.test.tsx +273 -86
  151. package/src/components/custom/Table/Table.tsx +159 -67
  152. package/src/components/custom/Table/column-fit.test.ts +75 -0
  153. package/src/components/custom/Table/column-fit.ts +116 -0
  154. package/src/components/custom/Table/index.ts +9 -0
  155. package/src/components/custom/TimerReadout/TimerReadout.stories.tsx +8 -6
  156. package/src/components/custom/Treemap/Treemap.stories.tsx +15 -12
  157. package/src/components/custom/Treemap/Treemap.test.tsx +1 -1
  158. package/src/components/custom/Treemap/Treemap.tsx +11 -3
  159. package/src/components/custom/Typography/Typography.stories.tsx +28 -1
  160. package/src/components/custom/Typography/Typography.test.tsx +34 -0
  161. package/src/components/custom/Typography/Typography.tsx +6 -0
  162. package/src/components/custom/Typography/index.ts +1 -8
  163. package/src/components/custom/Workout/ActiveWorkoutPage.stories.tsx +11 -2
  164. package/src/components/custom/Workout/BaseBadge.stories.tsx +27 -11
  165. package/src/components/custom/Workout/BaseBadge.test.tsx +31 -11
  166. package/src/components/custom/Workout/BaseBadge.tsx +6 -2
  167. package/src/components/custom/Workout/BodyMap.stories.tsx +4 -1
  168. package/src/components/custom/Workout/BodyMap.tsx +8 -4
  169. package/src/components/custom/Workout/BodyMapDetailPanel.stories.tsx +28 -6
  170. package/src/components/custom/Workout/BodyMapDetailPanel.test.tsx +11 -15
  171. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +50 -12
  172. package/src/components/custom/Workout/CapacityBandChart.stories.tsx +12 -9
  173. package/src/components/custom/Workout/CapacityBandChart.test.tsx +24 -51
  174. package/src/components/custom/Workout/CapacityBandChart.tsx +144 -111
  175. package/src/components/custom/Workout/DeviationBar.stories.tsx +1 -1
  176. package/src/components/custom/Workout/DeviationBar.test.tsx +10 -4
  177. package/src/components/custom/Workout/DeviationBar.tsx +24 -16
  178. package/src/components/custom/Workout/DualVelocityStrip.stories.tsx +183 -0
  179. package/src/components/custom/Workout/DualVelocityStrip.test.tsx +32 -18
  180. package/src/components/custom/Workout/ExerciseCard.stories.tsx +12 -11
  181. package/src/components/custom/Workout/ExerciseCard.test.tsx +52 -22
  182. package/src/components/custom/Workout/ExerciseCard.tsx +99 -183
  183. package/src/components/custom/Workout/ExerciseCardHeading.stories.tsx +95 -12
  184. package/src/components/custom/Workout/ExerciseCardHeading.test.tsx +189 -1
  185. package/src/components/custom/Workout/ExerciseCardHeading.tsx +167 -18
  186. package/src/components/custom/Workout/ExerciseDetailPage.stories.tsx +9 -1
  187. package/src/components/custom/Workout/ExerciseDetailPage.tsx +3 -2
  188. package/src/components/custom/Workout/ExerciseHeading.stories.tsx +8 -8
  189. package/src/components/custom/Workout/ExerciseHeading.tsx +194 -46
  190. package/src/components/custom/Workout/ExerciseIndicator.stories.tsx +12 -9
  191. package/src/components/custom/Workout/ExerciseIndicator.test.tsx +27 -11
  192. package/src/components/custom/Workout/ExerciseIndicator.tsx +14 -15
  193. package/src/components/custom/Workout/FatigueMeter.stories.tsx +5 -5
  194. package/src/components/custom/Workout/InputBar.stories.tsx +4 -5
  195. package/src/components/custom/Workout/InputBar.tsx +4 -2
  196. package/src/components/custom/Workout/IntensityBar.stories.tsx +1 -1
  197. package/src/components/custom/Workout/IntensityBar.test.tsx +5 -1
  198. package/src/components/custom/Workout/IntensityBar.tsx +8 -3
  199. package/src/components/custom/Workout/LiveAuraFrame.stories.tsx +5 -4
  200. package/src/components/custom/Workout/MesoCard.stories.tsx +4 -1
  201. package/src/components/custom/Workout/MesoCard.test.tsx +7 -18
  202. package/src/components/custom/Workout/MesoCard.tsx +14 -10
  203. package/src/components/custom/Workout/MesoProgressBar.stories.tsx +1 -1
  204. package/src/components/custom/Workout/MesoProgressBar.test.tsx +18 -11
  205. package/src/components/custom/Workout/MesoProgressBar.tsx +15 -13
  206. package/src/components/custom/Workout/MesoStatusCard.stories.tsx +2 -1
  207. package/src/components/custom/Workout/MesoStatusCard.test.tsx +14 -44
  208. package/src/components/custom/Workout/MesoStatusCard.tsx +20 -33
  209. package/src/components/custom/Workout/MetricTiles.stories.tsx +3 -2
  210. package/src/components/custom/Workout/MuscleGroupChip.stories.tsx +2 -8
  211. package/src/components/custom/Workout/MuscleGroupChip.test.tsx +23 -31
  212. package/src/components/custom/Workout/MuscleGroupChip.tsx +28 -67
  213. package/src/components/custom/Workout/PlaceholderStrip.stories.tsx +9 -4
  214. package/src/components/custom/Workout/PlaceholderStrip.test.tsx +17 -10
  215. package/src/components/custom/Workout/PlaceholderStrip.tsx +9 -8
  216. package/src/components/custom/Workout/PrBadge.stories.tsx +2 -1
  217. package/src/components/custom/Workout/PrBadge.test.tsx +3 -9
  218. package/src/components/custom/Workout/PrBadge.tsx +13 -17
  219. package/src/components/custom/Workout/PrHistoryModal.stories.tsx +16 -3
  220. package/src/components/custom/Workout/PrHistoryModal.test.tsx +13 -36
  221. package/src/components/custom/Workout/PrHistoryModal.tsx +8 -4
  222. package/src/components/custom/Workout/ProgramPlanningPage.stories.tsx +6 -1
  223. package/src/components/custom/Workout/README.md +68 -17
  224. package/src/components/custom/Workout/ReadinessCheck.stories.tsx +3 -2
  225. package/src/components/custom/Workout/ReadinessCheck.test.tsx +12 -18
  226. package/src/components/custom/Workout/ReadinessCheck.tsx +22 -4
  227. package/src/components/custom/Workout/RestTimer.stories.tsx +16 -4
  228. package/src/components/custom/Workout/RestTimer.tsx +4 -2
  229. package/src/components/custom/Workout/ScheduleTiles.stories.tsx +3 -2
  230. package/src/components/custom/Workout/ScheduleTiles.test.tsx +3 -4
  231. package/src/components/custom/Workout/ScheduleTiles.tsx +4 -7
  232. package/src/components/custom/Workout/SegmentedBar.stories.tsx +21 -17
  233. package/src/components/custom/Workout/SegmentedBar.tsx +10 -5
  234. package/src/components/custom/Workout/SegmentedProgressBar.stories.tsx +5 -5
  235. package/src/components/custom/Workout/SessionHeader.stories.tsx +6 -6
  236. package/src/components/custom/Workout/SessionHeader.tsx +12 -12
  237. package/src/components/custom/Workout/SessionRail.stories.tsx +12 -11
  238. package/src/components/custom/Workout/SessionRail.tsx +7 -9
  239. package/src/components/custom/Workout/SetBar.stories.tsx +10 -6
  240. package/src/components/custom/Workout/SetBar.test.tsx +49 -4
  241. package/src/components/custom/Workout/SetBar.tsx +38 -12
  242. package/src/components/custom/Workout/SetRow.stories.tsx +3 -2
  243. package/src/components/custom/Workout/SetRow.test.tsx +16 -2
  244. package/src/components/custom/Workout/SetRow.tsx +61 -23
  245. package/src/components/custom/Workout/SetStrip.stories.tsx +63 -7
  246. package/src/components/custom/Workout/SetStrip.test.tsx +25 -0
  247. package/src/components/custom/Workout/SetStrip.tsx +24 -4
  248. package/src/components/custom/Workout/SetTableHeader.stories.tsx +6 -6
  249. package/src/components/custom/Workout/SetTableHeader.tsx +9 -12
  250. package/src/components/custom/Workout/SetsRepsLoad.stories.tsx +7 -7
  251. package/src/components/custom/Workout/SetsRepsLoad.tsx +24 -12
  252. package/src/components/custom/Workout/Sparkline.stories.tsx +14 -11
  253. package/src/components/custom/Workout/Sparkline.test.tsx +37 -19
  254. package/src/components/custom/Workout/Sparkline.tsx +14 -18
  255. package/src/components/custom/Workout/StatusDot.stories.tsx +1 -1
  256. package/src/components/custom/Workout/StatusDot.test.tsx +44 -5
  257. package/src/components/custom/Workout/StatusDot.tsx +93 -63
  258. package/src/components/custom/Workout/StatusPill.stories.tsx +1 -1
  259. package/src/components/custom/Workout/StatusPill.test.tsx +6 -15
  260. package/src/components/custom/Workout/StatusPill.tsx +27 -38
  261. package/src/components/custom/Workout/StrengthTrendChart.stories.tsx +11 -4
  262. package/src/components/custom/Workout/StrengthTrendChart.test.tsx +15 -37
  263. package/src/components/custom/Workout/StrengthTrendChart.tsx +39 -36
  264. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +27 -64
  265. package/src/components/custom/Workout/SupersetWrapper.test.tsx +16 -14
  266. package/src/components/custom/Workout/SupersetWrapper.tsx +17 -21
  267. package/src/components/custom/Workout/TempoDisplay.stories.tsx +26 -10
  268. package/src/components/custom/Workout/TempoDisplay.test.tsx +18 -4
  269. package/src/components/custom/Workout/TempoDisplay.tsx +2 -0
  270. package/src/components/custom/Workout/TrainingStatusPage.stories.tsx +9 -1
  271. package/src/components/custom/Workout/VelocityStrip.compact.stories.tsx +4 -1
  272. package/src/components/custom/Workout/VelocityStrip.dual.stories.tsx +10 -6
  273. package/src/components/custom/Workout/VelocityStrip.expanded.stories.tsx +5 -2
  274. package/src/components/custom/Workout/VelocityStrip.hero.stories.tsx +44 -1
  275. package/src/components/custom/Workout/VelocityStrip.stories.tsx +12 -6
  276. package/src/components/custom/Workout/VelocityStrip.test.tsx +48 -6
  277. package/src/components/custom/Workout/VelocityStrip.tsx +26 -14
  278. package/src/components/custom/Workout/VolumeLandmarkBar.stories.tsx +6 -7
  279. package/src/components/custom/Workout/VolumeLandmarkBar.tsx +15 -6
  280. package/src/components/custom/Workout/WeekRow.stories.tsx +4 -1
  281. package/src/components/custom/Workout/WeekRow.test.tsx +18 -15
  282. package/src/components/custom/Workout/WeekRow.tsx +23 -16
  283. package/src/components/custom/Workout/WeightBadge.stories.tsx +2 -1
  284. package/src/components/custom/Workout/WeightBadge.test.tsx +50 -19
  285. package/src/components/custom/Workout/WeightBadge.tsx +28 -27
  286. package/src/components/custom/Workout/WorkoutCard.stories.tsx +6 -1
  287. package/src/components/custom/Workout/WorkoutCard.test.tsx +18 -0
  288. package/src/components/custom/Workout/WorkoutCard.tsx +35 -57
  289. package/src/components/custom/Workout/WorkoutPill.stories.tsx +5 -2
  290. package/src/components/custom/Workout/WorkoutPill.test.tsx +39 -7
  291. package/src/components/custom/Workout/WorkoutPill.tsx +88 -57
  292. package/src/components/custom/Workout/ZoneTrack.stories.tsx +10 -7
  293. package/src/components/custom/Workout/ZoneTrack.tsx +10 -9
  294. package/src/components/custom/Workout/exerciseRowState.ts +29 -0
  295. package/src/components/custom/Workout/index.ts +17 -2
  296. package/src/components/custom/Workout/metricText.stories.tsx +15 -13
  297. package/src/components/custom/Workout/metricText.tsx +8 -2
  298. package/src/components/custom/Workout/setHeadingKit.tsx +219 -36
  299. package/src/components/custom/Workout/velocity-story-kit.tsx +2 -2
  300. package/src/components/custom/charts/README.md +66 -0
  301. package/src/components/custom/charts/SetBarChart.test.tsx +46 -1
  302. package/src/components/custom/charts/SetBarChart.tsx +56 -9
  303. package/src/components/custom/charts/SparkBars.stories.tsx +55 -0
  304. package/src/components/custom/charts/SparkBars.test.tsx +69 -0
  305. package/src/components/custom/charts/SparkBars.tsx +85 -0
  306. package/src/components/custom/charts/flatBarGeometry.test.ts +41 -0
  307. package/src/components/custom/charts/flatBarGeometry.ts +32 -0
  308. package/src/components/custom/charts/index.ts +3 -0
  309. package/src/components/custom/index.ts +3 -0
  310. package/src/components/custom/stepper/Stepper.stories.tsx +13 -10
  311. package/src/components/custom/stepper/Stepper.test.tsx +1 -7
  312. package/src/components/custom/stepper/Stepper.tsx +21 -34
  313. package/src/components/icons/icons.stories.tsx +1 -1
  314. package/src/components/icons/icons.tsx +51 -0
  315. package/src/components/shell/AppShell.stories.tsx +150 -0
  316. package/src/components/shell/AppShell.test.tsx +70 -0
  317. package/src/components/shell/AppShell.tsx +90 -0
  318. package/src/components/shell/BrandLockup.stories.tsx +66 -5
  319. package/src/components/shell/BrandLockup.test.tsx +34 -1
  320. package/src/components/shell/BrandLockup.tsx +27 -11
  321. package/src/components/shell/NavItem.stories.tsx +4 -4
  322. package/src/components/shell/NavItem.test.tsx +17 -0
  323. package/src/components/shell/NavItem.tsx +17 -5
  324. package/src/components/shell/README.md +89 -26
  325. package/src/components/shell/SideNav.stories.tsx +38 -7
  326. package/src/components/shell/SideNav.test.tsx +16 -8
  327. package/src/components/shell/SideNav.tsx +17 -17
  328. package/src/components/shell/TopBar.stories.tsx +44 -19
  329. package/src/components/shell/TopBar.test.tsx +34 -12
  330. package/src/components/shell/TopBar.tsx +61 -40
  331. package/src/components/shell/brands.tsx +66 -0
  332. package/src/components/shell/index.ts +9 -8
  333. package/src/components/shell/{DeviceIndicator.stories.tsx → workout/DeviceIndicator.stories.tsx} +2 -2
  334. package/src/components/shell/{DeviceIndicator.tsx → workout/DeviceIndicator.tsx} +2 -2
  335. package/src/components/shell/{DeviceMenu.stories.tsx → workout/DeviceMenu.stories.tsx} +2 -2
  336. package/src/components/shell/{DeviceMenu.tsx → workout/DeviceMenu.tsx} +3 -3
  337. package/src/components/shell/{DeviceRow.stories.tsx → workout/DeviceRow.stories.tsx} +2 -2
  338. package/src/components/shell/{DeviceRow.tsx → workout/DeviceRow.tsx} +3 -3
  339. package/src/components/shell/{SessionStatePill.stories.tsx → workout/SessionStatePill.stories.tsx} +2 -2
  340. package/src/components/shell/{SessionStatePill.tsx → workout/SessionStatePill.tsx} +5 -3
  341. package/src/components/shell/workout/WorkoutShell.stories.tsx +71 -0
  342. package/src/components/shell/{DashboardShell.test.tsx → workout/WorkoutShell.test.tsx} +19 -8
  343. package/src/components/shell/workout/WorkoutShell.tsx +77 -0
  344. package/src/components/shell/workout/WorkoutTopBar.stories.tsx +58 -0
  345. package/src/components/shell/workout/WorkoutTopBar.test.tsx +39 -0
  346. package/src/components/shell/workout/WorkoutTopBar.tsx +52 -0
  347. package/src/components/shell/workout/index.ts +9 -0
  348. package/src/components/shell/workout/workoutNavItems.tsx +16 -0
  349. package/src/components/ui/README.md +110 -0
  350. package/src/components/ui/alert/Alert.stories.tsx +15 -5
  351. package/src/components/ui/alert/Alert.tsx +24 -3
  352. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +11 -13
  353. package/src/components/ui/autocomplete/Autocomplete.test.tsx +7 -25
  354. package/src/components/ui/autocomplete/Autocomplete.tsx +21 -28
  355. package/src/components/ui/avatar/Avatar.stories.tsx +1 -1
  356. package/src/components/ui/avatar/Avatar.tsx +2 -10
  357. package/src/components/ui/badge/Badge.stories.tsx +83 -28
  358. package/src/components/ui/badge/Badge.test.tsx +19 -3
  359. package/src/components/ui/badge/Badge.tsx +48 -55
  360. package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +1 -1
  361. package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +4 -16
  362. package/src/components/ui/button/Button.stories.tsx +46 -12
  363. package/src/components/ui/button/Button.tsx +44 -37
  364. package/src/components/ui/card/Card.stories.tsx +90 -94
  365. package/src/components/ui/card/Card.test.tsx +80 -6
  366. package/src/components/ui/card/Card.tsx +150 -203
  367. package/src/components/ui/checkbox/Checkbox.stories.tsx +1 -1
  368. package/src/components/ui/checkbox/Checkbox.tsx +7 -27
  369. package/src/components/ui/chip/Chip.stories.tsx +37 -13
  370. package/src/components/ui/chip/Chip.test.tsx +10 -6
  371. package/src/components/ui/chip/Chip.tsx +76 -91
  372. package/src/components/ui/collapse/Collapse.stories.tsx +23 -23
  373. package/src/components/ui/collapse/Collapse.tsx +6 -11
  374. package/src/components/ui/data-row/DataRow.stories.tsx +14 -3
  375. package/src/components/ui/data-row/DataRow.test.tsx +5 -15
  376. package/src/components/ui/data-row/DataRow.tsx +18 -7
  377. package/src/components/ui/divider/Divider.stories.tsx +1 -1
  378. package/src/components/ui/divider/Divider.tsx +1 -5
  379. package/src/components/ui/drawer/Drawer.stories.tsx +5 -16
  380. package/src/components/ui/drawer/Drawer.tsx +13 -27
  381. package/src/components/ui/floating-overlay-depth.test.tsx +143 -0
  382. package/src/components/ui/form-field/FormField.stories.tsx +6 -20
  383. package/src/components/ui/form-field/FormField.test.tsx +1 -5
  384. package/src/components/ui/form-field/FormField.tsx +10 -46
  385. package/src/components/ui/help-tip/HelpTip.stories.tsx +8 -19
  386. package/src/components/ui/help-tip/HelpTip.test.tsx +1 -3
  387. package/src/components/ui/help-tip/HelpTip.tsx +21 -22
  388. package/src/components/ui/help-tip/index.ts +7 -1
  389. package/src/components/ui/icon-box/IconBox.stories.tsx +1 -1
  390. package/src/components/ui/icon-box/IconBox.test.tsx +1 -7
  391. package/src/components/ui/icon-box/IconBox.tsx +10 -18
  392. package/src/components/ui/indicator/Indicator.stories.tsx +5 -4
  393. package/src/components/ui/indicator/Indicator.tsx +20 -14
  394. package/src/components/ui/input/Input.stories.tsx +3 -11
  395. package/src/components/ui/input/Input.test.tsx +2 -10
  396. package/src/components/ui/input/Input.tsx +10 -25
  397. package/src/components/ui/input/index.ts +7 -1
  398. package/src/components/ui/link/Link.stories.tsx +19 -7
  399. package/src/components/ui/list-item/ListItem.stories.tsx +17 -5
  400. package/src/components/ui/list-item/ListItem.tsx +2 -9
  401. package/src/components/ui/menu/Menu.stories.tsx +21 -15
  402. package/src/components/ui/menu/Menu.test.tsx +2 -11
  403. package/src/components/ui/menu/Menu.tsx +12 -14
  404. package/src/components/ui/menu/index.ts +8 -1
  405. package/src/components/ui/modal/Modal.stories.tsx +2 -2
  406. package/src/components/ui/modal/Modal.tsx +31 -19
  407. package/src/components/ui/pill/Pill.stories.tsx +111 -23
  408. package/src/components/ui/pill/Pill.test.tsx +101 -3
  409. package/src/components/ui/pill/Pill.tsx +168 -49
  410. package/src/components/ui/pill/index.ts +1 -1
  411. package/src/components/ui/popover/Popover.stories.tsx +6 -8
  412. package/src/components/ui/popover/Popover.test.tsx +1 -6
  413. package/src/components/ui/popover/Popover.tsx +20 -15
  414. package/src/components/ui/popover/index.ts +7 -1
  415. package/src/components/ui/progress/Progress.stories.tsx +3 -12
  416. package/src/components/ui/progress/Progress.test.tsx +1 -5
  417. package/src/components/ui/progress/Progress.tsx +9 -6
  418. package/src/components/ui/radio/Radio.stories.tsx +42 -21
  419. package/src/components/ui/radio/Radio.test.tsx +6 -2
  420. package/src/components/ui/radio/Radio.tsx +23 -22
  421. package/src/components/ui/section/Section.stories.tsx +12 -21
  422. package/src/components/ui/section/Section.test.tsx +1 -6
  423. package/src/components/ui/section/Section.tsx +1 -3
  424. package/src/components/ui/section/index.ts +1 -5
  425. package/src/components/ui/select/Select.stories.tsx +3 -13
  426. package/src/components/ui/select/Select.test.tsx +2 -11
  427. package/src/components/ui/select/Select.tsx +16 -15
  428. package/src/components/ui/skeleton/Skeleton.stories.tsx +3 -11
  429. package/src/components/ui/skeleton/Skeleton.tsx +3 -14
  430. package/src/components/ui/skeleton/index.ts +1 -7
  431. package/src/components/ui/spinner/Spinner.stories.tsx +1 -1
  432. package/src/components/ui/spinner/Spinner.tsx +4 -5
  433. package/src/components/ui/stack/Stack.stories.tsx +8 -8
  434. package/src/components/ui/stack/Stack.tsx +1 -1
  435. package/src/components/ui/surface/Surface.stories.tsx +92 -33
  436. package/src/components/ui/surface/Surface.test.tsx +88 -28
  437. package/src/components/ui/surface/Surface.tsx +37 -87
  438. package/src/components/ui/surface/SurfaceContext.ts +22 -62
  439. package/src/components/ui/surface/index.ts +8 -0
  440. package/src/components/ui/surface/resolveSurface.ts +98 -0
  441. package/src/components/ui/surface/surface.contract.test.ts +6 -1
  442. package/src/components/ui/switch/Switch.stories.tsx +1 -1
  443. package/src/components/ui/switch/Switch.tsx +7 -6
  444. package/src/components/ui/tabs/Tabs.stories.tsx +1 -1
  445. package/src/components/ui/tabs/Tabs.tsx +8 -21
  446. package/src/components/ui/tabs/index.ts +1 -7
  447. package/src/components/ui/tile/Tile.stories.tsx +1 -1
  448. package/src/components/ui/tile/Tile.tsx +3 -0
  449. package/src/components/ui/toast/Toast.stories.tsx +1 -1
  450. package/src/components/ui/toast/Toast.test.tsx +2 -8
  451. package/src/components/ui/toast/Toast.tsx +49 -57
  452. package/src/components/ui/toast/index.ts +0 -1
  453. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +92 -71
  454. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +3 -18
  455. package/src/components/ui/toolbar-button/ToolbarButton.tsx +38 -49
  456. package/src/components/ui/tooltip/Tooltip.stories.tsx +12 -3
  457. package/src/components/ui/tooltip/Tooltip.test.tsx +21 -3
  458. package/src/components/ui/tooltip/Tooltip.tsx +55 -36
  459. package/src/components/ui/tooltip/index.ts +1 -1
  460. package/src/components/ui/trigger/TriggerSurface.test.tsx +215 -0
  461. package/src/components/ui/trigger/TriggerSurface.tsx +81 -0
  462. package/src/components/ui/trigger/index.ts +2 -0
  463. package/src/stories/PresetShowcase.stories.tsx +101 -48
  464. package/src/test/no-device-internals.test.ts +3 -3
  465. package/src/test/no-raw-color.test.ts +39 -0
  466. package/src/theme/Alpha.stories.tsx +103 -0
  467. package/src/theme/ChoosingTokens.stories.tsx +48 -0
  468. package/src/theme/ColorPalettes.stories.tsx +62 -45
  469. package/src/theme/ColorPrimitives.stories.tsx +35 -35
  470. package/src/theme/Depth.stories.tsx +132 -65
  471. package/src/theme/DepthCalibration.stories.tsx +23 -21
  472. package/src/theme/ProposedTokensVW82.stories.tsx +414 -0
  473. package/src/theme/ThemeProvider.test.tsx +4 -4
  474. package/src/theme/barrel.ts +7 -6
  475. package/src/theme/color-stories.coverage.test.ts +1 -1
  476. package/src/theme/color-utils.ts +41 -29
  477. package/src/theme/config.completeness.test.ts +1 -1
  478. package/src/theme/config.ts +40 -0
  479. package/src/theme/elevation.test.ts +82 -56
  480. package/src/theme/elevation.ts +77 -561
  481. package/src/theme/global.css +45 -5
  482. package/src/theme/grey-ramp.test.ts +24 -8
  483. package/src/theme/lift.test.ts +39 -0
  484. package/src/theme/lift.ts +102 -0
  485. package/src/theme/materials.test.ts +5 -2
  486. package/src/theme/materials.ts +38 -4
  487. package/src/theme/native-theming-guard.test.ts +5 -5
  488. package/src/theme/presets/apply.ts +4 -0
  489. package/src/theme/presets/audiobook.ts +5 -2
  490. package/src/theme/presets/default.ts +4 -0
  491. package/src/theme/presets/index.ts +14 -1
  492. package/src/theme/presets/types.ts +1 -1
  493. package/src/theme/semantic-contrast.test.ts +13 -4
  494. package/src/theme/status-distinctness.test.ts +66 -0
  495. package/src/theme/subtle-tone-weight.test.ts +163 -0
  496. package/src/theme/surface-planes.test.ts +37 -0
  497. package/src/theme/surface-planes.ts +68 -0
  498. package/src/theme/tailwind-var-opacity.test.ts +163 -0
  499. package/src/theme/token-export-guard.test.ts +1 -3
  500. package/src/theme/tokens/primitives.test.ts +15 -7
  501. package/src/theme/tokens/primitives.ts +98 -33
  502. package/src/theme/tokens/semantic-hex-guard.test.ts +322 -0
  503. package/src/theme/tokens/semantic.ts +124 -54
  504. package/src/theme/wash-ladder.test.ts +58 -0
  505. package/src/theme/workout-tokens.ts +1 -7
  506. package/src/types/jest-axe.d.ts +2 -6
  507. package/src/types/raw-md.d.ts +5 -0
  508. package/src/utils/colors.alpha-adoption.test.ts +408 -0
  509. package/src/utils/colors.ts +4 -4
  510. package/src/utils/form.ts +1 -3
  511. package/src/utils/index.ts +2 -7
  512. package/src/utils/number-format.ts +17 -0
  513. package/src/utils/workout-format.ts +15 -6
  514. package/src/web-jsx/jsx-runtime.ts +1 -5
  515. package/tailwind.config.js +55 -9
  516. package/src/components/custom/Workout/ExerciseCardUnified.stories.tsx +0 -151
  517. package/src/components/custom/Workout/RowInventory.stories.tsx +0 -408
  518. package/src/components/custom/Workout/S3FullRail.stories.tsx +0 -46
  519. package/src/components/custom/Workout/S3SessionPace.stories.tsx +0 -95
  520. package/src/components/custom/Workout/S3SessionRailHeading.stories.tsx +0 -61
  521. package/src/components/custom/Workout/S3SetTypes.stories.tsx +0 -176
  522. package/src/components/custom/Workout/S3WorkoutExpansion.stories.tsx +0 -240
  523. package/src/components/shell/DashboardShell.stories.tsx +0 -65
  524. package/src/components/shell/DashboardShell.tsx +0 -75
  525. package/src/components/shell/SessionRailSpecimen.stories.tsx +0 -753
  526. package/src/theme/elevation.stories.tsx +0 -346
  527. package/src/utils/useTheme.ts +0 -72
  528. /package/src/components/shell/{DeviceIndicator.test.tsx → workout/DeviceIndicator.test.tsx} +0 -0
  529. /package/src/components/shell/{DeviceMenu.test.tsx → workout/DeviceMenu.test.tsx} +0 -0
  530. /package/src/components/shell/{DeviceRow.test.tsx → workout/DeviceRow.test.tsx} +0 -0
  531. /package/src/components/shell/{SessionStatePill.test.tsx → workout/SessionStatePill.test.tsx} +0 -0
@@ -1,158 +1,137 @@
1
1
  import { ThemeMode, getSemanticColors } from './tokens.js';
2
- export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, SURFACE_PLANE_STEPS, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, semanticColorsDark, semanticColorsLight, semanticTypography, sequentialEffort } from './tokens.js';
3
- import { ViewStyle, ViewProps } from 'react-native';
2
+ export { CATEGORICAL_CVD_SAFE_MAX, CategoricalVariant, SURFACE_PLANE_STEPS, alertRedVivid, bestTextColor, buttonSizes, categoricalPalette, discreteRainbow, divergingScale, getCategoricalColor, getDiscreteRainbowColor, greyRamp, primitiveBorderRadius, primitiveBreakpoints, primitiveColors, primitiveRamps, primitiveSpacing, primitiveTypography, primitiveZIndex, resultPaletteColors, semanticColorsDark, semanticColorsLight, semanticPins, semanticTypography, sequentialEffort } from './tokens.js';
3
+ import { ViewStyle, TextStyle, ViewProps } from 'react-native';
4
4
 
5
5
  /**
6
- * Elevation System
6
+ * LIFT — the treatment a plane wears when it sits above its neighbour.
7
7
  *
8
- * A unified depth system where each elevation level corresponds to:
9
- * - Calculated surface color (derived from base using lighten)
10
- * - Shadow intensity and style (raised/pressed)
11
- * - Dynamically calculated shadow colors (derived from surface color)
12
- * - Semantic name for reference
8
+ * Tone says which plane a container sits on; lift says it is resting ON the one
9
+ * below. Two cues, both lit from above:
13
10
  *
14
- * Elevation range: -2 (deep inset) to +5 (floating overlay)
11
+ * RIM a crisp 1px top rim-light. The one neumorphism half that survives
12
+ * near black. paperSheet's hero rim is 0.20 (VW-99 run 2); a card is
13
+ * not a hero, so the default lift sits one grade quieter at 0.12,
14
+ * chosen against 0.20 side by side in Lab/Depth (2026-09-08).
15
+ * AMBIENT a soft shadow cast onto the plane below, growing with the number of
16
+ * planes crossed. Content lifts (1–3) are tight; floating lifts (4–5)
17
+ * are large and soft, describing separation from the page rather than
18
+ * rank in a stack.
15
19
  *
16
- * Negative elevations: Inset/pressed elements (sunken into surface)
17
- * Zero elevation: Base surface (background/page level)
18
- * Positive elevations: Raised elements (floating above surface)
19
- *
20
- * All colors are calculated dynamically from a base surface color,
21
- * allowing for custom surfaces and consistent color relationships.
22
- *
23
- * Lighting Model: Light source from upper-right corner
24
- * - Raised elements are always lighter than base (consistent across themes)
25
- * - Base colors must allow sufficient lightening in both themes
20
+ * Neither cue is a hairline ring: a ring is an edge, not a lift, and stays the
21
+ * divider's job. Web carries the multi-layer boxShadow; native gets the single
22
+ * shadow* set. The tone underneath is load-bearing on its own either way.
26
23
  */
27
24
 
28
- type ElevationLevel = -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5;
29
- interface ElevationConfig {
30
- /** Semantic name for this elevation level */
31
- name: string;
32
- /** Amount to lighten base color (0-1) */
33
- colorAdjustment: number;
34
- /** Shadow intensity */
35
- shadowIntensity: 'subtle' | 'medium' | 'strong';
36
- /** Shadow style: raised (floating) or pressed (inset) */
37
- shadowStyle: 'raised' | 'pressed';
38
- /** Description of use case */
39
- description: string;
25
+ type LiftStep = 1 | 2 | 3 | 4 | 5;
26
+ /** The lowest lift that is FLOATING (menu, popover, toast) rather than content. */
27
+ declare const FLOATING_LIFT_MIN: LiftStep;
28
+ /** Rim-light alpha per mode. Light mode is a placeholder pending its own pass. */
29
+ declare const LIFT_RIM_ALPHA: Record<ThemeMode, number>;
30
+ interface LiftOptions {
31
+ /** Override the rim alpha. `0` drops the rim and leaves the ambient shadow alone. */
32
+ rim?: number;
40
33
  }
41
- declare const elevationSystem: Record<ElevationLevel, ElevationConfig>;
42
- /**
43
- * Get elevation configuration for a given level
44
- */
45
- declare function getElevationConfig(level: ElevationLevel): ElevationConfig;
34
+ /** The web boxShadow string for a lift: rim first, then the ambient layers. */
35
+ declare function liftShadow(step: LiftStep, mode?: ThemeMode, opts?: LiftOptions): string;
36
+ /** Platform style for a lift. Compose after `backgroundColor`; never instead of it. */
37
+ declare function liftStyle(step: LiftStep, mode?: ThemeMode, opts?: LiftOptions): ViewStyle;
38
+
46
39
  /**
47
- * Calculate surface color for an elevation level from a base color.
48
- * Results are cached to avoid redundant calculations.
40
+ * The surface planes: the grey-ramp steps a container can sit on, darkest first.
49
41
  *
50
- * @param baseColor - Base surface color (hex)
51
- * @param level - Elevation level
52
- * @param theme - Current theme ('light' or 'dark')
53
- * @returns Calculated surface color (hex)
54
- */
55
- declare function getElevationSurface(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark'): string;
56
- /**
57
- * Get shadow style for an elevation level, calculated dynamically from surface color.
58
- * Results are cached to avoid redundant calculations.
42
+ * Every background a `<Surface>` or `<Card>` paints resolves through this list,
43
+ * so a container can only ever land ON the ramp. Stepping up (a lifted card) or
44
+ * down (a pressed well) is indexing `PLANE_ORDER`, clamped at both ends.
59
45
  *
60
- * @param baseColor - Base surface color (hex)
61
- * @param level - Elevation level
62
- * @param theme - Current theme ('light' or 'dark')
63
- * @param isHovered - Whether element is hovered
64
- * @returns ViewStyle with shadow properties
46
+ * `frame` is the bezel the ramp sits inside and the floor a pressed surface
47
+ * clamps at. It replaced a separate `inset` level in TD-07.14: at ΔE 1.10 from
48
+ * the frame that level was an imperceptible duplicate.
65
49
  */
50
+
51
+ type SurfaceLevel = 'frame' | 'background' | 'base' | 'elevated' | 'raised' | 'overlay';
52
+ declare const SURFACE_LEVEL_TOKEN: {
53
+ readonly frame: "background-frame";
54
+ readonly background: "background-base";
55
+ readonly base: "surface-base";
56
+ readonly elevated: "surface-elevated";
57
+ readonly raised: "surface-raised";
58
+ readonly overlay: "surface-overlay";
59
+ };
60
+ /** Darkest → lightest. Kept in lockstep with the grey ramp and surface.contract.test. */
61
+ declare const PLANE_ORDER: readonly ["frame", "background", "base", "elevated", "raised", "overlay"];
62
+ /** The background hex for a plane under a theme mode (literal hex, never a var()). */
63
+ declare function surfaceBackground(level: SurfaceLevel, mode: ThemeMode): string;
66
64
  /**
67
- * The lowest elevation that still casts an outward shadow.
68
- *
69
- * On a near-black surface a drop-shadow is inert: at levels 1-3 the shadow is
70
- * dark-on-dark and contributes nothing a viewer can see, while still costing a
71
- * composite layer. Material dropped shadow-as-hierarchy for the same reason.
72
- * Inline hierarchy is the hairline's job (`hairline-*`), which composites by a
73
- * constant amount over any plane.
74
- *
75
- * At 4+ the element is genuinely FLOATING over a backdrop — menu, popover,
76
- * toast — where a large soft shadow describes separation from the page rather
77
- * than a rank in a stack. Those should also carry a hairline ring.
65
+ * The plane a `<Surface pressed>` resolves to: its parent's plane stepped one
66
+ * index DOWN the ramp, clamped at the `frame` floor.
67
+ * overlay→raised, raised→elevated, elevated→base, base→background,
68
+ * background→frame, frame→frame (clamped).
78
69
  */
79
- declare const FLOATING_ELEVATION_MIN: ElevationLevel;
80
- declare function getElevationShadow(baseColor: string, level: ElevationLevel, theme: 'light' | 'dark', isHovered?: boolean): ViewStyle;
70
+ declare function pressedLevel(parent: SurfaceLevel): SurfaceLevel;
81
71
  /**
82
- * Elevation level backing a `<Surface pressed>` recess: the shallow `inset`
83
- * (-1) step. Pressed exposes ONE level of depth pressed-2 is intentionally
84
- * not surfaced (the deeper `-2` deep-inset stays available to `elevation`).
72
+ * The plane a lifted surface resolves to: its parent's plane stepped `steps`
73
+ * UP the ramp, clamped at `overlay`. The clamp is what makes raised-on-raised
74
+ * unrepresentable: a card inside an overlay stays on the overlay and relies on
75
+ * its lift treatment, never on a lighter grey that is not on the ramp.
85
76
  */
86
- declare const PRESSED_ELEVATION_LEVEL: ElevationLevel;
77
+ declare function raisedLevel(parent: SurfaceLevel, steps: number): SurfaceLevel;
78
+
87
79
  /**
88
- * Inner-shadow recess for a pressed (sunken) surface, tuned to the well's own
89
- * fill colour so the rim/shadow tints track the darker fill. Composes WITH the
90
- * darker pressed fill: on web it adds an inset boxShadow; on the native path
91
- * (no inset-shadow support) it's a no-op and the recess reads via the fill
92
- * alone — so a pressed surface stays legibly sunken with or without the shadow.
80
+ * Elevation numeric depth that resolves to the grey ramp.
93
81
  *
94
- * @param fillColor - The pressed surface's own fill (one ramp step down).
95
- * @param theme - Current theme ('light' or 'dark').
96
- */
97
- declare function getPressedRecessShadow(fillColor: string, theme: 'light' | 'dark'): ViewStyle;
98
- /**
99
- * Get base surface color from theme.
100
- * This is the foundation color that all elevations are calculated from.
82
+ * A level is a plane on the surface ramp plus the treatment that plane wears:
101
83
  *
102
- * IMPORTANT: Base colors must be chosen to allow sufficient lightening.
84
+ * -2 frame recessed (inset well, two planes down)
85
+ * -1 background recessed (inset well, one plane down)
86
+ * 0 base flat, no treatment
87
+ * 1 elevated lifted (tone + rim-light + ambient shadow)
88
+ * 2 raised lifted
89
+ * 3 overlay lifted
90
+ * 4 overlay floating (same recipe, larger shadow)
91
+ * 5 overlay floating
103
92
  *
104
- * **Light Mode**: Cannot use `#FFFFFF` (white) - cannot lighten white!
105
- * - Use `#F3F4F6` (neutral[100]) - can lighten to `#FAFAFA` `#FFFFFF`
106
- * - This allows raised elevations to be lighter (closer to white)
93
+ * These are ABSOLUTE readings from the page plane. `<Surface>` and `<Card>`
94
+ * apply the same numbers RELATIVE to the plane they are nested in; see
95
+ * `resolveSurfaceDepth`.
107
96
  *
108
- * **Dark Mode**: Need lighter base to allow sufficient lightening
109
- * - Use `surface-elevated` (#2A2827, TD-surface-tokens ramp) - allows further lightening
97
+ * No level can produce a colour off the ramp. The previous ladder lightened a
98
+ * base colour in HSV by 2.5% per level and put five of its six stops between
99
+ * ramp steps, drifting warmer as it rose while the ramp is designed to cool.
100
+ * Floating levels share the overlay plane on purpose: past the top of the ramp,
101
+ * separation is the shadow's job, not a lighter grey.
110
102
  *
111
- * Can be overridden to use custom base colors for special cases.
103
+ * Depth is TONE + LIFT by default. The earlier rule that levels 1–3 separate by
104
+ * tone alone (TD-07.16) was reversed on 2026-09-08: the tight upper steps of the
105
+ * ramp (ΔL* 2.5–3) need the second channel, and a soft ambient shadow on a
106
+ * near-black plane is not inert once the rim-light gives it an edge to fall
107
+ * from. See Foundations/Depth.
112
108
  */
113
- declare function getBaseSurfaceColor(theme: 'light' | 'dark'): string;
109
+
110
+ type ElevationLevel = -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5;
111
+ declare const ELEVATION_PLANE: Record<ElevationLevel, SurfaceLevel>;
112
+ /** The lowest elevation that is floating (menu, popover, toast) rather than content. */
113
+ declare const FLOATING_ELEVATION_MIN: ElevationLevel;
114
+ /** Elevation backing a `<Surface pressed>` recess: one plane down. */
115
+ declare const PRESSED_ELEVATION_LEVEL: ElevationLevel;
116
+ /** The ramp plane an absolute elevation sits on. */
117
+ declare function elevationPlane(level: ElevationLevel): SurfaceLevel;
118
+ /** The background hex for an absolute elevation: always a ramp step. */
119
+ declare function getElevationSurface(level: ElevationLevel, mode?: ThemeMode): string;
114
120
  /**
115
- * Component-specific elevation ranges
116
- * Defines which elevation levels each component type can use
121
+ * Inner-shadow recess for a pressed (sunken) surface: the `insetWell` material's
122
+ * cut, which the wall calibrated in VW-99. Web only; on native the recess reads
123
+ * from the darker fill alone, which is why the fill is never optional.
117
124
  */
118
- declare const componentElevationRanges: {
119
- readonly button: {
120
- readonly allowed: readonly [2];
121
- readonly default: 2;
122
- readonly hover: 3;
123
- };
124
- readonly card: {
125
- readonly allowed: readonly [1, 2, 3];
126
- readonly default: 2;
127
- readonly hover: 3;
128
- };
129
- readonly input: {
130
- readonly allowed: readonly [-2, -1, 0];
131
- readonly default: -1;
132
- };
133
- readonly overlay: {
134
- readonly allowed: readonly [4, 5];
135
- readonly default: 4;
136
- };
137
- };
138
- type ComponentType = keyof typeof componentElevationRanges;
125
+ declare function getPressedRecessShadow(fillColor: string, _mode?: ThemeMode): ViewStyle;
139
126
  /**
140
- * Validate and clamp elevation to component's allowed range
127
+ * The treatment an absolute elevation wears: a recess below 0, nothing at 0,
128
+ * a lift above it. Compose after `backgroundColor`.
141
129
  */
142
- declare function getValidatedElevation(component: ComponentType, requested: ElevationLevel): ElevationLevel;
143
- type GlowIntensity = 'subtle' | 'medium' | 'strong';
130
+ declare function getElevationShadow(level: ElevationLevel, mode?: ThemeMode, opts?: LiftOptions): ViewStyle;
131
+ type GlowIntensity = 'tight' | 'subtle' | 'medium' | 'strong';
144
132
  /**
145
- * Get a glow shadow style for emphasis/active states.
146
- *
147
- * Creates a colored radial glow around an element, useful for:
148
- * - Active recording indicators (orange glow)
149
- * - Success states (green glow)
150
- * - Error/danger indicators (red glow)
151
- * - Focus rings and attention-drawing elements
152
- *
153
- * @param color - Glow color (hex string, e.g. '#FF7900')
154
- * @param intensity - Glow intensity level
155
- * @returns ViewStyle with platform-specific shadow properties
133
+ * A coloured radial glow around an element, for emphasis and active states:
134
+ * a live recording indicator, a success or error pulse, a focus halo.
156
135
  */
157
136
  declare function getGlowShadow(color: string, intensity?: GlowIntensity): ViewStyle;
158
137
 
@@ -186,26 +165,42 @@ declare const lightThemeCSSVars: {
186
165
  readonly '--color-brand-primary-light': "#FFA063";
187
166
  readonly '--color-brand-primary-dark': "#DA5F00";
188
167
  readonly '--color-brand-primary-subtle': "rgba(255, 121, 0, 0.08)";
168
+ readonly '--color-brand-primary-muted': "rgba(255, 121, 0, 0.30)";
169
+ readonly '--color-brand-primary-strong': "rgba(255, 121, 0, 0.50)";
189
170
  readonly '--color-brand-secondary': "#307B9B";
190
171
  readonly '--color-brand-secondary-light': "#2697B7";
191
172
  readonly '--color-brand-secondary-dark': "#2A617F";
192
173
  readonly '--color-brand-secondary-subtle': "rgba(48, 123, 155, 0.08)";
174
+ readonly '--color-brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
175
+ readonly '--color-brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
193
176
  readonly '--color-on-brand-primary': "#FFFFFF";
194
177
  readonly '--color-on-brand-secondary': "#FFFFFF";
178
+ readonly '--color-on-brand-primary-subtle': "#FF7900";
179
+ readonly '--color-on-brand-secondary-subtle': "#307B9B";
195
180
  readonly '--color-status-success': "#2ED573";
196
181
  readonly '--color-status-success-subtle': "#E3FFEE";
182
+ readonly '--color-status-success-muted': "rgba(46, 213, 115, 0.30)";
183
+ readonly '--color-status-success-strong': "rgba(46, 213, 115, 0.50)";
197
184
  readonly '--color-status-live': "#2ED573";
198
185
  readonly '--color-status-live-muted': "#22A444";
199
186
  readonly '--color-status-error': "#D14343";
200
187
  readonly '--color-status-error-subtle': "#FFF4F4";
188
+ readonly '--color-status-error-muted': "rgba(209, 67, 67, 0.30)";
189
+ readonly '--color-status-error-strong': "rgba(209, 67, 67, 0.50)";
201
190
  readonly '--color-status-warning': "#F9B415";
202
191
  readonly '--color-status-warning-subtle': "#FFF7DD";
192
+ readonly '--color-status-warning-muted': "rgba(249, 180, 21, 0.30)";
193
+ readonly '--color-status-warning-strong': "rgba(249, 180, 21, 0.50)";
203
194
  readonly '--color-status-info': "#2196F3";
204
195
  readonly '--color-status-info-subtle': "#EFF8FF";
205
- readonly '--color-status-error-vivid': "#D14343";
196
+ readonly '--color-status-info-muted': "rgba(33, 150, 243, 0.30)";
197
+ readonly '--color-status-info-strong': "rgba(33, 150, 243, 0.50)";
198
+ readonly '--color-status-error-vivid': "#FF4757";
206
199
  readonly '--color-status-error-vivid-light': "#E05254";
207
200
  readonly '--color-status-error-vivid-dark': "#A4221C";
208
201
  readonly '--color-status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
202
+ readonly '--color-status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
203
+ readonly '--color-status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
209
204
  readonly '--color-text-primary': "#121828";
210
205
  readonly '--color-text-secondary': "#65748B";
211
206
  readonly '--color-text-tertiary': "#A29F9D";
@@ -243,6 +238,10 @@ declare const lightThemeCSSVars: {
243
238
  readonly '--color-on-status-error': "#FFFFFF";
244
239
  readonly '--color-on-status-warning': "#FFFFFF";
245
240
  readonly '--color-on-status-info': "#FFFFFF";
241
+ readonly '--color-on-status-success-subtle': "#2ED573";
242
+ readonly '--color-on-status-error-subtle': "#D14343";
243
+ readonly '--color-on-status-warning-subtle': "#F9B415";
244
+ readonly '--color-on-status-info-subtle': "#2196F3";
246
245
  readonly '--color-result-improve': "#4caf50";
247
246
  readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.12)";
248
247
  readonly '--color-result-improve-dark': "#248a24";
@@ -302,26 +301,42 @@ declare const darkThemeCSSVars: {
302
301
  readonly '--color-brand-primary-light': "#FFA063";
303
302
  readonly '--color-brand-primary-dark': "#DA5F00";
304
303
  readonly '--color-brand-primary-subtle': "rgba(255, 121, 0, 0.12)";
304
+ readonly '--color-brand-primary-muted': "rgba(255, 121, 0, 0.30)";
305
+ readonly '--color-brand-primary-strong': "rgba(255, 121, 0, 0.50)";
305
306
  readonly '--color-brand-secondary': "#307B9B";
306
307
  readonly '--color-brand-secondary-light': "#2697B7";
307
308
  readonly '--color-brand-secondary-dark': "#2A617F";
308
- readonly '--color-brand-secondary-subtle': "rgba(48, 123, 155, 0.12)";
309
+ readonly '--color-brand-secondary-subtle': "rgba(34, 211, 238, 0.12)";
310
+ readonly '--color-brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
311
+ readonly '--color-brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
309
312
  readonly '--color-on-brand-primary': "#FFFFFF";
310
313
  readonly '--color-on-brand-secondary': "#FFFFFF";
314
+ readonly '--color-on-brand-primary-subtle': "#FF7900";
315
+ readonly '--color-on-brand-secondary-subtle': "#22D3EE";
311
316
  readonly '--color-status-success': "#2ED573";
312
317
  readonly '--color-status-success-subtle': "rgba(46, 213, 115, 0.12)";
318
+ readonly '--color-status-success-muted': "rgba(46, 213, 115, 0.30)";
319
+ readonly '--color-status-success-strong': "rgba(46, 213, 115, 0.50)";
313
320
  readonly '--color-status-live': "#2ED573";
314
321
  readonly '--color-status-live-muted': "#22A444";
315
322
  readonly '--color-status-error': "#D14343";
316
- readonly '--color-status-error-subtle': "rgba(209, 67, 67, 0.12)";
323
+ readonly '--color-status-error-subtle': "rgba(247, 113, 117, 0.08)";
324
+ readonly '--color-status-error-muted': "rgba(209, 67, 67, 0.30)";
325
+ readonly '--color-status-error-strong': "rgba(209, 67, 67, 0.50)";
317
326
  readonly '--color-status-warning': "#F9B415";
318
327
  readonly '--color-status-warning-subtle': "rgba(249, 180, 21, 0.12)";
328
+ readonly '--color-status-warning-muted': "rgba(249, 180, 21, 0.30)";
329
+ readonly '--color-status-warning-strong': "rgba(249, 180, 21, 0.50)";
319
330
  readonly '--color-status-info': "#2196F3";
320
- readonly '--color-status-info-subtle': "rgba(33, 150, 243, 0.12)";
321
- readonly '--color-status-error-vivid': "#D14343";
331
+ readonly '--color-status-info-subtle': "rgba(120, 194, 255, 0.12)";
332
+ readonly '--color-status-info-muted': "rgba(33, 150, 243, 0.30)";
333
+ readonly '--color-status-info-strong': "rgba(33, 150, 243, 0.50)";
334
+ readonly '--color-status-error-vivid': "#FF4757";
322
335
  readonly '--color-status-error-vivid-light': "#E05254";
323
336
  readonly '--color-status-error-vivid-dark': "#A4221C";
324
337
  readonly '--color-status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
338
+ readonly '--color-status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
339
+ readonly '--color-status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
325
340
  readonly '--color-text-primary': "#F9F6F3";
326
341
  readonly '--color-text-secondary': "#A29F9D";
327
342
  readonly '--color-text-tertiary': "#888684";
@@ -359,6 +374,10 @@ declare const darkThemeCSSVars: {
359
374
  readonly '--color-on-status-error': "#FFFFFF";
360
375
  readonly '--color-on-status-warning': "#FFFFFF";
361
376
  readonly '--color-on-status-info': "#FFFFFF";
377
+ readonly '--color-on-status-success-subtle': "#2ED573";
378
+ readonly '--color-on-status-error-subtle': "#F77175";
379
+ readonly '--color-on-status-warning-subtle': "#F9B415";
380
+ readonly '--color-on-status-info-subtle': "#78C2FF";
362
381
  readonly '--color-result-improve': "#4caf50";
363
382
  readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.16)";
364
383
  readonly '--color-result-improve-dark': "#248a24";
@@ -418,26 +437,42 @@ declare function getThemeCSSVars(mode: ThemeMode): {
418
437
  readonly '--color-brand-primary-light': "#FFA063";
419
438
  readonly '--color-brand-primary-dark': "#DA5F00";
420
439
  readonly '--color-brand-primary-subtle': "rgba(255, 121, 0, 0.08)";
440
+ readonly '--color-brand-primary-muted': "rgba(255, 121, 0, 0.30)";
441
+ readonly '--color-brand-primary-strong': "rgba(255, 121, 0, 0.50)";
421
442
  readonly '--color-brand-secondary': "#307B9B";
422
443
  readonly '--color-brand-secondary-light': "#2697B7";
423
444
  readonly '--color-brand-secondary-dark': "#2A617F";
424
445
  readonly '--color-brand-secondary-subtle': "rgba(48, 123, 155, 0.08)";
446
+ readonly '--color-brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
447
+ readonly '--color-brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
425
448
  readonly '--color-on-brand-primary': "#FFFFFF";
426
449
  readonly '--color-on-brand-secondary': "#FFFFFF";
450
+ readonly '--color-on-brand-primary-subtle': "#FF7900";
451
+ readonly '--color-on-brand-secondary-subtle': "#307B9B";
427
452
  readonly '--color-status-success': "#2ED573";
428
453
  readonly '--color-status-success-subtle': "#E3FFEE";
454
+ readonly '--color-status-success-muted': "rgba(46, 213, 115, 0.30)";
455
+ readonly '--color-status-success-strong': "rgba(46, 213, 115, 0.50)";
429
456
  readonly '--color-status-live': "#2ED573";
430
457
  readonly '--color-status-live-muted': "#22A444";
431
458
  readonly '--color-status-error': "#D14343";
432
459
  readonly '--color-status-error-subtle': "#FFF4F4";
460
+ readonly '--color-status-error-muted': "rgba(209, 67, 67, 0.30)";
461
+ readonly '--color-status-error-strong': "rgba(209, 67, 67, 0.50)";
433
462
  readonly '--color-status-warning': "#F9B415";
434
463
  readonly '--color-status-warning-subtle': "#FFF7DD";
464
+ readonly '--color-status-warning-muted': "rgba(249, 180, 21, 0.30)";
465
+ readonly '--color-status-warning-strong': "rgba(249, 180, 21, 0.50)";
435
466
  readonly '--color-status-info': "#2196F3";
436
467
  readonly '--color-status-info-subtle': "#EFF8FF";
437
- readonly '--color-status-error-vivid': "#D14343";
468
+ readonly '--color-status-info-muted': "rgba(33, 150, 243, 0.30)";
469
+ readonly '--color-status-info-strong': "rgba(33, 150, 243, 0.50)";
470
+ readonly '--color-status-error-vivid': "#FF4757";
438
471
  readonly '--color-status-error-vivid-light': "#E05254";
439
472
  readonly '--color-status-error-vivid-dark': "#A4221C";
440
473
  readonly '--color-status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
474
+ readonly '--color-status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
475
+ readonly '--color-status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
441
476
  readonly '--color-text-primary': "#121828";
442
477
  readonly '--color-text-secondary': "#65748B";
443
478
  readonly '--color-text-tertiary': "#A29F9D";
@@ -475,6 +510,10 @@ declare function getThemeCSSVars(mode: ThemeMode): {
475
510
  readonly '--color-on-status-error': "#FFFFFF";
476
511
  readonly '--color-on-status-warning': "#FFFFFF";
477
512
  readonly '--color-on-status-info': "#FFFFFF";
513
+ readonly '--color-on-status-success-subtle': "#2ED573";
514
+ readonly '--color-on-status-error-subtle': "#D14343";
515
+ readonly '--color-on-status-warning-subtle': "#F9B415";
516
+ readonly '--color-on-status-info-subtle': "#2196F3";
478
517
  readonly '--color-result-improve': "#4caf50";
479
518
  readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.12)";
480
519
  readonly '--color-result-improve-dark': "#248a24";
@@ -533,26 +572,42 @@ declare function getThemeCSSVars(mode: ThemeMode): {
533
572
  readonly '--color-brand-primary-light': "#FFA063";
534
573
  readonly '--color-brand-primary-dark': "#DA5F00";
535
574
  readonly '--color-brand-primary-subtle': "rgba(255, 121, 0, 0.12)";
575
+ readonly '--color-brand-primary-muted': "rgba(255, 121, 0, 0.30)";
576
+ readonly '--color-brand-primary-strong': "rgba(255, 121, 0, 0.50)";
536
577
  readonly '--color-brand-secondary': "#307B9B";
537
578
  readonly '--color-brand-secondary-light': "#2697B7";
538
579
  readonly '--color-brand-secondary-dark': "#2A617F";
539
- readonly '--color-brand-secondary-subtle': "rgba(48, 123, 155, 0.12)";
580
+ readonly '--color-brand-secondary-subtle': "rgba(34, 211, 238, 0.12)";
581
+ readonly '--color-brand-secondary-muted': "rgba(48, 123, 155, 0.30)";
582
+ readonly '--color-brand-secondary-strong': "rgba(48, 123, 155, 0.50)";
540
583
  readonly '--color-on-brand-primary': "#FFFFFF";
541
584
  readonly '--color-on-brand-secondary': "#FFFFFF";
585
+ readonly '--color-on-brand-primary-subtle': "#FF7900";
586
+ readonly '--color-on-brand-secondary-subtle': "#22D3EE";
542
587
  readonly '--color-status-success': "#2ED573";
543
588
  readonly '--color-status-success-subtle': "rgba(46, 213, 115, 0.12)";
589
+ readonly '--color-status-success-muted': "rgba(46, 213, 115, 0.30)";
590
+ readonly '--color-status-success-strong': "rgba(46, 213, 115, 0.50)";
544
591
  readonly '--color-status-live': "#2ED573";
545
592
  readonly '--color-status-live-muted': "#22A444";
546
593
  readonly '--color-status-error': "#D14343";
547
- readonly '--color-status-error-subtle': "rgba(209, 67, 67, 0.12)";
594
+ readonly '--color-status-error-subtle': "rgba(247, 113, 117, 0.08)";
595
+ readonly '--color-status-error-muted': "rgba(209, 67, 67, 0.30)";
596
+ readonly '--color-status-error-strong': "rgba(209, 67, 67, 0.50)";
548
597
  readonly '--color-status-warning': "#F9B415";
549
598
  readonly '--color-status-warning-subtle': "rgba(249, 180, 21, 0.12)";
599
+ readonly '--color-status-warning-muted': "rgba(249, 180, 21, 0.30)";
600
+ readonly '--color-status-warning-strong': "rgba(249, 180, 21, 0.50)";
550
601
  readonly '--color-status-info': "#2196F3";
551
- readonly '--color-status-info-subtle': "rgba(33, 150, 243, 0.12)";
552
- readonly '--color-status-error-vivid': "#D14343";
602
+ readonly '--color-status-info-subtle': "rgba(120, 194, 255, 0.12)";
603
+ readonly '--color-status-info-muted': "rgba(33, 150, 243, 0.30)";
604
+ readonly '--color-status-info-strong': "rgba(33, 150, 243, 0.50)";
605
+ readonly '--color-status-error-vivid': "#FF4757";
553
606
  readonly '--color-status-error-vivid-light': "#E05254";
554
607
  readonly '--color-status-error-vivid-dark': "#A4221C";
555
608
  readonly '--color-status-error-vivid-subtle': "rgba(255, 71, 87, 0.12)";
609
+ readonly '--color-status-error-vivid-muted': "rgba(255, 71, 87, 0.30)";
610
+ readonly '--color-status-error-vivid-strong': "rgba(255, 71, 87, 0.50)";
556
611
  readonly '--color-text-primary': "#F9F6F3";
557
612
  readonly '--color-text-secondary': "#A29F9D";
558
613
  readonly '--color-text-tertiary': "#888684";
@@ -590,6 +645,10 @@ declare function getThemeCSSVars(mode: ThemeMode): {
590
645
  readonly '--color-on-status-error': "#FFFFFF";
591
646
  readonly '--color-on-status-warning': "#FFFFFF";
592
647
  readonly '--color-on-status-info': "#FFFFFF";
648
+ readonly '--color-on-status-success-subtle': "#2ED573";
649
+ readonly '--color-on-status-error-subtle': "#F77175";
650
+ readonly '--color-on-status-warning-subtle': "#F9B415";
651
+ readonly '--color-on-status-info-subtle': "#78C2FF";
593
652
  readonly '--color-result-improve': "#4caf50";
594
653
  readonly '--color-result-improve-light': "rgba(76, 175, 80, 0.16)";
595
654
  readonly '--color-result-improve-dark': "#248a24";
@@ -751,8 +810,10 @@ type ThemeConfig = typeof gluestackConfig;
751
810
  *
752
811
  * Kept: grain, rim-light, contact shadow.
753
812
  *
754
- * See sources/design/surface-system-north-star.md §4 and
755
- * sources/runbooks/VW-99-depth-wall-calibration.md.
813
+ * See `sources/design/surface-system-north-star.md` §4 and
814
+ * `sources/runbooks/VW-99-depth-wall-calibration.md`. Those paths are relative to
815
+ * the `voltras-workspace` active-work initiative (`active-work open voltras-workspace`), not this repo —
816
+ * titan-design has no `sources/` directory, so they do not resolve from here.
756
817
  */
757
818
 
758
819
  /**
@@ -837,6 +898,19 @@ declare function insetWell(tone?: string): ViewStyle;
837
898
  * wrong, so grain and shadow carry the material alone.
838
899
  */
839
900
  declare function barPaper(color: string, flip?: boolean): ViewStyle;
901
+ /**
902
+ * A POST-IT card: a matte tinted sheet with a crisp rim, a defined contact
903
+ * shadow, and a deliberate CANT (`deg`) so it reads as a stuck note — where a
904
+ * small unit of data wants to feel pinned to the surface (alerts, next-set). A
905
+ * degree or two, not a fraction, so the tilt is intentional rather than a bug.
906
+ */
907
+ declare function postIt(tone?: string, deg?: number): ViewStyle;
908
+ /**
909
+ * DEBOSSED (engraved) text: a 1px light highlight dropped just below the glyphs
910
+ * so a label reads as pressed INTO the surface. Deliberate, for section eyebrows
911
+ * on a matte plane — not body copy. Pair with a tertiary/dim text colour.
912
+ */
913
+ declare const debossLabel: TextStyle;
840
914
 
841
915
  /**
842
916
  * Colour math shared by the depth system.
@@ -1064,7 +1138,7 @@ interface ThemePresetColors {
1064
1138
  'hairline-subtle'?: string;
1065
1139
  'hairline-strong'?: string;
1066
1140
  'border-focus'?: string;
1067
- 'divider'?: string;
1141
+ divider?: string;
1068
1142
  [key: `${string}`]: string | undefined;
1069
1143
  }
1070
1144
  interface ThemePresetFonts {
@@ -1103,8 +1177,16 @@ interface ThemePreset {
1103
1177
  fontImport?: string;
1104
1178
  }
1105
1179
 
1180
+ /**
1181
+ * @deprecated Use `ThemeProvider` with semantic tokens — removed once audiobook
1182
+ * migrates off presets (AW-129).
1183
+ */
1106
1184
  declare function applyThemePreset(preset: ThemePreset): () => void;
1107
1185
 
1186
+ /**
1187
+ * @deprecated Use `ThemeProvider` with semantic tokens — removed once audiobook
1188
+ * migrates off presets (AW-129).
1189
+ */
1108
1190
  declare const defaultPreset: ThemePreset;
1109
1191
 
1110
1192
  /**
@@ -1112,7 +1194,10 @@ declare const defaultPreset: ThemePreset;
1112
1194
  *
1113
1195
  * Warm copper/patina aesthetic inspired by vintage audio equipment
1114
1196
  * and reading lounges. Dark-mode only design with editorial typography.
1197
+ *
1198
+ * @deprecated Use `ThemeProvider` with semantic tokens — removed once audiobook
1199
+ * migrates off presets (AW-129).
1115
1200
  */
1116
1201
  declare const audiobookPreset: ThemePreset;
1117
1202
 
1118
- export { type ComponentType, type CssPropertyEntry, type CssPropertyManifest, type ElevationConfig, type ElevationLevel, FLOATING_ELEVATION_MIN, type GlowIntensity, type GradientStyle, type ManifestValidationResult, PRESSED_ELEVATION_LEVEL, type ShadowIntensity, type ThemeConfig, ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, ThemeProvider, type ThemeProviderMode, type ThemeProviderProps, type VariantAxes, type VariantOverride, applyThemePreset, audiobookPreset, barPaper, componentElevationRanges, darkThemeCSSVars, darken, defaultPreset, elevationSystem, getBaseSurfaceColor, getElevationConfig, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, getValidatedElevation, gluestackConfig, grainForTone, grainOpacityForTone, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, lightThemeCSSVars, lighten, linearGradient, paperSheet, resolveColor, rgbToHex, rgbToHsv, surfaceGradient, validateCssPropertyManifest };
1203
+ export { type CssPropertyEntry, type CssPropertyManifest, ELEVATION_PLANE, type ElevationLevel, FLOATING_ELEVATION_MIN, FLOATING_LIFT_MIN, type GlowIntensity, type GradientStyle, LIFT_RIM_ALPHA, type LiftOptions, type LiftStep, type ManifestValidationResult, PLANE_ORDER, PRESSED_ELEVATION_LEVEL, SURFACE_LEVEL_TOKEN, type ShadowIntensity, type SurfaceLevel, type ThemeConfig, ThemeMode, type ThemePreset, type ThemePresetColors, type ThemePresetFonts, type ThemePresetRadii, type ThemePresetShadows, ThemeProvider, type ThemeProviderMode, type ThemeProviderProps, type VariantAxes, type VariantOverride, applyThemePreset, audiobookPreset, barPaper, darkThemeCSSVars, darken, debossLabel, defaultPreset, elevationPlane, getElevationShadow, getElevationSurface, getGlowShadow, getHoverColors, getPressedRecessShadow, getSemanticColors, getThemeCSSVars, gluestackConfig, grainForTone, grainOpacityForTone, hexToRgb, hsvToRgb, insetWell, isCssPropertyManifest, isDark, liftShadow, liftStyle, lightThemeCSSVars, lighten, linearGradient, paperSheet, postIt, pressedLevel, raisedLevel, resolveColor, rgbToHex, rgbToHsv, surfaceBackground, surfaceGradient, validateCssPropertyManifest };