@primestyleai/tryon 5.5.8 → 5.5.10

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.
@@ -2939,42 +2939,31 @@ const STYLES = `
2939
2939
  ════════════════════════════════════════════════════════════════ */
2940
2940
  .ps-bpm-root {
2941
2941
  display: flex; flex-direction: column;
2942
- gap: 14px; padding: 4px 4px 0;
2943
- }
2944
- .ps-bpm-image {
2945
- width: 100%;
2946
- height: 180px;
2947
- border-radius: 12px; overflow: hidden;
2948
- background: var(--ps-bg-secondary);
2949
- flex-shrink: 0;
2950
- display: flex; align-items: center; justify-content: center;
2951
- }
2952
- .ps-bpm-image-img {
2953
- max-width: 100%; max-height: 100%;
2954
- width: auto; height: 100%;
2955
- object-fit: contain; display: block;
2942
+ gap: 10px; padding: 8px 4px 0;
2943
+ flex: 1; min-height: 0;
2956
2944
  }
2945
+ .ps-bpm-spacer { flex: 1 1 auto; min-height: 8px; }
2957
2946
  .ps-bpm-header { text-align: center; margin: 4px 0 0; }
2958
2947
  .ps-bpm-title {
2959
- font-size: 22px; font-weight: 700; color: var(--ps-text-primary);
2960
- margin: 0 0 6px; line-height: 1.25;
2948
+ font-size: 18px; font-weight: 700; color: var(--ps-text-primary);
2949
+ margin: 0 0 4px; line-height: 1.3;
2961
2950
  }
2962
2951
  .ps-bpm-subtitle {
2963
- font-size: 13px; color: var(--ps-text-muted);
2964
- margin: 0 auto; max-width: 280px; line-height: 1.45; font-weight: 400;
2952
+ font-size: 12px; color: var(--ps-text-muted);
2953
+ margin: 0 auto; max-width: 260px; line-height: 1.45; font-weight: 400;
2965
2954
  }
2966
2955
 
2967
2956
  /* Metric / Imperial pill toggle */
2968
2957
  .ps-bpm-toggle {
2969
- display: flex; justify-content: center; gap: 28px;
2970
- margin: 4px 0 8px;
2958
+ display: flex; justify-content: center; gap: 24px;
2959
+ margin: 2px 0 4px;
2971
2960
  }
2972
2961
  .ps-bpm-toggle-btn {
2973
- background: none; border: none; padding: 8px 4px;
2974
- font-family: inherit; font-size: 13px; font-weight: 600;
2975
- letter-spacing: 0.05em;
2962
+ background: none; border: none; padding: 6px 4px;
2963
+ font-family: inherit; font-size: 12px; font-weight: 600;
2964
+ letter-spacing: 0.06em;
2976
2965
  color: var(--ps-text-muted); cursor: pointer;
2977
- border-bottom: 2px solid transparent;
2966
+ border-bottom: 1.5px solid transparent;
2978
2967
  transition: all 0.2s;
2979
2968
  }
2980
2969
  .ps-bpm-toggle-btn.ps-active {
@@ -2982,38 +2971,66 @@ const STYLES = `
2982
2971
  border-bottom-color: var(--ps-accent);
2983
2972
  }
2984
2973
 
2985
- /* Field rows */
2974
+ /* Field rows — minimal, compact, with thin slider underneath */
2986
2975
  .ps-bpm-fields {
2987
2976
  display: flex; flex-direction: column;
2988
- margin-top: 8px;
2977
+ margin-top: 4px;
2989
2978
  }
2990
2979
  .ps-bpm-row {
2991
- display: flex; align-items: baseline;
2992
- padding: 22px 4px;
2993
- gap: 18px;
2980
+ display: flex; flex-direction: column;
2981
+ padding: 12px 4px 14px;
2982
+ gap: 8px;
2994
2983
  border-bottom: 1px solid var(--ps-border-subtle);
2995
2984
  }
2996
2985
  .ps-bpm-row:last-child { border-bottom: none; }
2986
+ .ps-bpm-row-top {
2987
+ display: flex; align-items: baseline; gap: 14px;
2988
+ }
2997
2989
  .ps-bpm-label {
2998
- flex: 0 0 76px;
2999
- font-size: 12px; font-weight: 700;
2990
+ flex: 0 0 64px;
2991
+ font-size: 10px; font-weight: 700;
3000
2992
  letter-spacing: 0.1em; text-transform: uppercase;
3001
2993
  color: var(--ps-text-muted);
3002
2994
  }
