@titan-design/react-ui 0.3.0 → 0.5.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 (90) hide show
  1. package/dist/MesoStatusCard-CQk71hSi.d.mts +77 -0
  2. package/dist/MesoStatusCard-CQk71hSi.d.ts +77 -0
  3. package/dist/bodymap.d.mts +246 -3
  4. package/dist/bodymap.d.ts +246 -3
  5. package/dist/bodymap.js +441 -97
  6. package/dist/bodymap.js.map +1 -1
  7. package/dist/bodymap.mjs +1958 -66
  8. package/dist/bodymap.mjs.map +1 -1
  9. package/dist/index.d.mts +71 -738
  10. package/dist/index.d.ts +71 -738
  11. package/dist/index.js +888 -1583
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +4515 -2348
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/pages-D7Jlssvp.d.ts +791 -0
  16. package/dist/pages-MO0JCySL.d.mts +791 -0
  17. package/dist/pages.d.mts +4 -0
  18. package/dist/pages.d.ts +4 -0
  19. package/dist/pages.js +6646 -0
  20. package/dist/pages.js.map +1 -0
  21. package/dist/pages.mjs +6626 -0
  22. package/dist/pages.mjs.map +1 -0
  23. package/dist/theme/index.d.mts +28 -2
  24. package/dist/theme/index.d.ts +28 -2
  25. package/dist/theme/index.js +37 -0
  26. package/dist/theme/index.js.map +1 -1
  27. package/dist/theme/index.mjs +1880 -2
  28. package/dist/theme/index.mjs.map +1 -1
  29. package/dist/theme/tokens-css.mjs +573 -1
  30. package/dist/theme/tokens-css.mjs.map +1 -1
  31. package/package.json +9 -7
  32. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +10 -15
  33. package/src/components/custom/Workout/BaseBadge.stories.tsx +3 -3
  34. package/src/components/custom/Workout/BaseBadge.test.tsx +1 -1
  35. package/src/components/custom/Workout/BaseBadge.tsx +1 -1
  36. package/src/components/custom/Workout/BodyMap.tsx +7 -8
  37. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +25 -28
  38. package/src/components/custom/Workout/CapacityBandChart.tsx +2 -3
  39. package/src/components/custom/Workout/ExerciseCard.tsx +17 -28
  40. package/src/components/custom/Workout/ExerciseDetailPage.tsx +38 -31
  41. package/src/components/custom/Workout/InputBar.tsx +10 -11
  42. package/src/components/custom/Workout/IntensityBar.test.tsx +112 -60
  43. package/src/components/custom/Workout/IntensityBar.tsx +109 -58
  44. package/src/components/custom/Workout/MesoCard.tsx +2 -6
  45. package/src/components/custom/Workout/MesoStatusCard.tsx +17 -15
  46. package/src/components/custom/Workout/MuscleGroupChip.tsx +2 -4
  47. package/src/components/custom/Workout/PlaceholderStrip.tsx +5 -10
  48. package/src/components/custom/Workout/PrBadge.tsx +3 -3
  49. package/src/components/custom/Workout/PrHistoryModal.tsx +14 -16
  50. package/src/components/custom/Workout/ProgramPlanningPage.tsx +8 -12
  51. package/src/components/custom/Workout/README.md +50 -0
  52. package/src/components/custom/Workout/ReadinessCheck.tsx +13 -11
  53. package/src/components/custom/Workout/RestTimer.test.tsx +41 -10
  54. package/src/components/custom/Workout/RestTimer.tsx +55 -49
  55. package/src/components/custom/Workout/SetRow.tsx +20 -8
  56. package/src/components/custom/Workout/StrengthTrendChart.tsx +15 -17
  57. package/src/components/custom/Workout/TempoBar.stories.tsx +95 -0
  58. package/src/components/custom/Workout/TempoBar.test.tsx +103 -0
  59. package/src/components/custom/Workout/TempoBar.tsx +215 -0
  60. package/src/components/custom/Workout/TempoDisplay.stories.tsx +69 -2
  61. package/src/components/custom/Workout/TempoDisplay.test.tsx +35 -0
  62. package/src/components/custom/Workout/TempoDisplay.tsx +104 -1
  63. package/src/components/custom/Workout/TrainingStatusPage.tsx +8 -17
  64. package/src/components/custom/Workout/VelocityStrip.test.tsx +89 -2
  65. package/src/components/custom/Workout/VelocityStrip.tsx +210 -43
  66. package/src/components/custom/Workout/WeekRow.test.tsx +2 -2
  67. package/src/components/custom/Workout/WeekRow.tsx +2 -1
  68. package/src/components/custom/Workout/WeightBadge.test.tsx +2 -2
  69. package/src/components/custom/Workout/WeightBadge.tsx +2 -2
  70. package/src/components/custom/Workout/WorkoutCard.tsx +3 -8
  71. package/src/components/custom/Workout/icons.tsx +68 -0
  72. package/src/components/custom/Workout/index.ts +47 -47
  73. package/src/index.ts +3 -2
  74. package/src/pages.ts +61 -0
  75. package/src/test/nativewind-stub.ts +13 -0
  76. package/src/test/stories-smoke.test.tsx +50 -0
  77. package/src/theme/ThemeProvider.test.tsx +24 -0
  78. package/src/theme/ThemeProvider.tsx +50 -0
  79. package/src/theme/barrel.ts +53 -0
  80. package/src/theme/index.ts +8 -41
  81. package/src/theme/native-theming-guard.test.ts +117 -0
  82. package/src/theme/resolve-color.ts +19 -0
  83. package/dist/bodymap-BhG55xHM.d.mts +0 -318
  84. package/dist/bodymap-BhG55xHM.d.ts +0 -318
  85. package/dist/chunk-7XPB4NAO.mjs +0 -1013
  86. package/dist/chunk-7XPB4NAO.mjs.map +0 -1
  87. package/dist/chunk-P7TSQUN6.mjs +0 -846
  88. package/dist/chunk-P7TSQUN6.mjs.map +0 -1
  89. package/dist/chunk-TOD2WQBG.mjs +0 -1048
  90. package/dist/chunk-TOD2WQBG.mjs.map +0 -1
package/dist/bodymap.js CHANGED
@@ -16,6 +16,382 @@ function cn(...inputs) {
16
16
  return tailwindMerge.twMerge(clsx.clsx(inputs));
17
17
  }
18
18
 
