@primestyleai/tryon 5.10.190 → 5.10.192

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.
@@ -275,7 +275,7 @@ var scheduler_production_min = {};
275
275
  * This source code is licensed under the MIT license found in the
276
276
  * LICENSE file in the root directory of this source tree.
277
277
  */
278
- (function(exports) {
278
+ (function(exports$1) {
279
279
  function f2(a, b) {
280
280
  var c = a.length;
281
281
  a.push(b);
@@ -308,12 +308,12 @@ var scheduler_production_min = {};
308
308
  }
309
309
  if ("object" === typeof performance && "function" === typeof performance.now) {
310
310
  var l2 = performance;
311
- exports.unstable_now = function() {
311
+ exports$1.unstable_now = function() {
312
312
  return l2.now();
313
313
  };
314
314
  } else {
315
315
  var p2 = Date, q2 = p2.now();
316
- exports.unstable_now = function() {
316
+ exports$1.unstable_now = function() {
317
317
  return p2.now() - q2;
318
318
  };
319
319
  }
@@ -349,7 +349,7 @@ var scheduler_production_min = {};
349
349
  v2.callback = null;
350
350
  y2 = v2.priorityLevel;
351
351
  var e = d(v2.expirationTime <= b);
352
- b = exports.unstable_now();
352
+ b = exports$1.unstable_now();
353
353
  "function" === typeof e ? v2.callback = e : v2 === h(r2) && k2(r2);
354
354
  G2(b);
355
355
  } else k2(r2);
@@ -368,11 +368,11 @@ var scheduler_production_min = {};
368
368
  }
369
369
  var N2 = false, O2 = null, L2 = -1, P2 = 5, Q2 = -1;
370
370
  function M2() {
371
- return exports.unstable_now() - Q2 < P2 ? false : true;
371
+ return exports$1.unstable_now() - Q2 < P2 ? false : true;
372
372
  }
373
373
  function R2() {
374
374
  if (null !== O2) {
375
- var a = exports.unstable_now();
375
+ var a = exports$1.unstable_now();
376
376
  Q2 = a;
377
377
  var b = true;
378
378
  try {
@@ -401,31 +401,31 @@ var scheduler_production_min = {};
401
401
  }
402
402
  function K2(a, b) {
403
403
  L2 = D2(function() {
404
- a(exports.unstable_now());
404
+ a(exports$1.unstable_now());
405
405
  }, b);
406
406
  }
407
- exports.unstable_IdlePriority = 5;
408
- exports.unstable_ImmediatePriority = 1;
409
- exports.unstable_LowPriority = 4;
410
- exports.unstable_NormalPriority = 3;
411
- exports.unstable_Profiling = null;
412
- exports.unstable_UserBlockingPriority = 2;
413
- exports.unstable_cancelCallback = function(a) {
407
+ exports$1.unstable_IdlePriority = 5;
408
+ exports$1.unstable_ImmediatePriority = 1;
409
+ exports$1.unstable_LowPriority = 4;
410
+ exports$1.unstable_NormalPriority = 3;
411
+ exports$1.unstable_Profiling = null;
412
+ exports$1.unstable_UserBlockingPriority = 2;
413
+ exports$1.unstable_cancelCallback = function(a) {
414
414
  a.callback = null;
415
415
  };
416
- exports.unstable_continueExecution = function() {
416
+ exports$1.unstable_continueExecution = function() {
417
417
  A2 || z2 || (A2 = true, I2(J2));
418
418
  };
419
- exports.unstable_forceFrameRate = function(a) {
419
+ exports$1.unstable_forceFrameRate = function(a) {
420
420
  0 > a || 125 < a ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : P2 = 0 < a ? Math.floor(1e3 / a) : 5;
421
421
  };
422
- exports.unstable_getCurrentPriorityLevel = function() {
422
+ exports$1.unstable_getCurrentPriorityLevel = function() {
423
423
  return y2;
424
424
  };
425
- exports.unstable_getFirstCallbackNode = function() {
425
+ exports$1.unstable_getFirstCallbackNode = function() {
426
426
  return h(r2);
427
427
  };
428
- exports.unstable_next = function(a) {
428
+ exports$1.unstable_next = function(a) {
429
429
  switch (y2) {
430
430
  case 1:
431
431
  case 2:
@@ -443,11 +443,11 @@ var scheduler_production_min = {};
443
443
  y2 = c;
444
444
  }
445
445
  };
446
- exports.unstable_pauseExecution = function() {
446
+ exports$1.unstable_pauseExecution = function() {
447
447
  };
448
- exports.unstable_requestPaint = function() {
448
+ exports$1.unstable_requestPaint = function() {
449
449
  };
450
- exports.unstable_runWithPriority = function(a, b) {
450
+ exports$1.unstable_runWithPriority = function(a, b) {
451
451
  switch (a) {
452
452
  case 1:
453
453
  case 2:
@@ -466,8 +466,8 @@ var scheduler_production_min = {};
466
466
  y2 = c;
467
467
  }
468
468
  };
469
- exports.unstable_scheduleCallback = function(a, b, c) {
470
- var d = exports.unstable_now();
469
+ exports$1.unstable_scheduleCallback = function(a, b, c) {
470
+ var d = exports$1.unstable_now();
471
471
  "object" === typeof c && null !== c ? (c = c.delay, c = "number" === typeof c && 0 < c ? d + c : d) : c = d;
472
472
  switch (a) {
473
473
  case 1:
@@ -490,8 +490,8 @@ var scheduler_production_min = {};
490
490
  c > d ? (a.sortIndex = c, f2(t2, a), null === h(r2) && a === h(t2) && (B2 ? (E2(L2), L2 = -1) : B2 = true, K2(H2, c - d))) : (a.sortIndex = e, f2(r2, a), A2 || z2 || (A2 = true, I2(J2)));
491
491
  return a;
492
492
  };
493
- exports.unstable_shouldYield = M2;
494
- exports.unstable_wrapCallback = function(a) {
493
+ exports$1.unstable_shouldYield = M2;
494
+ exports$1.unstable_wrapCallback = function(a) {
495
495
  var b = y2;
496
496
  return function() {
497
497
  var c = y2;
@@ -13093,7 +13093,7 @@ const STYLES = `
13093
13093
  }
13094
13094
 
13095
13095
  /* ── Product photo strip (single-garment, below the size card) ──
13096
- Two thumbnails per row, evenly spaced, auto-advances. Lives at
13096
+ Three thumbnails per row, evenly spaced, auto-advances. Lives at
13097
13097
  the bottom of the right panel as decoration / entertainment. */
13098
13098
  .ps-tryon-photo-strip {
13099
13099
  margin-top: 0.65vw;
@@ -13112,12 +13112,16 @@ const STYLES = `
13112
13112
  }
13113
13113
  .ps-tryon-photo-strip-row {
13114
13114
  display: grid;
13115
- grid-template-columns: repeat(2, minmax(0, 1fr));
13115
+ grid-template-columns: repeat(3, minmax(0, 1fr));
13116
13116
  gap: 0.45vw;
13117
13117
  animation: ps-tryon-photo-strip-fade 0.5s ease;
13118
13118
  }
13119
13119
  .ps-tryon-photo-strip-row.ps-count-1 {
13120
- grid-template-columns: minmax(0, calc((100% - 0.45vw) / 2));
13120
+ grid-template-columns: minmax(0, calc((100% - 0.9vw) / 3));
13121
+ justify-content: center;
13122
+ }
13123
+ .ps-tryon-photo-strip-row.ps-count-2 {
13124
+ grid-template-columns: repeat(2, minmax(0, calc((100% - 0.9vw) / 3)));
13121
13125
  justify-content: center;
13122
13126
  }
13123
13127
  .ps-tryon-photo-strip-cell {
@@ -13178,8 +13182,14 @@ const STYLES = `
13178
13182
  .ps-tryon-photo-strip-row {
13179
13183
  gap: 8px;
13180
13184
  }
13185
+ .ps-tryon-photo-strip-row {
13186
+ grid-template-columns: repeat(3, minmax(0, 1fr));
13187
+ }
13181
13188
  .ps-tryon-photo-strip-row.ps-count-1 {
13182
- grid-template-columns: minmax(0, calc((100% - 8px) / 2));
13189
+ grid-template-columns: minmax(0, calc((100% - 16px) / 3));
13190
+ }
13191
+ .ps-tryon-photo-strip-row.ps-count-2 {
13192
+ grid-template-columns: repeat(2, minmax(0, calc((100% - 16px) / 3)));
13183
13193
  }
13184
13194
  .ps-tryon-photo-strip-cell {
13185
13195
  aspect-ratio: 1 / 1; border-radius: 12px;
@@ -21841,232 +21851,1420 @@ const STYLES = `
21841
21851
  .ps-photo-zone-rejection-cta { font-size: 13px; padding: 10px 16px; border-radius: 8px; }
21842
21852
  .ps-photo-zone-error { font-size: 11px; padding: 8px 10px; border-radius: 8px; }
21843
21853
  }
21844
- `;
21845
- function CameraIcon$1({ size = 18 }) {
21846
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21847
- /* @__PURE__ */ jsxRuntimeExports.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" }),
21848
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "13", r: "4" })
21849
- ] });
21850
- }
21851
- function UploadIcon({ size = 48 }) {
21852
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", children: [
21853
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
21854
- /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }),
21855
- /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
21856
- ] });
21857
- }
21858
- function XIcon({ size = 20 }) {
21859
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21860
- /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
21861
- /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
21862
- ] });
21863
- }
21864
- function ArrowLeftIcon() {
21865
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M15 18l-6-6 6-6" }) });
21866
- }
21867
- function ArrowRightIcon() {
21868
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 12h14M12 5l7 7-7 7" }) });
21869
- }
21870
- function UserIcon({ size = 16 }) {
21871
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21872
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
21873
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "4" })
21874
- ] });
21875
- }
21876
- function ShoppingBagIcon({ size = 16 }) {
21877
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21878
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M16 10a4 4 0 0 1-8 0" }),
21879
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M3.103 6.034h17.794" }),
21880
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z" })
21881
- ] });
21882
- }
21883
- function ExternalLinkIcon({ size = 16 }) {
21884
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21885
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M14 3h7v7" }),
21886
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M10 14 21 3" }),
21887
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5" })
21888
- ] });
21889
- }
21890
- function ClockIcon({ size = 16 }) {
21891
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21892
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }),
21893
- /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "12 6 12 12 16 14" })
21894
- ] });
21895
- }
21896
- function RulerIcon$1({ size = 18 }) {
21897
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21898
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z" }),
21899
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m14.5 12.5 2-2" }),
21900
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m11.5 9.5 2-2" }),
21901
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m8.5 6.5 2-2" }),
21902
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m17.5 15.5 2-2" })
21903
- ] });
21904
- }
21905
- function SparkleIcon({ size = 18 }) {
21906
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z" }) });
21907
- }
21908
- function TrashIcon({ size = 14 }) {
21909
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21910
- /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 6 5 6 21 6" }),
21911
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
21912
- ] });
21913
- }
21914
- function ChevronRightIcon() {
21915
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M9 18l6-6-6-6" }) });
21916
- }
21917
- function ChevronDownIcon({ size = 18 }) {
21918
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.4, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m6 9 6 6 6-6" }) });
21919
- }
21920
- function CheckIcon$1({ size = 14 }) {
21921
- return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 3, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "20 6 9 17 4 12" }) });
21922
- }
21923
- function GlobeIcon({ size = 16 }) {
21924
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
21925
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }),
21926
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M2 12h20" }),
21927
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
21928
- ] });
21929
- }
21930
- function Stepper({ view, stepIndex }) {
21931
- if (view === "error" || view === "idle") return null;
21932
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-tryon-dots", children: Array.from({ length: TOTAL_STEPS }, (_, i) => i + 1).map((i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `ps-tryon-dot${i < stepIndex ? " ps-done" : i === stepIndex ? " ps-active" : ""}` }, i)) });
21933
- }
21934
- function LangSwitcher({
21935
- activeLocale: current,
21936
- onSelect,
21937
- portalContainer
21938
- }) {
21939
- const [open, setOpen] = reactExports.useState(false);
21940
- const triggerRef = reactExports.useRef(null);
21941
- const dropRef = reactExports.useRef(null);
21942
- const [pos, setPos] = reactExports.useState({ top: 0, right: 0 });
21943
- const currentLabel = LOCALE_LABELS[current] || "English";
21944
- const updatePos = reactExports.useCallback(() => {
21945
- if (!triggerRef.current) return;
21946
- const rect = triggerRef.current.getBoundingClientRect();
21947
- setPos({ top: rect.bottom + 4, right: window.innerWidth - rect.right });
21948
- }, []);
21949
- reactExports.useEffect(() => {
21950
- if (!open) return;
21951
- updatePos();
21952
- const handler = (e) => {
21953
- const path = e.composedPath?.() ?? [];
21954
- if (triggerRef.current && path.includes(triggerRef.current)) return;
21955
- if (dropRef.current && path.includes(dropRef.current)) return;
21956
- if (triggerRef.current?.contains(e.target)) return;
21957
- if (dropRef.current?.contains(e.target)) return;
21958
- setOpen(false);
21959
- };
21960
- document.addEventListener("mousedown", handler);
21961
- window.addEventListener("resize", updatePos);
21962
- window.addEventListener("scroll", updatePos, true);
21963
- return () => {
21964
- document.removeEventListener("mousedown", handler);
21965
- window.removeEventListener("resize", updatePos);
21966
- window.removeEventListener("scroll", updatePos, true);
21967
- };
21968
- }, [open, updatePos]);
21969
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
21970
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
21971
- "button",
21972
- {
21973
- ref: triggerRef,
21974
- className: `ps-tryon-lang-trigger${open ? " ps-active" : ""}`,
21975
- onClick: () => setOpen(!open),
21976
- children: [
21977
- /* @__PURE__ */ jsxRuntimeExports.jsx(GlobeIcon, { size: 15 }),
21978
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-current", children: currentLabel }),
21979
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `ps-tryon-lang-arrow${open ? " ps-open" : ""}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDownIcon, { size: 18 }) })
21980
- ]
21981
- }
21982
- ),
21983
- open && reactDomExports.createPortal(
21984
- /* @__PURE__ */ jsxRuntimeExports.jsx(
21985
- "div",
21986
- {
21987
- ref: dropRef,
21988
- className: "ps-tryon-lang-dropdown",
21989
- style: {
21990
- position: "fixed",
21991
- top: pos.top,
21992
- right: pos.right,
21993
- // Match the overlay's z-index (2147483647) so the dropdown sits
21994
- // above it. With equal z-index, document order wins — and the
21995
- // dropdown is portaled later than the overlay so it stacks on top.
21996
- zIndex: 2147483647
21997
- },
21998
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-tryon-lang-list", children: SUPPORTED_LOCALES.map((code) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
21999
- "button",
22000
- {
22001
- className: `ps-tryon-lang-item${code === current ? " ps-selected" : ""}`,
22002
- onClick: () => {
22003
- onSelect(code);
22004
- setOpen(false);
22005
- },
22006
- children: [
22007
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-name", children: LOCALE_LABELS[code] || code }),
22008
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-code", children: code.toUpperCase() }),
22009
- code === current && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-check", children: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckIcon$1, { size: 12 }) })
22010
- ]
22011
- },
22012
- code
22013
- )) })
22014
- }
22015
- ),
22016
- portalContainer ?? document.body
22017
- )
22018
- ] });
22019
- }
22020
- const MALE_FIELDS = [
22021
- { key: "heightCm", label: "Height", metricUnit: "cm", imperialUnit: "ft/in" },
22022
- { key: "weightKg", label: "Weight", metricUnit: "kg", imperialUnit: "lbs" },
22023
- { key: "age", label: "Age", metricUnit: "years", imperialUnit: "years" }
22024
- ];
22025
- const FEMALE_FIELDS = [
22026
- { key: "heightCm", label: "Height", metricUnit: "cm", imperialUnit: "ft/in" },
22027
- { key: "weightKg", label: "Weight", metricUnit: "kg", imperialUnit: "lbs" },
22028
- { key: "age", label: "Age", metricUnit: "years", imperialUnit: "years" }
22029
- ];
22030
- function ProfileEditView({
22031
- profile,
22032
- onSave,
22033
- onCancel,
22034
- t: t2
22035
- }) {
22036
- const [name, setName] = reactExports.useState(profile?.name || "");
22037
- const [gender, setGender] = reactExports.useState(
22038
- profile?.gender === "female" ? "female" : "male"
22039
- );
22040
- const [unit, setUnit] = reactExports.useState(profile?.sizingUnit || "cm");
22041
- const [vals, setVals] = reactExports.useState(() => {
22042
- if (!profile) return {};
22043
- const r2 = {};
22044
- for (const k2 of ["heightCm", "weightKg", "age"]) {
22045
- const v2 = profile[k2];
22046
- if (typeof v2 === "number" && v2 > 0) r2[k2] = String(v2);
21854
+
21855
+ /* ════════════════════════════════════════════════════════════════
21856
+ Mobile stability pass.
21857
+ Keep this block last: older mobile patches above mix vw/px/svh and
21858
+ compete with each other. These rules define the final phone layout
21859
+ contract for every SDK modal screen.
21860
+ ════════════════════════════════════════════════════════════════ */
21861
+ @media (max-width: 768px) {
21862
+ .ps-tryon-overlay {
21863
+ --ps-mobile-x: clamp(14px, 4vw, 18px);
21864
+ --ps-mobile-y: clamp(10px, 3vw, 14px);
21865
+ --ps-mobile-footer-gap: 72px;
21866
+ padding: 0 !important;
21867
+ overflow: hidden !important;
21868
+ align-items: stretch !important;
21869
+ justify-content: stretch !important;
22047
21870
  }
22048
- return r2;
22049
- });
22050
- const fields = gender === "female" ? FEMALE_FIELDS : MALE_FIELDS;
22051
- const [error, setError] = reactExports.useState("");
22052
- const handleSave = () => {
22053
- const missing = [];
22054
- if (!name.trim()) missing.push(t2("Profile Name"));
22055
- for (const f2 of fields) {
22056
- const v2 = parseFloat(vals[f2.key] || "");
22057
- if (!(v2 > 0)) missing.push(t2(f2.label));
21871
+
21872
+ .ps-tryon-modal,
21873
+ .ps-tryon-modal-wide {
21874
+ width: 100dvw !important;
21875
+ max-width: 100dvw !important;
21876
+ height: 100svh !important;
21877
+ min-height: 100svh !important;
21878
+ max-height: 100svh !important;
21879
+ border-radius: 0 !important;
21880
+ display: flex !important;
21881
+ flex-direction: column !important;
21882
+ overflow: hidden !important;
21883
+ box-shadow: none !important;
21884
+ padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left) !important;
21885
+ background: var(--ps-bg-primary) !important;
22058
21886
  }
22059
- if (missing.length > 0) {
22060
- setError(t2("Please fill in all fields"));
22061
- return;
21887
+
21888
+ .ps-tryon-header {
21889
+ min-height: 48px !important;
21890
+ padding: 8px var(--ps-mobile-x) !important;
21891
+ border-radius: 0 !important;
21892
+ flex: 0 0 auto !important;
21893
+ gap: 8px !important;
22062
21894
  }
22063
- setError("");
22064
- const p2 = { name: name.trim(), gender, sizingUnit: unit };
22065
- for (const f2 of fields) {
22066
- p2[f2.key] = parseFloat(vals[f2.key]);
21895
+ .ps-tryon-powered-by {
21896
+ min-width: 0 !important;
21897
+ overflow: hidden !important;
21898
+ text-overflow: ellipsis !important;
22067
21899
  }
22068
- onSave(p2);
22069
- };
21900
+ .ps-tryon-close,
21901
+ .ps-tryon-header-mobile-menu-btn,
21902
+ .ps-tryon-header-icon {
21903
+ width: 36px !important;
21904
+ height: 36px !important;
21905
+ min-width: 36px !important;
21906
+ min-height: 36px !important;
21907
+ }
21908
+ .ps-tryon-close svg,
21909
+ .ps-tryon-header-mobile-menu-btn svg,
21910
+ .ps-tryon-header-icon svg {
21911
+ width: 18px !important;
21912
+ height: 18px !important;
21913
+ }
21914
+
21915
+ .ps-tryon-body {
21916
+ flex: 1 1 auto !important;
21917
+ min-height: 0 !important;
21918
+ height: auto !important;
21919
+ padding: var(--ps-mobile-y) var(--ps-mobile-x) 0 !important;
21920
+ overflow: hidden !important;
21921
+ display: flex !important;
21922
+ flex-direction: column !important;
21923
+ background: var(--ps-bg-primary) !important;
21924
+ }
21925
+ .ps-tryon-body > .ps-tryon-back-btn {
21926
+ flex: 0 0 auto !important;
21927
+ margin: 0 0 8px !important;
21928
+ min-height: 34px !important;
21929
+ font-size: 13px !important;
21930
+ }
21931
+ .ps-tryon-view-enter {
21932
+ flex: 1 1 auto !important;
21933
+ min-height: 0 !important;
21934
+ width: 100% !important;
21935
+ overflow: hidden !important;
21936
+ display: flex !important;
21937
+ flex-direction: column !important;
21938
+ }
21939
+ .ps-tryon-view-enter > * {
21940
+ min-width: 0 !important;
21941
+ }
21942
+
21943
+ /* Shared mobile screen primitives */
21944
+ .ps-bp-wrapper,
21945
+ .ps-bp-root,
21946
+ .ps-bp-layout,
21947
+ .ps-bpm-root,
21948
+ .ps-pm-root,
21949
+ .ps-tryon-sr,
21950
+ .ps-msr-root,
21951
+ .ps-msd-root,
21952
+ .ps-msp-root,
21953
+ .ps-cpw-root,
21954
+ .ps-pmv-root,
21955
+ .ps-profile-auth,
21956
+ .ps-acc-mobile-wrap,
21957
+ .ps-acc-mobile-photo,
21958
+ .ps-acc-mobile-details {
21959
+ flex: 1 1 auto !important;
21960
+ min-height: 0 !important;
21961
+ width: 100% !important;
21962
+ max-width: 100% !important;
21963
+ }
21964
+ .ps-bp-wrapper,
21965
+ .ps-bp-root,
21966
+ .ps-bpm-root,
21967
+ .ps-pm-root,
21968
+ .ps-tryon-sr,
21969
+ .ps-msr-root,
21970
+ .ps-msd-root,
21971
+ .ps-msp-root,
21972
+ .ps-cpw-root,
21973
+ .ps-profile-auth {
21974
+ display: flex !important;
21975
+ flex-direction: column !important;
21976
+ overflow: hidden !important;
21977
+ }
21978
+
21979
+ /* Body details / manual flow */
21980
+ .ps-bp-layout {
21981
+ height: 100% !important;
21982
+ overflow: hidden !important;
21983
+ gap: 0 !important;
21984
+ }
21985
+ .ps-bp-root {
21986
+ padding: 0 !important;
21987
+ gap: 10px !important;
21988
+ justify-content: stretch !important;
21989
+ max-height: none !important;
21990
+ }
21991
+ .ps-bpm-root {
21992
+ padding: 0 !important;
21993
+ gap: 10px !important;
21994
+ }
21995
+ .ps-bpm-header {
21996
+ flex: 0 0 auto !important;
21997
+ margin: 0 !important;
21998
+ text-align: center !important;
21999
+ }
22000
+ .ps-bpm-title,
22001
+ .ps-bp-scan-details-title {
22002
+ font-size: 20px !important;
22003
+ line-height: 1.18 !important;
22004
+ letter-spacing: 0 !important;
22005
+ }
22006
+ .ps-bpm-subtitle,
22007
+ .ps-bp-scan-details-sub {
22008
+ display: block !important;
22009
+ margin-top: 6px !important;
22010
+ font-size: 12px !important;
22011
+ line-height: 1.4 !important;
22012
+ color: var(--ps-text-muted) !important;
22013
+ }
22014
+ .ps-bpm-toggle,
22015
+ .ps-bp-system-toggle,
22016
+ .ps-accm-toggle {
22017
+ flex: 0 0 auto !important;
22018
+ margin: 8px auto 10px !important;
22019
+ gap: 26px !important;
22020
+ }
22021
+ .ps-bpm-toggle-btn,
22022
+ .ps-bp-system-btn {
22023
+ font-size: 13px !important;
22024
+ min-height: 30px !important;
22025
+ padding: 4px 0 !important;
22026
+ }
22027
+ .ps-bpm-fields,
22028
+ .ps-accm-fields,
22029
+ .ps-bp-inline-fields {
22030
+ flex: 1 1 auto !important;
22031
+ min-height: 0 !important;
22032
+ overflow-y: auto !important;
22033
+ -webkit-overflow-scrolling: touch !important;
22034
+ padding-bottom: 8px !important;
22035
+ }
22036
+ .ps-bpm-row,
22037
+ .ps-bp-inline-row,
22038
+ .ps-accm-row {
22039
+ padding: 12px 0 !important;
22040
+ gap: 12px !important;
22041
+ }
22042
+ .ps-bpm-label,
22043
+ .ps-bp-inline-label,
22044
+ .ps-accm-label {
22045
+ font-size: 11px !important;
22046
+ letter-spacing: 0.12em !important;
22047
+ line-height: 1.25 !important;
22048
+ }
22049
+ .ps-bpm-value-display,
22050
+ .ps-bp-inline-input,
22051
+ .ps-accm-input {
22052
+ font-size: 19px !important;
22053
+ line-height: 1.2 !important;
22054
+ }
22055
+ .ps-bp-profile-card {
22056
+ flex: 0 0 auto !important;
22057
+ padding: 10px 12px !important;
22058
+ min-height: 0 !important;
22059
+ border-radius: 12px !important;
22060
+ gap: 10px !important;
22061
+ align-items: center !important;
22062
+ }
22063
+ .ps-bp-profile-card-copy {
22064
+ gap: 2px !important;
22065
+ min-width: 0 !important;
22066
+ }
22067
+ .ps-bp-profile-card-eyebrow {
22068
+ font-size: 10px !important;
22069
+ letter-spacing: 0.12em !important;
22070
+ }
22071
+ .ps-bp-profile-card-copy strong {
22072
+ font-size: 15px !important;
22073
+ line-height: 1.15 !important;
22074
+ }
22075
+ .ps-bp-profile-card-copy span:last-child {
22076
+ font-size: 11.5px !important;
22077
+ line-height: 1.3 !important;
22078
+ }
22079
+ .ps-bp-profile-card-action {
22080
+ min-height: 34px !important;
22081
+ padding: 0 12px !important;
22082
+ border-radius: 999px !important;
22083
+ font-size: 11px !important;
22084
+ white-space: nowrap !important;
22085
+ }
22086
+
22087
+ .ps-bpm-spacer {
22088
+ flex: 1 1 auto !important;
22089
+ min-height: 6px !important;
22090
+ }
22091
+ .ps-bpm-bottom,
22092
+ .ps-msr-bottom,
22093
+ .ps-msd-actions,
22094
+ .ps-cpw-footer,
22095
+ .ps-pmv-actions {
22096
+ flex: 0 0 auto !important;
22097
+ margin-left: calc(-1 * var(--ps-mobile-x)) !important;
22098
+ margin-right: calc(-1 * var(--ps-mobile-x)) !important;
22099
+ padding: 10px var(--ps-mobile-x) calc(10px + env(safe-area-inset-bottom)) !important;
22100
+ border-top: 1px solid var(--ps-border-subtle) !important;
22101
+ background: rgba(255,255,255,0.98) !important;
22102
+ box-shadow: 0 -14px 30px -28px rgba(17,24,39,0.35) !important;
22103
+ backdrop-filter: blur(10px) !important;
22104
+ -webkit-backdrop-filter: blur(10px) !important;
22105
+ z-index: 8 !important;
22106
+ }
22107
+ .ps-bpm-next-btn,
22108
+ .ps-pm-primary-btn,
22109
+ .ps-msr-tryon-cta,
22110
+ .ps-msd-primary-cta,
22111
+ .ps-cpw-next-btn,
22112
+ .ps-pmv-btn-primary,
22113
+ .ps-tryon-v2-cta {
22114
+ min-height: 42px !important;
22115
+ border-radius: 10px !important;
22116
+ font-size: 12px !important;
22117
+ line-height: 1.1 !important;
22118
+ letter-spacing: 0.08em !important;
22119
+ padding: 0 14px !important;
22120
+ white-space: nowrap !important;
22121
+ }
22122
+ .ps-bpm-bottom-tabs {
22123
+ min-height: 38px !important;
22124
+ margin-left: calc(-1 * var(--ps-mobile-x)) !important;
22125
+ margin-right: calc(-1 * var(--ps-mobile-x)) !important;
22126
+ }
22127
+ .ps-bpm-bottom-tab {
22128
+ min-height: 38px !important;
22129
+ font-size: 10px !important;
22130
+ letter-spacing: 0.12em !important;
22131
+ }
22132
+
22133
+ /* AI scan / photo flow */
22134
+ .ps-bp-scan-progress {
22135
+ flex: 0 0 auto !important;
22136
+ padding: 6px 4px 0 !important;
22137
+ margin: 0 0 10px !important;
22138
+ gap: 6px !important;
22139
+ }
22140
+ .ps-bp-scan-progress-track {
22141
+ gap: 9px !important;
22142
+ max-width: calc(100% - 48px) !important;
22143
+ }
22144
+ .ps-bp-scan-progress-label {
22145
+ font-size: 10.5px !important;
22146
+ letter-spacing: 0.08em !important;
22147
+ }
22148
+ .ps-bp-scan-progress-line {
22149
+ flex-basis: 28px !important;
22150
+ }
22151
+ .ps-bp-scan-details-center {
22152
+ flex: 1 1 auto !important;
22153
+ min-height: 0 !important;
22154
+ justify-content: flex-start !important;
22155
+ overflow-y: auto !important;
22156
+ padding: 6px 0 10px !important;
22157
+ gap: 10px !important;
22158
+ }
22159
+ .ps-bp-scan-details-center:not(.ps-shoe-scan-details) .ps-bp-system-toggle {
22160
+ margin-top: 14px !important;
22161
+ margin-bottom: 8px !important;
22162
+ }
22163
+ .ps-pm-root {
22164
+ padding: 0 !important;
22165
+ gap: 10px !important;
22166
+ }
22167
+ .ps-pm-header {
22168
+ flex: 0 0 auto !important;
22169
+ margin: 0 !important;
22170
+ }
22171
+ .ps-pm-title {
22172
+ font-size: 18px !important;
22173
+ line-height: 1.2 !important;
22174
+ margin: 0 0 4px !important;
22175
+ }
22176
+ .ps-pm-subtitle {
22177
+ font-size: 12px !important;
22178
+ line-height: 1.4 !important;
22179
+ margin: 0 !important;
22180
+ }
22181
+ .ps-pm-preview {
22182
+ flex: 1 1 auto !important;
22183
+ min-height: 240px !important;
22184
+ max-height: none !important;
22185
+ height: auto !important;
22186
+ border-radius: 14px !important;
22187
+ }
22188
+ .ps-bp-scan-progress ~ .ps-pm-root .ps-pm-preview.ps-pm-preview-tall {
22189
+ flex: 1 1 auto !important;
22190
+ min-height: min(54svh, 330px) !important;
22191
+ height: auto !important;
22192
+ }
22193
+ .ps-pm-preview-img,
22194
+ .ps-photo-zone-img,
22195
+ .ps-cpw-photo-preview-img,
22196
+ .ps-cpw-photo-frame-img {
22197
+ object-fit: contain !important;
22198
+ object-position: center center !important;
22199
+ }
22200
+ .ps-pm-age-chip {
22201
+ flex: 0 0 auto !important;
22202
+ margin: 8px 0 0 !important;
22203
+ padding: 9px 11px !important;
22204
+ }
22205
+ .ps-pm-age-chip-q {
22206
+ font-size: 12px !important;
22207
+ }
22208
+ .ps-pm-age-chip-btn {
22209
+ min-height: 30px !important;
22210
+ padding: 0 13px !important;
22211
+ }
22212
+ .ps-pm-checklist,
22213
+ .ps-pm-legal-notice,
22214
+ .ps-pm-dodonts-grid,
22215
+ .ps-pm-dodonts-tip {
22216
+ flex: 0 0 auto !important;
22217
+ }
22218
+ .ps-bp-photo-help {
22219
+ max-height: 82svh !important;
22220
+ overflow-y: auto !important;
22221
+ }
22222
+
22223
+ /* Size result / try-on result mobile */
22224
+ .ps-tryon-sr {
22225
+ min-height: 0 !important;
22226
+ }
22227
+ .ps-msr-root,
22228
+ .ps-msd-root {
22229
+ margin: 0 calc(-1 * var(--ps-mobile-x)) !important;
22230
+ }
22231
+ .ps-msr-scroll,
22232
+ .ps-msd-scroll,
22233
+ .ps-msp-scroll,
22234
+ .ps-cpw-body,
22235
+ .ps-pmv-root {
22236
+ flex: 1 1 auto !important;
22237
+ min-height: 0 !important;
22238
+ overflow-y: auto !important;
22239
+ overflow-x: hidden !important;
22240
+ -webkit-overflow-scrolling: touch !important;
22241
+ }
22242
+ .ps-msr-scroll,
22243
+ .ps-msd-scroll {
22244
+ padding: 8px var(--ps-mobile-x) calc(92px + env(safe-area-inset-bottom)) !important;
22245
+ gap: 12px !important;
22246
+ }
22247
+ .ps-msr-eyebrow {
22248
+ font-size: 10px !important;
22249
+ margin: 0 !important;
22250
+ }
22251
+ .ps-msr-product {
22252
+ gap: 10px !important;
22253
+ }
22254
+ .ps-msr-product-img-wrap,
22255
+ .ps-msd-image {
22256
+ width: 100% !important;
22257
+ height: auto !important;
22258
+ min-height: 260px !important;
22259
+ max-height: 52svh !important;
22260
+ aspect-ratio: 3 / 4 !important;
22261
+ border-radius: 14px !important;
22262
+ }
22263
+ .ps-msr-product-img,
22264
+ .ps-msd-image-img {
22265
+ width: 100% !important;
22266
+ height: 100% !important;
22267
+ object-fit: contain !important;
22268
+ object-position: center center !important;
22269
+ }
22270
+ .ps-msr-product-name {
22271
+ font-size: 14px !important;
22272
+ line-height: 1.25 !important;
22273
+ }
22274
+ .ps-msr-sections {
22275
+ margin-top: 2px !important;
22276
+ }
22277
+ .ps-msr-section-card {
22278
+ min-height: 92px !important;
22279
+ padding: 13px 14px !important;
22280
+ gap: 6px !important;
22281
+ }
22282
+ .ps-msr-section-icon-lg {
22283
+ width: 42px !important;
22284
+ height: 42px !important;
22285
+ margin-bottom: 2px !important;
22286
+ }
22287
+ .ps-msr-section-size {
22288
+ font-size: 28px !important;
22289
+ }
22290
+ .ps-msr-bottom-row,
22291
+ .ps-tryon-v2-action-group,
22292
+ .ps-msd-result-action-group {
22293
+ display: grid !important;
22294
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
22295
+ gap: 8px !important;
22296
+ width: 100% !important;
22297
+ align-items: stretch !important;
22298
+ }
22299
+ .ps-tryon-v2-action-group-history {
22300
+ grid-template-columns: minmax(0, auto) !important;
22301
+ justify-content: end !important;
22302
+ }
22303
+ .ps-tryon-v2-action-group > .ps-tryon-v2-cta,
22304
+ .ps-msr-commerce-row .ps-tryon-v2-cta,
22305
+ .ps-msd-result-action-group .ps-tryon-v2-cta {
22306
+ width: 100% !important;
22307
+ min-width: 0 !important;
22308
+ flex: 1 1 auto !important;
22309
+ gap: 6px !important;
22310
+ letter-spacing: 0.07em !important;
22311
+ }
22312
+ .ps-tryon-v2-history-product-cta {
22313
+ width: auto !important;
22314
+ min-width: 0 !important;
22315
+ padding: 0 13px !important;
22316
+ }
22317
+ .ps-tryon-v2-add-bag-cta svg,
22318
+ .ps-tryon-v2-history-product-cta svg {
22319
+ width: 17px !important;
22320
+ height: 17px !important;
22321
+ }
22322
+ .ps-msr-media-actions {
22323
+ right: 8px !important;
22324
+ bottom: 8px !important;
22325
+ gap: 6px !important;
22326
+ }
22327
+ .ps-msr-feedback-slot {
22328
+ left: 8px !important;
22329
+ bottom: 8px !important;
22330
+ max-width: calc(100% - 16px) !important;
22331
+ }
22332
+
22333
+ /* Single-section detail */
22334
+ .ps-msd-topbar {
22335
+ flex: 0 0 auto !important;
22336
+ padding: 2px 0 4px !important;
22337
+ margin: 0 !important;
22338
+ }
22339
+ .ps-msd-card {
22340
+ padding: 16px !important;
22341
+ border-radius: 14px !important;
22342
+ gap: 9px !important;
22343
+ }
22344
+ .ps-msd-card-size-row {
22345
+ align-items: center !important;
22346
+ gap: 9px !important;
22347
+ flex-wrap: wrap !important;
22348
+ }
22349
+ .ps-msd-card-size {
22350
+ font-size: clamp(28px, 9vw, 38px) !important;
22351
+ line-height: 1 !important;
22352
+ overflow-wrap: anywhere !important;
22353
+ }
22354
+ .ps-msd-row {
22355
+ padding: 13px 0 !important;
22356
+ gap: 8px !important;
22357
+ }
22358
+ .ps-msd-row-cells {
22359
+ gap: 10px !important;
22360
+ }
22361
+ .ps-msd-cell-value {
22362
+ font-size: 17px !important;
22363
+ overflow-wrap: anywhere !important;
22364
+ }
22365
+ .ps-msd-sizes-pills {
22366
+ gap: 8px !important;
22367
+ }
22368
+ .ps-msd-size-pill {
22369
+ min-height: 36px !important;
22370
+ padding: 0 12px !important;
22371
+ border-radius: 999px !important;
22372
+ }
22373
+ .ps-msd-actions {
22374
+ position: static !important;
22375
+ margin: 12px 0 0 !important;
22376
+ padding: 10px 0 0 !important;
22377
+ border-top: 1px solid var(--ps-border-subtle) !important;
22378
+ box-shadow: none !important;
22379
+ background: transparent !important;
22380
+ backdrop-filter: none !important;
22381
+ -webkit-backdrop-filter: none !important;
22382
+ }
22383
+
22384
+ /* Product carousel: always compact, always square, never footer-sized. */
22385
+ .ps-tryon-photo-strip {
22386
+ flex: 0 0 auto !important;
22387
+ margin-top: 10px !important;
22388
+ gap: 7px !important;
22389
+ }
22390
+ .ps-tryon-photo-strip-head {
22391
+ min-height: 14px !important;
22392
+ }
22393
+ .ps-tryon-photo-strip-badge {
22394
+ font-size: 10px !important;
22395
+ letter-spacing: 0.12em !important;
22396
+ }
22397
+ .ps-tryon-photo-strip-row {
22398
+ display: grid !important;
22399
+ grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
22400
+ gap: 8px !important;
22401
+ }
22402
+ .ps-tryon-photo-strip-row.ps-count-1 {
22403
+ grid-template-columns: minmax(0, calc((100% - 16px) / 3)) !important;
22404
+ justify-content: center !important;
22405
+ }
22406
+ .ps-tryon-photo-strip-row.ps-count-2 {
22407
+ grid-template-columns: repeat(2, minmax(0, calc((100% - 16px) / 3))) !important;
22408
+ justify-content: center !important;
22409
+ }
22410
+ .ps-tryon-photo-strip-cell {
22411
+ aspect-ratio: 1 / 1 !important;
22412
+ max-height: 31vw !important;
22413
+ border-radius: 11px !important;
22414
+ }
22415
+ .ps-tryon-photo-strip-cell > img {
22416
+ object-fit: cover !important;
22417
+ object-position: center center !important;
22418
+ width: 100% !important;
22419
+ height: 100% !important;
22420
+ }
22421
+
22422
+ /* Profile management and auth */
22423
+ .ps-msp-scroll {
22424
+ padding: 0 !important;
22425
+ }
22426
+ .ps-msp-home {
22427
+ height: auto !important;
22428
+ min-height: 100% !important;
22429
+ gap: 12px !important;
22430
+ }
22431
+ .ps-msp-welcome-panel {
22432
+ flex: 0 0 auto !important;
22433
+ flex-direction: column !important;
22434
+ gap: 10px !important;
22435
+ padding: 4px 0 12px !important;
22436
+ }
22437
+ .ps-msp-kicker {
22438
+ font-size: 10px !important;
22439
+ letter-spacing: 0.12em !important;
22440
+ }
22441
+ .ps-msp-title {
22442
+ font-size: 22px !important;
22443
+ line-height: 1.15 !important;
22444
+ }
22445
+ .ps-msp-subtitle {
22446
+ font-size: 12.5px !important;
22447
+ line-height: 1.45 !important;
22448
+ }
22449
+ .ps-msp-header-actions {
22450
+ width: 100% !important;
22451
+ display: grid !important;
22452
+ grid-template-columns: 1fr auto !important;
22453
+ gap: 8px !important;
22454
+ }
22455
+ .ps-msp-primary-create,
22456
+ .ps-msp-logout {
22457
+ min-height: 38px !important;
22458
+ font-size: 12px !important;
22459
+ padding: 0 13px !important;
22460
+ border-radius: 999px !important;
22461
+ }
22462
+ .ps-msp-cards-panel,
22463
+ .ps-msp-cards-scroll {
22464
+ flex: 1 1 auto !important;
22465
+ min-height: 0 !important;
22466
+ max-height: none !important;
22467
+ overflow-y: auto !important;
22468
+ }
22469
+ .ps-msp-grid {
22470
+ grid-template-columns: 1fr !important;
22471
+ gap: 12px !important;
22472
+ margin: 0 0 14px !important;
22473
+ }
22474
+ .ps-msp-card {
22475
+ padding: 14px !important;
22476
+ border-radius: 14px !important;
22477
+ }
22478
+ .ps-msp-card-circle {
22479
+ width: 72px !important;
22480
+ height: 72px !important;
22481
+ margin: 8px auto 12px !important;
22482
+ }
22483
+ .ps-msp-card-name {
22484
+ font-size: 16px !important;
22485
+ line-height: 1.25 !important;
22486
+ }
22487
+ .ps-msp-meta-label {
22488
+ font-size: 10px !important;
22489
+ }
22490
+ .ps-msp-meta-value {
22491
+ font-size: 13px !important;
22492
+ }
22493
+ .ps-msp-card-actions {
22494
+ gap: 8px !important;
22495
+ }
22496
+ .ps-msp-card-select {
22497
+ min-height: 38px !important;
22498
+ padding: 0 12px !important;
22499
+ font-size: 11px !important;
22500
+ border-radius: 9px !important;
22501
+ }
22502
+ .ps-msp-card-edit,
22503
+ .ps-msp-card-delete {
22504
+ width: 38px !important;
22505
+ height: 38px !important;
22506
+ border-radius: 9px !important;
22507
+ }
22508
+ .ps-profile-auth {
22509
+ padding: 0 !important;
22510
+ overflow-y: auto !important;
22511
+ }
22512
+ .ps-profile-auth-shell {
22513
+ display: flex !important;
22514
+ flex-direction: column !important;
22515
+ height: auto !important;
22516
+ min-height: 100% !important;
22517
+ overflow: visible !important;
22518
+ }
22519
+ .ps-profile-auth-story,
22520
+ .ps-profile-auth-card {
22521
+ padding: 14px 0 !important;
22522
+ border: 0 !important;
22523
+ }
22524
+ .ps-profile-auth-story {
22525
+ border-bottom: 1px solid var(--ps-border-subtle) !important;
22526
+ }
22527
+ .ps-profile-auth-visual {
22528
+ min-height: 110px !important;
22529
+ margin: 0 !important;
22530
+ }
22531
+ .ps-profile-auth-title {
22532
+ font-size: 22px !important;
22533
+ line-height: 1.12 !important;
22534
+ }
22535
+ .ps-profile-auth-copy,
22536
+ .ps-profile-auth-card-copy {
22537
+ font-size: 12.5px !important;
22538
+ line-height: 1.45 !important;
22539
+ }
22540
+ .ps-profile-auth-icon-row {
22541
+ grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
22542
+ gap: 9px !important;
22543
+ }
22544
+ .ps-profile-auth-button {
22545
+ min-height: 58px !important;
22546
+ font-size: 12px !important;
22547
+ border-radius: 12px !important;
22548
+ }
22549
+
22550
+ /* Profile creation wizard and profile detail */
22551
+ .ps-cpw-body {
22552
+ padding: 0 !important;
22553
+ }
22554
+ .ps-cpw-step-head {
22555
+ flex: 0 0 auto !important;
22556
+ margin: 0 0 10px !important;
22557
+ }
22558
+ .ps-cpw-step-title,
22559
+ .ps-cpw-section-title {
22560
+ font-size: 20px !important;
22561
+ line-height: 1.2 !important;
22562
+ }
22563
+ .ps-cpw-section-sub {
22564
+ font-size: 12px !important;
22565
+ line-height: 1.4 !important;
22566
+ }
22567
+ .ps-cpw-image-split,
22568
+ .ps-cpw-photo-step {
22569
+ flex-direction: column !important;
22570
+ height: auto !important;
22571
+ min-height: 0 !important;
22572
+ gap: 12px !important;
22573
+ padding: 0 !important;
22574
+ overflow-y: auto !important;
22575
+ }
22576
+ .ps-cpw-image-left,
22577
+ .ps-cpw-image-right {
22578
+ width: 100% !important;
22579
+ min-width: 0 !important;
22580
+ min-height: 0 !important;
22581
+ }
22582
+ .ps-cpw-dropzone,
22583
+ .ps-cpw-photo-preview-frame,
22584
+ .ps-cpw-photo-preview {
22585
+ min-height: 250px !important;
22586
+ height: min(48svh, 360px) !important;
22587
+ border-radius: 14px !important;
22588
+ }
22589
+ .ps-cpw-inline-fields .ps-bp-inline-row {
22590
+ padding: 11px 0 !important;
22591
+ }
22592
+ .ps-cpw-pill-row {
22593
+ gap: 10px !important;
22594
+ flex-wrap: wrap !important;
22595
+ }
22596
+ .ps-cpw-pill {
22597
+ min-height: 34px !important;
22598
+ padding: 0 13px !important;
22599
+ font-size: 12px !important;
22600
+ border-radius: 999px !important;
22601
+ }
22602
+ .ps-pmv-root {
22603
+ padding: 0 !important;
22604
+ }
22605
+ .ps-pmv-data {
22606
+ padding-bottom: 12px !important;
22607
+ }
22608
+ .ps-pmv-hero {
22609
+ padding: 4px 0 12px !important;
22610
+ }
22611
+ .ps-pmv-hero-name {
22612
+ font-size: 22px !important;
22613
+ line-height: 1.15 !important;
22614
+ }
22615
+ .ps-pmv-measure-row,
22616
+ .ps-pmv-basic-row {
22617
+ padding: 12px 0 !important;
22618
+ gap: 10px !important;
22619
+ }
22620
+ .ps-pmv-measure-icon,
22621
+ .ps-pmv-basic-icon {
22622
+ width: 28px !important;
22623
+ height: 28px !important;
22624
+ }
22625
+ .ps-pmv-measure-label,
22626
+ .ps-pmv-basic-label {
22627
+ font-size: 11px !important;
22628
+ }
22629
+ .ps-pmv-measure-value,
22630
+ .ps-pmv-basic-value,
22631
+ .ps-pmv-inline-input,
22632
+ .ps-pmv-inline-select {
22633
+ font-size: 15px !important;
22634
+ }
22635
+ .ps-pmv-inline-input {
22636
+ width: 54px !important;
22637
+ }
22638
+ .ps-pmv-actions {
22639
+ position: sticky !important;
22640
+ bottom: 0 !important;
22641
+ justify-content: space-between !important;
22642
+ gap: 8px !important;
22643
+ flex-wrap: nowrap !important;
22644
+ }
22645
+ .ps-pmv-actions-right {
22646
+ gap: 8px !important;
22647
+ flex-wrap: nowrap !important;
22648
+ }
22649
+ .ps-pmv-btn-primary,
22650
+ .ps-pmv-btn-secondary,
22651
+ .ps-pmv-btn-edit,
22652
+ .ps-pmv-btn-delete {
22653
+ min-height: 40px !important;
22654
+ padding: 0 12px !important;
22655
+ border-radius: 10px !important;
22656
+ font-size: 11px !important;
22657
+ white-space: nowrap !important;
22658
+ }
22659
+
22660
+ /* History drawer = real mobile gallery sheet */
22661
+ .ps-tryon-drawer,
22662
+ .ps-tryon-history-drawer {
22663
+ position: absolute !important;
22664
+ inset: 0 !important;
22665
+ width: auto !important;
22666
+ max-width: none !important;
22667
+ height: auto !important;
22668
+ max-height: none !important;
22669
+ border-radius: 0 !important;
22670
+ transform: translateY(100%) !important;
22671
+ display: flex !important;
22672
+ flex-direction: column !important;
22673
+ padding: 0 !important;
22674
+ background: var(--ps-bg-primary) !important;
22675
+ z-index: 40 !important;
22676
+ }
22677
+ .ps-tryon-drawer-open {
22678
+ transform: translateY(0) !important;
22679
+ }
22680
+ .ps-tryon-drawer-header {
22681
+ flex: 0 0 auto !important;
22682
+ min-height: 52px !important;
22683
+ padding: 10px var(--ps-mobile-x) !important;
22684
+ margin: 0 !important;
22685
+ gap: 10px !important;
22686
+ border-bottom: 1px solid var(--ps-border-subtle) !important;
22687
+ }
22688
+ .ps-tryon-drawer-title {
22689
+ font-size: 17px !important;
22690
+ line-height: 1.25 !important;
22691
+ font-weight: 700 !important;
22692
+ }
22693
+ .ps-tryon-drawer-back,
22694
+ .ps-tryon-drawer-close,
22695
+ .ps-tryon-drawer-add-btn {
22696
+ width: 36px !important;
22697
+ height: 36px !important;
22698
+ min-width: 36px !important;
22699
+ border-radius: 10px !important;
22700
+ }
22701
+ .ps-tryon-drawer-list {
22702
+ flex: 1 1 auto !important;
22703
+ min-height: 0 !important;
22704
+ overflow-y: auto !important;
22705
+ -webkit-overflow-scrolling: touch !important;
22706
+ padding: 14px var(--ps-mobile-x) calc(14px + env(safe-area-inset-bottom)) !important;
22707
+ gap: 12px !important;
22708
+ }
22709
+ .ps-tryon-history-gallery {
22710
+ display: grid !important;
22711
+ grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
22712
+ gap: 12px !important;
22713
+ align-items: start !important;
22714
+ }
22715
+ .ps-tryon-history-card {
22716
+ border-radius: 14px !important;
22717
+ overflow: hidden !important;
22718
+ background: #FFFFFF !important;
22719
+ }
22720
+ .ps-tryon-history-card-main {
22721
+ padding: 0 !important;
22722
+ gap: 8px !important;
22723
+ text-align: left !important;
22724
+ }
22725
+ .ps-tryon-history-card-media {
22726
+ width: 100% !important;
22727
+ height: auto !important;
22728
+ aspect-ratio: 3 / 4 !important;
22729
+ border-radius: 13px !important;
22730
+ background: #f3f5f9 !important;
22731
+ }
22732
+ .ps-tryon-history-card-img,
22733
+ .ps-tryon-history-card-placeholder {
22734
+ width: 100% !important;
22735
+ height: 100% !important;
22736
+ object-fit: cover !important;
22737
+ object-position: center center !important;
22738
+ }
22739
+ .ps-tryon-history-card-product {
22740
+ width: 38px !important;
22741
+ height: 38px !important;
22742
+ right: 8px !important;
22743
+ bottom: 8px !important;
22744
+ object-fit: cover !important;
22745
+ }
22746
+ .ps-tryon-history-card-title {
22747
+ font-size: 12px !important;
22748
+ line-height: 1.25 !important;
22749
+ padding: 0 2px !important;
22750
+ }
22751
+ .ps-tryon-history-card-meta,
22752
+ .ps-tryon-history-card-sections {
22753
+ font-size: 10.5px !important;
22754
+ padding: 0 2px !important;
22755
+ }
22756
+ .ps-tryon-history-card-size {
22757
+ margin: 0 2px 2px !important;
22758
+ font-size: 16px !important;
22759
+ }
22760
+ .ps-tryon-history-delete.ps-card-delete {
22761
+ top: 8px !important;
22762
+ right: 8px !important;
22763
+ width: 32px !important;
22764
+ height: 32px !important;
22765
+ border-radius: 10px !important;
22766
+ }
22767
+ .ps-tryon-drawer-clear {
22768
+ min-height: 40px !important;
22769
+ font-size: 12px !important;
22770
+ margin-top: 2px !important;
22771
+ }
22772
+
22773
+ /* Generic safety: never let long words/labels force horizontal scroll. */
22774
+ .ps-tryon-overlay button,
22775
+ .ps-tryon-overlay span,
22776
+ .ps-tryon-overlay p,
22777
+ .ps-tryon-overlay h1,
22778
+ .ps-tryon-overlay h2,
22779
+ .ps-tryon-overlay h3,
22780
+ .ps-tryon-overlay div {
22781
+ min-width: 0;
22782
+ }
22783
+ }
22784
+
22785
+ @media (max-width: 768px) and (max-height: 720px) {
22786
+ .ps-tryon-overlay {
22787
+ --ps-mobile-y: 8px;
22788
+ }
22789
+ .ps-bpm-title,
22790
+ .ps-bp-scan-details-title {
22791
+ font-size: 18px !important;
22792
+ }
22793
+ .ps-bpm-subtitle,
22794
+ .ps-bp-scan-details-sub {
22795
+ display: none !important;
22796
+ }
22797
+ .ps-bpm-toggle,
22798
+ .ps-bp-system-toggle,
22799
+ .ps-accm-toggle {
22800
+ margin: 5px auto 7px !important;
22801
+ }
22802
+ .ps-bpm-row,
22803
+ .ps-bp-inline-row,
22804
+ .ps-accm-row {
22805
+ padding: 9px 0 !important;
22806
+ gap: 8px !important;
22807
+ }
22808
+ .ps-bpm-value-display {
22809
+ font-size: 17px !important;
22810
+ }
22811
+ .ps-bpm-step-btn {
22812
+ width: 30px !important;
22813
+ height: 30px !important;
22814
+ }
22815
+ .ps-bpm-or {
22816
+ margin: 6px 0 !important;
22817
+ }
22818
+ .ps-bpm-upload-link {
22819
+ min-height: 76px !important;
22820
+ padding: 12px !important;
22821
+ }
22822
+ .ps-bpm-bottom,
22823
+ .ps-msr-bottom,
22824
+ .ps-msd-actions,
22825
+ .ps-cpw-footer,
22826
+ .ps-pmv-actions {
22827
+ padding-top: 8px !important;
22828
+ padding-bottom: calc(8px + env(safe-area-inset-bottom)) !important;
22829
+ }
22830
+ .ps-bpm-next-btn,
22831
+ .ps-pm-primary-btn,
22832
+ .ps-msr-tryon-cta,
22833
+ .ps-msd-primary-cta,
22834
+ .ps-cpw-next-btn,
22835
+ .ps-pmv-btn-primary,
22836
+ .ps-tryon-v2-cta {
22837
+ min-height: 40px !important;
22838
+ }
22839
+ .ps-bpm-bottom-tabs {
22840
+ min-height: 34px !important;
22841
+ }
22842
+ .ps-bpm-bottom-tab {
22843
+ min-height: 34px !important;
22844
+ padding: 6px !important;
22845
+ }
22846
+ }
22847
+
22848
+ /* Final mobile ergonomics patch: keep body-detail inputs readable, keep
22849
+ commerce CTAs from crowding, and give feedback a real mobile sheet. */
22850
+ @media (max-width: 768px) {
22851
+ .ps-bp-scan-details-title {
22852
+ margin: 4px 0 0 !important;
22853
+ }
22854
+ .ps-bp-scan-details-sub {
22855
+ margin: 4px 0 0 !important;
22856
+ }
22857
+ .ps-bp-scan-details-center:not(.ps-shoe-scan-details) .ps-bp-system-toggle,
22858
+ .ps-bp-photo-details-head .ps-bp-system-toggle,
22859
+ .ps-bp-system-toggle.ps-bp-system-toggle-compact {
22860
+ margin: 6px auto 8px !important;
22861
+ gap: 14px !important;
22862
+ }
22863
+ .ps-bp-photo-details-head {
22864
+ align-items: flex-start !important;
22865
+ gap: 8px !important;
22866
+ padding-bottom: 8px !important;
22867
+ }
22868
+ .ps-bp-photo-details-head h3 {
22869
+ font-size: 16px !important;
22870
+ line-height: 1.2 !important;
22871
+ padding-top: 3px !important;
22872
+ }
22873
+ .ps-bp-inline-fields {
22874
+ padding-top: 4px !important;
22875
+ padding-bottom: 14px !important;
22876
+ }
22877
+ .ps-bp-inline-row {
22878
+ display: grid !important;
22879
+ grid-template-columns: minmax(72px, 0.34fr) minmax(0, 1fr) !important;
22880
+ align-items: center !important;
22881
+ gap: 14px !important;
22882
+ padding: 16px 0 !important;
22883
+ min-height: 66px !important;
22884
+ }
22885
+ .ps-bp-inline-label {
22886
+ flex-basis: auto !important;
22887
+ min-width: 0 !important;
22888
+ font-size: 11px !important;
22889
+ letter-spacing: 0.13em !important;
22890
+ }
22891
+ .ps-bp-inline-input-group {
22892
+ display: grid !important;
22893
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto !important;
22894
+ align-items: end !important;
22895
+ gap: 8px !important;
22896
+ min-width: 0 !important;
22897
+ width: 100% !important;
22898
+ }
22899
+ .ps-bp-inline-row:not(:first-child) .ps-bp-inline-input-group,
22900
+ .ps-bp-inline-row .ps-bp-inline-input-group:has(input:only-child) {
22901
+ grid-template-columns: minmax(0, 1fr) auto !important;
22902
+ }
22903
+ .ps-bp-inline-input {
22904
+ min-height: 34px !important;
22905
+ font-size: 20px !important;
22906
+ line-height: 1.2 !important;
22907
+ padding-bottom: 7px !important;
22908
+ text-align: left !important;
22909
+ }
22910
+ .ps-bp-inline-unit {
22911
+ align-self: center !important;
22912
+ font-size: 12px !important;
22913
+ line-height: 1 !important;
22914
+ padding-bottom: 8px !important;
22915
+ }
22916
+
22917
+ .ps-msr-bottom,
22918
+ .ps-msd-actions {
22919
+ padding-top: 9px !important;
22920
+ padding-bottom: calc(9px + env(safe-area-inset-bottom)) !important;
22921
+ }
22922
+ .ps-msr-bottom-row,
22923
+ .ps-tryon-v2-action-group,
22924
+ .ps-msd-result-action-group {
22925
+ display: grid !important;
22926
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
22927
+ gap: 9px !important;
22928
+ align-items: stretch !important;
22929
+ }
22930
+ .ps-tryon-v2-action-group-history {
22931
+ display: flex !important;
22932
+ justify-content: flex-end !important;
22933
+ }
22934
+ .ps-tryon-v2-action-group > .ps-tryon-v2-cta,
22935
+ .ps-msr-commerce-row .ps-tryon-v2-cta,
22936
+ .ps-msd-result-action-group .ps-tryon-v2-cta {
22937
+ min-height: 40px !important;
22938
+ padding: 0 10px !important;
22939
+ border-radius: 9px !important;
22940
+ font-size: 11px !important;
22941
+ letter-spacing: 0.07em !important;
22942
+ gap: 5px !important;
22943
+ overflow: hidden !important;
22944
+ text-overflow: ellipsis !important;
22945
+ }
22946
+ .ps-tryon-v2-add-bag-cta svg,
22947
+ .ps-tryon-v2-history-product-cta svg {
22948
+ width: 18px !important;
22949
+ height: 18px !important;
22950
+ }
22951
+ @media (max-width: 374px) {
22952
+ .ps-msr-bottom-row,
22953
+ .ps-tryon-v2-action-group,
22954
+ .ps-msd-result-action-group {
22955
+ grid-template-columns: 1fr !important;
22956
+ }
22957
+ .ps-tryon-v2-action-group > .ps-tryon-v2-cta,
22958
+ .ps-msr-commerce-row .ps-tryon-v2-cta,
22959
+ .ps-msd-result-action-group .ps-tryon-v2-cta {
22960
+ min-height: 38px !important;
22961
+ }
22962
+ }
22963
+
22964
+ .ps-tryon-feedback-toggle.ps-mobile {
22965
+ min-height: 36px !important;
22966
+ padding: 0 13px !important;
22967
+ border-radius: 10px !important;
22968
+ font-size: 12px !important;
22969
+ gap: 7px !important;
22970
+ }
22971
+ .ps-tryon-feedback-toggle.ps-mobile svg {
22972
+ width: 16px !important;
22973
+ height: 16px !important;
22974
+ }
22975
+ .ps-tryon-feedback-backdrop.ps-mobile {
22976
+ position: fixed !important;
22977
+ inset: 0 !important;
22978
+ z-index: 2147483000 !important;
22979
+ border: 0 !important;
22980
+ padding: 0 !important;
22981
+ margin: 0 !important;
22982
+ background: rgba(15, 23, 42, 0.24) !important;
22983
+ backdrop-filter: blur(3px) !important;
22984
+ -webkit-backdrop-filter: blur(3px) !important;
22985
+ cursor: pointer !important;
22986
+ }
22987
+ .ps-tryon-feedback.ps-mobile {
22988
+ position: fixed !important;
22989
+ left: 12px !important;
22990
+ right: 12px !important;
22991
+ bottom: calc(12px + env(safe-area-inset-bottom)) !important;
22992
+ width: auto !important;
22993
+ max-width: 520px !important;
22994
+ margin: 0 auto !important;
22995
+ z-index: 2147483001 !important;
22996
+ padding: 16px !important;
22997
+ border-radius: 18px !important;
22998
+ gap: 13px !important;
22999
+ background: #FFFFFF !important;
23000
+ box-shadow: 0 22px 60px rgba(15, 23, 42, 0.28) !important;
23001
+ backdrop-filter: none !important;
23002
+ -webkit-backdrop-filter: none !important;
23003
+ }
23004
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-top {
23005
+ gap: 10px !important;
23006
+ }
23007
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-title {
23008
+ font-size: 16px !important;
23009
+ line-height: 1.2 !important;
23010
+ }
23011
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-close {
23012
+ width: 34px !important;
23013
+ height: 34px !important;
23014
+ }
23015
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-stars {
23016
+ gap: 7px !important;
23017
+ padding-top: 2px !important;
23018
+ }
23019
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-star {
23020
+ width: 32px !important;
23021
+ height: 32px !important;
23022
+ }
23023
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-form {
23024
+ grid-template-columns: 1fr auto !important;
23025
+ gap: 9px !important;
23026
+ align-items: end !important;
23027
+ }
23028
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-note {
23029
+ min-height: 48px !important;
23030
+ max-height: 120px !important;
23031
+ border-radius: 12px !important;
23032
+ font-size: 14px !important;
23033
+ padding: 12px !important;
23034
+ }
23035
+ .ps-tryon-feedback.ps-mobile .ps-tryon-feedback-submit {
23036
+ min-height: 48px !important;
23037
+ padding: 0 16px !important;
23038
+ border-radius: 12px !important;
23039
+ font-size: 13px !important;
23040
+ }
23041
+ }
23042
+ `;
23043
+ function CameraIcon$1({ size = 18 }) {
23044
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23045
+ /* @__PURE__ */ jsxRuntimeExports.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" }),
23046
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "13", r: "4" })
23047
+ ] });
23048
+ }
23049
+ function UploadIcon({ size = 48 }) {
23050
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", children: [
23051
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
23052
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }),
23053
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
23054
+ ] });
23055
+ }
23056
+ function XIcon({ size = 20 }) {
23057
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23058
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
23059
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
23060
+ ] });
23061
+ }
23062
+ function ArrowLeftIcon() {
23063
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M15 18l-6-6 6-6" }) });
23064
+ }
23065
+ function ArrowRightIcon() {
23066
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 12h14M12 5l7 7-7 7" }) });
23067
+ }
23068
+ function UserIcon({ size = 16 }) {
23069
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23070
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
23071
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "4" })
23072
+ ] });
23073
+ }
23074
+ function ShoppingBagIcon({ size = 16 }) {
23075
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23076
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M16 10a4 4 0 0 1-8 0" }),
23077
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M3.103 6.034h17.794" }),
23078
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z" })
23079
+ ] });
23080
+ }
23081
+ function ExternalLinkIcon({ size = 16 }) {
23082
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23083
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M14 3h7v7" }),
23084
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M10 14 21 3" }),
23085
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5" })
23086
+ ] });
23087
+ }
23088
+ function ClockIcon({ size = 16 }) {
23089
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23090
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }),
23091
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "12 6 12 12 16 14" })
23092
+ ] });
23093
+ }
23094
+ function RulerIcon$1({ size = 18 }) {
23095
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23096
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z" }),
23097
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m14.5 12.5 2-2" }),
23098
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m11.5 9.5 2-2" }),
23099
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m8.5 6.5 2-2" }),
23100
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m17.5 15.5 2-2" })
23101
+ ] });
23102
+ }
23103
+ function SparkleIcon({ size = 18 }) {
23104
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z" }) });
23105
+ }
23106
+ function TrashIcon({ size = 14 }) {
23107
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23108
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 6 5 6 21 6" }),
23109
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
23110
+ ] });
23111
+ }
23112
+ function ChevronRightIcon() {
23113
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M9 18l6-6-6-6" }) });
23114
+ }
23115
+ function ChevronDownIcon({ size = 18 }) {
23116
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.4, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "m6 9 6 6 6-6" }) });
23117
+ }
23118
+ function CheckIcon$1({ size = 14 }) {
23119
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 3, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "20 6 9 17 4 12" }) });
23120
+ }
23121
+ function GlobeIcon({ size = 16 }) {
23122
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [
23123
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }),
23124
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M2 12h20" }),
23125
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
23126
+ ] });
23127
+ }
23128
+ function Stepper({ view, stepIndex }) {
23129
+ if (view === "error" || view === "idle") return null;
23130
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-tryon-dots", children: Array.from({ length: TOTAL_STEPS }, (_, i) => i + 1).map((i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `ps-tryon-dot${i < stepIndex ? " ps-done" : i === stepIndex ? " ps-active" : ""}` }, i)) });
23131
+ }
23132
+ function LangSwitcher({
23133
+ activeLocale: current,
23134
+ onSelect,
23135
+ portalContainer
23136
+ }) {
23137
+ const [open, setOpen] = reactExports.useState(false);
23138
+ const triggerRef = reactExports.useRef(null);
23139
+ const dropRef = reactExports.useRef(null);
23140
+ const [pos, setPos] = reactExports.useState({ top: 0, right: 0 });
23141
+ const currentLabel = LOCALE_LABELS[current] || "English";
23142
+ const updatePos = reactExports.useCallback(() => {
23143
+ if (!triggerRef.current) return;
23144
+ const rect = triggerRef.current.getBoundingClientRect();
23145
+ setPos({ top: rect.bottom + 4, right: window.innerWidth - rect.right });
23146
+ }, []);
23147
+ reactExports.useEffect(() => {
23148
+ if (!open) return;
23149
+ updatePos();
23150
+ const handler = (e) => {
23151
+ const path = e.composedPath?.() ?? [];
23152
+ if (triggerRef.current && path.includes(triggerRef.current)) return;
23153
+ if (dropRef.current && path.includes(dropRef.current)) return;
23154
+ if (triggerRef.current?.contains(e.target)) return;
23155
+ if (dropRef.current?.contains(e.target)) return;
23156
+ setOpen(false);
23157
+ };
23158
+ document.addEventListener("mousedown", handler);
23159
+ window.addEventListener("resize", updatePos);
23160
+ window.addEventListener("scroll", updatePos, true);
23161
+ return () => {
23162
+ document.removeEventListener("mousedown", handler);
23163
+ window.removeEventListener("resize", updatePos);
23164
+ window.removeEventListener("scroll", updatePos, true);
23165
+ };
23166
+ }, [open, updatePos]);
23167
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
23168
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
23169
+ "button",
23170
+ {
23171
+ ref: triggerRef,
23172
+ className: `ps-tryon-lang-trigger${open ? " ps-active" : ""}`,
23173
+ onClick: () => setOpen(!open),
23174
+ children: [
23175
+ /* @__PURE__ */ jsxRuntimeExports.jsx(GlobeIcon, { size: 15 }),
23176
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-current", children: currentLabel }),
23177
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `ps-tryon-lang-arrow${open ? " ps-open" : ""}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDownIcon, { size: 18 }) })
23178
+ ]
23179
+ }
23180
+ ),
23181
+ open && reactDomExports.createPortal(
23182
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
23183
+ "div",
23184
+ {
23185
+ ref: dropRef,
23186
+ className: "ps-tryon-lang-dropdown",
23187
+ style: {
23188
+ position: "fixed",
23189
+ top: pos.top,
23190
+ right: pos.right,
23191
+ // Match the overlay's z-index (2147483647) so the dropdown sits
23192
+ // above it. With equal z-index, document order wins — and the
23193
+ // dropdown is portaled later than the overlay so it stacks on top.
23194
+ zIndex: 2147483647
23195
+ },
23196
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-tryon-lang-list", children: SUPPORTED_LOCALES.map((code) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
23197
+ "button",
23198
+ {
23199
+ className: `ps-tryon-lang-item${code === current ? " ps-selected" : ""}`,
23200
+ onClick: () => {
23201
+ onSelect(code);
23202
+ setOpen(false);
23203
+ },
23204
+ children: [
23205
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-name", children: LOCALE_LABELS[code] || code }),
23206
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-code", children: code.toUpperCase() }),
23207
+ code === current && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-lang-check", children: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckIcon$1, { size: 12 }) })
23208
+ ]
23209
+ },
23210
+ code
23211
+ )) })
23212
+ }
23213
+ ),
23214
+ portalContainer ?? document.body
23215
+ )
23216
+ ] });
23217
+ }
23218
+ const MALE_FIELDS = [
23219
+ { key: "heightCm", label: "Height", metricUnit: "cm", imperialUnit: "ft/in" },
23220
+ { key: "weightKg", label: "Weight", metricUnit: "kg", imperialUnit: "lbs" },
23221
+ { key: "age", label: "Age", metricUnit: "years", imperialUnit: "years" }
23222
+ ];
23223
+ const FEMALE_FIELDS = [
23224
+ { key: "heightCm", label: "Height", metricUnit: "cm", imperialUnit: "ft/in" },
23225
+ { key: "weightKg", label: "Weight", metricUnit: "kg", imperialUnit: "lbs" },
23226
+ { key: "age", label: "Age", metricUnit: "years", imperialUnit: "years" }
23227
+ ];
23228
+ function ProfileEditView({
23229
+ profile,
23230
+ onSave,
23231
+ onCancel,
23232
+ t: t2
23233
+ }) {
23234
+ const [name, setName] = reactExports.useState(profile?.name || "");
23235
+ const [gender, setGender] = reactExports.useState(
23236
+ profile?.gender === "female" ? "female" : "male"
23237
+ );
23238
+ const [unit, setUnit] = reactExports.useState(profile?.sizingUnit || "cm");
23239
+ const [vals, setVals] = reactExports.useState(() => {
23240
+ if (!profile) return {};
23241
+ const r2 = {};
23242
+ for (const k2 of ["heightCm", "weightKg", "age"]) {
23243
+ const v2 = profile[k2];
23244
+ if (typeof v2 === "number" && v2 > 0) r2[k2] = String(v2);
23245
+ }
23246
+ return r2;
23247
+ });
23248
+ const fields = gender === "female" ? FEMALE_FIELDS : MALE_FIELDS;
23249
+ const [error, setError] = reactExports.useState("");
23250
+ const handleSave = () => {
23251
+ const missing = [];
23252
+ if (!name.trim()) missing.push(t2("Profile Name"));
23253
+ for (const f2 of fields) {
23254
+ const v2 = parseFloat(vals[f2.key] || "");
23255
+ if (!(v2 > 0)) missing.push(t2(f2.label));
23256
+ }
23257
+ if (missing.length > 0) {
23258
+ setError(t2("Please fill in all fields"));
23259
+ return;
23260
+ }
23261
+ setError("");
23262
+ const p2 = { name: name.trim(), gender, sizingUnit: unit };
23263
+ for (const f2 of fields) {
23264
+ p2[f2.key] = parseFloat(vals[f2.key]);
23265
+ }
23266
+ onSave(p2);
23267
+ };
22070
23268
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-tryon-profile-edit", children: [
22071
23269
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-tryon-sf-float-field", children: [
22072
23270
  /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "ps-tryon-sf-float-label", children: t2("Profile Name") }),