3003
2995
  .ps-bpm-value-group {
3004
- flex: 1; display: flex; align-items: baseline; gap: 6px;
2996
+ flex: 1; display: flex; align-items: baseline; gap: 4px;
3005
2997
  justify-content: flex-start;
3006
2998
  }
2999
+
3000
+ /* Minimal slider — 2px track, 12px accent thumb, no shadows */
3001
+ .ps-bpm-slider {
3002
+ -webkit-appearance: none; appearance: none;
3003
+ width: 100%; height: 2px; outline: none;
3004
+ background: linear-gradient(
3005
+ to right,
3006
+ var(--ps-accent) 0%,
3007
+ var(--ps-accent) var(--ps-pct, 0%),
3008
+ var(--ps-border-color) var(--ps-pct, 0%),
3009
+ var(--ps-border-color) 100%
3010
+ );
3011
+ border-radius: 2px; cursor: pointer;
3012
+ margin: 0 0 0 80px; /* indent under the value, past the label */
3013
+ }
3014
+ .ps-bpm-slider::-webkit-slider-thumb {
3015
+ -webkit-appearance: none; appearance: none;
3016
+ width: 12px; height: 12px; border-radius: 50%;
3017
+ background: var(--ps-accent); border: none;
3018
+ cursor: grab; transition: transform 0.15s ease;
3019
+ }
3020
+ .ps-bpm-slider::-webkit-slider-thumb:active { cursor: grabbing; transform: scale(1.2); }
3021
+ .ps-bpm-slider::-moz-range-thumb {
3022
+ width: 12px; height: 12px; border-radius: 50%;
3023
+ background: var(--ps-accent); border: none; cursor: grab;
3024
+ }
3025
+ .ps-bpm-slider::-moz-range-track { background: transparent; height: 2px; }
3007
3026
  .ps-bpm-input {
3008
3027
  background: transparent; border: none; outline: none;
3009
3028
  font-family: inherit;
3010
- font-size: 32px; font-weight: 600;
3029
+ font-size: 20px; font-weight: 600;
3011
3030
  color: var(--ps-text-primary);
3012
3031
  padding: 0; margin: 0;
3013
3032
  width: auto; min-width: 0;
3014
- /* Width grows with content via field-sizing where supported */
3015
3033
  field-sizing: content;
3016
- /* Fallback width for browsers without field-sizing */
3017
3034
  max-width: 4ch;
3018
3035
  }
3019
3036
  .ps-bpm-input::-webkit-outer-spin-button,