19
+ // src/theme/tokens/primitives.ts
20
+ var primitiveColors = {
21
+ // Blue scale (primary brand)
22
+ blue: {
23
+ 400: "#60A5FA",
24
+ 600: "#5048E5",
25
+ // Primary main
26
+ 700: "#3832A0"},
27
+ // Teal scale (success)
28
+ teal: {
29
+ 50: "#F0FDFA",
30
+ 400: "#43C6B7",
31
+ // Success light
32
+ 500: "#14B8A6",
33
+ 700: "#0E8074"},
34
+ // Red scale (error)
35
+ red: {
36
+ 50: "#FEF2F2",
37
+ 400: "#DA6868",
38
+ // Error light
39
+ 500: "#EF4444",
40
+ 600: "#D14343",
41
+ // Error main
42
+ 700: "#922E2E"},
43
+ // Amber scale (warning)
44
+ amber: {
45
+ 50: "#FFFBEB",
46
+ 400: "#FFBF4C",
47
+ // Warning light
48
+ 500: "#FFB020",
49
+ // Warning main
50
+ 600: "#B27B16"},
51
+ // Sky/Blue scale (info)
52
+ sky: {
53
+ 50: "#F0F9FF",
54
+ 400: "#64B6F7",
55
+ // Info light
56
+ 500: "#2196F3",
57
+ 700: "#0B79D0"},
58
+ // Neutral/Gray scale
59
+ neutral: {
60
+ 50: "#FAFAFA",
61
+ 100: "#F3F4F6",
62
+ 300: "#D1D5DB",
63
+ 400: "#9CA3AF",
64
+ 500: "#6B7280",
65
+ 600: "#4B5563",
66
+ 900: "#111827"},
67
+ // Orange scale (accent/brand color)
68
+ accent: {
69
+ 200: "#FF9630",
70
+ 300: "#FF8500",
71
+ 400: "#FF7900",
72
+ 500: "#F56C00",
73
+ 600: "#E06D10",
74
+ 700: "#D0620C"},
75
+ // Charcoal scale (dark backgrounds)
76
+ charcoal: {
77
+ 300: "#2C2C2C",
78
+ 400: "#1F1F1F",
79
+ 500: "#1C1C1C",
80
+ 600: "#191919",
81
+ 700: "#161616",
82
+ 900: "#101010"
83
+ },
84
+ // Steel scale (cool accent)
85
+ steel: {
86
+ 300: "#678498",
87
+ 400: "#557488",
88
+ 500: "#406D87",
89
+ 600: "#39617A",
90
+ 700: "#32556D"},
91
+ // Pure colors
92
+ white: "#FFFFFF"};
93
+ var discreteRainbow = [
94
+ "#E8ECFB",
95
+ "#D9CCE3",
96
+ "#D1BBD7",
97
+ "#CAACCB",
98
+ "#BA8DB4",
99
+ "#AE76A3",
100
+ "#AA6F9E",
101
+ "#994F88",
102
+ "#882E72",
103
+ "#1965B0",
104
+ "#437DBF",
105
+ "#5289C7",
106
+ "#6195CF",
107
+ "#7BAFDE",
108
+ "#4EB265",
109
+ "#90C987",
110
+ "#CAE0AB",
111
+ "#F7F056",
112
+ "#F7CB45",
113
+ "#F6C141",
114
+ "#F4A736",
115
+ "#F1932D",
116
+ "#EE8026",
117
+ "#E8601C",
118
+ "#E65518",
119
+ "#DC050C",
120
+ "#A5170E",
121
+ "#72190E",
122
+ "#42150A"
123
+ ];
124
+
125
+ // src/theme/tokens/semantic.ts
126
+ var semanticColorsLight = {
127
+ // Brand colors (brand-*)
128
+ "brand-primary": primitiveColors.accent[400],
129
+ // #FF7900
130
+ "brand-primary-light": primitiveColors.accent[200],
131
+ // #FF9630
132
+ "brand-primary-dark": primitiveColors.accent[700],
133
+ // #D0620C
134
+ "brand-primary-subtle": "rgba(255, 121, 0, 0.08)",
135
+ "brand-primary-hover": primitiveColors.accent[500],
136
+ "brand-primary-active": primitiveColors.accent[600],
137
+ "brand-secondary": primitiveColors.steel[500],
138
+ // #406D87
139
+ "brand-secondary-light": primitiveColors.steel[300],
140
+ // #678498
141
+ "brand-secondary-dark": primitiveColors.steel[700],
142
+ // #32556D
143
+ "brand-secondary-subtle": "rgba(64, 109, 135, 0.08)",
144
+ "brand-secondary-hover": primitiveColors.steel[600],
145
+ "brand-secondary-active": primitiveColors.steel[700],
146
+ // Text on brand backgrounds (on-*)
147
+ "on-brand-primary": primitiveColors.white,
148
+ "on-brand-secondary": primitiveColors.white,
149
+ // Status colors (status-*)
150
+ "status-success": primitiveColors.teal[500],
151
+ // #14B8A6
152
+ "status-success-light": primitiveColors.teal[400],
153
+ // #43C6B7
154
+ "status-success-dark": primitiveColors.teal[700],
155
+ // #0E8074
156
+ "status-success-subtle": primitiveColors.teal[50],
157
+ "status-error": primitiveColors.red[600],
158
+ // #D14343
159
+ "status-error-light": primitiveColors.red[400],
160
+ // #DA6868
161
+ "status-error-dark": primitiveColors.red[700],
162
+ // #922E2E
163
+ "status-error-subtle": primitiveColors.red[50],
164
+ "status-warning": primitiveColors.amber[500],
165
+ // #FFB020
166
+ "status-warning-light": primitiveColors.amber[400],
167
+ // #FFBF4C
168
+ "status-warning-dark": primitiveColors.amber[600],
169
+ // #B27B16
170
+ "status-warning-subtle": primitiveColors.amber[50],
171
+ "status-info": primitiveColors.sky[500],
172
+ // #2196F3
173
+ "status-info-light": primitiveColors.sky[400],
174
+ // #64B6F7
175
+ "status-info-dark": primitiveColors.sky[700],
176
+ // #0B79D0
177
+ "status-info-subtle": primitiveColors.sky[50],
178
+ // Text on status backgrounds (on-status-*)
179
+ "on-status-success": primitiveColors.white,
180
+ "on-status-error": primitiveColors.white,
181
+ "on-status-warning": primitiveColors.white,
182
+ "on-status-info": primitiveColors.white,
183
+ // Result/outcome indicators (result-*)
184
+ "result-improve": "#4caf50",
185
+ // Green - positive outcome
186
+ "result-improve-light": "rgba(76, 175, 80, 0.12)",
187
+ "result-improve-dark": "#248a24",
188
+ "result-degrade": "#ef5350",
189
+ // Red - negative outcome
190
+ "result-degrade-light": "rgba(239, 83, 80, 0.12)",
191
+ "result-degrade-dark": "#b30000",
192
+ "result-inconclusive": "#9E9A97",
193
+ // Gray - no clear result
194
+ "result-inconclusive-light": "rgba(158, 154, 151, 0.12)",
195
+ "result-neutral": primitiveColors.neutral[500],
196
+ // Neutral baseline
197
+ // Text on result backgrounds (on-result-*)
198
+ "on-result-improve": primitiveColors.white,
199
+ "on-result-degrade": primitiveColors.white,
200
+ "on-result-inconclusive": primitiveColors.white,
201
+ // Data visualization colors (data-*)
202
+ // First 10 colors from discrete rainbow optimized for charts
203
+ "data-1": discreteRainbow[9],
204
+ // #1965B0 - Blue
205
+ "data-2": discreteRainbow[14],
206
+ // #4EB265 - Green
207
+ "data-3": discreteRainbow[17],
208
+ // #F7F056 - Yellow
209
+ "data-4": discreteRainbow[25],
210
+ // #DC050C - Red
211
+ "data-5": discreteRainbow[8],
212
+ // #882E72 - Purple
213
+ "data-6": discreteRainbow[20],
214
+ // #F4A736 - Orange
215
+ "data-7": discreteRainbow[13],
216
+ // #7BAFDE - Light Blue
217
+ "data-8": discreteRainbow[15],
218
+ // #90C987 - Light Green
219
+ "data-9": discreteRainbow[3],
220
+ // #CAACCB - Lavender
221
+ "data-10": discreteRainbow[22],
222
+ // #EE8026 - Dark Orange
223
+ // Text colors (text-*)
224
+ "text-primary": "#121828",
225
+ "text-secondary": "#65748B",
226
+ "text-tertiary": primitiveColors.neutral[400],
227
+ "text-disabled": "rgba(55, 65, 81, 0.48)",
228
+ "text-inverse": primitiveColors.white,
229
+ "text-link": primitiveColors.blue[600],
230
+ "text-link-hover": primitiveColors.blue[700],
231
+ // Surface colors (surface-*) - for elevated containers
232
+ "surface-base": primitiveColors.white,
233
+ "surface-elevated": primitiveColors.neutral[50],
234
+ // #FAFAFA - slightly off-white for elevated cards
235
+ "surface-raised": primitiveColors.neutral[100],
236
+ // #F3F4F6 - light gray for raised cards
237
+ "surface-overlay": primitiveColors.white,
238
+ "surface-input": primitiveColors.neutral[50],
239
+ // Input field background (filled variant)
240
+ // Background colors (background-*)
241
+ "background-base": "#EBEBEB",
242
+ "background-default": primitiveColors.white,
243
+ "background-subtle": primitiveColors.neutral[50],
244
+ // Border colors (border-*)
245
+ "border-default": "#E8E9EB",
246
+ "border-subtle": primitiveColors.neutral[100],
247
+ "border-strong": primitiveColors.neutral[300],
248
+ "border-focus": primitiveColors.blue[600],
249
+ "border-input": primitiveColors.neutral[300],
250
+ // Input field border
251
+ "border-input-hover": primitiveColors.neutral[400],
252
+ // Input field border on hover
253
+ "border-input-focus": primitiveColors.blue[600],
254
+ // Input field border on focus
255
+ "border-input-error": primitiveColors.red[600],
256
+ // Input field border on error
257
+ // Interactive states (interactive-*)
258
+ "interactive-hover": "rgba(55, 65, 81, 0.04)",
259
+ "interactive-focus": "rgba(55, 65, 81, 0.12)",
260
+ "interactive-active": "rgba(55, 65, 81, 0.16)",
261
+ "interactive-selected": "rgba(55, 65, 81, 0.08)",
262
+ "interactive-disabled": "rgba(55, 65, 81, 0.12)",
263
+ "interactive-disabled-text": "rgba(55, 65, 81, 0.26)",
264
+ // Divider
265
+ "divider": "#E8E9EB",
266
+ // Avatar default
267
+ "avatar-background": primitiveColors.neutral[500],
268
+ "avatar-text": primitiveColors.white
269
+ };
270
+ var semanticColorsDark = {
271
+ // Brand colors stay the same in dark mode
272
+ "brand-primary": primitiveColors.accent[400],
273
+ "brand-primary-light": primitiveColors.accent[200],
274
+ "brand-primary-dark": primitiveColors.accent[700],
275
+ "brand-primary-subtle": "rgba(255, 121, 0, 0.12)",
276
+ "brand-primary-hover": primitiveColors.accent[300],
277
+ "brand-primary-active": primitiveColors.accent[200],
278
+ "brand-secondary": primitiveColors.steel[500],
279
+ "brand-secondary-light": primitiveColors.steel[300],
280
+ "brand-secondary-dark": primitiveColors.steel[700],
281
+ "brand-secondary-subtle": "rgba(64, 109, 135, 0.12)",
282
+ "brand-secondary-hover": primitiveColors.steel[400],
283
+ "brand-secondary-active": primitiveColors.steel[300],
284
+ // Text on brand backgrounds
285
+ "on-brand-primary": primitiveColors.white,
286
+ "on-brand-secondary": primitiveColors.white,
287
+ // Status colors
288
+ "status-success": primitiveColors.teal[500],
289
+ "status-success-light": primitiveColors.teal[400],
290
+ "status-success-dark": primitiveColors.teal[700],
291
+ "status-success-subtle": "rgba(20, 184, 166, 0.12)",
292
+ "status-error": primitiveColors.red[600],
293
+ "status-error-light": primitiveColors.red[400],
294
+ "status-error-dark": primitiveColors.red[700],
295
+ "status-error-subtle": "rgba(209, 67, 67, 0.12)",
296
+ "status-warning": primitiveColors.amber[500],
297
+ "status-warning-light": primitiveColors.amber[400],
298
+ "status-warning-dark": primitiveColors.amber[600],
299
+ "status-warning-subtle": "rgba(255, 176, 32, 0.12)",
300
+ "status-info": primitiveColors.sky[500],
301
+ "status-info-light": primitiveColors.sky[400],
302
+ "status-info-dark": primitiveColors.sky[700],
303
+ "status-info-subtle": "rgba(33, 150, 243, 0.12)",
304
+ // Text on status backgrounds
305
+ "on-status-success": primitiveColors.white,
306
+ "on-status-error": primitiveColors.white,
307
+ "on-status-warning": primitiveColors.white,
308
+ "on-status-info": primitiveColors.white,
309
+ // Result/outcome indicators (result-*)
310
+ "result-improve": "#4caf50",
311
+ "result-improve-light": "rgba(76, 175, 80, 0.16)",
312
+ "result-improve-dark": "#248a24",
313
+ "result-degrade": "#ef5350",
314
+ "result-degrade-light": "rgba(239, 83, 80, 0.16)",
315
+ "result-degrade-dark": "#b30000",
316
+ "result-inconclusive": "#9E9A97",
317
+ "result-inconclusive-light": "rgba(158, 154, 151, 0.16)",
318
+ "result-neutral": primitiveColors.neutral[400],
319
+ // Text on result backgrounds
320
+ "on-result-improve": primitiveColors.white,
321
+ "on-result-degrade": primitiveColors.white,
322
+ "on-result-inconclusive": primitiveColors.white,
323
+ // Data visualization colors (same in dark mode for consistency)
324
+ "data-1": discreteRainbow[9],
325
+ "data-2": discreteRainbow[14],
326
+ "data-3": discreteRainbow[17],
327
+ "data-4": discreteRainbow[25],
328
+ "data-5": discreteRainbow[8],
329
+ "data-6": discreteRainbow[20],
330
+ "data-7": discreteRainbow[13],
331
+ "data-8": discreteRainbow[15],
332
+ "data-9": discreteRainbow[3],
333
+ "data-10": discreteRainbow[22],
334
+ // Text colors - inverted for dark mode
335
+ "text-primary": primitiveColors.neutral[100],
336
+ "text-secondary": primitiveColors.neutral[400],
337
+ "text-tertiary": primitiveColors.neutral[500],
338
+ "text-disabled": "rgba(255, 255, 255, 0.38)",
339
+ "text-inverse": primitiveColors.neutral[900],
340
+ "text-link": "#828DF8",
341
+ "text-link-hover": primitiveColors.blue[400],
342
+ // Surface colors - dark backgrounds
343
+ "surface-base": primitiveColors.charcoal[700],
344
+ // #161616 - main surface
345
+ "surface-elevated": primitiveColors.charcoal[600],
346
+ // #191919 - elevated surface
347
+ "surface-raised": primitiveColors.charcoal[500],
348
+ // #1C1C1C - raised surface
349
+ "surface-overlay": primitiveColors.charcoal[600],
350
+ // #191919 - overlay surface
351
+ "surface-input": primitiveColors.charcoal[600],
352
+ // #191919 - input surface
353
+ // Background colors
354
+ "background-base": primitiveColors.charcoal[900],
355
+ // #101010 - darkest charcoal
356
+ "background-default": primitiveColors.charcoal[700],
357
+ // #161616 - main background
358
+ "background-subtle": primitiveColors.charcoal[500],
359
+ // #1C1C1C - subtle background
360
+ // Border colors
361
+ "border-default": primitiveColors.charcoal[400],
362
+ // #1F1F1F - default border
363
+ "border-subtle": primitiveColors.charcoal[500],
364
+ // #1C1C1C - subtle border
365
+ "border-strong": primitiveColors.charcoal[300],
366
+ // #2C2C2C - strong border
367
+ "border-focus": "#828DF8",
368
+ "border-input": primitiveColors.neutral[600],
369
+ "border-input-hover": primitiveColors.neutral[500],
370
+ "border-input-focus": "#828DF8",
371
+ "border-input-error": primitiveColors.red[500],
372
+ // Interactive states
373
+ "interactive-hover": "rgba(255, 255, 255, 0.04)",
374
+ "interactive-focus": "rgba(255, 255, 255, 0.12)",
375
+ "interactive-active": "rgba(255, 255, 255, 0.16)",
376
+ "interactive-selected": "rgba(255, 255, 255, 0.08)",
377
+ "interactive-disabled": "rgba(255, 255, 255, 0.12)",
378
+ "interactive-disabled-text": "rgba(255, 255, 255, 0.26)",
379
+ // Divider
380
+ "divider": primitiveColors.charcoal[400],
381
+ // #1F1F1F - divider color
382
+ // Avatar default
383
+ "avatar-background": primitiveColors.neutral[600],
384
+ "avatar-text": primitiveColors.white
385
+ };
386
+ function getSemanticColors(mode) {
387
+ return mode === "dark" ? semanticColorsDark : semanticColorsLight;
388
+ }
389
+
390
+ // src/theme/resolve-color.ts
391
+ function resolveColor(token, mode = "dark") {
392
+ return reactNative.Platform.OS === "web" ? `var(--color-${token})` : getSemanticColors(mode)[token];
393
+ }
394
+
19
395
  // src/theme/workout-tokens.ts
