@titan-design/react-ui 0.3.0 → 0.4.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 (52) hide show
  1. package/dist/bodymap.js +441 -97
  2. package/dist/bodymap.js.map +1 -1
  3. package/dist/bodymap.mjs +49 -62
  4. package/dist/bodymap.mjs.map +1 -1
  5. package/dist/{chunk-TOD2WQBG.mjs → chunk-2SISKTWM.mjs} +22 -43
  6. package/dist/chunk-2SISKTWM.mjs.map +1 -0
  7. package/dist/{chunk-P7TSQUN6.mjs → chunk-SNVKL5WZ.mjs} +42 -5
  8. package/dist/chunk-SNVKL5WZ.mjs.map +1 -0
  9. package/dist/index.d.mts +42 -2
  10. package/dist/index.d.ts +42 -2
  11. package/dist/index.js +431 -328
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +397 -314
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/theme/index.d.mts +28 -2
  16. package/dist/theme/index.d.ts +28 -2
  17. package/dist/theme/index.js +37 -0
  18. package/dist/theme/index.js.map +1 -1
  19. package/dist/theme/index.mjs +1 -1
  20. package/package.json +1 -1
  21. package/src/components/custom/Workout/ActiveWorkoutPage.tsx +10 -15
  22. package/src/components/custom/Workout/BodyMap.tsx +7 -8
  23. package/src/components/custom/Workout/BodyMapDetailPanel.tsx +25 -28
  24. package/src/components/custom/Workout/CapacityBandChart.tsx +2 -3
  25. package/src/components/custom/Workout/ExerciseCard.tsx +12 -27
  26. package/src/components/custom/Workout/ExerciseDetailPage.tsx +21 -27
  27. package/src/components/custom/Workout/InputBar.tsx +10 -11
  28. package/src/components/custom/Workout/MesoCard.tsx +2 -6
  29. package/src/components/custom/Workout/MesoStatusCard.tsx +17 -15
  30. package/src/components/custom/Workout/MuscleGroupChip.tsx +2 -4
  31. package/src/components/custom/Workout/PlaceholderStrip.tsx +2 -3
  32. package/src/components/custom/Workout/PrHistoryModal.tsx +12 -14
  33. package/src/components/custom/Workout/ProgramPlanningPage.tsx +8 -12
  34. package/src/components/custom/Workout/ReadinessCheck.tsx +13 -11
  35. package/src/components/custom/Workout/RestTimer.tsx +8 -7
  36. package/src/components/custom/Workout/SetRow.tsx +10 -7
  37. package/src/components/custom/Workout/StrengthTrendChart.tsx +15 -17
  38. package/src/components/custom/Workout/TempoBar.stories.tsx +95 -0
  39. package/src/components/custom/Workout/TempoBar.test.tsx +103 -0
  40. package/src/components/custom/Workout/TempoBar.tsx +215 -0
  41. package/src/components/custom/Workout/TrainingStatusPage.tsx +8 -17
  42. package/src/components/custom/Workout/VelocityStrip.tsx +7 -5
  43. package/src/components/custom/Workout/WeekRow.tsx +2 -1
  44. package/src/components/custom/Workout/WorkoutCard.tsx +3 -8
  45. package/src/components/custom/Workout/index.ts +9 -0
  46. package/src/test/nativewind-stub.ts +13 -0
  47. package/src/theme/ThemeProvider.test.tsx +24 -0
  48. package/src/theme/ThemeProvider.tsx +50 -0
  49. package/src/theme/index.ts +2 -0
  50. package/src/theme/resolve-color.ts +19 -0
  51. package/dist/chunk-P7TSQUN6.mjs.map +0 -1
  52. package/dist/chunk-TOD2WQBG.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ var clsx = require('clsx');
5
5
  var tailwindMerge = require('tailwind-merge');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var React24 = require('react');
8
+ var nativewind = require('nativewind');
8
9
  var lucideReact = require('lucide-react');
9
10
 
