@primestyleai/tryon 5.6.8 → 5.6.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.
@@ -3732,6 +3732,155 @@ const STYLES = `
3732
3732
  .ps-msr-tryon-cta:disabled { opacity: 0.4; cursor: not-allowed; }
3733
3733
  .ps-msr-tryon-cta svg { flex-shrink: 0; }
3734
3734
 
3735
+ /* ════════════════════════════════════════════════════════════════
3736
+ BodyShapeStepMobile (.ps-bsm-*) — vertical stacked option cards
3737
+ for body shape questions on mobile (chest / midsection / seat /
3738
+ hips). Matches the THE DIGITAL TAILOR reference design themed
3739
+ with the user's accent color.
3740
+ ════════════════════════════════════════════════════════════════ */
3741
+ .ps-bsm-root {
3742
+ display: flex; flex-direction: column;
3743
+ gap: 18px; padding: 8px 4px 24px;
3744
+ flex: 1; min-height: 0;
3745
+ }
3746
+ .ps-bsm-step {
3747
+ font-size: 11px; font-weight: 700;
3748
+ letter-spacing: 0.16em; text-transform: uppercase;
3749
+ color: var(--ps-text-muted);
3750
+ margin-bottom: -4px;
3751
+ }
3752
+ .ps-bsm-question {
3753
+ font-size: 26px; font-weight: 800;
3754
+ color: var(--ps-text-primary);
3755
+ line-height: 1.15;
3756
+ letter-spacing: -0.01em;
3757
+ margin: 0 0 6px;
3758
+ }
3759
+ .ps-bsm-options {
3760
+ display: flex; flex-direction: column; gap: 12px;
3761
+ }
3762
+ .ps-bsm-card {
3763
+ display: flex; align-items: center; justify-content: space-between;
3764
+ width: 100%;
3765
+ padding: 16px 18px;
3766
+ background: var(--ps-bg-secondary);
3767
+ border: 2px solid transparent;
3768
+ border-radius: 14px;
3769
+ cursor: pointer; font-family: inherit;
3770
+ text-align: left;
3771
+ transition: background 0.18s, border-color 0.18s, transform 0.15s;
3772
+ }
3773
+ .ps-bsm-card:active { transform: scale(0.985); }
3774
+ .ps-bsm-card.ps-active {
3775
+ background: var(--ps-accent);
3776
+ border-color: var(--ps-accent);
3777
+ box-shadow: 0 8px 24px rgba(33, 84, 239, 0.22);
3778
+ }
3779
+ .ps-bsm-card-content {
3780
+ display: flex; flex-direction: column; gap: 6px;
3781
+ min-width: 0;
3782
+ }
3783
+ .ps-bsm-card-eyebrow {
3784
+ font-size: 10px; font-weight: 700;
3785
+ letter-spacing: 0.14em; text-transform: uppercase;
3786
+ color: var(--ps-text-muted);
3787
+ }
3788
+ .ps-bsm-card.ps-active .ps-bsm-card-eyebrow {
3789
+ color: rgba(255, 255, 255, 0.7);
3790
+ }
3791
+ .ps-bsm-card-label {
3792
+ font-size: 22px; font-weight: 800;
3793
+ color: var(--ps-text-primary);
3794
+ letter-spacing: 0.02em;
3795
+ }
3796
+ .ps-bsm-card.ps-active .ps-bsm-card-label { color: #FFFFFF; }
3797
+ .ps-bsm-card-thumb {
3798
+ flex-shrink: 0;
3799
+ width: 64px; height: 64px;
3800
+ border-radius: 10px;
3801
+ background: rgba(255, 255, 255, 0.6);
3802
+ display: flex; align-items: center; justify-content: center;
3803
+ overflow: hidden;
3804
+ margin-left: 14px;
3805
+ }
3806
+ .ps-bsm-card.ps-active .ps-bsm-card-thumb {
3807
+ background: rgba(255, 255, 255, 0.18);
3808
+ }
3809
+ .ps-bsm-card-thumb img {
3810
+ max-width: 100%; max-height: 100%;
3811
+ width: auto; height: 100%;
3812
+ object-fit: contain;
3813
+ }
3814
+
3815
+ /* Mobile bra step fixes — give grid items breathing room and keep
3816
+ the dropdown visible. The desktop layout uses .ps-bp-bra-* but
3817
+ it's tight on phones. */
3818
+ @media (max-width: 768px) {
3819
+ .ps-bp-bra-step { padding: 4px 4px 24px; }
3820
+ .ps-bp-bra-step .ps-bp-title {
3821
+ font-size: 22px; font-weight: 800;
3822
+ text-align: left; margin-bottom: 18px;
3823
+ letter-spacing: -0.01em;
3824
+ }
3825
+ .ps-bp-bra-section { margin-bottom: 22px; }
3826
+ .ps-bp-bra-header {
3827
+ display: flex; align-items: center; justify-content: space-between;
3828
+ margin-bottom: 12px;
3829
+ }
3830
+ .ps-bp-bra-label {
3831
+ font-size: 11px !important; font-weight: 700;
3832
+ letter-spacing: 0.14em; text-transform: uppercase;
3833
+ color: var(--ps-text-muted);
3834
+ }
3835
+ .ps-bp-bra-region-trigger {
3836
+ padding: 6px 12px !important; font-size: 12px !important;
3837
+ border: 1px solid var(--ps-border-color); border-radius: 999px;
3838
+ background: var(--ps-bg-secondary);
3839
+ color: var(--ps-text-secondary);
3840
+ }
3841
+ .ps-bp-bra-region-dropdown {
3842
+ position: absolute; right: 0; top: 100%;
3843
+ margin-top: 6px;
3844
+ background: var(--ps-bg-primary);
3845
+ border: 1px solid var(--ps-border-color);
3846
+ border-radius: 10px;
3847
+ box-shadow: 0 8px 24px rgba(0,0,0,0.12);
3848
+ padding: 6px;
3849
+ z-index: 5;
3850
+ display: flex; flex-direction: column; gap: 2px;
3851
+ min-width: 80px;
3852
+ }
3853
+ .ps-bp-bra-region-item {
3854
+ padding: 8px 12px !important; font-size: 12px !important;
3855
+ border-radius: 6px; background: none; border: none;
3856
+ cursor: pointer; text-align: left;
3857
+ color: var(--ps-text-secondary);
3858
+ }
3859
+ .ps-bp-bra-region-item.ps-selected {
3860
+ background: var(--ps-accent); color: #FFFFFF;
3861
+ }
3862
+ .ps-bp-bra-grid {
3863
+ display: grid !important;
3864
+ grid-template-columns: repeat(4, 1fr);
3865
+ gap: 8px;
3866
+ }
3867
+ .ps-bp-bra-btn {
3868
+ padding: 12px 4px !important; font-size: 13px !important;
3869
+ border-radius: 8px;
3870
+ border: 1.5px solid var(--ps-border-color);
3871
+ background: var(--ps-bg-primary);
3872
+ color: var(--ps-text-primary);
3873
+ font-weight: 600;
3874
+ cursor: pointer;
3875
+ min-height: 44px;
3876
+ }
3877
+ .ps-bp-bra-btn-selected {
3878
+ background: var(--ps-accent) !important;
3879
+ border-color: var(--ps-accent) !important;
3880
+ color: #FFFFFF !important;
3881
+ }
3882
+ }
3883
+
3735
3884
  /* ════════════════════════════════════════════════════════════════
3736
3885
  MobileSectionDetail (.ps-msd-*) — section detail view on mobile.
3737
3886
  Layout: scroll container with rich blueprint rows matching the
@@ -3854,19 +4003,44 @@ const STYLES = `
3854
4003
  .ps-msp-avatar-tag { background: var(--ps-accent); }