@@ -3022,71 +3039,87 @@ const STYLES = `
3022
3039
  .ps-bpm-input::placeholder { color: var(--ps-border-color); }
3023
3040
  .ps-bpm-input:focus { outline: none; }
3024
3041
  .ps-bpm-unit {
3025
- font-size: 14px; font-weight: 500;
3042
+ font-size: 11px; font-weight: 500;
3026
3043
  color: var(--ps-text-muted);
3027
- margin-left: 2px; flex-shrink: 0;
3044
+ margin-left: 1px; flex-shrink: 0;
3028
3045
  }
3029
3046
 
3030
- /* RECOMMENDED upload card */
3047
+ /* RECOMMENDED upload card — compact */
3031
3048
  .ps-bpm-photo-card {
3032
- display: flex; align-items: center; gap: 14px;
3049
+ display: flex; align-items: center; gap: 12px;
3033
3050
  background: #1C1D1E; color: #FFFFFF;
3034
- border: none; border-radius: 12px;
3035
- padding: 14px 18px; margin-top: 6px;
3051
+ border: none; border-radius: 10px;
3052
+ padding: 10px 14px; margin-top: 6px;
3036
3053
  cursor: pointer; font-family: inherit;
3037
3054
  text-align: left; width: 100%;
3038
- transition: transform 0.15s ease, box-shadow 0.15s ease;
3039
- position: relative;
3055
+ transition: transform 0.15s ease;
3040
3056
  }
3041
3057
  .ps-bpm-photo-card:active { transform: scale(0.98); }
3042
3058
  .ps-bpm-photo-card-icon {
3043
3059
  flex-shrink: 0;
3044
- width: 40px; height: 40px; border-radius: 8px;
3060
+ width: 32px; height: 32px; border-radius: 7px;
3045
3061
  background: rgba(255,255,255,0.08);
3046
3062
  display: flex; align-items: center; justify-content: center;
3047
3063
  color: #FFFFFF;
3048
3064
  }
3065
+ .ps-bpm-photo-card-icon svg { width: 16px; height: 16px; }
3049
3066
  .ps-bpm-photo-card-content {
3050
- flex: 1; display: flex; flex-direction: column; gap: 3px; min-width: 0;
3067
+ flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0;
3051
3068
  }
3052
3069
  .ps-bpm-photo-card-badge {
3053
3070
  font-size: 9px; font-weight: 700; letter-spacing: 0.12em;
3054
3071
  color: rgba(255,255,255,0.55);
3055
3072
  }
3056
3073
  .ps-bpm-photo-card-text {
3057
- font-size: 14px; font-weight: 500; color: #FFFFFF;
3074
+ font-size: 13px; font-weight: 500; color: #FFFFFF;
3058
3075
  }
3059
3076
  .ps-bpm-photo-card-arrow {
3060
3077
  flex-shrink: 0; color: rgba(255,255,255,0.6);
3061
3078
  display: flex; align-items: center;
3062
3079
  }
3080
+ .ps-bpm-photo-card-arrow svg { width: 16px; height: 16px; }
3063
3081
 
3064
3082
  /* Helper hint */
3065
3083
  .ps-bpm-hint {
3066
- font-size: 11px; color: var(--ps-text-muted);
3067
- text-align: center; margin: 4px 8px 0; line-height: 1.5;
3084
+ font-size: 10px; color: var(--ps-text-muted);
3085
+ text-align: center; margin: 2px 8px 0; line-height: 1.5;
3068
3086
  font-style: italic;
3069
3087
  }
3070
3088
  .ps-bpm-error {
3071
- font-size: 12px; color: var(--ps-error-color);
3089
+ font-size: 11px; color: var(--ps-error-color);
3072
3090
  text-align: center; margin: 4px 0 0;
3073
3091
  }
3074
3092
 
3075
- /* Bottom mode tabs (MANUAL FIT / AI SCAN) sticky to the bottom of
3076
- the modal body. Border-top separator, equal-width buttons, active
3077
- state uses the accent color. Sits above the existing .ps-bp-nav
3078
- CALCULATE BEST FIT button. */
3093
+ /* Bottom action area Next button + tab bar grouped together,
3094
+ pushed to the bottom of the modal body by .ps-bpm-spacer above. */
3095
+ .ps-bpm-bottom {
3096
+ display: flex; flex-direction: column;
3097
+ margin: 0 -16px;
3098
+ border-top: 1px solid var(--ps-border-subtle);
3099
+ background: var(--ps-bg-primary);
3100
+ flex-shrink: 0;
3101
+ padding-bottom: env(safe-area-inset-bottom);
3102
+ }
3103
+ .ps-bpm-next-btn {
3104
+ margin: 14px 16px 12px;
3105
+ padding: 14px 18px;
3106
+ background: var(--ps-accent); color: #FFFFFF;
3107
+ border: none; border-radius: 10px;
3108
+ font-family: inherit; font-size: 14px; font-weight: 700;
3109
+ cursor: pointer; transition: opacity 0.15s, transform 0.15s;
3110
+ letter-spacing: 0.02em;
3111
+ }
3112
+ .ps-bpm-next-btn:active { transform: scale(0.98); }
3113
+ .ps-bpm-next-btn:disabled { opacity: 0.4; cursor: not-allowed; }
3079
3114
  .ps-bpm-bottom-tabs {
3080
3115
  display: flex; align-items: stretch;
3081
- margin: 14px -16px 0;
3082
3116
  border-top: 1px solid var(--ps-border-subtle);
3083
3117
  background: var(--ps-bg-primary);
3084
- position: sticky; bottom: 0;
3085
3118
  }
3086
3119
  .ps-bpm-bottom-tab {
3087
3120
  flex: 1; background: none; border: none;
3088
- padding: 16px 8px 14px;
3089
- font-family: inherit; font-size: 11px; font-weight: 700;
3121
+ padding: 14px 8px 12px;
3122
+ font-family: inherit; font-size: 10px; font-weight: 700;
3090
3123
  letter-spacing: 0.12em; text-transform: uppercase;
3091
3124
  color: var(--ps-text-muted); cursor: pointer;
3092
3125
  border-bottom: 2px solid transparent;
@@ -3097,7 +3130,7 @@ const STYLES = `
3097
3130
  color: var(--ps-accent);