10
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -2160,6 +2161,21 @@ function validateCssPropertyManifest(candidate) {
2160
2161
  function isCssPropertyManifest(candidate) {
2161
2162
  return validateCssPropertyManifest(candidate).valid;
2162
2163
  }
2164
+ var MODE_VARS = {
2165
+ dark: nativewind.vars(darkThemeCSSVars),
2166
+ light: nativewind.vars(lightThemeCSSVars)
2167
+ };
2168
+ function ThemeProvider({
2169
+ mode = "dark",
2170
+ style,
2171
+ children,
2172
+ ...props
2173
+ }) {
2174
+ return /* @__PURE__ */ jsx(reactNative.View, { style: [MODE_VARS[mode], { flex: 1 }, style], ...props, children });
2175
+ }
2176
+ function resolveColor(token, mode = "dark") {
2177
+ return reactNative.Platform.OS === "web" ? `var(--color-${token})` : getSemanticColors(mode)[token];
2178
+ }
2163
2179
 
2164
2180
  // src/theme/presets/apply.ts
2165
2181
  function colorKeyToVar(key) {
@@ -4985,7 +5001,7 @@ function ToastProvider({
4985
5001
  return id;
4986
5002
  }, [defaultDuration, maxToasts]);
4987
5003
  const removeToast = React24.useCallback((id) => {
4988
- setToasts((prev) => prev.filter((t) => t.id !== id));
5004
+ setToasts((prev) => prev.filter((t2) => t2.id !== id));
4989
5005
  }, []);
4990
5006
  const removeAllToasts = React24.useCallback(() => {
4991
5007
  setToasts([]);
@@ -7121,14 +7137,13 @@ function SingleStrip({
7121
7137
  return /* @__PURE__ */ jsx(
7122
7138
  reactNative.View,
7123
7139
  {
7124
- className: cn(className),
7140
+ className: cn("border-border-strong", className),
7125
7141
  style: [
7126
7142
  {
7127
7143
  height: 3,
7128
7144
  backgroundColor: "transparent",
7129
7145
  borderWidth: 1,
7130
7146
  borderStyle: "dashed",
7131
- borderColor: "var(--color-border-strong)",
7132
7147
  borderRadius: 1,
7133
7148
  opacity: 0.5
7134
7149
  },
@@ -7162,13 +7177,13 @@ function SegmentedStrip({
7162
7177
  children: Array.from({ length: segments }, (_, i) => /* @__PURE__ */ jsx(
7163
7178
  reactNative.View,
7164
7179
  {
7180
+ className: "border-border-strong",
7165
7181
  style: {
7166
7182
  flex: 1,
7167
7183
  height: 3,
7168
7184
  backgroundColor: "transparent",
7169
7185
  borderWidth: 1,
7170
7186
  borderStyle: "dashed",
7171
- borderColor: "var(--color-border-strong)",
7172
7187
  borderRadius: 1,
7173
7188
  minWidth: 4
7174
7189
  },
@@ -7455,6 +7470,198 @@ function TempoDisplay({
7455
7470
  }
7456
7471
  );
7457
7472
  }
7473
+
7474
+ // src/utils/colors.ts
7475
+ function getStatusColor(status) {
7476
+ return `var(--color-status-${status})`;
7477
+ }
7478
+ function getResultColor(result) {
7479
+ return `var(--color-result-${result})`;
7480
+ }
7481
+ function alpha(color, opacity) {
7482
+ const clampedOpacity = Math.max(0, Math.min(1, opacity));
7483
+ if (color.startsWith("#")) {
7484
+ const hex = color.slice(1);
7485
+ let r, g, b;
7486
+ if (hex.length === 3) {
7487
+ r = parseInt(hex[0] + hex[0], 16);
7488
+ g = parseInt(hex[1] + hex[1], 16);
7489
+ b = parseInt(hex[2] + hex[2], 16);
7490
+ } else if (hex.length === 6) {
7491
+ r = parseInt(hex.slice(0, 2), 16);
7492
+ g = parseInt(hex.slice(2, 4), 16);
7493
+ b = parseInt(hex.slice(4, 6), 16);
7494
+ } else {
7495
+ return color;
7496
+ }
7497
+ return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
7498
+ }
7499
+ const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
7500
+ if (rgbMatch) {
7501
+ const [, r, g, b] = rgbMatch;
7502
+ return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
7503
+ }
7504
+ const rgbaMatch = color.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*[\d.]+\)/);
7505
+ if (rgbaMatch) {
7506
+ const [, r, g, b] = rgbaMatch;
7507
+ return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
7508
+ }
7509
+ return color;
7510
+ }
7511
+ function getLuminance(color) {
7512
+ if (!color.startsWith("#")) return "dark";
7513
+ const hex = color.slice(1);
7514
+ let r, g, b;
7515
+ if (hex.length === 3) {
7516
+ r = parseInt(hex[0] + hex[0], 16);
7517
+ g = parseInt(hex[1] + hex[1], 16);
7518
+ b = parseInt(hex[2] + hex[2], 16);
7519
+ } else if (hex.length === 6) {
7520
+ r = parseInt(hex.slice(0, 2), 16);
7521
+ g = parseInt(hex.slice(2, 4), 16);
7522
+ b = parseInt(hex.slice(4, 6), 16);
7523
+ } else {
7524
+ return "dark";
7525
+ }
7526
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
7527
+ return luminance > 0.5 ? "light" : "dark";
7528
+ }
7529
+ function getContrastText(backgroundColor) {
7530
+ return getLuminance(backgroundColor) === "light" ? "#000000" : "#FFFFFF";
7531
+ }
7532
+
7533
+ // src/components/custom/Workout/TempoBar.tsx
7534
+ var t = getSemanticColors("dark");
7535
+ var TEMPO_PACING = {
7536
+ behindThresholdPct: 0.15,
7537
+ minPhaseDurationMs: 500
7538
+ };
7539
+ function getTempoPacingState(elapsedMs, targetMs) {
7540
+ if (!targetMs || targetMs < TEMPO_PACING.minPhaseDurationMs) return "none";
7541
+ const ratio = elapsedMs / targetMs;
7542
+ if (ratio > 1 + TEMPO_PACING.behindThresholdPct) return "behind";
7543
+ return "on-pace";
7544
+ }
7545
+ function getTempoFillPct(elapsedMs, targetMs) {
7546
+ if (!targetMs) return 100;
7547
+ return Math.min(100, elapsedMs / targetMs * 100);
7548
+ }
7549
+ var PHASE_ORDER = ["concentric", "hold", "eccentric"];
7550
+ var PHASE_CONFIG = {
7551
+ concentric: { label: "Con", color: t["status-success"], flex: 2 },
7552
+ hold: { label: "Hold", color: t["brand-primary"], flex: 1 },
7553
+ eccentric: { label: "Ecc", color: t["status-warning"], flex: 3 }
7554
+ };
7555
+ function TempoBar({
7556
+ activePhase,
7557
+ phaseElapsedMs,
7558
+ completed,
7559
+ target,
7560
+ className,
7561
+ ...props
7562
+ }) {
7563
+ return /* @__PURE__ */ jsxs(reactNative.View, { className, testID: "tempo-bar", ...props, children: [
7564
+ /* @__PURE__ */ jsx(reactNative.View, { style: { flexDirection: "row", marginBottom: 4 }, children: PHASE_ORDER.map((phase) => {
7565
+ const config = PHASE_CONFIG[phase];
7566
+ return /* @__PURE__ */ jsx(reactNative.View, { style: { flex: config.flex, alignItems: "center" }, children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, color: t["text-disabled"] }, children: config.label }) }, phase);
7567
+ }) }),
7568
+ /* @__PURE__ */ jsx(reactNative.View, { style: { flexDirection: "row", gap: 2, height: 20 }, children: PHASE_ORDER.map((phase) => {
7569
+ const config = PHASE_CONFIG[phase];
7570
+ const isActive = activePhase === phase;
7571
+ const completedMs = completed?.[phase];
7572
+ const targetSec = target?.[phase];
7573
+ const targetMs = targetSec != null ? targetSec * 1e3 : null;
7574
+ return /* @__PURE__ */ jsx(
7575
+ reactNative.View,
7576
+ {
7577
+ style: {
7578
+ flex: config.flex,
7579
+ backgroundColor: alpha("#ffffff", 0.06),
7580
+ borderRadius: 4,
7581
+ overflow: "hidden"
7582
+ },
7583
+ children: isActive ? /* @__PURE__ */ jsx(
7584
+ ActiveSegment,
7585
+ {
7586
+ config,
7587
+ phaseElapsedMs,
7588
+ targetMs
7589
+ }
7590
+ ) : completedMs != null ? /* @__PURE__ */ jsx(CompletedSegment, { config, completedMs, targetMs }) : null
7591
+ },
7592
+ phase
7593
+ );
7594
+ }) })
7595
+ ] });
7596
+ }
7597
+ function ActiveSegment({
7598
+ config,
7599
+ phaseElapsedMs,
7600
+ targetMs
7601
+ }) {
7602
+ const pacing = getTempoPacingState(phaseElapsedMs, targetMs);
7603
+ const barColor = pacing === "behind" ? t["status-error"] : config.color;
7604
+ const fillPct = getTempoFillPct(phaseElapsedMs, targetMs);
7605
+ const label = targetMs ? `${formatDuration(phaseElapsedMs)} / ${formatDuration(targetMs)}` : formatDuration(phaseElapsedMs);
7606
+ return /* @__PURE__ */ jsxs(reactNative.View, { style: { height: "100%", position: "relative" }, testID: `tempo-segment-active-${config.label}`, children: [
7607
+ /* @__PURE__ */ jsx(
7608
+ reactNative.View,
7609
+ {
7610
+ style: {
7611
+ position: "absolute",
7612
+ left: 0,
7613
+ top: 0,
7614
+ bottom: 0,
7615
+ width: `${fillPct}%`,
7616
+ backgroundColor: alpha(barColor, 0.3),
7617
+ borderRadius: 4
7618
+ }
7619
+ }
7620
+ ),
7621
+ /* @__PURE__ */ jsx(
7622
+ reactNative.View,
7623
+ {
7624
+ style: {
7625
+ height: "100%",
7626
+ flexDirection: "row",
7627
+ alignItems: "center",
7628
+ justifyContent: "center"
7629
+ },
7630
+ children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 12, fontWeight: "700", color: barColor }, children: label })
7631
+ }
7632
+ )
7633
+ ] });
7634
+ }
7635
+ function CompletedSegment({
7636
+ config,
7637
+ completedMs,
7638
+ targetMs
7639
+ }) {
7640
+ const pacing = getTempoPacingState(completedMs, targetMs);
7641
+ const hitTarget = pacing !== "behind";
7642
+ const indicator = targetMs && targetMs >= TEMPO_PACING.minPhaseDurationMs ? hitTarget ? " \u2713" : " \u2717" : "";
7643
+ return /* @__PURE__ */ jsx(
7644
+ reactNative.View,
7645
+ {
7646
+ style: {
7647
+ height: "100%",
7648
+ flexDirection: "row",
7649
+ alignItems: "center",
7650
+ justifyContent: "center",
7651
+ backgroundColor: alpha(config.color, 0.15)
7652
+ },
7653
+ testID: `tempo-segment-completed-${config.label}`,
7654
+ children: /* @__PURE__ */ jsxs(reactNative.Text, { style: { fontSize: 12, fontWeight: "500", color: alpha(config.color, 0.7) }, children: [
7655
+ formatDuration(completedMs),
7656
+ indicator
7657
+ ] })
7658
+ }
7659
+ );
7660
+ }
7661
+ function formatDuration(ms) {
7662
+ const s = ms / 1e3;
7663
+ return s < 10 ? s.toFixed(1) : Math.round(s).toString();
7664
+ }
7458
7665
  function getDotColor(deviation) {
7459
7666
  const abs = Math.abs(deviation);
7460
7667
  if (deviation < -0.3) return "#14B8A6";
@@ -7937,7 +8144,7 @@ function VelocityStrip({
7937
8144
  const stripContent = /* @__PURE__ */ jsxs(
7938
8145
  reactNative.Animated.View,
7939
8146
  {
7940
- className,
8147
+ className: [className, expanded ? "bg-surface-raised" : "bg-transparent"].filter(Boolean).join(" "),
7941
8148
  style: [
7942
8149
  {
7943
8150
  height: heightAnim,
@@ -7948,7 +8155,6 @@ function VelocityStrip({
7948
8155
  paddingBottom: expanded ? 24 : 0,
7949
8156
  paddingHorizontal: expanded ? 6 : 0,
7950
8157
  paddingVertical: expanded ? void 0 : 8,
7951
- backgroundColor: expanded ? "var(--color-surface-raised)" : "transparent",
7952
8158
  overflow: expanded ? "visible" : "hidden"
7953
8159
  }
7954
8160
  ],
@@ -7972,7 +8178,8 @@ function VelocityStrip({
7972
8178
  expanded && /* @__PURE__ */ jsx(reactNative.Animated.View, { style: { opacity: labelOpacity, alignItems: "center", position: "absolute", top: -13, left: 0, right: 0 }, accessibilityElementsHidden: true, children: /* @__PURE__ */ jsx(
7973
8179
  reactNative.Text,
7974
8180
  {
7975
- style: { fontSize: 8, fontWeight: "600", color: "var(--color-text-secondary)" },
8181
+ className: "text-text-secondary",
8182
+ style: { fontSize: 8, fontWeight: "600" },
7976
8183
  testID: `velocity-label-${i}`,
7977
8184
  children: formatVelocity(v)
7978
8185
  }
@@ -8032,9 +8239,9 @@ function VelocityStrip({
8032
8239
  /* @__PURE__ */ jsxs(
8033
8240
  reactNative.Text,
8034
8241
  {
8242
+ className: "text-text-secondary",
8035
8243
  style: {
8036
8244
  fontSize: 10,
8037
- color: "var(--color-text-secondary)",
8038
8245
  fontFamily: "Inter, sans-serif"
8039
8246
  },
8040
8247
  children: [
@@ -8050,9 +8257,9 @@ function VelocityStrip({
8050
8257
  /* @__PURE__ */ jsxs(
8051
8258
  reactNative.Text,
8052
8259
  {
8260
+ className: "text-text-secondary",
8053
8261
  style: {
8054
8262
  fontSize: 10,
8055
- color: "var(--color-text-secondary)",
8056
8263
  fontFamily: "Inter, sans-serif",
8057
8264
  ...getLossStyle(loss)
8058
8265
  },
@@ -8102,16 +8309,14 @@ function MuscleGroupChip({
8102
8309
  const content = /* @__PURE__ */ jsxs(
8103
8310
  reactNative.View,
8104
8311
  {
8105
- className,
8312
+ className: ["bg-surface-raised border-border", className].filter(Boolean).join(" "),
8106
8313
  style: {
8107
8314
  flexDirection: "row",
8108
8315
  alignItems: "center",
8109
8316
  borderRadius: 9999,
8110
8317
  paddingHorizontal: 9,
8111
8318
  paddingVertical: 3,
8112
- backgroundColor: "var(--color-surface-raised)",
8113
- borderWidth: 1,
8114
- borderColor: "var(--color-border-default)"
8319
+ borderWidth: 1
8115
8320
  },
8116
8321
  accessibilityLabel: onPress ? void 0 : `${name}, volume status: ${statusLabel}`,
8117
8322
  testID: "muscle-group-chip",
@@ -8135,11 +8340,11 @@ function MuscleGroupChip({
8135
8340
  /* @__PURE__ */ jsx(
8136
8341
  reactNative.Text,
8137
8342
  {
8343
+ className: "text-text-secondary",
8138
8344
  style: {
8139
8345
  fontFamily: "Inter, sans-serif",
8140
8346
  fontWeight: "500",
8141
- fontSize: 11,
8142
- color: "var(--color-text-secondary)"
8347
+ fontSize: 11
8143
8348
  },
8144
8349
  accessibilityElementsHidden: true,
8145
8350
  children: name
@@ -8389,11 +8594,11 @@ function SetRow({
8389
8594
  ) : /* @__PURE__ */ jsx(
8390
8595
  reactNative.Text,
8391
8596
  {
8597
+ className: "text-text-secondary",
8392
8598
  style: {
8393
8599
  fontSize: 13,
8394
8600
  fontWeight: "600",
8395
- fontFamily: "Inter, sans-serif",
8396
- color: "var(--color-text-secondary)"
8601
+ fontFamily: "Inter, sans-serif"
8397
8602
  },
8398
8603
  children: setNumber
8399
8604
  }
@@ -8408,10 +8613,10 @@ function SetRow({
8408
8613
  children: /* @__PURE__ */ jsx(
8409
8614
  reactNative.Text,
8410
8615
  {
8616
+ className: "text-text-secondary",
8411
8617
  style: {
8412
8618
  fontSize: 12,
8413
- fontFamily: "Inter, sans-serif",
8414
- color: "var(--color-text-secondary)"
8619
+ fontFamily: "Inter, sans-serif"
8415
8620
  },
8416
8621
  children: previous ? `${previous.reps} x ${roundWeight(previous.weight)}` : "\u2014"
8417
8622
  }
@@ -8426,11 +8631,11 @@ function SetRow({
8426
8631
  children: isActive && reps == null && targets ? /* @__PURE__ */ jsx(
8427
8632
  reactNative.Text,
8428
8633
  {
8634
+ className: "text-text-tertiary",
8429
8635
  style: {
8430
8636
  fontSize: 13,
8431
8637
  fontStyle: "italic",
8432
- fontFamily: "Inter, sans-serif",
8433
- color: "var(--color-text-tertiary)"
8638
+ fontFamily: "Inter, sans-serif"
8434
8639
  },
8435
8640
  testID: "set-row-target-reps",
8436
8641
  children: targets.reps
@@ -8438,11 +8643,11 @@ function SetRow({
8438
8643
  ) : /* @__PURE__ */ jsx(
8439
8644
  reactNative.Text,
8440
8645
  {
8646
+ className: reps != null ? "text-text-primary" : "text-text-tertiary",
8441
8647
  style: {
8442
8648
  fontSize: 14,
8443
8649
  fontWeight: "600",
8444
- fontFamily: "Inter, sans-serif",
8445
- color: reps != null ? "var(--color-text-primary)" : "var(--color-text-tertiary)"
8650
+ fontFamily: "Inter, sans-serif"
8446
8651
  },
8447
8652
  children: reps != null ? reps : "\u2014"
8448
8653
  }
@@ -8457,11 +8662,11 @@ function SetRow({
8457
8662
  children: isActive && weight == null && targets ? /* @__PURE__ */ jsx(
8458
8663
  reactNative.Text,
8459
8664
  {
8665
+ className: "text-text-tertiary",
8460
8666
  style: {
8461
8667
  fontSize: 13,
8462
8668
  fontStyle: "italic",
8463
- fontFamily: "Inter, sans-serif",
8464
- color: "var(--color-text-tertiary)"
8669
+ fontFamily: "Inter, sans-serif"
8465
8670
  },
8466
8671
  testID: "set-row-target-weight",
8467
8672
  children: roundWeight(targets.weight)
@@ -8469,11 +8674,11 @@ function SetRow({
8469
8674
  ) : /* @__PURE__ */ jsx(
8470
8675
  reactNative.Text,
8471
8676
  {
8677
+ className: weight != null ? "text-text-primary" : "text-text-tertiary",
8472
8678
  style: {
8473
8679
  fontSize: 14,
8474
8680
  fontWeight: "600",
8475
- fontFamily: "Inter, sans-serif",
8476
- color: weight != null ? "var(--color-text-primary)" : "var(--color-text-tertiary)"
8681
+ fontFamily: "Inter, sans-serif"
8477
8682
  },
8478
8683
  children: weight != null ? roundWeight(weight) : "\u2014"
8479
8684
  }
@@ -8488,11 +8693,14 @@ function SetRow({
8488
8693
  children: /* @__PURE__ */ jsx(
8489
8694
  reactNative.Text,
8490
8695
  {
8696
+ className: rpe != null ? void 0 : "text-text-tertiary",
8491
8697
  style: {
8492
8698
  fontSize: 13,
8493
8699
  fontWeight: "600",
8494
8700
  fontFamily: "Inter, sans-serif",
8495
- color: rpe != null ? rpeColor(rpe) : "var(--color-text-tertiary)"
8701
+ // rpeColor returns a concrete hex (native-safe); only the tertiary
8702
+ // fallback needs the className token.
8703
+ color: rpe != null ? rpeColor(rpe) : void 0
8496
8704
  },
8497
8705
  children: rpe != null ? roundRpe(rpe) : "\u2014"
8498
8706
  }
@@ -8538,18 +8746,14 @@ function SetRow({
8538
8746
  );
8539
8747
  }
8540
8748
  var BRAND_PRIMARY2 = "#FF7900";
8541
- var TEXT_PRIMARY = "var(--color-text-primary)";
8542
- var TEXT_TERTIARY2 = "var(--color-text-tertiary)";
8749
+ var INPUT_CLASSNAME = "bg-surface-raised border-border-strong text-text-primary";
8543
8750
  var inputStyle = {
8544
8751
  fontSize: 14,
8545
8752
  fontWeight: "600",
8546
8753
  fontFamily: "Inter, sans-serif",
8547
- backgroundColor: "var(--color-surface-raised)",
8548
8754
  borderWidth: 1,
8549
- borderColor: "var(--color-border-strong)",
8550
8755
  borderRadius: 6,
8551
8756
  textAlign: "center",
8552
- color: TEXT_PRIMARY,
8553
8757
  paddingVertical: 5,
8554
8758
  paddingHorizontal: 2
8555
8759
  };
@@ -8571,11 +8775,11 @@ function InputBar({
8571
8775
  return /* @__PURE__ */ jsxs(
8572
8776
  reactNative.View,
8573
8777
  {
8778
+ className: "bg-surface-elevated",
8574
8779
  style: {
8575
8780
  width: "100%",
8576
- backgroundColor: "var(--color-surface-elevated)",
8577
8781
  borderTopWidth: 1,
8578
- borderTopColor: "var(--color-border-default)",
8782
+ borderTopColor: resolveColor("border-default"),
8579
8783
  paddingTop: 10,
8580
8784
  paddingHorizontal: 16,
8581
8785
  paddingBottom: 12,
@@ -8590,11 +8794,11 @@ function InputBar({
8590
8794
  /* @__PURE__ */ jsx(
8591
8795
  reactNative.Text,
8592
8796
  {
8797
+ className: "text-text-primary",
8593
8798
  style: {
8594
8799
  fontSize: 12,
8595
8800
  fontWeight: "700",
8596
- fontFamily: '"Space Grotesk", sans-serif',
8597
- color: TEXT_PRIMARY
8801
+ fontFamily: '"Space Grotesk", sans-serif'
8598
8802
  },
8599
8803
  testID: "input-bar-exercise-name",
8600
8804
  numberOfLines: 1,
@@ -8604,10 +8808,10 @@ function InputBar({
8604
8808
  /* @__PURE__ */ jsx(
8605
8809
  reactNative.Text,
8606
8810
  {
8811
+ className: "text-text-tertiary",
8607
8812
  style: {
8608
8813
  fontSize: 10,
8609
- fontFamily: "Inter, sans-serif",
8610
- color: TEXT_TERTIARY2
8814
+ fontFamily: "Inter, sans-serif"
8611
8815
  },
8612
8816
  testID: "input-bar-set-info",
8613
8817
  children: setLabel
@@ -8620,6 +8824,7 @@ function InputBar({
8620
8824
  {
8621
8825
  value: reps,
8622
8826
  onChangeText: onRepsChange,
8827
+ className: INPUT_CLASSNAME,
8623
8828
  style: { ...inputStyle, width: 36 },
8624
8829
  accessibilityLabel: "Reps",
8625
8830
  testID: "input-bar-reps",
@@ -8629,10 +8834,10 @@ function InputBar({
8629
8834
  /* @__PURE__ */ jsx(
8630
8835
  reactNative.Text,
8631
8836
  {
8837
+ className: "text-text-tertiary",
8632
8838
  style: {
8633
8839
  fontSize: 12,
8634
- fontFamily: "Inter, sans-serif",
8635
- color: TEXT_TERTIARY2
8840
+ fontFamily: "Inter, sans-serif"
8636
8841
  },
8637
8842
  children: "\xD7"
8638
8843
  }
@@ -8642,6 +8847,7 @@ function InputBar({
8642
8847
  {
8643
8848
  value: weight,
8644
8849
  onChangeText: onWeightChange,
8850
+ className: INPUT_CLASSNAME,
8645
8851
  style: { ...inputStyle, width: 52 },
8646
8852
  accessibilityLabel: `Weight in ${unit}`,
8647
8853
  testID: "input-bar-weight",
@@ -8651,11 +8857,11 @@ function InputBar({
8651
8857
  /* @__PURE__ */ jsx(
8652
8858
  reactNative.Text,
8653
8859
  {
8860
+ className: "text-text-tertiary",
8654
8861
  style: {
8655
8862
  fontSize: 12,
8656
8863
  fontWeight: "500",
8657
- fontFamily: "Inter, sans-serif",
8658
- color: TEXT_TERTIARY2
8864
+ fontFamily: "Inter, sans-serif"
8659
8865
  },
8660
8866
  testID: "input-bar-unit",
8661
8867
  children: unit
@@ -8715,11 +8921,11 @@ function RestTimer({
8715
8921
  return /* @__PURE__ */ jsxs(
8716
8922
  reactNative.View,
8717
8923
  {
8924
+ className: "bg-surface-raised",
8718
8925
  style: {
8719
8926
  width: "100%",
8720
- backgroundColor: "var(--color-surface-raised)",
8721
8927
  borderTopWidth: 1,
8722
- borderTopColor: "var(--color-border-default)",
8928
+ borderTopColor: resolveColor("border-default"),
8723
8929
  paddingVertical: 12,
8724
8930
  paddingHorizontal: 16
8725
8931
  },
@@ -8741,13 +8947,13 @@ function RestTimer({
8741
8947
  /* @__PURE__ */ jsx(
8742
8948
  reactNative.Text,
8743
8949
  {
8950
+ className: "text-text-secondary",
8744
8951
  style: {
8745
8952
  fontSize: 11,
8746
8953
  fontFamily: "Inter, sans-serif",
8747
8954
  fontWeight: "600",
8748
8955
  textTransform: "uppercase",
8749
- letterSpacing: 1,
8750
- color: "var(--color-text-secondary)"
8956
+ letterSpacing: 1
8751
8957
  },
8752
8958
  testID: "rest-timer-label",
8753
8959
  children: "REST"
@@ -8756,10 +8962,10 @@ function RestTimer({
8756
8962
  nextSetInfo != null && /* @__PURE__ */ jsx(
8757
8963
  reactNative.Text,
8758
8964
  {
8965
+ className: "text-text-tertiary",
8759
8966
  style: {
8760
8967
  fontSize: 11,
8761
8968
  fontFamily: "Inter, sans-serif",
8762
- color: "var(--color-text-tertiary)",
8763
8969
  marginTop: 2
8764
8970
  },
8765
8971
  testID: "rest-timer-next-set",
@@ -8770,11 +8976,11 @@ function RestTimer({
8770
8976
  /* @__PURE__ */ jsx(
8771
8977
  reactNative.Text,
8772
8978
  {
8979
+ className: "text-text-primary",
8773
8980
  style: {
8774
8981
  fontSize: 28,
8775
8982
  fontFamily: '"Space Grotesk", sans-serif',
8776
8983
  fontWeight: "700",
8777
- color: "var(--color-text-primary)",
8778
8984
  fontVariant: ["tabular-nums"],
8779
8985
  letterSpacing: -0.5
8780
8986
  },
@@ -8788,9 +8994,9 @@ function RestTimer({
8788
8994
  /* @__PURE__ */ jsx(
8789
8995
  reactNative.View,
8790
8996
  {
8997
+ className: "bg-border",
8791
8998
  style: {
8792
8999
  height: 3,
8793
- backgroundColor: "var(--color-border-default)",
8794
9000
  borderRadius: 2,
8795
9001
  marginBottom: 12
8796
9002
  },
@@ -8826,11 +9032,11 @@ function RestTimer({
8826
9032
  children: /* @__PURE__ */ jsx(
8827
9033
  reactNative.Text,
8828
9034
  {
9035
+ className: "text-text-secondary",
8829
9036
  style: {
8830
9037
  fontSize: 11,
8831
9038
  fontFamily: "Inter, sans-serif",
8832
- fontWeight: "600",
8833
- color: "var(--color-text-secondary)"
9039
+ fontWeight: "600"
8834
9040
  },
8835
9041
  children: "+30s"
8836
9042
  }
@@ -8869,19 +9075,6 @@ function RestTimer({
8869
9075
  }
8870
9076
  );
8871
9077
  }
8872
- var COLORS = {
8873
- // Theme-aware tokens: text foregrounds and this card's own surfaces/borders
8874
- // must flip together so text stays readable in both light and dark. The
8875
- // expanded/pressed surfaces are self-owned here (not from a themed Card), so
8876
- // hardcoding dark values would leave dark-on-dark once the text flips.
8877
- // react-native-web passes the CSS var through to the inline style.
8878
- textPrimary: "var(--color-text-primary)",
8879
- textSecondary: "var(--color-text-secondary)",
8880
- textTertiary: "var(--color-text-tertiary)",
8881
- surfaceRaised: "var(--color-surface-raised)",
8882
- surfaceElevated: "var(--color-surface-elevated)",
8883
- borderDefault: "var(--color-border-default)"
8884
- };
8885
9078
  function buildColumnHeaders(unit) {
8886
9079
  return ["SET", "PREV", "REPS", unit.toUpperCase(), "RPE"];
8887
9080
  }
@@ -8959,11 +9152,11 @@ function CollapsedCard({
8959
9152
  children: /* @__PURE__ */ jsxs(
8960
9153
  reactNative.View,
8961
9154
  {
9155
+ className: pressed ? "bg-surface-raised" : void 0,
8962
9156
  style: {
8963
9157
  padding: 12,
8964
9158
  paddingHorizontal: 14,
8965
9159
  cursor: "pointer",
8966
- backgroundColor: pressed ? COLORS.surfaceRaised : "transparent",
8967
9160
  ...borderRadius,
8968
9161
  ...supersetMargin
8969
9162
  },
@@ -8977,11 +9170,11 @@ function CollapsedCard({
8977
9170
  /* @__PURE__ */ jsx(
8978
9171
  reactNative.Text,
8979
9172
  {
9173
+ className: "text-text-primary",
8980
9174
  style: {
8981
9175
  fontSize: 14,
8982
9176
  fontFamily: '"Space Grotesk", sans-serif',
8983
- fontWeight: "700",
8984
- color: COLORS.textPrimary
9177
+ fontWeight: "700"
8985
9178
  },
8986
9179
  testID: "exercise-card-name",
8987
9180
  children: name
@@ -8991,10 +9184,10 @@ function CollapsedCard({
8991
9184
  summary && /* @__PURE__ */ jsx(
8992
9185
  reactNative.Text,
8993
9186
  {
9187
+ className: "text-text-secondary",
8994
9188
  style: {
8995
9189
  fontSize: 12,
8996
9190
  fontFamily: "Inter, sans-serif",
8997
- color: COLORS.textSecondary,
8998
9191
  marginRight: 8
8999
9192
  },
9000
9193
  testID: "exercise-card-summary",
@@ -9064,10 +9257,9 @@ function ExpandedCard({
9064
9257
  return /* @__PURE__ */ jsxs(
9065
9258
  reactNative.View,
9066
9259
  {
9260
+ className: "bg-surface-elevated border-border",
9067
9261
  style: {
9068
- backgroundColor: COLORS.surfaceElevated,
9069
9262
  borderWidth: 1,
9070
- borderColor: COLORS.borderDefault,
9071
9263
  ...borderRadius,
9072
9264
  ...supersetMargin
9073
9265
  },
@@ -9090,17 +9282,17 @@ function ExpandedCard({
9090
9282
  paddingHorizontal: 14,
9091
9283
  paddingBottom: 10,
9092
9284
  borderBottomWidth: 1,
9093
- borderBottomColor: COLORS.borderDefault
9285
+ borderBottomColor: resolveColor("border-default")
9094
9286
  },
9095
9287
  children: [
9096
9288
  /* @__PURE__ */ jsx(
9097
9289
  reactNative.Text,
9098
9290
  {
9291
+ className: "text-text-primary",
9099
9292
  style: {
9100
9293
  fontSize: 14,
9101
9294
  fontFamily: '"Space Grotesk", sans-serif',
9102
- fontWeight: "700",
9103
- color: COLORS.textPrimary
9295
+ fontWeight: "700"
9104
9296
  },
9105
9297
  testID: "exercise-card-name",
9106
9298
  children: name
@@ -9110,10 +9302,10 @@ function ExpandedCard({
9110
9302
  summary && /* @__PURE__ */ jsx(
9111
9303
  reactNative.Text,
9112
9304
  {
9305
+ className: "text-text-secondary",
9113
9306
  style: {
9114
9307
  fontSize: 12,
9115
9308
  fontFamily: "Inter, sans-serif",
9116
- color: COLORS.textSecondary,
9117
9309
  marginRight: 8
9118
9310
  },
9119
9311
  testID: "exercise-card-summary",
@@ -9164,13 +9356,13 @@ function ExpandedCard({
9164
9356
  children: /* @__PURE__ */ jsx(
9165
9357
  reactNative.Text,
9166
9358
  {
9359
+ className: "text-text-tertiary",
9167
9360
  style: {
9168
9361
  fontSize: 10,
9169
9362
  fontWeight: "600",
9170
9363
  fontFamily: "Inter, sans-serif",
9171
9364
  textTransform: "uppercase",
9172
- letterSpacing: 0.8,
9173
- color: COLORS.textTertiary
9365
+ letterSpacing: 0.8
9174
9366
  },
9175
9367
  children: header
9176
9368
  }
@@ -9210,11 +9402,11 @@ function UpcomingCard({
9210
9402
  /* @__PURE__ */ jsx(
9211
9403
  reactNative.Text,
9212
9404
  {
9405
+ className: "text-text-primary",
9213
9406
  style: {
9214
9407
  fontSize: 14,
9215
9408
  fontFamily: '"Space Grotesk", sans-serif',
9216
- fontWeight: "700",
9217
- color: COLORS.textPrimary
9409
+ fontWeight: "700"
9218
9410
  },
9219
9411
  testID: "exercise-card-name",
9220
9412
  children: name
@@ -9223,10 +9415,10 @@ function UpcomingCard({
9223
9415
  prescription && /* @__PURE__ */ jsx(
9224
9416
  reactNative.Text,
9225
9417
  {
9418
+ className: "text-text-secondary",
9226
9419
  style: {
9227
9420
  fontSize: 12,
9228
9421
  fontFamily: "Inter, sans-serif",
9229
- color: COLORS.textSecondary,
9230
9422
  marginLeft: 8
9231
9423
  },
9232
9424
  testID: "exercise-card-prescription",
@@ -9237,10 +9429,10 @@ function UpcomingCard({
9237
9429
  previousBest && /* @__PURE__ */ jsx(
9238
9430
  reactNative.Text,
9239
9431
  {
9432
+ className: "text-text-tertiary",
9240
9433
  style: {
9241
9434
  fontSize: 11,
9242
- fontFamily: "Inter, sans-serif",
9243
- color: COLORS.textTertiary
9435
+ fontFamily: "Inter, sans-serif"
9244
9436
  },
9245
9437
  testID: "exercise-card-previous-best",
9246
9438
  children: previousBest
@@ -9478,11 +9670,12 @@ function WeekRow({
9478
9670
  /* @__PURE__ */ jsx(
9479
9671
  reactNative.Text,
9480
9672
  {
9673
+ className: isCurrent ? void 0 : "text-text-primary",
9481
9674
  style: {
9482
9675
  fontSize: 13,
9483
9676
  fontWeight: "700",
9484
9677
  fontFamily: "Inter, sans-serif",
9485
- color: isCurrent ? BRAND_PRIMARY5 : "var(--color-text-primary)"
9678
+ color: isCurrent ? BRAND_PRIMARY5 : void 0
9486
9679
  },
9487
9680
  accessibilityElementsHidden: true,
9488
9681
  children: `W${weekNumber}`
@@ -9521,21 +9714,16 @@ function WeekRow({
9521
9714
  }
9522
9715
  );
9523
9716
  }
9524
- var COLORS2 = {
9525
- // Theme-aware foregrounds: resolve to a readable color in both light and dark
9526
- // (react-native-web passes the CSS var through to the inline style).
9527
- textPrimary: "var(--color-text-primary)",
9528
- textSecondary: "var(--color-text-secondary)",
9529
- textTertiary: "var(--color-text-tertiary)",
9717
+ var COLORS = {
9530
9718
  statusSuccess: "#14B8A6",
9531
9719
  brandPrimary: "#FF7900",
9532
9720
  borderDefault: "#1F1F1F",
9533
9721
  brandPrimarySubtle: "rgba(255,121,0,0.06)"
9534
9722
  };
9535
9723
  var statusBorderColors = {
9536
- completed: COLORS2.statusSuccess,
9537
- today: COLORS2.brandPrimary,
9538
- upcoming: COLORS2.borderDefault
9724
+ completed: COLORS.statusSuccess,
9725
+ today: COLORS.brandPrimary,
9726
+ upcoming: COLORS.borderDefault
9539
9727
  };
9540
9728
  var volumeStatusMap = {
9541
9729
  under: "behind",
@@ -9572,11 +9760,11 @@ function WorkoutCard({
9572
9760
  /* @__PURE__ */ jsx(
9573
9761
  reactNative.Text,
9574
9762
  {
9763
+ className: "text-text-primary",
9575
9764
  style: {
9576
9765
  fontSize: 15,
9577
9766
  fontFamily: '"Space Grotesk", sans-serif',
9578
- fontWeight: "700",
9579
- color: COLORS2.textPrimary
9767
+ fontWeight: "700"
9580
9768
  },
9581
9769
  testID: "workout-card-name",
9582
9770
  children: name
@@ -9586,10 +9774,10 @@ function WorkoutCard({
9586
9774
  /* @__PURE__ */ jsx(
9587
9775
  reactNative.Text,
9588
9776
  {
9777
+ className: "text-text-tertiary",
9589
9778
  style: {
9590
9779
  fontSize: 11,
9591
- fontFamily: "Inter, sans-serif",
9592
- color: COLORS2.textTertiary
9780
+ fontFamily: "Inter, sans-serif"
9593
9781
  },
9594
9782
  testID: "workout-card-date",
9595
9783
  children: date
@@ -9599,11 +9787,11 @@ function WorkoutCard({
9599
9787
  /* @__PURE__ */ jsx(
9600
9788
  reactNative.Text,
9601
9789
  {
9790
+ className: "text-text-secondary",
9602
9791
  style: {
9603
9792
  marginTop: 4,
9604
9793
  fontSize: 12,
9605
- fontFamily: "Inter, sans-serif",
9606
- color: COLORS2.textSecondary
9794
+ fontFamily: "Inter, sans-serif"
9607
9795
  },
9608
9796
  testID: "workout-card-stats",
9609
9797
  children: formatStats(totalSets, totalVolume, unit, duration)
@@ -9634,7 +9822,7 @@ function WorkoutCard({
9634
9822
  variant: "accent",
9635
9823
  elevation: 1,
9636
9824
  accentColor: statusBorderColors[status],
9637
- bgColor: isToday ? COLORS2.brandPrimarySubtle : void 0,
9825
+ bgColor: isToday ? COLORS.brandPrimarySubtle : void 0,
9638
9826
  className,
9639
9827
  style: isUpcoming ? { opacity: 0.6 } : void 0,
9640
9828
  testID: "workout-card",
@@ -9674,8 +9862,6 @@ var BRAND_PRIMARY6 = "#FF7900";
9674
9862
  var BRAND_PRIMARY_DARK = "#C45E00";
9675
9863
  var BRAND_PRIMARY_LIGHT = "#FFB066";
9676
9864
  var BORDER_DEFAULT = "#1F1F1F";
9677
- var TEXT_PRIMARY2 = "var(--color-text-primary)";
9678
- var TEXT_SECONDARY = "var(--color-text-secondary)";
9679
9865
  var ACCENT_STOPS = [BRAND_PRIMARY_DARK, BRAND_PRIMARY6, BRAND_PRIMARY_LIGHT];
9680
9866
  function heatmapColor(percentage) {
9681
9867
  const clamped = Math.max(0, Math.min(100, percentage));
@@ -9718,11 +9904,11 @@ function MesoCard({
9718
9904
  /* @__PURE__ */ jsx(
9719
9905
  reactNative.Text,
9720
9906
  {
9907
+ className: "text-text-primary",
9721
9908
  style: {
9722
9909
  fontSize: 15,
9723
9910
  fontFamily: '"Space Grotesk", sans-serif',
9724
- fontWeight: "700",
9725
- color: TEXT_PRIMARY2
9911
+ fontWeight: "700"
9726
9912
  },
9727
9913
  testID: "meso-card-name",
9728
9914
  children: name
@@ -9733,11 +9919,11 @@ function MesoCard({
9733
9919
  /* @__PURE__ */ jsx(
9734
9920
  reactNative.Text,
9735
9921
  {
9922
+ className: "text-text-secondary",
9736
9923
  style: {
9737
9924
  marginTop: 4,
9738
9925
  fontSize: 12,
9739
- fontFamily: "Inter, sans-serif",
9740
- color: TEXT_SECONDARY
9926
+ fontFamily: "Inter, sans-serif"
9741
9927
  },
9742
9928
  testID: "meso-card-subheader",
9743
9929
  children: `${split} \xB7 ${weekRange}`
@@ -9831,11 +10017,7 @@ function MesoCard({
9831
10017
  var BRAND_PRIMARY7 = "#FF7900";
9832
10018
  var RECENT_BORDER = "rgba(255,176,32,0.3)";
9833
10019
  var RECENT_GLOW = "0 0 12px rgba(255,176,32,0.06)";
9834
- var SURFACE_RAISED = "var(--color-surface-raised)";
9835
- var BORDER_DEFAULT2 = "var(--color-border-default)";
9836
- var TEXT_PRIMARY3 = "var(--color-text-primary)";
9837
- var TEXT_SECONDARY2 = "var(--color-text-secondary)";
9838
- var TEXT_TERTIARY3 = "var(--color-text-tertiary)";
10020
+ var BORDER_DEFAULT2 = resolveColor("border-default");
9839
10021
  var TYPE_LABELS = {
9840
10022
  e1rm: "e1RM",
9841
10023
  weight: "Weight",
@@ -9861,14 +10043,13 @@ function PrRecordRow({ record, index }) {
9861
10043
  {
9862
10044
  accessibilityRole: "text",
9863
10045
  accessibilityLabel: a11yLabel,
9864
- className: "flex-row items-center",
10046
+ className: "flex-row items-center bg-surface-raised",
9865
10047
  style: {
9866
10048
  gap: 10,
9867
10049
  paddingVertical: 10,
9868
10050
  paddingHorizontal: 12,
9869
10051
  marginBottom: 8,
9870
10052
  borderRadius: 8,
9871
- backgroundColor: SURFACE_RAISED,
9872
10053
  borderWidth: 1,
9873
10054
  borderColor: record.isRecent ? RECENT_BORDER : BORDER_DEFAULT2,
9874
10055
  ...record.isRecent ? { boxShadow: RECENT_GLOW } : {}
@@ -9879,12 +10060,12 @@ function PrRecordRow({ record, index }) {
9879
10060
  /* @__PURE__ */ jsx(
9880
10061
  reactNative.Text,
9881
10062
  {
10063
+ className: "text-text-secondary",
9882
10064
  style: {
9883
10065
  flex: 1,
9884
10066
  fontSize: 13,
9885
10067
  fontFamily: "Inter, sans-serif",
9886
- fontWeight: "600",
9887
- color: TEXT_SECONDARY2
10068
+ fontWeight: "600"
9888
10069
  },
9889
10070
  testID: `pr-history-modal-record-${index}-type`,
9890
10071
  children: label
@@ -9893,11 +10074,11 @@ function PrRecordRow({ record, index }) {
9893
10074
  /* @__PURE__ */ jsx(
9894
10075
  reactNative.Text,
9895
10076
  {
10077
+ className: "text-text-primary",
9896
10078
  style: {
9897
10079
  fontSize: 14,
9898
10080
  fontFamily: '"Space Grotesk", sans-serif',
9899
- fontWeight: "700",
9900
- color: TEXT_PRIMARY3
10081
+ fontWeight: "700"
9901
10082
  },
9902
10083
  testID: `pr-history-modal-record-${index}-value`,
9903
10084
  children: valueText
@@ -9906,12 +10087,12 @@ function PrRecordRow({ record, index }) {
9906
10087
  /* @__PURE__ */ jsx(
9907
10088
  reactNative.Text,
9908
10089
  {
10090
+ className: "text-text-tertiary",
9909
10091
  style: {
9910
10092
  minWidth: 64,
9911
10093
  textAlign: "right",
9912
10094
  fontSize: 11,
9913
- fontFamily: "Inter, sans-serif",
9914
- color: TEXT_TERTIARY3
10095
+ fontFamily: "Inter, sans-serif"
9915
10096
  },
9916
10097
  testID: `pr-history-modal-record-${index}-date`,
9917
10098
  children: record.date
@@ -9949,13 +10130,13 @@ function PrHistoryModal({
9949
10130
  reactNative.View,
9950
10131
  {
9951
10132
  accessibilityElementsHidden: true,
10133
+ className: "bg-border",
9952
10134
  style: {
9953
10135
  alignSelf: "center",
9954
10136
  width: 40,
9955
10137
  height: 4,
9956
10138
  borderRadius: 2,
9957
- marginTop: 8,
9958
- backgroundColor: BORDER_DEFAULT2
10139
+ marginTop: 8
9959
10140
  },
9960
10141
  testID: "pr-history-modal-handle"
9961
10142
  }
@@ -9971,11 +10152,11 @@ function PrHistoryModal({
9971
10152
  reactNative.Text,
9972
10153
  {
9973
10154
  accessibilityRole: "header",
10155
+ className: "text-text-primary",
9974
10156
  style: {
9975
10157
  fontSize: 16,
9976
10158
  fontFamily: '"Space Grotesk", sans-serif',
9977
- fontWeight: "700",
9978
- color: TEXT_PRIMARY3
10159
+ fontWeight: "700"
9979
10160
  },
9980
10161
  testID: "pr-history-modal-title",
9981
10162
  children: dialogLabel
@@ -9990,7 +10171,7 @@ function PrHistoryModal({
9990
10171
  hitSlop: 8,
9991
10172
  style: { padding: 4, margin: -4 },
9992
10173
  testID: "pr-history-modal-close",
9993
- children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 22, lineHeight: 22, color: TEXT_SECONDARY2 }, children: "\xD7" })
10174
+ children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 22, lineHeight: 22 }, children: "\xD7" })
9994
10175
  }
9995
10176
  )
9996
10177
  ]
@@ -9999,11 +10180,11 @@ function PrHistoryModal({
9999
10180
  /* @__PURE__ */ jsx(DrawerBody, { className: "px-4 pt-0 pb-4", children: records.length === 0 ? /* @__PURE__ */ jsx(reactNative.View, { style: { paddingVertical: 24 }, testID: "pr-history-modal-empty", children: /* @__PURE__ */ jsx(
10000
10181
  reactNative.Text,
10001
10182
  {
10183
+ className: "text-text-tertiary",
10002
10184
  style: {
10003
10185
  textAlign: "center",
10004
10186
  fontSize: 13,
10005
- fontFamily: "Inter, sans-serif",
10006
- color: TEXT_TERTIARY3
10187
+ fontFamily: "Inter, sans-serif"
10007
10188
  },
10008
10189
  children: "No personal records yet"
10009
10190
  }
@@ -10024,8 +10205,6 @@ var BRAND_PRIMARY_SUBTLE = "rgba(255,121,0,0.12)";
10024
10205
  var STATUS_SUCCESS = "#14B8A6";
10025
10206
  var STATUS_WARNING = "#FFB020";
10026
10207
  var STATUS_ERROR = "#D14343";
10027
- var TEXT_PRIMARY4 = "var(--color-text-primary)";
10028
- var TEXT_SECONDARY3 = "var(--color-text-secondary)";
10029
10208
  var EMOJI_SETS = {
10030
10209
  sleep: ["\u{1F634}", "\u{1F610}", "\u{1F642}", "\u{1F60A}", "\u{1F929}"],
10031
10210
  soreness: ["\u{1F635}", "\u{1F623}", "\u{1F610}", "\u{1F642}", "\u{1F4AA}"],
@@ -10057,7 +10236,8 @@ function EmojiSlider({ factor }) {
10057
10236
  /* @__PURE__ */ jsx(
10058
10237
  reactNative.Text,
10059
10238
  {
10060
- style: { fontSize: 12, fontWeight: "500", fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY3 },
10239
+ className: "text-text-secondary",
10240
+ style: { fontSize: 12, fontWeight: "500", fontFamily: "Inter, sans-serif" },
10061
10241
  testID: "readiness-check-factor-label",
10062
10242
  children: factor.label
10063
10243
  }
@@ -10081,14 +10261,15 @@ function EmojiSlider({ factor }) {
10081
10261
  accessibilityLabel: `${factor.label} level ${level} of 5`,
10082
10262
  "aria-checked": selected,
10083
10263
  testID: "readiness-check-emoji",
10264
+ className: selected ? void 0 : "border-border bg-surface-raised",
10084
10265
  style: ({ pressed }) => ({
10085
10266
  flex: 1,
10086
10267
  alignItems: "center",
10087
10268
  paddingVertical: 8,
10088
10269
  borderRadius: 8,
10089
10270
  borderWidth: 1,
10090
- borderColor: selected ? BRAND_PRIMARY8 : "var(--color-border-default)",
10091
- backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : "var(--color-surface-raised)",
10271
+ borderColor: selected ? BRAND_PRIMARY8 : void 0,
10272
+ backgroundColor: selected ? BRAND_PRIMARY_SUBTLE : void 0,
10092
10273
  opacity: selected ? 1 : pressed ? 0.8 : 0.55,
10093
10274
  transform: [{ scale: selected ? 1.06 : 1 }]
10094
10275
  }),
@@ -10109,13 +10290,13 @@ function ScoreGauge({ score }) {
10109
10290
  accessibilityRole: "image",
10110
10291
  accessibilityLabel: `Readiness score: ${score} out of 100`,
10111
10292
  testID: "readiness-check-score",
10293
+ className: "bg-surface-raised",
10112
10294
  style: {
10113
10295
  width: 60,
10114
10296
  height: 60,
10115
10297
  borderRadius: 30,
10116
10298
  borderWidth: 4,
10117
10299
  borderColor: color,
10118
- backgroundColor: "var(--color-surface-raised)",
10119
10300
  alignItems: "center",
10120
10301
  justifyContent: "center"
10121
10302
  },
@@ -10135,13 +10316,12 @@ function WarmUpCard({ validation }) {
10135
10316
  return /* @__PURE__ */ jsxs(
10136
10317
  reactNative.View,
10137
10318
  {
10319
+ className: "border-border bg-surface-raised",
10138
10320
  style: {
10139
10321
  marginTop: 16,
10140
10322
  padding: 12,
10141
10323
  borderRadius: 8,
10142
- borderWidth: 1,
10143
- borderColor: "var(--color-border-default)",
10144
- backgroundColor: "var(--color-surface-raised)"
10324
+ borderWidth: 1
10145
10325
  },
10146
10326
  testID: "readiness-check-warmup",
10147
10327
  children: [
@@ -10149,7 +10329,8 @@ function WarmUpCard({ validation }) {
10149
10329
  /* @__PURE__ */ jsx(
10150
10330
  reactNative.Text,
10151
10331
  {
10152
- style: { fontSize: 12, fontWeight: "600", fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY3 },
10332
+ className: "text-text-secondary",
10333
+ style: { fontSize: 12, fontWeight: "600", fontFamily: "Inter, sans-serif" },
10153
10334
  testID: "readiness-check-warmup-deficit",
10154
10335
  children: velocityDeficitText(validation.velocityDeficit)
10155
10336
  }
@@ -10159,7 +10340,8 @@ function WarmUpCard({ validation }) {
10159
10340
  /* @__PURE__ */ jsx(
10160
10341
  reactNative.Text,
10161
10342
  {
10162
- style: { marginTop: 6, fontSize: 13, fontFamily: "Inter, sans-serif", color: TEXT_PRIMARY4 },
10343
+ className: "text-text-primary",
10344
+ style: { marginTop: 6, fontSize: 13, fontFamily: "Inter, sans-serif" },
10163
10345
  testID: "readiness-check-warmup-recommendation",
10164
10346
  children: validation.recommendation
10165
10347
  }
@@ -10181,7 +10363,8 @@ function ReadinessCheck({
10181
10363
  /* @__PURE__ */ jsx(
10182
10364
  reactNative.Text,
10183
10365
  {
10184
- style: { fontSize: 18, fontWeight: "700", fontFamily: '"Space Grotesk", sans-serif', color: TEXT_PRIMARY4 },
10366
+ className: "text-text-primary",
10367
+ style: { fontSize: 18, fontWeight: "700", fontFamily: '"Space Grotesk", sans-serif' },
10185
10368
  testID: "readiness-check-title",
10186
10369
  children: "How are you feeling?"
10187
10370
  }
@@ -10214,14 +10397,11 @@ function ReadinessCheck({
10214
10397
  var BRAND_PRIMARY9 = "#FF7900";
10215
10398
  var BRAND_PRIMARY_DARK2 = "#C45E00";
10216
10399
  var BRAND_PRIMARY_LIGHT2 = "#FFB066";
10217
- var TEXT_PRIMARY5 = "var(--color-text-primary)";
10218
- var TEXT_SECONDARY4 = "var(--color-text-secondary)";
10219
- var TEXT_TERTIARY4 = "var(--color-text-tertiary)";
10220
10400
  var SUCCESS = "#14B8A6";
10221
10401
  var WARNING = "#FFB020";
10222
10402
  var ERROR = "#D14343";
10223
10403
  var ACCENT_STOPS2 = [BRAND_PRIMARY_DARK2, BRAND_PRIMARY9, BRAND_PRIMARY_LIGHT2];
10224
- var CARD_GRADIENT = "linear-gradient(135deg, var(--color-surface-elevated) 0%, var(--color-surface-raised) 100%)";
10404
+ var CARD_GRADIENT = `linear-gradient(135deg, ${resolveColor("surface-elevated")} 0%, ${resolveColor("surface-raised")} 100%)`;
10225
10405
  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%)";
10226
10406
  var STATUS_VARIANTS = {
10227
10407
  success: { bg: "rgba(20,184,166,0.15)", border: "rgba(20,184,166,0.3)", text: SUCCESS },
@@ -10248,7 +10428,8 @@ function renderCoachingText(text, highlights) {
10248
10428
  (part, index) => highlights.includes(part) ? /* @__PURE__ */ jsx(
10249
10429
  reactNative.Text,
10250
10430
  {
10251
- style: { fontWeight: "700", color: TEXT_PRIMARY5 },
10431
+ className: "text-text-primary",
10432
+ style: { fontWeight: "700" },
10252
10433
  children: part
10253
10434
  },
10254
10435
  `${part}-${index}`
@@ -10295,13 +10476,13 @@ function MetricCell({ metric }) {
10295
10476
  /* @__PURE__ */ jsx(
10296
10477
  reactNative.Text,
10297
10478
  {
10479
+ className: "text-text-tertiary",
10298
10480
  style: {
10299
10481
  fontSize: 10,
10300
10482
  fontFamily: "Inter, sans-serif",
10301
10483
  fontWeight: "600",
10302
10484
  letterSpacing: 0.5,
10303
- textTransform: "uppercase",
10304
- color: TEXT_TERTIARY4
10485
+ textTransform: "uppercase"
10305
10486
  },
10306
10487
  children: metric.label
10307
10488
  }
@@ -10309,12 +10490,12 @@ function MetricCell({ metric }) {
10309
10490
  /* @__PURE__ */ jsx(
10310
10491
  reactNative.Text,
10311
10492
  {
10493
+ className: "text-text-primary",
10312
10494
  style: {
10313
10495
  marginTop: 2,
10314
10496
  fontSize: 13,
10315
10497
  fontFamily: "Inter, sans-serif",
10316
- fontWeight: "600",
10317
- color: TEXT_PRIMARY5
10498
+ fontWeight: "600"
10318
10499
  },
10319
10500
  children: metric.value
10320
10501
  }
@@ -10346,13 +10527,13 @@ function Gauge({ gauge }) {
10346
10527
  /* @__PURE__ */ jsx(
10347
10528
  reactNative.Text,
10348
10529
  {
10530
+ className: "text-text-secondary",
10349
10531
  style: {
10350
10532
  fontSize: 10,
10351
10533
  fontFamily: "Inter, sans-serif",
10352
10534
  fontWeight: "500",
10353
10535
  letterSpacing: 0.5,
10354
- textTransform: "uppercase",
10355
- color: TEXT_SECONDARY4
10536
+ textTransform: "uppercase"
10356
10537
  },
10357
10538
  children: gauge.label
10358
10539
  }
@@ -10360,11 +10541,11 @@ function Gauge({ gauge }) {
10360
10541
  gauge.sublabel != null && /* @__PURE__ */ jsx(
10361
10542
  reactNative.Text,
10362
10543
  {
10544
+ className: "text-text-tertiary",
10363
10545
  style: {
10364
10546
  fontSize: 10,
10365
10547
  fontFamily: "Inter, sans-serif",
10366
- fontWeight: "500",
10367
- color: TEXT_TERTIARY4
10548
+ fontWeight: "500"
10368
10549
  },
10369
10550
  children: gauge.sublabel
10370
10551
  }
@@ -10401,6 +10582,7 @@ function Gauge({ gauge }) {
10401
10582
  /* @__PURE__ */ jsx(
10402
10583
  reactNative.View,
10403
10584
  {
10585
+ className: "border-text-primary",
10404
10586
  style: {
10405
10587
  position: "absolute",
10406
10588
  left: `${percentage}%`,
@@ -10410,7 +10592,6 @@ function Gauge({ gauge }) {
10410
10592
  height: 14,
10411
10593
  borderRadius: 9999,
10412
10594
  borderWidth: 2,
10413
- borderColor: TEXT_PRIMARY5,
10414
10595
  backgroundColor: markerColor,
10415
10596
  boxShadow: "0 0 4px rgba(0,0,0,0.5)"
10416
10597
  },
@@ -10473,12 +10654,12 @@ function MesoStatusCard({
10473
10654
  /* @__PURE__ */ jsx(
10474
10655
  reactNative.Text,
10475
10656
  {
10657
+ className: "text-text-primary",
10476
10658
  style: {
10477
10659
  flexShrink: 1,
10478
10660
  fontSize: 15,
10479
10661
  fontFamily: '"Space Grotesk", sans-serif',
10480
- fontWeight: "700",
10481
- color: TEXT_PRIMARY5
10662
+ fontWeight: "700"
10482
10663
  },
10483
10664
  testID: "meso-status-card-name",
10484
10665
  children: mesoName
@@ -10491,11 +10672,11 @@ function MesoStatusCard({
10491
10672
  /* @__PURE__ */ jsx(
10492
10673
  reactNative.Text,
10493
10674
  {
10675
+ className: "text-text-secondary",
10494
10676
  style: {
10495
10677
  marginTop: 4,
10496
10678
  fontSize: 12,
10497
- fontFamily: "Inter, sans-serif",
10498
- color: TEXT_SECONDARY4
10679
+ fontFamily: "Inter, sans-serif"
10499
10680
  },
10500
10681
  testID: "meso-status-card-subtitle",
10501
10682
  children: mesoSubtitle
@@ -10527,11 +10708,11 @@ function MesoStatusCard({
10527
10708
  children: /* @__PURE__ */ jsx(
10528
10709
  reactNative.Text,
10529
10710
  {
10711
+ className: "text-text-secondary",
10530
10712
  style: {
10531
10713
  fontSize: 12,
10532
10714
  lineHeight: 17,
10533
- fontFamily: "Inter, sans-serif",
10534
- color: TEXT_SECONDARY4
10715
+ fontFamily: "Inter, sans-serif"
10535
10716
  },
10536
10717
  children: renderCoachingText(coaching.text, coaching.highlights)
10537
10718
  }
@@ -10576,15 +10757,11 @@ function MesoStatusCard({
10576
10757
  );
10577
10758
  }
10578
10759
  var BRAND_PRIMARY10 = "#FF7900";
10579
- var TEXT_PRIMARY6 = "var(--color-text-primary)";
10580
- var TEXT_SECONDARY5 = "var(--color-text-secondary)";
10581
- var TEXT_TERTIARY5 = "var(--color-text-tertiary)";
10582
- var BORDER_STRONG = "var(--color-border-strong)";
10760
+ var PROJECTION_LINE_COLOR = resolveColor("text-tertiary");
10583
10761
  var STATUS_SUCCESS2 = "#14B8A6";
10584
10762
  var STATUS_ERROR2 = "#D14343";
10585
10763
  var STATUS_WARNING2 = "#FFB020";
10586
10764
  var GRID_LINE = "rgba(255,255,255,0.06)";
10587
- var TOOLTIP_BG = "var(--color-surface-elevated)";
10588
10765
  var SUCCESS_PILL_BG = "rgba(20,184,166,0.10)";
10589
10766
  var SUCCESS_PILL_BORDER = "rgba(20,184,166,0.20)";
10590
10767
  var ERROR_PILL_BG = "rgba(209,67,67,0.10)";
@@ -10592,8 +10769,8 @@ var ERROR_PILL_BORDER = "rgba(209,67,67,0.20)";
10592
10769
  var PLOT_LEFT = 26;
10593
10770
  var TOOLTIP_WIDTH = 124;
10594
10771
  function timeOf(dateStr) {
10595
- const t = Date.parse(dateStr);
10596
- return Number.isNaN(t) ? 0 : t;
10772
+ const t2 = Date.parse(dateStr);
10773
+ return Number.isNaN(t2) ? 0 : t2;
10597
10774
  }
10598
10775
  function formatValue(value) {
10599
10776
  return `${Math.round(value)}`;
@@ -10765,7 +10942,7 @@ function StrengthTrendChart({
10765
10942
  alignItems: "center",
10766
10943
  justifyContent: "center"
10767
10944
  },
10768
- children: /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_TERTIARY5 }, children: "No strength data yet" })
10945
+ children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-tertiary", style: { fontSize: 12, fontFamily: "Inter, sans-serif" }, children: "No strength data yet" })
10769
10946
  }
10770
10947
  )
10771
10948
  }
@@ -10809,6 +10986,7 @@ function StrengthTrendChart({
10809
10986
  children: /* @__PURE__ */ jsx(
10810
10987
  reactNative.Text,
10811
10988
  {
10989
+ className: "text-text-tertiary",
10812
10990
  style: {
10813
10991
  position: "absolute",
10814
10992
  left: -PLOT_LEFT,
@@ -10816,8 +10994,7 @@ function StrengthTrendChart({
10816
10994
  width: PLOT_LEFT - 4,
10817
10995
  textAlign: "right",
10818
10996
  fontSize: 9,
10819
- fontFamily: "Inter, sans-serif",
10820
- color: TEXT_TERTIARY5
10997
+ fontFamily: "Inter, sans-serif"
10821
10998
  },
10822
10999
  children: line.label
10823
11000
  }
@@ -10860,7 +11037,7 @@ function StrengthTrendChart({
10860
11037
  ChartLine,
10861
11038
  {
10862
11039
  coords: geometry.projection,
10863
- color: TEXT_TERTIARY5,
11040
+ color: PROJECTION_LINE_COLOR,
10864
11041
  strokeWidth: 2,
10865
11042
  dashed: true,
10866
11043
  testID: "strength-trend-chart-projection-segment"
@@ -10936,6 +11113,7 @@ function StrengthTrendChart({
10936
11113
  {
10937
11114
  testID: "strength-trend-chart-tooltip",
10938
11115
  accessibilityElementsHidden: true,
11116
+ className: "bg-surface-elevated border-border-strong",
10939
11117
  style: {
10940
11118
  position: "absolute",
10941
11119
  left: Math.max(
@@ -10944,9 +11122,7 @@ function StrengthTrendChart({
10944
11122
  ),
10945
11123
  top: Math.max(0, selectedCoord.y - 52),
10946
11124
  maxWidth: TOOLTIP_WIDTH,
10947
- backgroundColor: TOOLTIP_BG,
10948
11125
  borderWidth: 1,
10949
- borderColor: BORDER_STRONG,
10950
11126
  borderRadius: 8,
10951
11127
  paddingVertical: 8,
10952
11128
  paddingHorizontal: 10
@@ -10955,10 +11131,10 @@ function StrengthTrendChart({
10955
11131
  /* @__PURE__ */ jsx(
10956
11132
  reactNative.Text,
10957
11133
  {
11134
+ className: "text-text-tertiary",
10958
11135
  style: {
10959
11136
  fontSize: 10,
10960
- fontFamily: "Inter, sans-serif",
10961
- color: TEXT_TERTIARY5
11137
+ fontFamily: "Inter, sans-serif"
10962
11138
  },
10963
11139
  children: selectedCoord.point.sessionLabel ?? selectedCoord.point.date
10964
11140
  }
@@ -10966,12 +11142,12 @@ function StrengthTrendChart({
10966
11142
  /* @__PURE__ */ jsx(
10967
11143
  reactNative.Text,
10968
11144
  {
11145
+ className: "text-text-primary",
10969
11146
  style: {
10970
11147
  marginTop: 2,
10971
11148
  fontSize: 13,
10972
11149
  fontFamily: "Inter, sans-serif",
10973
- fontWeight: "700",
10974
- color: TEXT_PRIMARY6
11150
+ fontWeight: "700"
10975
11151
  },
10976
11152
  children: `${formatValue(selectedCoord.point.e1rm)} ${unit}`
10977
11153
  }
@@ -11004,14 +11180,14 @@ function StrengthTrendChart({
11004
11180
  reactNative.Text,
11005
11181
  {
11006
11182
  testID: "strength-trend-chart-axis-label",
11183
+ className: "text-text-tertiary",
11007
11184
  style: {
11008
11185
  position: "absolute",
11009
11186
  left: boundary.x - 24,
11010
11187
  width: 48,
11011
11188
  textAlign: "center",
11012
11189
  fontSize: 10,
11013
- fontFamily: "Inter, sans-serif",
11014
- color: TEXT_TERTIARY5
11190
+ fontFamily: "Inter, sans-serif"
11015
11191
  },
11016
11192
  children: boundary.label
11017
11193
  },
@@ -11055,7 +11231,7 @@ function StrengthTrendChart({
11055
11231
  children: [
11056
11232
  /* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 5 }, children: [
11057
11233
  /* @__PURE__ */ jsx(reactNative.View, { style: { width: 14, height: 2.5, borderRadius: 1.5, backgroundColor: BRAND_PRIMARY10 } }),
11058
- /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY5 }, children: "Actual" })
11234
+ /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "Actual" })
11059
11235
  ] }),
11060
11236
  /* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 5 }, children: [
11061
11237
  /* @__PURE__ */ jsx(
@@ -11066,15 +11242,15 @@ function StrengthTrendChart({
11066
11242
  height: 0,
11067
11243
  borderTopWidth: 2,
11068
11244
  borderStyle: "dashed",
11069
- borderTopColor: TEXT_TERTIARY5
11245
+ borderTopColor: PROJECTION_LINE_COLOR
11070
11246
  }
11071
11247
  }
11072
11248
  ),
11073
- /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY5 }, children: "Projected" })
11249
+ /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "Projected" })
11074
11250
  ] }),
11075
11251
  /* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 5 }, children: [
11076
11252
  /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 12, color: STATUS_WARNING2 }, children: "\u2605" }),
11077
- /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 10, fontFamily: "Inter, sans-serif", color: TEXT_SECONDARY5 }, children: "PR" })
11253
+ /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-secondary", style: { fontSize: 10, fontFamily: "Inter, sans-serif" }, children: "PR" })
11078
11254
  ] })
11079
11255
  ]
11080
11256
  }
@@ -11087,7 +11263,6 @@ var STATUS_SUCCESS3 = "#14B8A6";
11087
11263
  var STATUS_WARNING3 = "#FFB020";
11088
11264
  var STATUS_INFO = "#2196F3";
11089
11265
  var DOT_BORDER = "#F3F4F6";
11090
- var TEXT_TERTIARY6 = "var(--color-text-tertiary)";
11091
11266
  var BAND_FILL = "rgba(20,184,166,0.1)";
11092
11267
  var BAND_EDGE = "rgba(20,184,166,0.45)";
11093
11268
  var PROJECTION_FILL = "rgba(20,184,166,0.05)";
@@ -11129,8 +11304,8 @@ function interpEdge(pixels, x, key) {
11129
11304
  const a = pixels[i];
11130
11305
  const b = pixels[i + 1];
11131
11306
  if (x >= a.x && x <= b.x) {
11132
- const t = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x);
11133
- return a[key] + t * (b[key] - a[key]);
11307
+ const t2 = b.x === a.x ? 0 : (x - a.x) / (b.x - a.x);
11308
+ return a[key] + t2 * (b[key] - a[key]);
11134
11309
  }
11135
11310
  }
11136
11311
  return pixels[pixels.length - 1][key];
@@ -11368,6 +11543,7 @@ function CapacityBandChart({
11368
11543
  /* @__PURE__ */ jsx(
11369
11544
  reactNative.Text,
11370
11545
  {
11546
+ className: "text-text-tertiary",
11371
11547
  style: {
11372
11548
  position: "absolute",
11373
11549
  left: PADDING_LEFT / 2 - 14,
@@ -11376,7 +11552,6 @@ function CapacityBandChart({
11376
11552
  textAlign: "center",
11377
11553
  fontSize: 9,
11378
11554
  fontFamily: "Inter, sans-serif",
11379
- color: TEXT_TERTIARY6,
11380
11555
  transform: [{ rotate: "-90deg" }]
11381
11556
  },
11382
11557
  accessibilityElementsHidden: true,
@@ -11390,6 +11565,7 @@ function CapacityBandChart({
11390
11565
  return /* @__PURE__ */ jsx(
11391
11566
  reactNative.Text,
11392
11567
  {
11568
+ className: "text-text-tertiary",
11393
11569
  style: {
11394
11570
  position: "absolute",
11395
11571
  left: toX(point.date) - 14,
@@ -11397,8 +11573,7 @@ function CapacityBandChart({
11397
11573
  width: 28,
11398
11574
  textAlign: "center",
11399
11575
  fontSize: 10,
11400
- fontFamily: "Inter, sans-serif",
11401
- color: TEXT_TERTIARY6
11576
+ fontFamily: "Inter, sans-serif"
11402
11577
  },
11403
11578
  accessibilityElementsHidden: true,
11404
11579
  importantForAccessibility: "no-hide-descendants",
@@ -11460,12 +11635,7 @@ function CapacityBandChart({
11460
11635
  }
11461
11636
  );
11462
11637
  }
11463
- var SURFACE_ELEVATED = "var(--color-surface-elevated)";
11464
- var BORDER_DEFAULT3 = "var(--color-border-default)";
11465
11638
  var BRAND_PRIMARY11 = "#FF7900";
11466
- var TEXT_PRIMARY7 = "var(--color-text-primary)";
11467
- var TEXT_TERTIARY7 = "var(--color-text-tertiary)";
11468
- var PAGE_BG = "var(--color-background-base)";
11469
11639
  var WORKOUT_PILL_STATUS = {
11470
11640
  completed: "completed",
11471
11641
  today: "current",
@@ -11517,7 +11687,7 @@ function Breadcrumbs2({ crumbs, onNavigate }) {
11517
11687
  children: crumbs.map((crumb, index) => {
11518
11688
  const isLast = index === crumbs.length - 1;
11519
11689
  return /* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-center", style: { gap: 4 }, children: [
11520
- index > 0 && /* @__PURE__ */ jsx(reactNative.Text, { style: { fontSize: 12, color: TEXT_TERTIARY7 }, children: "\u203A" }),
11690
+ index > 0 && /* @__PURE__ */ jsx(reactNative.Text, { className: "text-text-tertiary", style: { fontSize: 12 }, children: "\u203A" }),
11521
11691
  /* @__PURE__ */ jsx(
11522
11692
  reactNative.Pressable,
11523
11693
  {
@@ -11528,11 +11698,12 @@ function Breadcrumbs2({ crumbs, onNavigate }) {
11528
11698
  children: /* @__PURE__ */ jsx(
11529
11699
  reactNative.Text,
11530
11700
  {
11701
+ className: isLast ? "text-text-primary" : void 0,
11531
11702
  style: {
11532
11703
  fontSize: 12,
11533
11704
  fontFamily: "Inter, sans-serif",
11534
11705
  fontWeight: isLast ? "700" : "500",
11535
- color: isLast ? TEXT_PRIMARY7 : BRAND_PRIMARY11
11706
+ color: isLast ? void 0 : BRAND_PRIMARY11
11536
11707
  },
11537
11708
  children: crumb.label
11538
11709
  }
@@ -11661,8 +11832,8 @@ function ProgramPlanningPage({
11661
11832
  return /* @__PURE__ */ jsx(
11662
11833
  reactNative.View,
11663
11834
  {
11664
- className,
11665
- style: { width: 390, backgroundColor: PAGE_BG },
11835
+ className: cn(className, "bg-background-base"),
11836
+ style: { width: 390 },
11666
11837
  accessibilityRole: "main",
11667
11838
  "aria-label": title,
11668
11839
  testID: "program-planning-page",
@@ -11672,11 +11843,11 @@ function ProgramPlanningPage({
11672
11843
  reactNative.Text,
11673
11844
  {
11674
11845
  accessibilityRole: "header",
11846
+ className: "text-text-primary",
11675
11847
  style: {
11676
11848
  fontSize: 20,
11677
11849
  fontFamily: '"Space Grotesk", sans-serif',
11678
- fontWeight: "700",
11679
- color: TEXT_PRIMARY7
11850
+ fontWeight: "700"
11680
11851
  },
11681
11852
  testID: "program-planning-page-title",
11682
11853
  children: title
@@ -11700,10 +11871,9 @@ function ProgramPlanningPage({
11700
11871
  /* @__PURE__ */ jsxs(
11701
11872
  reactNative.View,
11702
11873
  {
11874
+ className: "bg-surface-elevated border-border",
11703
11875
  style: {
11704
- backgroundColor: SURFACE_ELEVATED,
11705
11876
  borderWidth: 1,
11706
- borderColor: BORDER_DEFAULT3,
11707
11877
  borderRadius: 12,
11708
11878
  padding: 12
11709
11879
  },
@@ -11734,13 +11904,7 @@ function ProgramPlanningPage({
11734
11904
  }
11735
11905
  );
11736
11906
  }
11737
- var SURFACE_ELEVATED2 = "var(--color-surface-elevated)";
11738
- var BORDER_DEFAULT4 = "var(--color-border-default)";
11739
11907
  var BRAND_PRIMARY12 = "#FF7900";
11740
- var TEXT_PRIMARY8 = "var(--color-text-primary)";
11741
- var TEXT_SECONDARY6 = "var(--color-text-secondary)";
11742
- var TEXT_TERTIARY8 = "var(--color-text-tertiary)";
11743
- var PAGE_BG2 = "var(--color-background-base)";
11744
11908
  var CHART_WIDTH = 326;
11745
11909
  var CHART_HEIGHT = 150;
11746
11910
  var EXERCISE_DETAIL_TABS = [
@@ -11787,7 +11951,7 @@ function TabBar({ active, onSelect }) {
11787
11951
  className: "flex-row",
11788
11952
  style: {
11789
11953
  borderBottomWidth: 1,
11790
- borderBottomColor: BORDER_DEFAULT4
11954
+ borderBottomColor: resolveColor("border-default")
11791
11955
  },
11792
11956
  accessibilityRole: "tablist",
11793
11957
  testID: "exercise-detail-page-tabs",
@@ -11810,11 +11974,11 @@ function TabBar({ active, onSelect }) {
11810
11974
  children: /* @__PURE__ */ jsx(
11811
11975
  reactNative.Text,
11812
11976
  {
11977
+ className: isActive ? "text-text-primary" : "text-text-tertiary",
11813
11978
  style: {
11814
11979
  fontSize: 13,
11815
11980
  fontFamily: "Inter, sans-serif",
11816
- fontWeight: isActive ? "700" : "500",
11817
- color: isActive ? TEXT_PRIMARY8 : TEXT_TERTIARY8
11981
+ fontWeight: isActive ? "700" : "500"
11818
11982
  },
11819
11983
  children: label
11820
11984
  }
@@ -11838,24 +12002,23 @@ function StatStrip({ stats, unit }) {
11838
12002
  return /* @__PURE__ */ jsxs(
11839
12003
  reactNative.View,
11840
12004
  {
12005
+ className: "bg-surface-elevated border-border",
11841
12006
  style: {
11842
12007
  flex: 1,
11843
12008
  padding: 12,
11844
12009
  borderRadius: 10,
11845
- backgroundColor: SURFACE_ELEVATED2,
11846
- borderWidth: 1,
11847
- borderColor: BORDER_DEFAULT4
12010
+ borderWidth: 1
11848
12011
  },
11849
12012
  testID: `exercise-detail-page-stat-${key}`,
11850
12013
  children: [
11851
12014
  /* @__PURE__ */ jsx(
11852
12015
  reactNative.Text,
11853
12016
  {
12017
+ className: "text-text-primary",
11854
12018
  style: {
11855
12019
  fontSize: 18,
11856
12020
  fontFamily: '"Space Grotesk", sans-serif',
11857
- fontWeight: "700",
11858
- color: TEXT_PRIMARY8
12021
+ fontWeight: "700"
11859
12022
  },
11860
12023
  children: value
11861
12024
  }
@@ -11863,14 +12026,14 @@ function StatStrip({ stats, unit }) {
11863
12026
  /* @__PURE__ */ jsx(
11864
12027
  reactNative.Text,
11865
12028
  {
12029
+ className: "text-text-tertiary",
11866
12030
  style: {
11867
12031
  marginTop: 2,
11868
12032
  fontSize: 10,
11869
12033
  fontFamily: "Inter, sans-serif",
11870
12034
  fontWeight: "600",
11871
12035
  letterSpacing: 0.4,
11872
- textTransform: "uppercase",
11873
- color: TEXT_TERTIARY8
12036
+ textTransform: "uppercase"
11874
12037
  },
11875
12038
  children: label
11876
12039
  }
@@ -11889,10 +12052,9 @@ function SectionCard({
11889
12052
  return /* @__PURE__ */ jsxs(
11890
12053
  reactNative.View,
11891
12054
  {
12055
+ className: "bg-surface-elevated border-border",
11892
12056
  style: {
11893
- backgroundColor: SURFACE_ELEVATED2,
11894
12057
  borderWidth: 1,
11895
- borderColor: BORDER_DEFAULT4,
11896
12058
  borderRadius: 12,
11897
12059
  padding: 12,
11898
12060
  gap: 10
@@ -11902,13 +12064,13 @@ function SectionCard({
11902
12064
  /* @__PURE__ */ jsx(
11903
12065
  reactNative.Text,
11904
12066
  {
12067
+ className: "text-text-tertiary",
11905
12068
  style: {
11906
12069
  fontSize: 11,
11907
12070
  fontFamily: "Inter, sans-serif",
11908
12071
  fontWeight: "600",
11909
12072
  letterSpacing: 0.6,
11910
- textTransform: "uppercase",
11911
- color: TEXT_TERTIARY8
12073
+ textTransform: "uppercase"
11912
12074
  },
11913
12075
  children: title
11914
12076
  }
@@ -11923,7 +12085,8 @@ function EntryList({ entries, expandedId, onToggle, emptyLabel, testID }) {
11923
12085
  return /* @__PURE__ */ jsx(
11924
12086
  reactNative.Text,
11925
12087
  {
11926
- style: { fontSize: 12, fontFamily: "Inter, sans-serif", color: TEXT_TERTIARY8 },
12088
+ className: "text-text-tertiary",
12089
+ style: { fontSize: 12, fontFamily: "Inter, sans-serif" },
11927
12090
  testID: `${testID}-empty`,
11928
12091
  children: emptyLabel
11929
12092
  }
@@ -11951,12 +12114,12 @@ function VbtBreakdown({ sets }) {
11951
12114
  /* @__PURE__ */ jsx(
11952
12115
  reactNative.Text,
11953
12116
  {
12117
+ className: "text-text-secondary",
11954
12118
  style: {
11955
12119
  width: 44,
11956
12120
  fontSize: 11,
11957
12121
  fontFamily: "Inter, sans-serif",
11958
- fontWeight: "600",
11959
- color: TEXT_SECONDARY6
12122
+ fontWeight: "600"
11960
12123
  },
11961
12124
  children: set.label
11962
12125
  }
@@ -11965,11 +12128,11 @@ function VbtBreakdown({ sets }) {
11965
12128
  /* @__PURE__ */ jsx(
11966
12129
  reactNative.Text,
11967
12130
  {
12131
+ className: "text-text-tertiary",
11968
12132
  style: {
11969
12133
  fontSize: 11,
11970
12134
  fontFamily: "Inter, sans-serif",
11971
- fontVariant: ["tabular-nums"],
11972
- color: TEXT_TERTIARY8
12135
+ fontVariant: ["tabular-nums"]
11973
12136
  },
11974
12137
  children: `${mean.toFixed(2)} \xB7 -${loss}%`
11975
12138
  }
@@ -11988,23 +12151,22 @@ function VbtSummaryRow({ summary }) {
11988
12151
  return /* @__PURE__ */ jsx(reactNative.View, { className: "flex-row", style: { gap: 8 }, testID: "exercise-detail-page-vbt-summary", children: cells.map((cell) => /* @__PURE__ */ jsxs(
11989
12152
  reactNative.View,
11990
12153
  {
12154
+ className: "bg-surface-elevated border-border",
11991
12155
  style: {
11992
12156
  flex: 1,
11993
12157
  padding: 12,
11994
12158
  borderRadius: 10,
11995
- backgroundColor: SURFACE_ELEVATED2,
11996
- borderWidth: 1,
11997
- borderColor: BORDER_DEFAULT4
12159
+ borderWidth: 1
11998
12160
  },
11999
12161
  children: [
12000
12162
  /* @__PURE__ */ jsx(
12001
12163
  reactNative.Text,
12002
12164
  {
12165
+ className: "text-text-primary",
12003
12166
  style: {
12004
12167
  fontSize: 16,
12005
12168
  fontFamily: '"Space Grotesk", sans-serif',
12006
- fontWeight: "700",
12007
- color: TEXT_PRIMARY8
12169
+ fontWeight: "700"
12008
12170
  },
12009
12171
  children: cell.value
12010
12172
  }
@@ -12012,14 +12174,14 @@ function VbtSummaryRow({ summary }) {
12012
12174
  /* @__PURE__ */ jsx(
12013
12175
  reactNative.Text,
12014
12176
  {
12177
+ className: "text-text-tertiary",
12015
12178
  style: {
12016
12179
  marginTop: 2,
12017
12180
  fontSize: 10,
12018
12181
  fontFamily: "Inter, sans-serif",
12019
12182
  fontWeight: "600",
12020
12183
  letterSpacing: 0.4,
12021
- textTransform: "uppercase",
12022
- color: TEXT_TERTIARY8
12184
+ textTransform: "uppercase"
12023
12185
  },
12024
12186
  children: cell.label
12025
12187
  }
@@ -12048,8 +12210,8 @@ function ExerciseDetailPage({
12048
12210
  return /* @__PURE__ */ jsx(
12049
12211
  reactNative.View,
12050
12212
  {
12051
- className,
12052
- style: { width: 390, backgroundColor: PAGE_BG2 },
12213
+ className: cn("bg-background-base", className),
12214
+ style: { width: 390 },
12053
12215
  accessibilityRole: "main",
12054
12216
  "aria-label": exercise.name,
12055
12217
  testID: "exercise-detail-page",
@@ -12067,11 +12229,11 @@ function ExerciseDetailPage({
12067
12229
  reactNative.Text,
12068
12230
  {
12069
12231
  accessibilityRole: "header",
12232
+ className: "text-text-primary",
12070
12233
  style: {
12071
12234
  fontSize: 20,
12072
12235
  fontFamily: '"Space Grotesk", sans-serif',
12073
- fontWeight: "700",
12074
- color: TEXT_PRIMARY8
12236
+ fontWeight: "700"
12075
12237
  },
12076
12238
  testID: "exercise-detail-page-title",
12077
12239
  children: exercise.name
@@ -12080,11 +12242,11 @@ function ExerciseDetailPage({
12080
12242
  /* @__PURE__ */ jsx(
12081
12243
  reactNative.Text,
12082
12244
  {
12245
+ className: "text-text-secondary",
12083
12246
  style: {
12084
12247
  marginTop: 2,
12085
12248
  fontSize: 12,
12086
- fontFamily: "Inter, sans-serif",
12087
- color: TEXT_SECONDARY6
12249
+ fontFamily: "Inter, sans-serif"
12088
12250
  },
12089
12251
  testID: "exercise-detail-page-subtitle",
12090
12252
  children: exercise.subtitle
@@ -12107,13 +12269,13 @@ function ExerciseDetailPage({
12107
12269
  /* @__PURE__ */ jsx(
12108
12270
  reactNative.Text,
12109
12271
  {
12272
+ className: "text-text-tertiary",
12110
12273
  style: {
12111
12274
  fontSize: 9,
12112
12275
  fontFamily: "Inter, sans-serif",
12113
12276
  fontWeight: "600",
12114
12277
  letterSpacing: 0.4,
12115
- textTransform: "uppercase",
12116
- color: TEXT_TERTIARY8
12278
+ textTransform: "uppercase"
12117
12279
  },
12118
12280
  children: "e1RM"
12119
12281
  }
@@ -12191,13 +12353,7 @@ function ExerciseDetailPage({
12191
12353
  }
12192
12354
  );
12193
12355
  }
12194
- var SURFACE_ELEVATED3 = "var(--color-surface-elevated)";
12195
- var BORDER_DEFAULT5 = "var(--color-border-default)";
12196
12356
  var BRAND_PRIMARY13 = "#FF7900";
12197
- var TEXT_PRIMARY9 = "var(--color-text-primary)";
12198
- var TEXT_SECONDARY7 = "var(--color-text-secondary)";
12199
- var TEXT_TERTIARY9 = "var(--color-text-tertiary)";
12200
- var PAGE_BG3 = "var(--color-background-base)";
12201
12357
  function countCompletedSets(exercise) {
12202
12358
  if (exercise.setVelocities != null) return exercise.setVelocities.length;
12203
12359
  if (exercise.status === "completed") return exercise.totalPlannedSets;
@@ -12280,11 +12436,11 @@ function WorkoutHeader({
12280
12436
  reactNative.Text,
12281
12437
  {
12282
12438
  accessibilityRole: "header",
12439
+ className: "text-text-primary",
12283
12440
  style: {
12284
12441
  fontSize: 20,
12285
12442
  fontFamily: '"Space Grotesk", sans-serif',
12286
- fontWeight: "700",
12287
- color: TEXT_PRIMARY9
12443
+ fontWeight: "700"
12288
12444
  },
12289
12445
  testID: "active-workout-page-title",
12290
12446
  children: title
@@ -12293,11 +12449,11 @@ function WorkoutHeader({
12293
12449
  subtitle != null && /* @__PURE__ */ jsx(
12294
12450
  reactNative.Text,
12295
12451
  {
12452
+ className: "text-text-secondary",
12296
12453
  style: {
12297
12454
  marginTop: 2,
12298
12455
  fontSize: 12,
12299
- fontFamily: "Inter, sans-serif",
12300
- color: TEXT_SECONDARY7
12456
+ fontFamily: "Inter, sans-serif"
12301
12457
  },
12302
12458
  testID: "active-workout-page-subtitle",
12303
12459
  children: subtitle
@@ -12321,13 +12477,13 @@ function WorkoutHeader({
12321
12477
  /* @__PURE__ */ jsx(
12322
12478
  reactNative.Text,
12323
12479
  {
12480
+ className: "text-text-tertiary",
12324
12481
  style: {
12325
12482
  fontSize: 10,
12326
12483
  fontFamily: "Inter, sans-serif",
12327
12484
  fontWeight: "600",
12328
12485
  letterSpacing: 0.4,
12329
- textTransform: "uppercase",
12330
- color: TEXT_TERTIARY9
12486
+ textTransform: "uppercase"
12331
12487
  },
12332
12488
  children: `${progress.completedSets}/${progress.totalSets} sets`
12333
12489
  }
@@ -12337,7 +12493,8 @@ function WorkoutHeader({
12337
12493
  /* @__PURE__ */ jsx(
12338
12494
  reactNative.View,
12339
12495
  {
12340
- style: { height: 4, backgroundColor: BORDER_DEFAULT5, borderRadius: 2 },
12496
+ className: "bg-border",
12497
+ style: { height: 4, borderRadius: 2 },
12341
12498
  testID: "active-workout-page-progress-track",
12342
12499
  children: /* @__PURE__ */ jsx(
12343
12500
  reactNative.View,
@@ -12361,10 +12518,9 @@ function ExerciseList({ groups, focusedId, onToggle }) {
12361
12518
  return /* @__PURE__ */ jsx(
12362
12519
  reactNative.View,
12363
12520
  {
12521
+ className: "bg-surface-elevated border-border",
12364
12522
  style: {
12365
- backgroundColor: SURFACE_ELEVATED3,
12366
12523
  borderWidth: 1,
12367
- borderColor: BORDER_DEFAULT5,
12368
12524
  borderRadius: 12
12369
12525
  },
12370
12526
  children: /* @__PURE__ */ jsx(
@@ -12430,8 +12586,8 @@ function ActiveWorkoutPage({
12430
12586
  return /* @__PURE__ */ jsxs(
12431
12587
  reactNative.View,
12432
12588
  {
12433
- className,
12434
- style: { position: "relative", width: 390, backgroundColor: PAGE_BG3 },
12589
+ className: ["bg-background-base", className].filter(Boolean).join(" "),
12590
+ style: { position: "relative", width: 390 },
12435
12591
  accessibilityRole: "main",
12436
12592
  "aria-label": title,
12437
12593
  testID: "active-workout-page",
@@ -12444,7 +12600,7 @@ function ActiveWorkoutPage({
12444
12600
  (showRest || showInput) && /* @__PURE__ */ jsx(
12445
12601
  reactNative.View,
12446
12602
  {
12447
- style: { borderTopWidth: 1, borderTopColor: BORDER_DEFAULT5 },
12603
+ style: { borderTopWidth: 1, borderTopColor: resolveColor("border-default") },
12448
12604
  testID: "active-workout-page-bottom-bar",
12449
12605
  children: showRest && rest != null ? /* @__PURE__ */ jsx(
12450
12606
  RestTimer,
@@ -12704,28 +12860,28 @@ function Scatter({
12704
12860
  testID: "scatter-canvas",
12705
12861
  style: { position: "absolute", top: 0, left: 0, width, height, overflow: "hidden" },
12706
12862
  children: [
12707
- ticksOf(yd, TICK_COUNT).map((t, i) => {
12708
- const y = toY(t);
12863
+ ticksOf(yd, TICK_COUNT).map((t2, i) => {
12864
+ const y = toY(t2);
12709
12865
  return /* @__PURE__ */ jsx(
12710
12866
  reactNative.View,
12711
12867
  {
12712
12868
  accessibilityElementsHidden: true,
12713
12869
  testID: "scatter-gridline-y",
12714
12870
  style: { position: "absolute", left: PLOT_LEFT2, width: innerW, top: y, height: 1, backgroundColor: GRID_LINE2 },
12715
- children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(t) })
12871
+ children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", left: -PLOT_LEFT2, top: -6, width: PLOT_LEFT2 - 6, textAlign: "right" }, children: formatTick(t2) })
12716
12872
  },
12717
12873
  `y-${i}`
12718
12874
  );
12719
12875
  }),
12720
- ticksOf(xd, TICK_COUNT).map((t, i) => {
12721
- const x = toX(t);
12876
+ ticksOf(xd, TICK_COUNT).map((t2, i) => {
12877
+ const x = toX(t2);
12722
12878
  return /* @__PURE__ */ jsx(
12723
12879
  reactNative.View,
12724
12880
  {
12725
12881
  accessibilityElementsHidden: true,
12726
12882
  testID: "scatter-gridline-x",
12727
12883
  style: { position: "absolute", top: PLOT_TOP, height: innerH, left: x, width: 1, backgroundColor: GRID_LINE2 },
12728
- children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(t) })
12884
+ children: /* @__PURE__ */ jsx(reactNative.Text, { className: "text-[9px] text-text-tertiary", style: { position: "absolute", top: innerH + 4, left: -16, width: 32, textAlign: "center" }, children: formatTick(t2) })
12729
12885
  },
12730
12886
  `x-${i}`
12731
12887
  );
@@ -12859,23 +13015,23 @@ function Gauge2({
12859
13015
  testID: "gauge",
12860
13016
  ...props,
12861
13017
  children: [
12862
- ticks.map((t) => /* @__PURE__ */ jsx(
13018
+ ticks.map((t2) => /* @__PURE__ */ jsx(
12863
13019
  reactNative.View,
12864
13020
  {
12865
13021
  accessibilityElementsHidden: true,
12866
13022
  testID: "gauge-segment",
12867
13023
  style: {
12868
13024
  position: "absolute",
12869
- left: t.left - tickThickness / 2,
12870
- top: t.top - tickLength / 2,
13025
+ left: t2.left - tickThickness / 2,
13026
+ top: t2.top - tickLength / 2,
12871
13027
  width: tickThickness,
12872
13028
  height: tickLength,
12873
13029
  borderRadius: tickThickness / 2,
12874
- backgroundColor: t.color,
12875
- transform: [{ rotate: t.rotate }]
13030
+ backgroundColor: t2.color,
13031
+ transform: [{ rotate: t2.rotate }]
12876
13032
  }
12877
13033
  },
12878
- t.key
13034
+ t2.key
12879
13035
  )),
12880
13036
  /* @__PURE__ */ jsxs(reactNative.View, { style: { position: "absolute", top: 0, left: 0, width: size, height: size }, className: "items-center justify-center", children: [
12881
13037
  /* @__PURE__ */ jsxs(reactNative.View, { className: "flex-row items-baseline gap-0.5", children: [
@@ -12889,65 +13045,6 @@ function Gauge2({
12889
13045
  );
12890
13046
  }
12891
13047
 
12892
- // src/utils/colors.ts
12893
- function getStatusColor(status) {
12894
- return `var(--color-status-${status})`;
12895
- }
12896
- function getResultColor(result) {
12897
- return `var(--color-result-${result})`;
12898
- }
12899
- function alpha(color, opacity) {
12900
- const clampedOpacity = Math.max(0, Math.min(1, opacity));
12901
- if (color.startsWith("#")) {
12902
- const hex = color.slice(1);
12903
- let r, g, b;
12904
- if (hex.length === 3) {
12905
- r = parseInt(hex[0] + hex[0], 16);
12906
- g = parseInt(hex[1] + hex[1], 16);
12907
- b = parseInt(hex[2] + hex[2], 16);
12908
- } else if (hex.length === 6) {
12909
- r = parseInt(hex.slice(0, 2), 16);
12910
- g = parseInt(hex.slice(2, 4), 16);
12911
- b = parseInt(hex.slice(4, 6), 16);
12912
- } else {
12913
- return color;
12914
- }
12915
- return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
12916
- }
12917
- const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
12918
- if (rgbMatch) {
12919
- const [, r, g, b] = rgbMatch;
12920
- return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
12921
- }
12922
- const rgbaMatch = color.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*[\d.]+\)/);
12923
- if (rgbaMatch) {
12924
- const [, r, g, b] = rgbaMatch;
12925
- return `rgba(${r}, ${g}, ${b}, ${clampedOpacity})`;
12926
- }
12927
- return color;
12928
- }
12929
- function getLuminance(color) {
12930
- if (!color.startsWith("#")) return "dark";
12931
- const hex = color.slice(1);
12932
- let r, g, b;
12933
- if (hex.length === 3) {
12934
- r = parseInt(hex[0] + hex[0], 16);
12935
- g = parseInt(hex[1] + hex[1], 16);
12936
- b = parseInt(hex[2] + hex[2], 16);
12937
- } else if (hex.length === 6) {
12938
- r = parseInt(hex.slice(0, 2), 16);
12939
- g = parseInt(hex.slice(2, 4), 16);
12940
- b = parseInt(hex.slice(4, 6), 16);
12941
- } else {
12942
- return "dark";
12943
- }
12944
- const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
12945
- return luminance > 0.5 ? "light" : "dark";
12946
- }
12947
- function getContrastText(backgroundColor) {
12948
- return getLuminance(backgroundColor) === "light" ? "#000000" : "#FFFFFF";
12949
- }
12950
-
12951
13048
  // src/utils/form.ts
12952
13049
  function getFieldValidationProps(state) {
12953
13050
  return {
@@ -13175,6 +13272,7 @@ exports.StrengthTrendChart = StrengthTrendChart;
13175
13272
  exports.SupersetWrapper = SupersetWrapper;
13176
13273
  exports.Surface = Surface;
13177
13274
  exports.Switch = Switch;
13275
+ exports.TEMPO_PACING = TEMPO_PACING;
13178
13276
  exports.Tab = Tab;
13179
13277
  exports.TabList = TabList;
13180
13278
  exports.TabPanel = TabPanel;
@@ -13187,7 +13285,9 @@ exports.TableHeaderCell = TableHeaderCell;
13187
13285
  exports.TablePagination = TablePagination;
13188
13286
  exports.TableRow = TableRow;
13189
13287
  exports.Tabs = Tabs;
13288
+ exports.TempoBar = TempoBar;
13190
13289
  exports.TempoDisplay = TempoDisplay;
13290
+ exports.ThemeProvider = ThemeProvider;
13191
13291
  exports.Toast = Toast;
13192
13292
  exports.ToastProvider = ToastProvider;
13193
13293
  exports.ToolbarButton = ToolbarButton;
@@ -13248,6 +13348,8 @@ exports.getLuminance = getLuminance;
13248
13348
  exports.getResultColor = getResultColor;
13249
13349
  exports.getSemanticColors = getSemanticColors;
13250
13350
  exports.getStatusColor = getStatusColor;
13351
+ exports.getTempoFillPct = getTempoFillPct;
13352
+ exports.getTempoPacingState = getTempoPacingState;
13251
13353
  exports.getThemeCSSVars = getThemeCSSVars;
13252
13354
  exports.getValidatedElevation = getValidatedElevation;
13253
13355
  exports.getVelocityZoneColor = getVelocityZoneColor;
@@ -13272,6 +13374,7 @@ exports.primitiveShadows = primitiveShadows;
13272
13374
  exports.primitiveSpacing = primitiveSpacing;
13273
13375
  exports.primitiveTypography = primitiveTypography;
13274
13376
  exports.primitiveZIndex = primitiveZIndex;
13377
+ exports.resolveColor = resolveColor;
13275
13378
  exports.rgbToHex = rgbToHex;
13276
13379
  exports.rgbToHsv = rgbToHsv;
13277
13380
  exports.roundRpe = roundRpe;