3855
4004
 
3856
4005
  .ps-msp-card-thumb {
4006
+ position: relative;
3857
4007
  height: 90px;
3858
4008
  background: var(--ps-bg-secondary);
3859
4009
  border-radius: 8px;
3860
4010
  display: flex; align-items: center; justify-content: center;
3861
- margin-bottom: 12px;
4011
+ margin-bottom: 22px;
3862
4012
  color: var(--ps-text-secondary);
3863
- overflow: hidden;
4013
+ overflow: visible;
4014
+ }
4015
+ .ps-msp-card-thumb::after {
4016
+ /* Clip the rectangle photo only, not the circle overlay */
4017
+ content: ""; display: block;
3864
4018
  }
3865
4019
  .ps-msp-card-photo {
3866
4020
  width: 100%; height: 100%; object-fit: cover; display: block;
4021
+ border-radius: 8px;
3867
4022
  /* Same head-bias crop as the profile detail avatar */
3868
4023
  object-position: 50% 12%;
3869
4024
  }
4025
+ /* Circular profile avatar overlay — sits on the bottom-left of the
4026
+ rectangular thumb, social-card style. Shows the head crop. */
4027
+ .ps-msp-card-circle {
4028
+ position: absolute;
4029
+ left: 12px; bottom: -18px;
4030
+ width: 44px; height: 44px;
4031
+ border-radius: 50%;
4032
+ background: var(--ps-bg-primary);
4033
+ border: 3px solid var(--ps-bg-primary);
4034
+ box-shadow: 0 4px 12px rgba(0,0,0,0.12);
4035
+ overflow: hidden;
4036
+ display: flex; align-items: center; justify-content: center;
4037
+ color: var(--ps-accent);
4038
+ z-index: 2;
4039
+ }
4040
+ .ps-msp-card-circle img {
4041
+ width: 100%; height: 100%; object-fit: cover;
4042
+ object-position: 50% 12%;
4043
+ }
3870
4044
  .ps-msp-avatar {
3871
4045
  position: relative;
3872
4046
  display: flex; align-items: center; justify-content: center;
@@ -5906,17 +6080,25 @@ function MobileSkeleton({ landmarks, w, h }) {
5906
6080
  }
5907
6081
  function MobileScanningView({
5908
6082
  previewUrl,
6083
+ productImage,
5909
6084
  bodyLandmarks,
5910
6085
  sizingDone,
5911
6086
  onSwitchToManual,
5912
6087
  t
5913
6088
  }) {
5914
- const stages = [
6089
+ const displayImage = previewUrl || productImage || "";
6090
+ const isPhotoMode = !!previewUrl;
6091
+ const stages = isPhotoMode ? [
5915
6092
  { title: t("DETECTING POSE"), desc: t("Identifying body landmarks from your photo."), viewfinderText: t("DETECTING POSE") },
5916
6093
  { title: t("SCANNING FRAME"), desc: t("Our AI is mapping your proportions to calculate the perfect fit."), viewfinderText: t("SCANNING FRAME") },
5917
6094
  { title: t("ANALYZING BODY"), desc: t("Measuring shoulders, chest, waist and hips."), viewfinderText: t("ANALYZING") },
5918
6095
  { title: t("MATCHING SIZE"), desc: t("Comparing your measurements to the size guide."), viewfinderText: t("MATCHING SIZE") },
5919
6096
  { title: t("FINALIZING RESULT"), desc: t("Almost done — preparing your recommendation."), viewfinderText: t("FINALIZING") }
6097
+ ] : [
6098
+ { title: t("READING YOUR PROFILE"), desc: t("Loading your saved measurements and body shape answers."), viewfinderText: t("READING PROFILE") },
6099
+ { title: t("ESTIMATING BODY"), desc: t("Computing chest, waist, hips, sleeve and inseam from your basics."), viewfinderText: t("ESTIMATING BODY") },
6100
+ { title: t("MATCHING SIZE"), desc: t("Comparing your measurements to the garment's size guide."), viewfinderText: t("MATCHING SIZE") },
6101
+ { title: t("FINALIZING RESULT"), desc: t("Almost done — preparing your recommendation."), viewfinderText: t("FINALIZING") }
5920
6102
  ];
5921
6103
  const [dims, setDims] = useState({ w: 800, h: 1200 });
5922
6104
  const handleImgLoad = (e) => {
@@ -5926,7 +6108,7 @@ function MobileScanningView({
5926
6108
  const [stageIdx, setStageIdx] = useState(0);
5927
6109
  useEffect(() => {
5928
6110
  if (sizingDone) return;
5929
- if (bodyLandmarks && stageIdx === 0) {
6111
+ if (isPhotoMode && bodyLandmarks && stageIdx === 0) {
5930
6112
  setStageIdx(1);
5931
6113
  return;
5932
6114
  }
@@ -5934,7 +6116,7 @@ function MobileScanningView({
5934
6116
  setStageIdx((i) => Math.min(i + 1, stages.length - 1));
5935
6117
  }, 1600);
5936
6118
  return () => clearInterval(id);
5937
- }, [bodyLandmarks, sizingDone, stageIdx, stages.length]);
6119
+ }, [bodyLandmarks, sizingDone, stageIdx, stages.length, isPhotoMode]);
5938
6120
  const current = stages[stageIdx] ?? stages[0];
5939
6121
  const [feedTick, setFeedTick] = useState(1);
5940
6122
  useEffect(() => {
@@ -5949,10 +6131,10 @@ function MobileScanningView({
5949
6131
  "LIVE_FEED:",
5950
6132
  String(feedTick).padStart(2, "0")
5951
6133
  ] }),
5952
- /* @__PURE__ */ jsx(
6134
+ displayImage && /* @__PURE__ */ jsx(
5953
6135
  "img",
5954
6136
  {
5955
- src: previewUrl,
6137
+ src: displayImage,
5956
6138
  alt: t("Your photo"),
5957
6139
  className: "ps-msc-photo",
5958
6140
  onLoad: handleImgLoad
@@ -5965,7 +6147,7 @@ function MobileScanningView({
5965
6147
  /* @__PURE__ */ jsx("span", { className: "ps-msc-corner ps-br" })
5966
6148
  ] }),
5967
6149
  /* @__PURE__ */ jsx("div", { className: "ps-msc-scanline" }),
5968
- bodyLandmarks && /* @__PURE__ */ jsx("div", { className: "ps-msc-pose-wrap", children: /* @__PURE__ */ jsx(MobileSkeleton, { landmarks: bodyLandmarks, w: dims.w, h: dims.h }) }),
6150
+ isPhotoMode && bodyLandmarks && /* @__PURE__ */ jsx("div", { className: "ps-msc-pose-wrap", children: /* @__PURE__ */ jsx(MobileSkeleton, { landmarks: bodyLandmarks, w: dims.w, h: dims.h }) }),
5969
6151
  /* @__PURE__ */ jsxs("div", { className: "ps-msc-vf-bottom", children: [
5970
6152
  /* @__PURE__ */ jsxs("div", { className: "ps-msc-vf-text", children: [
5971
6153
  current.viewfinderText,
@@ -6987,7 +7169,17 @@ function SizeResultView({
6987
7169
  previewUrl: !!previewUrl
6988
7170
  });
6989
7171
  return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr", children: [
6990
- isSizingOnly && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-split", children: [
7172
+ isMobile && isSizingOnly && /* @__PURE__ */ jsx(
7173
+ MobileScanningView,
7174
+ {
7175
+ productImage,
7176
+ bodyLandmarks: null,
7177
+ sizingDone,
7178
+ onSwitchToManual: () => setView("body-profile"),
7179
+ t
7180
+ }
7181
+ ),
7182
+ !isMobile && isSizingOnly && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-split", children: [
6991
7183
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-img-col", children: /* @__PURE__ */ jsx("img", { src: productImage, alt: productTitle, className: "ps-tryon-sr-product-img" }) }),
6992
7184
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-right-col", style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "0.8vw" }, children: [
6993
7185
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-size-loading-spinner" }),
@@ -8208,7 +8400,10 @@ function ProfileCard({
8208
8400
  tabIndex: 0,
8209
8401
  children: [
8210
8402
  /* @__PURE__ */ jsx("div", { className: "ps-msp-card-header", children: /* @__PURE__ */ jsx("span", { className: "ps-msp-card-tag", children: isActive ? t("DEFAULT PROFILE") : profile.gender === "female" ? t("WOMEN'S FIT") : t("MEN'S FIT") }) }),
8211
- /* @__PURE__ */ jsx("div", { className: "ps-msp-card-thumb", children: profile.photoBase64 ? /* @__PURE__ */ jsx("img", { src: profile.photoBase64, alt: profile.name, className: "ps-msp-card-photo" }) : /* @__PURE__ */ jsx(ProfileAvatar, { gender: profile.gender }) }),
8403
+ /* @__PURE__ */ jsxs("div", { className: "ps-msp-card-thumb", children: [
8404
+ profile.photoBase64 ? /* @__PURE__ */ jsx("img", { src: profile.photoBase64, alt: profile.name, className: "ps-msp-card-photo" }) : /* @__PURE__ */ jsx(ProfileAvatar, { gender: profile.gender }),
8405
+ /* @__PURE__ */ jsx("div", { className: "ps-msp-card-circle", children: profile.photoBase64 ? /* @__PURE__ */ jsx("img", { src: profile.photoBase64, alt: "" }) : /* @__PURE__ */ jsx(UserIcon, { size: 18 }) })
8406
+ ] }),
8212
8407
  /* @__PURE__ */ jsx("div", { className: "ps-msp-card-name", children: profile.name }),
8213
8408
  /* @__PURE__ */ jsxs("div", { className: "ps-msp-card-meta", children: [
8214
8409
  heightDisplay && /* @__PURE__ */ jsxs("div", { className: "ps-msp-meta-row", children: [
@@ -8721,6 +8916,50 @@ function PhotoStepMobile({
8721
8916
  ] })
8722
8917
  ] });
8723
8918
  }
8919
+ function BodyShapeStepMobile({
8920
+ stepNumber,
8921
+ totalSteps,
8922
+ title,
8923
+ options,
8924
+ selected,
8925
+ onSelect,
8926
+ t
8927
+ }) {
8928
+ return /* @__PURE__ */ jsxs("div", { className: "ps-bsm-root", children: [
8929
+ /* @__PURE__ */ jsxs("div", { className: "ps-bsm-step", children: [
8930
+ t("STEP"),
8931
+ " ",
8932
+ String(stepNumber).padStart(2, "0"),
8933
+ " / ",
8934
+ String(totalSteps).padStart(2, "0")
8935
+ ] }),
8936
+ /* @__PURE__ */ jsx("h2", { className: "ps-bsm-question", children: title }),
8937
+ /* @__PURE__ */ jsx("div", { className: "ps-bsm-options", children: options.map((opt, idx) => {
8938
+ const isActive = selected === opt.value;
8939
+ const profileLetter = String.fromCharCode(65 + idx);
8940
+ return /* @__PURE__ */ jsxs(
8941
+ "button",
8942
+ {
8943
+ type: "button",
8944
+ className: `ps-bsm-card${isActive ? " ps-active" : ""}`,
8945
+ onClick: () => onSelect(opt.value),
8946
+ children: [
8947
+ /* @__PURE__ */ jsxs("div", { className: "ps-bsm-card-content", children: [
8948
+ /* @__PURE__ */ jsxs("span", { className: "ps-bsm-card-eyebrow", children: [
8949
+ t("PROFILE"),
8950
+ " ",
8951
+ profileLetter
8952
+ ] }),
8953
+ /* @__PURE__ */ jsx("span", { className: "ps-bsm-card-label", children: opt.label.toUpperCase() })
8954
+ ] }),
8955
+ opt.img && /* @__PURE__ */ jsx("div", { className: "ps-bsm-card-thumb", children: /* @__PURE__ */ jsx("img", { src: opt.img, alt: opt.label }) })
8956
+ ]
8957
+ },
8958
+ opt.value
8959
+ );
8960
+ }) })
8961
+ ] });
8962
+ }
8724
8963
  function CameraUploadIcon() {
8725
8964
  return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", width: "24", height: "24", children: [
8726
8965
  /* @__PURE__ */ jsx("path", { d: "M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z" }),
@@ -9280,7 +9519,23 @@ function BodyProfileView({
9280
9519
  error && /* @__PURE__ */ jsx("p", { className: "ps-bp-error", children: error })
9281
9520
  ] }, "step-basics");
9282
9521
  })(),
9283
- step === "chest" && !isWomen && /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9522
+ step === "chest" && !isWomen && (isMobile ? /* @__PURE__ */ jsx(
9523
+ BodyShapeStepMobile,
9524
+ {
9525
+ stepNumber: steps.indexOf("chest") + 1,
9526
+ totalSteps: steps.length,
9527
+ title: t("WHICH BEST DESCRIBES YOUR CHEST?"),
9528
+ options: [
9529
+ { value: "narrow", label: t("Narrow"), img: BODY_IMAGES.male.chest.narrow },
9530
+ { value: "average", label: t("Average"), img: BODY_IMAGES.male.chest.average },
9531
+ { value: "broad", label: t("Broad"), img: BODY_IMAGES.male.chest.broad }
9532
+ ],
9533
+ selected: chestProfile,
9534
+ onSelect: (v) => setChestProfile(v),
9535
+ t
9536
+ },
9537
+ "step-chest-mobile"
9538
+ ) : /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9284
9539
  /* @__PURE__ */ jsx("h2", { className: "ps-bp-title", children: t("Which best describes your chest?") }),
9285
9540
  /* @__PURE__ */ jsxs("div", { className: "ps-bp-shape-row ps-bp-shape-row-full", children: [
9286
9541
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.male.chest.narrow, label: t("Narrow"), selected: chestProfile === "narrow", onSelect: () => setChestProfile("narrow"), onHover: () => setHoverDesc(t("A slimmer, narrower chest build")), onLeave: () => setHoverDesc("") }),
@@ -9288,8 +9543,28 @@ function BodyProfileView({
9288
9543
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.male.chest.broad, label: t("Broad"), selected: chestProfile === "broad", onSelect: () => setChestProfile("broad"), onHover: () => setHoverDesc(t("A wider, more muscular chest")), onLeave: () => setHoverDesc("") })
9289
9544
  ] }),
9290
9545
  /* @__PURE__ */ jsx("p", { className: "ps-bp-hover-hint", children: hoverDesc || " " })
9291
- ] }, "step-chest"),
9292
- step === "midsection" && /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9546
+ ] }, "step-chest")),
9547
+ step === "midsection" && (isMobile ? /* @__PURE__ */ jsx(
9548
+ BodyShapeStepMobile,
9549
+ {
9550
+ stepNumber: steps.indexOf("midsection") + 1,
9551
+ totalSteps: steps.length,
9552
+ title: t("WHICH BEST DESCRIBES YOUR MIDSECTION?"),
9553
+ options: isWomen ? [
9554
+ { value: "flat", label: t("Flat"), img: BODY_IMAGES.female.stomach.flat },
9555
+ { value: "average", label: t("Average"), img: BODY_IMAGES.female.stomach.average },
9556
+ { value: "round", label: t("Full"), img: BODY_IMAGES.female.stomach.round }
9557
+ ] : [
9558
+ { value: "flat", label: t("Flat"), img: BODY_IMAGES.male.stomach.flat },
9559
+ { value: "average", label: t("Average"), img: BODY_IMAGES.male.stomach.average },
9560
+ { value: "round", label: t("Full"), img: BODY_IMAGES.male.stomach.round }
9561
+ ],
9562
+ selected: midsectionProfile,
9563
+ onSelect: (v) => setMidsectionProfile(v),
9564
+ t
9565
+ },
9566
+ "step-midsection-mobile"
9567
+ ) : /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9293
9568
  /* @__PURE__ */ jsx("h2", { className: "ps-bp-title", children: t("Which best describes your midsection?") }),
9294
9569
  /* @__PURE__ */ jsx("div", { className: "ps-bp-shape-row ps-bp-shape-row-full", children: isWomen ? /* @__PURE__ */ jsxs(Fragment, { children: [
9295
9570
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.female.stomach.flat, label: t("Flat"), selected: midsectionProfile === "flat", onSelect: () => setMidsectionProfile("flat"), onHover: () => setHoverDesc(t("A flatter midsection with minimal protrusion")), onLeave: () => setHoverDesc("") }),
@@ -9301,8 +9576,28 @@ function BodyProfileView({
9301
9576
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.male.stomach.round, label: t("Full"), selected: midsectionProfile === "round", onSelect: () => setMidsectionProfile("round"), onHover: () => setHoverDesc(t("A fuller, more rounded midsection")), onLeave: () => setHoverDesc("") })
9302
9577
  ] }) }),
9303
9578
  /* @__PURE__ */ jsx("p", { className: "ps-bp-hover-hint", children: hoverDesc || " " })
9304
- ] }, "step-midsection"),
9305
- step === "seat" && /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9579
+ ] }, "step-midsection")),
9580
+ step === "seat" && (isMobile ? /* @__PURE__ */ jsx(
9581
+ BodyShapeStepMobile,
9582
+ {
9583
+ stepNumber: steps.indexOf("seat") + 1,
9584
+ totalSteps: steps.length,
9585
+ title: t("WHICH BEST DESCRIBES YOUR SEAT?"),
9586
+ options: isWomen ? [
9587
+ { value: "narrow", label: t("Flat"), img: BODY_IMAGES.female.seat.narrow },
9588
+ { value: "average", label: t("Average"), img: BODY_IMAGES.female.seat.average },
9589
+ { value: "full", label: t("Full"), img: BODY_IMAGES.female.seat.full }
9590
+ ] : [
9591
+ { value: "narrow", label: t("Flat"), img: BODY_IMAGES.male.seat.narrow },
9592
+ { value: "average", label: t("Average"), img: BODY_IMAGES.male.seat.average },
9593
+ { value: "full", label: t("Full"), img: BODY_IMAGES.male.seat.full }
9594
+ ],
9595
+ selected: seatProfile,
9596
+ onSelect: (v) => setSeatProfile(v),
9597
+ t
9598
+ },
9599
+ "step-seat-mobile"
9600
+ ) : /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9306
9601
  /* @__PURE__ */ jsx("h2", { className: "ps-bp-title", children: t("Which best describes your seat?") }),
9307
9602
  /* @__PURE__ */ jsx("div", { className: "ps-bp-shape-row ps-bp-shape-row-full", children: isWomen ? /* @__PURE__ */ jsxs(Fragment, { children: [
9308
9603
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.female.seat.narrow, label: t("Flat"), selected: seatProfile === "narrow", onSelect: () => setSeatProfile("narrow"), onHover: () => setHoverDesc(t("A flatter backside with less projection")), onLeave: () => setHoverDesc("") }),
@@ -9314,8 +9609,24 @@ function BodyProfileView({
9314
9609
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.male.seat.full, label: t("Full"), selected: seatProfile === "full", onSelect: () => setSeatProfile("full"), onHover: () => setHoverDesc(t("A fuller, more rounded backside")), onLeave: () => setHoverDesc("") })
9315
9610
  ] }) }),