20
396
  var WORKOUT_TOKENS = {
21
397
  // BodyMap volume heatmap scale (drive dynamic SVG fills, so inline values).
@@ -241,8 +617,6 @@ var Body = BodyHighlighter__default.default.default ?? BodyHighlighter__default.
241
617
  var OUTLINE_FILL = "rgba(255,255,255,0.08)";
242
618
  var OUTLINE_BORDER = "rgba(255,255,255,0.12)";
243
619
  var BODY_SCALE = 0.8;
244
- var TEXT_PRIMARY = "var(--color-text-primary)";
245
- var TEXT_SECONDARY = "var(--color-text-secondary)";
246
620
  function buildSlugParts(data) {
247
621
  const bySlug = /* @__PURE__ */ new Map();
248
622
  for (const d of data) {
@@ -366,10 +740,10 @@ function BodyMap({
366
740
  legend.length === 0 ? /* @__PURE__ */ jsx(
367
741
  reactNative.Text,
368
742
  {
743
+ className: "text-text-secondary",
369
744
  style: {
370
745
  marginTop: 8,
371
746
  fontSize: 12,
372
- color: TEXT_SECONDARY,
373
747
  textAlign: "center",
374
748
  fontFamily: "Inter, sans-serif"
375
749
  },
@@ -418,7 +792,7 @@ function ViewToggle({ view, onViewChange }) {
418
792
  borderRadius: 9999,
419
793
  backgroundColor: active ? "rgba(255,121,0,0.16)" : "transparent",
420
794
  borderWidth: 1,
421
- borderColor: active ? "#FF7900" : "var(--color-border-strong)"
795
+ borderColor: active ? "#FF7900" : resolveColor("border-strong")
422
796
  },
423
797
  testID: `body-map-toggle-${side}`,
424
798
  children: /* @__PURE__ */ jsx(
@@ -428,7 +802,7 @@ function ViewToggle({ view, onViewChange }) {
428
802
  fontSize: 12,
429
803
  fontFamily: "Inter, sans-serif",
430
804
  fontWeight: active ? "700" : "500",
431
- color: active ? "#FF7900" : TEXT_SECONDARY,
805
+ color: active ? "#FF7900" : resolveColor("text-secondary"),
432
806
  textTransform: "capitalize"
433
807
  },
434
808
  children: side
@@ -451,6 +825,7 @@ function MuscleButton({ entry, highlighted, onMusclePress }) {
451
825
  accessibilityRole: "button",
452
826
  accessibilityLabel: label,
453
827
  "aria-pressed": highlighted,
828
+ className: "bg-surface-raised",
454
829
  style: {
455
830
  flexDirection: "row",
456
831
  alignItems: "center",
@@ -459,8 +834,7 @@ function MuscleButton({ entry, highlighted, onMusclePress }) {
459
834
  paddingVertical: 3,
460
835
  borderRadius: 9999,
461
836
  borderWidth: 1,
462
- borderColor: highlighted ? "#FF7900" : "var(--color-border-default)",
463
- backgroundColor: "var(--color-surface-raised)"
837
+ borderColor: highlighted ? "#FF7900" : resolveColor("border-default")
464
838
  },
465
839
  testID: `body-map-muscle-${entry.key}`,
466
840
  children: [
@@ -475,11 +849,11 @@ function MuscleButton({ entry, highlighted, onMusclePress }) {
475
849
  /* @__PURE__ */ jsx(
476
850
  reactNative.Text,
477
851
  {
852
+ className: "text-text-primary",
478
853
  style: {
479
854
  fontSize: 11,
480
855
  fontFamily: "Inter, sans-serif",
481
- fontWeight: "500",
482
- color: TEXT_PRIMARY
856
+ fontWeight: "500"
483
857
  },
484
858
  accessibilityElementsHidden: true,
485
859
  children: entry.name
@@ -761,14 +1135,7 @@ function Sparkline({
761
1135
  }
762
1136
 
763
1137
  // src/components/custom/Workout/BodyMapDetailPanel.tsx
764
- var SURFACE_ELEVATED = "var(--color-surface-elevated)";
765
- var SURFACE_RAISED = "var(--color-surface-raised)";
766
- var BORDER_STRONG = "var(--color-border-strong)";
767
- var BORDER_DEFAULT = "var(--color-border-default)";
768
1138
  var BRAND_PRIMARY2 = "#FF7900";
769
- var TEXT_PRIMARY2 = "var(--color-text-primary)";
770
- var TEXT_SECONDARY2 = "var(--color-text-secondary)";
771
- var TEXT_TERTIARY = "var(--color-text-tertiary)";
772
1139
  var VOLUME_GRADIENT = "linear-gradient(90deg, #2196F3 0%, #14B8A6 50%, #D14343 100%)";
773
1140
  var SLIDE_OFFSET = 400;
774
1141
  var BACKDROP_OPACITY = 0.4;
@@ -868,8 +1235,8 @@ function BodyMapDetailPanel({
868
1235
  accessibilityRole: "dialog",
869
1236
  accessibilityLabel: dialogLabel,
870
1237
  "aria-label": dialogLabel,
1238
+ className: "bg-surface-elevated",
871
1239
  style: {
872
- backgroundColor: SURFACE_ELEVATED,
873
1240
  borderTopLeftRadius: 16,
874
1241
  borderTopRightRadius: 16,
875
1242
  maxHeight: "88%",
@@ -890,7 +1257,8 @@ function BodyMapDetailPanel({
890
1257
  children: /* @__PURE__ */ jsx(
891
1258
  reactNative.View,
892
1259
  {
893
- style: { width: 40, height: 4, borderRadius: 2, backgroundColor: BORDER_STRONG },
1260
+ className: "bg-border-strong",
1261
+ style: { width: 40, height: 4, borderRadius: 2 },
894
1262
  accessibilityElementsHidden: true
895
1263
  }
896
1264
  )
@@ -915,11 +1283,11 @@ function BodyMapDetailPanel({
915
1283
  reactNative.Text,
916
1284
  {
917
1285
  accessibilityRole: "header",
1286
+ className: "text-text-primary",
918
1287
  style: {
919
1288
  fontSize: 16,
920
1289
  fontFamily: '"Space Grotesk", sans-serif',
921
- fontWeight: "700",
922
- color: TEXT_PRIMARY2
1290
+ fontWeight: "700"
923
1291
  },
924
1292
  testID: "body-map-detail-panel-title",
925
1293
  children: displayName
@@ -945,7 +1313,7 @@ function BodyMapDetailPanel({
945
1313
  hitSlop: 8,
946
1314
  style: { padding: 4, margin: -4 },
947
1315
  testID: "body-map-detail-panel-close",
948
- children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 22, lineHeight: 22, color: TEXT_SECONDARY2 }, children: "\xD7" })
1316
+ children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 22, lineHeight: 22 }, children: "\xD7" })
949
1317
  }
950
1318
  )
951
1319
  ]
@@ -954,7 +1322,8 @@ function BodyMapDetailPanel({
954
1322
  lastTrained != null && /* @__PURE__ */ jsx(
955
1323
  reactNative.Text,
956
1324
  {
957
- style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY2 },
1325
+ className: "text-text-secondary",
1326
+ style: { fontSize: 12, fontFamily: "Inter, sans-serif" },
958
1327
  testID: "body-map-detail-panel-last-trained",
959
1328
  children: `Last trained ${lastTrained}`
960
1329
  }
@@ -967,8 +1336,8 @@ function BodyMapDetailPanel({
967
1336
  style: { marginBottom: 6 },
968
1337
  accessibilityElementsHidden: true,
969
1338
  children: [
970
- /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, fontFamily: "Inter, sans-serif", fontWeight: "600", color: TEXT_TERTIARY }, children: `MEV ${landmarks.mev}` }),
971
- /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, fontFamily: "Inter, sans-serif", fontWeight: "600", color: TEXT_TERTIARY }, children: `MRV ${landmarks.mrv}` })
1339
+ /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-tertiary", style: { fontSize: 10, fontFamily: "Inter, sans-serif", fontWeight: "600" }, children: `MEV ${landmarks.mev}` }),
1340
+ /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-tertiary", style: { fontSize: 10, fontFamily: "Inter, sans-serif", fontWeight: "600" }, children: `MRV ${landmarks.mrv}` })
972
1341
  ]
973
1342
  }
974
1343
  ),
@@ -994,6 +1363,7 @@ function BodyMapDetailPanel({
994
1363
  /* @__PURE__ */ jsx(
995
1364
  reactNative.View,
996
1365
  {
1366
+ className: "border-text-primary bg-surface-elevated",
997
1367
  style: {
998
1368
  position: "absolute",
999
1369
  left: `${markerLeft}%`,
@@ -1002,8 +1372,6 @@ function BodyMapDetailPanel({
1002
1372
  height: 14,
1003
1373
  borderRadius: 7,
1004
1374
  borderWidth: 2,
1005
- borderColor: TEXT_PRIMARY2,
1006
- backgroundColor: SURFACE_ELEVATED,
1007
1375
  boxShadow: "0 0 4px rgba(0,0,0,0.5)"
1008
1376
  },
1009
1377
  accessibilityElementsHidden: true,
@@ -1018,11 +1386,11 @@ function BodyMapDetailPanel({
1018
1386
  /* @__PURE__ */ jsx(
1019
1387
  reactNative.Text,
1020
1388
  {
1389
+ className: "text-text-primary",
1021
1390
  style: {
1022
1391
  fontSize: 24,
1023
1392
  fontFamily: '"Space Grotesk", sans-serif',
1024
- fontWeight: "700",
1025
- color: TEXT_PRIMARY2
1393
+ fontWeight: "700"
1026
1394
  },
1027
1395
  testID: "body-map-detail-panel-set-count",
1028
1396
  children: weeklySets
@@ -1031,7 +1399,8 @@ function BodyMapDetailPanel({
1031
1399
  /* @__PURE__ */ jsx(
1032
1400
  reactNative.Text,
1033
1401
  {
1034
- style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY2 },
1402
+ className: "text-text-secondary",
1403
+ style: { fontSize: 12, fontFamily: "Inter, sans-serif" },
1035
1404
  testID: "body-map-detail-panel-mrv-suffix",
1036
1405
  children: `/ ${landmarks.mrv} MRV`
1037
1406
  }
@@ -1041,11 +1410,11 @@ function BodyMapDetailPanel({
1041
1410
  /* @__PURE__ */ jsx(
1042
1411
  reactNative.Text,
1043
1412
  {
1413
+ className: "text-text-tertiary",
1044
1414
  style: {
1045
1415
  fontSize: 10,
1046
1416
  fontFamily: "Inter, sans-serif",
1047
1417
  fontWeight: "600",
1048
- color: TEXT_TERTIARY,
1049
1418
  marginBottom: 6
1050
1419
  },
1051
1420
  accessibilityElementsHidden: true,
@@ -1058,11 +1427,11 @@ function BodyMapDetailPanel({
1058
1427
  /* @__PURE__ */ jsx(
1059
1428
  reactNative.Text,
1060
1429
  {
1430
+ className: "text-text-tertiary",
1061
1431
  style: {
1062
1432
  fontSize: 10,
1063
1433
  fontFamily: "Inter, sans-serif",
1064
1434
  fontWeight: "600",
1065
- color: TEXT_TERTIARY,
1066
1435
  marginBottom: 8
1067
1436
  },
1068
1437
  children: "CONTRIBUTING EXERCISES"
@@ -1071,23 +1440,22 @@ function BodyMapDetailPanel({
1071
1440
  contributingExercises.map((exercise, index) => /* @__PURE__ */ jsxs(
1072
1441
  reactNative.View,
1073
1442
  {
1074
- className: "flex-row items-center justify-between",
1443
+ className: "flex-row items-center justify-between bg-surface-raised border-border",
1075
1444
  style: {
1076
1445
  gap: 10,
1077
1446
  paddingVertical: 8,
1078
1447
  paddingHorizontal: 12,
1079
1448
  marginBottom: 6,
1080
1449
  borderRadius: 8,
1081
- backgroundColor: SURFACE_RAISED,
1082
- borderWidth: 1,
1083
- borderColor: BORDER_DEFAULT
1450
+ borderWidth: 1
1084
1451
  },
1085
1452
  testID: `body-map-detail-panel-contributing-${index}`,
1086
1453
  children: [
1087
1454
  /* @__PURE__ */ jsx(
1088
1455
  reactNative.Text,
1089
1456
  {
1090
- style: { flex: 1, fontSize: 13, fontFamily: "Inter, sans-serif", fontWeight: "600", color: TEXT_PRIMARY2 },
1457
+ className: "text-text-primary",
1458
+ style: { flex: 1, fontSize: 13, fontFamily: "Inter, sans-serif", fontWeight: "600" },
1091
1459
  testID: `body-map-detail-panel-contributing-${index}-name`,
1092
1460
  children: exercise.name
1093
1461
  }
@@ -1095,7 +1463,8 @@ function BodyMapDetailPanel({
1095
1463
  /* @__PURE__ */ jsx(
1096
1464
  reactNative.Text,
1097
1465
  {
1098
- style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY2 },
1466
+ className: "text-text-secondary",
1467
+ style: { fontSize: 12, fontFamily: "Inter, sans-serif" },
1099
1468
  testID: `body-map-detail-panel-contributing-${index}-detail`,
1100
1469
  children: `${exercise.sets} sets \xB7 ${Math.round(exercise.contributionWeight * 100)}%`
1101
1470
  }
@@ -1109,11 +1478,11 @@ function BodyMapDetailPanel({
1109
1478
  /* @__PURE__ */ jsx(
1110
1479
  reactNative.Text,
1111
1480
  {
1481
+ className: "text-text-tertiary",
1112
1482
  style: {
1113
1483
  fontSize: 10,
1114
1484
  fontFamily: "Inter, sans-serif",
1115
1485
  fontWeight: "600",
1116
- color: TEXT_TERTIARY,
1117
1486
  marginBottom: 8
1118
1487
  },
1119
1488
  children: "UPCOMING"
@@ -1129,7 +1498,8 @@ function BodyMapDetailPanel({
1129
1498
  /* @__PURE__ */ jsx(
1130
1499
  reactNative.Text,
1131
1500
  {
1132
- style: { flex: 1, fontSize: 13, fontFamily: "Inter, sans-serif", fontWeight: "600", color: TEXT_PRIMARY2 },
1501
+ className: "text-text-primary",
1502
+ style: { flex: 1, fontSize: 13, fontFamily: "Inter, sans-serif", fontWeight: "600" },
1133
1503
  testID: `body-map-detail-panel-upcoming-${index}-name`,
1134
1504
  children: exercise.name
1135
1505
  }
@@ -1137,7 +1507,8 @@ function BodyMapDetailPanel({
1137
1507
  /* @__PURE__ */ jsx(
1138
1508
  reactNative.Text,
1139
1509
  {
1140
- style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_TERTIARY },
1510
+ className: "text-text-tertiary",
1511
+ style: { fontSize: 12, fontFamily: "Inter, sans-serif" },
1141
1512
  testID: `body-map-detail-panel-upcoming-${index}-detail`,
1142
1513
  children: `${exercise.workoutName} \xB7 ${exercise.sets} sets`
1143
1514
  }
@@ -1176,23 +1547,6 @@ function BodyMapDetailPanel({
1176
1547
  }
1177
1548
  );
1178
1549
  }
1179
-
1180
- // src/theme/tokens/primitives.ts
1181
- var primitiveColors = {
1182
- // Neutral/Gray scale
1183
- neutral: {
1184
- 100: "#F3F4F6"},
1185
- // Charcoal scale (dark backgrounds)
1186
- charcoal: {
1187
- 600: "#191919"}};
1188
-
1189
- // src/theme/tokens/semantic.ts
1190
- var semanticColorsLight = {
1191
- // #FAFAFA - slightly off-white for elevated cards
1192
- "surface-raised": primitiveColors.neutral[100]};
1193
- var semanticColorsDark = {
1194
- // #161616 - main surface
1195
- "surface-elevated": primitiveColors.charcoal[600]};
1196
1550
  function hexToRgb(hex) {
1197
1551
  const cleaned = hex.replace("#", "");
1198
1552
  let r, g, b;
@@ -2048,14 +2402,11 @@ function StatusDot({
2048
2402
  var BRAND_PRIMARY3 = "#FF7900";
2049
2403
  var BRAND_PRIMARY_DARK = "#C45E00";
2050
2404
  var BRAND_PRIMARY_LIGHT = "#FFB066";
2051
- var TEXT_PRIMARY3 = "var(--color-text-primary)";
2052
- var TEXT_SECONDARY3 = "var(--color-text-secondary)";
2053
- var TEXT_TERTIARY2 = "var(--color-text-tertiary)";
2054
2405
  var SUCCESS = "#14B8A6";
2055
2406
  var WARNING = "#FFB020";
2056
2407
  var ERROR = "#D14343";
2057
2408
  var ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY3, BRAND_PRIMARY_LIGHT];
2058
- var CARD_GRADIENT = "linear-gradient(135deg, var(--color-surface-elevated) 0%, var(--color-surface-raised) 100%)";
2409
+ var CARD_GRADIENT = `linear-gradient(135deg, ${resolveColor("surface-elevated")} 0%, ${resolveColor("surface-raised")} 100%)`;
2059
2410
  var GAUGE_GRADIENT = "linear-gradient(90deg, rgba(20,184,166,0.25) 0%, rgba(255,176,32,0.25) 50%, rgba(209,67,67,0.25) 100%)";
2060
2411
  var STATUS_VARIANTS = {
2061
2412
  success: { bg: "rgba(20,184,166,0.15)", border: "rgba(20,184,166,0.3)", text: SUCCESS },
@@ -2082,7 +2433,8 @@ function renderCoachingText(text, highlights) {
2082
2433
  (part, index) => highlights.includes(part) ? /* @__PURE__ */ jsx(
2083
2434
  reactNative.Text,
2084
2435
  {
2085
- style: { fontWeight: "700", color: TEXT_PRIMARY3 },
2436
+ className: "text-text-primary",
2437
+ style: { fontWeight: "700" },
2086
2438
  children: part
2087
2439
  },
2088
2440
  `${part}-${index}`
@@ -2129,13 +2481,13 @@ function MetricCell({ metric }) {
2129
2481
  /* @__PURE__ */ jsx(
2130
2482
  reactNative.Text,
2131
2483
  {
2484
+ className: "text-text-tertiary",
2132
2485
  style: {
2133
2486
  fontSize: 10,
2134
2487
  fontFamily: "Inter, sans-serif",
2135
2488
  fontWeight: "600",
2136
2489
  letterSpacing: 0.5,
2137
- textTransform: "uppercase",
2138
- color: TEXT_TERTIARY2
2490
+ textTransform: "uppercase"
2139
2491
  },
2140
2492
  children: metric.label
2141
2493
  }
@@ -2143,12 +2495,12 @@ function MetricCell({ metric }) {
2143
2495
  /* @__PURE__ */ jsx(
2144
2496
  reactNative.Text,
2145
2497
  {
2498
+ className: "text-text-primary",
2146
2499
  style: {
2147
2500
  marginTop: 2,
2148
2501
  fontSize: 13,
2149
2502
  fontFamily: "Inter, sans-serif",
2150
- fontWeight: "600",
2151
- color: TEXT_PRIMARY3
2503
+ fontWeight: "600"
2152
2504
  },
2153
2505
  children: metric.value
2154
2506
  }
@@ -2180,13 +2532,13 @@ function Gauge({ gauge }) {
2180
2532
  /* @__PURE__ */ jsx(
2181
2533
  reactNative.Text,
2182
2534
  {
2535
+ className: "text-text-secondary",
2183
2536
  style: {
2184
2537
  fontSize: 10,
2185
2538
  fontFamily: "Inter, sans-serif",
2186
2539
  fontWeight: "500",
2187
2540
  letterSpacing: 0.5,
2188
- textTransform: "uppercase",
2189
- color: TEXT_SECONDARY3
2541
+ textTransform: "uppercase"
2190
2542
  },
2191
2543
  children: gauge.label
2192
2544
  }
@@ -2194,11 +2546,11 @@ function Gauge({ gauge }) {
2194
2546
  gauge.sublabel != null && /* @__PURE__ */ jsx(
2195
2547
  reactNative.Text,
2196
2548
  {
2549
+ className: "text-text-tertiary",
2197
2550
  style: {
2198
2551
  fontSize: 10,
2199
2552
  fontFamily: "Inter, sans-serif",
2200
- fontWeight: "500",
2201
- color: TEXT_TERTIARY2
2553
+ fontWeight: "500"
2202
2554
  },
2203
2555
  children: gauge.sublabel
2204
2556
  }
@@ -2235,6 +2587,7 @@ function Gauge({ gauge }) {
2235
2587
  /* @__PURE__ */ jsx(
2236
2588
  reactNative.View,
2237
2589
  {
2590
+ className: "border-text-primary",
2238
2591
  style: {
2239
2592
  position: "absolute",
2240
2593
  left: `${percentage}%`,
@@ -2244,7 +2597,6 @@ function Gauge({ gauge }) {
2244
2597
  height: 14,
2245
2598
  borderRadius: 9999,
2246
2599
  borderWidth: 2,
2247
- borderColor: TEXT_PRIMARY3,
2248
2600
  backgroundColor: markerColor,
2249
2601
  boxShadow: "0 0 4px rgba(0,0,0,0.5)"
2250
2602
  },
@@ -2307,12 +2659,12 @@ function MesoStatusCard({
2307
2659
  /* @__PURE__ */ jsx(
2308
2660
  reactNative.Text,
2309
2661
  {
2662
+ className: "text-text-primary",
2310
2663
  style: {
2311
2664
  flexShrink: 1,
2312
2665
  fontSize: 15,
2313
2666
  fontFamily: '"Space Grotesk", sans-serif',
2314
- fontWeight: "700",
2315
- color: TEXT_PRIMARY3
2667
+ fontWeight: "700"
2316
2668
  },
2317
2669
  testID: "meso-status-card-name",
2318
2670
  children: mesoName
@@ -2325,11 +2677,11 @@ function MesoStatusCard({
2325
2677
  /* @__PURE__ */ jsx(
2326
2678
  reactNative.Text,
2327
2679
  {
2680
+ className: "text-text-secondary",
2328
2681
  style: {
2329
2682
  marginTop: 4,
2330
2683
  fontSize: 12,
2331
- fontFamily: "Inter, sans-serif",
2332
- color: TEXT_SECONDARY3
2684
+ fontFamily: "Inter, sans-serif"
2333
2685
  },
2334
2686
  testID: "meso-status-card-subtitle",
2335
2687
  children: mesoSubtitle
@@ -2361,11 +2713,11 @@ function MesoStatusCard({
2361
2713
  children: /* @__PURE__ */ jsx(
2362
2714
  reactNative.Text,
2363
2715
  {
2716
+ className: "text-text-secondary",
2364
2717
  style: {
2365
2718
  fontSize: 12,
2366
2719
  lineHeight: 17,
2367
- fontFamily: "Inter, sans-serif",
2368
- color: TEXT_SECONDARY3
2720
+ fontFamily: "Inter, sans-serif"
2369
2721
  },
2370
2722
  children: renderCoachingText(coaching.text, coaching.highlights)
2371
2723
  }
@@ -2411,12 +2763,6 @@ function MesoStatusCard({
2411
2763
  }
2412
2764
 
2413
2765
  // src/components/custom/Workout/TrainingStatusPage.tsx
2414
- var SURFACE_ELEVATED2 = "var(--color-surface-elevated)";
2415
- var BORDER_DEFAULT2 = "var(--color-border-default)";
2416
- var TEXT_PRIMARY4 = "var(--color-text-primary)";
2417
- var TEXT_SECONDARY4 = "var(--color-text-secondary)";
2418
- var TEXT_TERTIARY3 = "var(--color-text-tertiary)";
2419
- var PAGE_BG = "var(--color-background-base)";
2420
2766
  var STATUS_ORDER = ["under", "maintenance", "productive", "over"];
2421
2767
  function deriveTrainingSummary(muscles) {
2422
2768
  const statusCounts = {
@@ -2452,25 +2798,24 @@ function SummaryCards({ summary }) {
2452
2798
  return /* @__PURE__ */ jsxs(
2453
2799
  reactNative.View,
2454
2800
  {
2801
+ className: "bg-surface-elevated border-border",
2455
2802
  style: {
2456
2803
  flexGrow: 1,
2457
2804
  flexBasis: "46%",
2458
2805
  padding: 12,
2459
2806
  borderRadius: 10,
2460
- backgroundColor: SURFACE_ELEVATED2,
2461
- borderWidth: 1,
2462
- borderColor: BORDER_DEFAULT2
2807
+ borderWidth: 1
2463
2808
  },
2464
2809
  testID: `training-status-page-summary-${key}`,
2465
2810
  children: [
2466
2811
  /* @__PURE__ */ jsx(
2467
2812
  reactNative.Text,
2468
2813
  {
2814
+ className: "text-text-primary",
2469
2815
  style: {
2470
2816
  fontSize: 22,
2471
2817
  fontFamily: '"Space Grotesk", sans-serif',
2472
- fontWeight: "700",
2473
- color: TEXT_PRIMARY4
2818
+ fontWeight: "700"
2474
2819
  },
2475
2820
  children: value
2476
2821
  }
@@ -2478,14 +2823,14 @@ function SummaryCards({ summary }) {
2478
2823
  /* @__PURE__ */ jsx(
2479
2824
  reactNative.Text,
2480
2825
  {
2826
+ className: "text-text-tertiary",
2481
2827
  style: {
2482
2828
  marginTop: 2,
2483
2829
  fontSize: 11,
2484
2830
  fontFamily: "Inter, sans-serif",
2485
2831
  fontWeight: "600",
2486
2832
  letterSpacing: 0.4,
2487
- textTransform: "uppercase",
2488
- color: TEXT_TERTIARY3
2833
+ textTransform: "uppercase"
2489
2834
  },
2490
2835
  children: label
2491
2836
  }
@@ -2525,10 +2870,10 @@ function StatusLegend() {
2525
2870
  /* @__PURE__ */ jsx(
2526
2871
  reactNative.Text,
2527
2872
  {
2873
+ className: "text-text-secondary",
2528
2874
  style: {
2529
2875
  fontSize: 11,
2530
2876
  fontFamily: "Inter, sans-serif",
2531
- color: TEXT_SECONDARY4,
2532
2877
  textTransform: "capitalize"
2533
2878
  },
2534
2879
  children: VOLUME_STATUS_LABELS[status]
@@ -2567,8 +2912,8 @@ function TrainingStatusPage({
2567
2912
  return /* @__PURE__ */ jsxs(
2568
2913
  reactNative.View,
2569
2914
  {
2570
- className,
2571
- style: { position: "relative", width: 390, backgroundColor: PAGE_BG },
2915
+ className: ["bg-background-base", className].filter(Boolean).join(" "),
2916
+ style: { position: "relative", width: 390 },
2572
2917
  accessibilityRole: "main",
2573
2918
  "aria-label": title,
2574
2919
  testID: "training-status-page",
@@ -2579,11 +2924,11 @@ function TrainingStatusPage({
2579
2924
  reactNative.Text,
2580
2925
  {
2581
2926
  accessibilityRole: "header",
2927
+ className: "text-text-primary",
2582
2928
  style: {
2583
2929
  fontSize: 20,
2584
2930
  fontFamily: '"Space Grotesk", sans-serif',
2585
- fontWeight: "700",
2586
- color: TEXT_PRIMARY4
2931
+ fontWeight: "700"
2587
2932
  },
2588
2933
  testID: "training-status-page-title",
2589
2934
  children: title
@@ -2594,10 +2939,9 @@ function TrainingStatusPage({
2594
2939
  /* @__PURE__ */ jsxs(
2595
2940
  reactNative.View,
2596
2941
  {
2942
+ className: "bg-surface-elevated border-border",
2597
2943
  style: {
2598
- backgroundColor: SURFACE_ELEVATED2,
2599
2944
  borderWidth: 1,
2600
- borderColor: BORDER_DEFAULT2,
2601
2945
  borderRadius: 12,
2602
2946
  padding: 12,
2603
2947
  gap: 12