@@ -23028,7 +24226,7 @@ function MultiSectionMobile({
23028
24226
  sizeGuide ? null : null
23029
24227
  ] });
23030
24228
  }
23031
- const PER_SLIDE = 2;
24229
+ const PER_SLIDE = 3;
23032
24230
  const CYCLE_MS = 4e3;
23033
24231
  function ProductPhotoCarouselCard({
23034
24232
  photos,
@@ -23202,7 +24400,7 @@ function TryOnExperienceFeedback({
23202
24400
  }
23203
24401
  );
23204
24402
  }
23205
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ps-tryon-feedback${isMobile ? " ps-mobile" : ""}`, "aria-label": t2("Rate your try-on"), children: [
24403
+ const feedbackPanel = /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ps-tryon-feedback${isMobile ? " ps-mobile" : ""}`, "aria-label": t2("Rate your try-on"), children: [
23206
24404
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-tryon-feedback-top", children: [
23207
24405
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-feedback-title", children: t2("Rate your try-on") }),
23208
24406
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -23267,6 +24465,21 @@ function TryOnExperienceFeedback({
23267
24465
  ] }),
23268
24466
  status === "error" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-tryon-feedback-status", children: t2("Couldn't send. Try again.") })
23269
24467
  ] });
24468
+ if (isMobile) {
24469
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
24470
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
24471
+ "button",
24472
+ {
24473
+ type: "button",
24474
+ className: "ps-tryon-feedback-backdrop ps-mobile",
24475
+ onClick: () => setExpanded(false),
24476
+ "aria-label": t2("Close")
24477
+ }
24478
+ ),
24479
+ feedbackPanel
24480
+ ] });
24481
+ }
24482
+ return feedbackPanel;
23270
24483
  }
23271
24484
  function ResultImageActionBar({
23272
24485
  showLines,