9316
9611
  /* @__PURE__ */ jsx("p", { className: "ps-bp-hover-hint", children: hoverDesc || " " })
9317
- ] }, "step-seat"),
9318
- step === "hips" && isWomen && /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9612
+ ] }, "step-seat")),
9613
+ step === "hips" && isWomen && (isMobile ? /* @__PURE__ */ jsx(
9614
+ BodyShapeStepMobile,
9615
+ {
9616
+ stepNumber: steps.indexOf("hips") + 1,
9617
+ totalSteps: steps.length,
9618
+ title: t("WHICH BEST DESCRIBES YOUR HIPS?"),
9619
+ options: [
9620
+ { value: "narrow", label: t("Narrow"), img: BODY_IMAGES.female.hips.narrow },
9621
+ { value: "average", label: t("Average"), img: BODY_IMAGES.female.hips.average },
9622
+ { value: "full", label: t("Curvy"), img: BODY_IMAGES.female.hips.full }
9623
+ ],
9624
+ selected: hipProfile,
9625
+ onSelect: (v) => setHipProfile(v),
9626
+ t
9627
+ },
9628
+ "step-hips-mobile"
9629
+ ) : /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-single-q", children: [
9319
9630
  /* @__PURE__ */ jsx("h2", { className: "ps-bp-title", children: t("Which best describes your hips?") }),
9320
9631
  /* @__PURE__ */ jsxs("div", { className: "ps-bp-shape-row ps-bp-shape-row-full", children: [
9321
9632
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.female.hips.narrow, label: t("Narrow"), selected: hipProfile === "narrow", onSelect: () => setHipProfile("narrow"), onHover: () => setHoverDesc(t("Hips closer to shoulder width")), onLeave: () => setHoverDesc("") }),
@@ -9323,7 +9634,7 @@ function BodyProfileView({
9323
9634
  /* @__PURE__ */ jsx(ImageOptionCard, { img: BODY_IMAGES.female.hips.full, label: t("Curvy"), selected: hipProfile === "full", onSelect: () => setHipProfile("full"), onHover: () => setHoverDesc(t("Hips wider than shoulders")), onLeave: () => setHoverDesc("") })
9324
9635
  ] }),
9325
9636
  /* @__PURE__ */ jsx("p", { className: "ps-bp-hover-hint", children: hoverDesc || " " })
9326
- ] }, "step-hips"),
9637
+ ] }, "step-hips")),
9327
9638
  step === "bra" && isWomen && /* @__PURE__ */ jsxs("div", { className: "ps-bp-step ps-bp-step-enter ps-bp-bra-step", children: [
9328
9639
  /* @__PURE__ */ jsx("h2", { className: "ps-bp-title", children: t("Select your bra size") }),
9329
9640
  /* @__PURE__ */ jsxs("div", { className: "ps-bp-bra-section", children: [