3098
3131
  border-bottom-color: var(--ps-accent);
3099
3132
  }
3100
- .ps-bpm-bottom-tab svg { width: 14px; height: 14px; flex-shrink: 0; }
3133
+ .ps-bpm-bottom-tab svg { width: 13px; height: 13px; flex-shrink: 0; }
3101
3134
 
3102
3135
  .ps-bp-optional { font-weight: 400; color: var(--ps-text-muted); }
3103
3136
 
@@ -3372,10 +3405,21 @@ const STYLES = `
3372
3405
  @media (max-width: 768px) {
3373
3406
  .ps-bp-layout { flex-direction: column; height: auto; gap: 0; overflow: visible; }
3374
3407
  /* Desktop layout's product image — hidden on mobile because BasicsStepMobile
3375
- renders its own .ps-bpm-image. The other steps (chest/midsection/hips) don't
3408
+ has its own minimal layout. The other steps (chest/midsection/hips) don't
3376
3409
  need the giant left-column image on a phone either. */
3377
3410
  .ps-bp-image { display: none !important; }
3378
- .ps-bp-wrapper { overflow-y: auto; -webkit-overflow-scrolling: touch; }
3411
+ .ps-bp-wrapper { overflow-y: auto; -webkit-overflow-scrolling: touch; flex: 1; min-height: 0; display: flex; flex-direction: column; }
3412
+ .ps-bp-layout { flex: 1; min-height: 0; }
3413
+ /* Override desktop justify-content:center so BasicsStepMobile can
3414
+ stretch to the bottom of the modal — its bottom action bar (Next +
3415
+ tabs) needs to land at the bottom edge, not floating in the middle. */
3416
+ .ps-bp-root {
3417
+ justify-content: stretch !important;
3418
+ height: auto !important;
3419
+ max-height: none !important;
3420
+ overflow: visible !important;
3421
+ flex: 1 !important;
3422
+ }
3379
3423
  .ps-bp-upload-placeholder svg { width: 32px; height: 32px; }
3380
3424
  .ps-bp-upload-text { font-size: 14px; }
3381
3425
  .ps-bp-upload-hint { font-size: 11px; }
@@ -5394,8 +5438,6 @@ function ScanIconSmall() {
5394
5438
  ] });
5395
5439
  }
5396
5440
  function BasicsStepMobile({
5397
- productImage,
5398
- productTitle,
5399
5441
  hUnit,
5400
5442
  wUnit,
5401
5443
  isImperialMode,
@@ -5413,11 +5455,22 @@ function BasicsStepMobile({
5413
5455
  switchToImperial,
5414
5456
  onUploadPhoto,
5415
5457
  onSwitchToScan,
5458
+ onNext,
5459
+ canProceed,
5416
5460
  error,
5417
5461
  t
5418
5462
  }) {
5463
+ const heightCm = parseFloat(height) || 173;
5464
+ const heightInTotal = (parseFloat(heightFeet) || 5) * 12 + (parseFloat(heightInches) || 8);
5465
+ const weightNum = parseFloat(weight) || (wUnit === "kg" ? 70 : 154);
5466
+ const ageNum = parseFloat(age) || 30;
5467
+ const wMax = wUnit === "kg" ? 200 : 440;
5468
+ const wMinFix = wUnit === "kg" ? 30 : 66;
5469
+ const pctHCm = (heightCm - 120) / (220 - 120) * 100;
5470
+ const pctHIn = (heightInTotal - 48) / (84 - 48) * 100;
5471
+ const pctW = (weightNum - wMinFix) / (wMax - wMinFix) * 100;
5472
+ const pctA = (ageNum - 13) / (100 - 13) * 100;
5419
5473
  return /* @__PURE__ */ jsxs("div", { className: "ps-bpm-root", children: [
5420
- productImage && /* @__PURE__ */ jsx("div", { className: "ps-bpm-image", children: /* @__PURE__ */ jsx("img", { src: productImage, alt: productTitle, className: "ps-bpm-image-img" }) }),
5421
5474
  /* @__PURE__ */ jsxs("div", { className: "ps-bpm-header", children: [
5422
5475
  /* @__PURE__ */ jsx("h2", { className: "ps-bpm-title", children: t("Let's find your best fit") }),
5423
5476
  /* @__PURE__ */ jsx("p", { className: "ps-bpm-subtitle", children: t("Enter your details for a bespoke size recommendation") })
@@ -5444,90 +5497,151 @@ function BasicsStepMobile({
5444
5497
  ] }),
5445
5498
  /* @__PURE__ */ jsxs("div", { className: "ps-bpm-fields", children: [
5446
5499
  /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row", children: [
5447
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("HEIGHT") }),
5448
- hUnit === "in" ? /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5449
- /* @__PURE__ */ jsx(
5450
- "input",
5451
- {
5452
- type: "number",
5453
- inputMode: "numeric",
5454
- className: "ps-bpm-input",
5455
- value: heightFeet,
5456
- onChange: (e) => setHeightFeet(e.target.value),
5457
- min: 3,
5458
- max: 8,
5459
- placeholder: "5"
5460
- }
5461
- ),
5462
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "ft" }),
5463
- /* @__PURE__ */ jsx(
5464
- "input",
5465
- {
5466
- type: "number",
5467
- inputMode: "numeric",
5468
- className: "ps-bpm-input",
5469
- value: heightInches,
5470
- onChange: (e) => setHeightInches(e.target.value),
5471
- min: 0,
5472
- max: 11,
5473
- placeholder: "8"
5474
- }
5475
- ),
5476
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "in" })
5477
- ] }) : /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5478
- /* @__PURE__ */ jsx(
5479
- "input",
5480
- {
5481
- type: "number",
5482
- inputMode: "numeric",
5483
- className: "ps-bpm-input",
5484
- value: height,
5485
- onChange: (e) => setHeight(e.target.value),
5486
- min: 100,
5487
- max: 250,
5488
- placeholder: "173"
5489
- }
5490
- ),
5491
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "cm" })
5492
- ] })
5500
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row-top", children: [
5501
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("HEIGHT") }),
5502
+ hUnit === "in" ? /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5503
+ /* @__PURE__ */ jsx(
5504
+ "input",
5505
+ {
5506
+ type: "number",
5507
+ inputMode: "numeric",
5508
+ className: "ps-bpm-input",
5509
+ value: heightFeet,
5510
+ onChange: (e) => setHeightFeet(e.target.value),
5511
+ min: 3,
5512
+ max: 8,
5513
+ placeholder: "5"
5514
+ }
5515
+ ),
5516
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "ft" }),
5517
+ /* @__PURE__ */ jsx(
5518
+ "input",
5519
+ {
5520
+ type: "number",
5521
+ inputMode: "numeric",
5522
+ className: "ps-bpm-input",
5523
+ value: heightInches,
5524
+ onChange: (e) => setHeightInches(e.target.value),
5525
+ min: 0,
5526
+ max: 11,
5527
+ placeholder: "8"
5528
+ }
5529
+ ),
5530
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "in" })
5531
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5532
+ /* @__PURE__ */ jsx(
5533
+ "input",
5534
+ {
5535
+ type: "number",
5536
+ inputMode: "numeric",
5537
+ className: "ps-bpm-input",
5538
+ value: height,
5539
+ onChange: (e) => setHeight(e.target.value),
5540
+ min: 100,
5541
+ max: 250,
5542
+ placeholder: "173"
5543
+ }
5544
+ ),
5545
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: "cm" })
5546
+ ] })
5547
+ ] }),
5548
+ hUnit === "in" ? /* @__PURE__ */ jsx(
5549
+ "input",
5550
+ {
5551
+ type: "range",
5552
+ className: "ps-bpm-slider",
5553
+ min: 48,
5554
+ max: 84,
5555
+ step: 1,
5556
+ value: heightInTotal,
5557
+ onChange: (e) => {
5558
+ const v = parseInt(e.target.value, 10);
5559
+ setHeightFeet(String(Math.floor(v / 12)));
5560
+ setHeightInches(String(v % 12));
5561
+ },
5562
+ style: { ["--ps-pct"]: `${pctHIn}%` }
5563
+ }
5564
+ ) : /* @__PURE__ */ jsx(
5565
+ "input",
5566
+ {
5567
+ type: "range",
5568
+ className: "ps-bpm-slider",
5569
+ min: 120,
5570
+ max: 220,
5571
+ step: 1,
5572
+ value: heightCm,
5573
+ onChange: (e) => setHeight(e.target.value),
5574
+ style: { ["--ps-pct"]: `${pctHCm}%` }
5575
+ }
5576
+ )
5493
5577
  ] }),
5494
5578
  /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row", children: [
5495
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("WEIGHT") }),
5496
- /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5497
- /* @__PURE__ */ jsx(
5498
- "input",
5499
- {
5500
- type: "number",
5501
- inputMode: "numeric",
5502
- className: "ps-bpm-input",
5503
- value: weight,
5504
- onChange: (e) => setWeight(e.target.value),
5505
- min: wUnit === "kg" ? 30 : 66,
5506
- max: wUnit === "kg" ? 300 : 660,
5507
- placeholder: wUnit === "kg" ? "70" : "154"
5508
- }
5509
- ),
5510
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: wUnit })
5511
- ] })
5579
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row-top", children: [
5580
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("WEIGHT") }),
5581
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5582
+ /* @__PURE__ */ jsx(
5583
+ "input",
5584
+ {
5585
+ type: "number",
5586
+ inputMode: "numeric",
5587
+ className: "ps-bpm-input",
5588
+ value: weight,
5589
+ onChange: (e) => setWeight(e.target.value),
5590
+ min: wUnit === "kg" ? 30 : 66,
5591
+ max: wUnit === "kg" ? 300 : 660,
5592
+ placeholder: wUnit === "kg" ? "70" : "154"
5593
+ }
5594
+ ),
5595
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: wUnit })
5596
+ ] })
5597
+ ] }),
5598
+ /* @__PURE__ */ jsx(
5599
+ "input",
5600
+ {
5601
+ type: "range",
5602
+ className: "ps-bpm-slider",
5603
+ min: wMinFix,
5604
+ max: wMax,
5605
+ step: 1,
5606
+ value: weightNum,
5607
+ onChange: (e) => setWeight(e.target.value),
5608
+ style: { ["--ps-pct"]: `${pctW}%` }
5609
+ }
5610
+ )
5512
5611
  ] }),
5513
5612
  /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row", children: [
5514
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("AGE") }),
5515
- /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5516
- /* @__PURE__ */ jsx(
5517
- "input",
5518
- {
5519
- type: "number",
5520
- inputMode: "numeric",
5521
- className: "ps-bpm-input",
5522
- value: age,
5523
- onChange: (e) => setAge(e.target.value),
5524
- min: 13,
5525
- max: 100,
5526
- placeholder: "30"
5527
- }
5528
- ),
5529
- /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: t("years") })
5530
- ] })
5613
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-row-top", children: [
5614
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-label", children: t("AGE") }),
5615
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-value-group", children: [
5616
+ /* @__PURE__ */ jsx(
5617
+ "input",
5618
+ {
5619
+ type: "number",
5620
+ inputMode: "numeric",
5621
+ className: "ps-bpm-input",
5622
+ value: age,
5623
+ onChange: (e) => setAge(e.target.value),
5624
+ min: 13,
5625
+ max: 100,
5626
+ placeholder: "30"
5627
+ }
5628
+ ),
5629
+ /* @__PURE__ */ jsx("span", { className: "ps-bpm-unit", children: t("years") })
5630
+ ] })
5631
+ ] }),
5632
+ /* @__PURE__ */ jsx(
5633
+ "input",
5634
+ {
5635
+ type: "range",
5636
+ className: "ps-bpm-slider",
5637
+ min: 13,
5638
+ max: 100,
5639
+ step: 1,
5640
+ value: ageNum,
5641
+ onChange: (e) => setAge(e.target.value),
5642
+ style: { ["--ps-pct"]: `${pctA}%` }
5643
+ }
5644
+ )
5531
5645
  ] })
5532
5646
  ] }),
5533
5647
  /* @__PURE__ */ jsxs(
@@ -5548,32 +5662,45 @@ function BasicsStepMobile({
5548
5662
  ),
5549
5663
  /* @__PURE__ */ jsx("p", { className: "ps-bpm-hint", children: t("Enter accurate height for better fit recommendations") }),
5550
5664
  error && /* @__PURE__ */ jsx("p", { className: "ps-bpm-error", children: error }),
5551
- /* @__PURE__ */ jsxs("div", { className: "ps-bpm-bottom-tabs", children: [
5552
- /* @__PURE__ */ jsxs(
5665
+ /* @__PURE__ */ jsx("div", { className: "ps-bpm-spacer" }),
5666
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-bottom", children: [
5667
+ /* @__PURE__ */ jsx(
5553
5668
  "button",
5554
5669
  {
5555
5670
  type: "button",
5556
- className: "ps-bpm-bottom-tab ps-active",
5557
- onClick: () => {
5558
- },
5559
- children: [
5560
- /* @__PURE__ */ jsx(RulerIconSmall, {}),
5561
- t("MANUAL FIT")
5562
- ]
5671
+ className: "ps-bpm-next-btn",
5672
+ onClick: onNext,
5673
+ disabled: !canProceed,
5674
+ children: t("Next")
5563
5675
  }
5564
5676
  ),
5565
- /* @__PURE__ */ jsxs(
5566
- "button",
5567
- {
5568
- type: "button",
5569
- className: "ps-bpm-bottom-tab",
5570
- onClick: onSwitchToScan,
5571
- children: [
5572
- /* @__PURE__ */ jsx(ScanIconSmall, {}),
5573
- t("AI SCAN")
5574
- ]
5575
- }
5576
- )
5677
+ /* @__PURE__ */ jsxs("div", { className: "ps-bpm-bottom-tabs", children: [
5678
+ /* @__PURE__ */ jsxs(
5679
+ "button",
5680
+ {
5681
+ type: "button",
5682
+ className: "ps-bpm-bottom-tab ps-active",
5683
+ onClick: () => {
5684
+ },
5685
+ children: [
5686
+ /* @__PURE__ */ jsx(RulerIconSmall, {}),
5687
+ t("MANUAL FIT")
5688
+ ]
5689
+ }
5690
+ ),
5691
+ /* @__PURE__ */ jsxs(
5692
+ "button",
5693
+ {
5694
+ type: "button",
5695
+ className: "ps-bpm-bottom-tab",
5696
+ onClick: onSwitchToScan,
5697
+ children: [
5698
+ /* @__PURE__ */ jsx(ScanIconSmall, {}),
5699
+ t("AI SCAN")
5700
+ ]
5701
+ }
5702
+ )
5703
+ ] })
5577
5704
  ] })
5578
5705
  ] });
5579
5706
  }
@@ -6085,8 +6212,6 @@ function BodyProfileView({
6085
6212
  return /* @__PURE__ */ jsx(
6086
6213
  BasicsStepMobile,
6087
6214
  {
6088
- productImage,
6089
- productTitle,
6090
6215
  hUnit,
6091
6216
  wUnit,
6092
6217
  isImperialMode,
@@ -6104,6 +6229,8 @@ function BodyProfileView({
6104
6229
  switchToImperial,
6105
6230
  onUploadPhoto: () => setStep("photo"),
6106
6231
  onSwitchToScan: () => setStep("photo"),
6232
+ onNext: handleNext,
6233
+ canProceed: true,
6107
6234
  error,
6108
6235
  t
6109
6236
  },
@@ -6281,7 +6408,7 @@ function BodyProfileView({
6281
6408
  })(),
6282
6409
  error && /* @__PURE__ */ jsx("p", { className: "ps-bp-error", children: error })
6283
6410
  ] }, "step-bra"),
6284
- /* @__PURE__ */ jsxs("div", { className: "ps-bp-nav", children: [
6411
+ !(isMobile && step === "basics") && /* @__PURE__ */ jsxs("div", { className: "ps-bp-nav", children: [
6285
6412
  step !== "basics" ? /* @__PURE__ */ jsxs("button", { className: "ps-bp-back-btn", onClick: handleBackStep, type: "button", children: [
6286
6413
  /* @__PURE__ */ jsx("span", { className: "ps-bp-back-arrow", children: "←" }),
6287
6414
  " ",