@primestyleai/tryon 3.4.2 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +433 -433
  2. package/dist/react/index.js +423 -244
  3. package/logo.svg +46 -46
  4. package/package.json +1 -1
@@ -21,6 +21,22 @@ function lsSet(key, value) {
21
21
  } catch {
22
22
  }
23
23
  }
24
+ const FALLBACK_FIELDS_FEMALE = [
25
+ { key: "bust", label: "Bust", required: true, unit: "cm", placeholder: "e.g. 88", category: "body" },
26
+ { key: "waist", label: "Waist", required: true, unit: "cm", placeholder: "e.g. 70", category: "body" },
27
+ { key: "hips", label: "Hips", required: true, unit: "cm", placeholder: "e.g. 96", category: "body" },
28
+ { key: "shoulderWidth", label: "Shoulders", required: false, unit: "cm", placeholder: "e.g. 39", category: "body" },
29
+ { key: "inseam", label: "Inseam", required: false, unit: "cm", placeholder: "e.g. 76", category: "body" },
30
+ { key: "footLengthCm", label: "Foot length", required: false, unit: "cm", placeholder: "e.g. 24", category: "shoe" }
31
+ ];
32
+ const FALLBACK_FIELDS_MALE = [
33
+ { key: "chest", label: "Chest", required: true, unit: "cm", placeholder: "e.g. 104", category: "body" },
34
+ { key: "waist", label: "Waist", required: true, unit: "cm", placeholder: "e.g. 84", category: "body" },
35
+ { key: "shoulderWidth", label: "Shoulders", required: false, unit: "cm", placeholder: "e.g. 46", category: "body" },
36
+ { key: "sleeveLength", label: "Sleeve", required: false, unit: "cm", placeholder: "e.g. 64", category: "body" },
37
+ { key: "inseam", label: "Inseam", required: false, unit: "cm", placeholder: "e.g. 81", category: "body" },
38
+ { key: "footLengthCm", label: "Foot length", required: false, unit: "cm", placeholder: "e.g. 27", category: "shoe" }
39
+ ];
24
40
  const SIZING_COUNTRIES = [
25
41
  { code: "US", label: "United States" },
26
42
  { code: "UK", label: "United Kingdom" },
@@ -425,6 +441,12 @@ function PrimeStyleTryonInner({
425
441
  }
426
442
  }
427
443
  }, [onComplete, onError, cleanupJob]);
444
+ const dynamicFields = useMemo(() => {
445
+ if (sizeGuide?.found && sizeGuide.requiredFields && sizeGuide.requiredFields.length > 0) {
446
+ return sizeGuide.requiredFields;
447
+ }
448
+ return formGender === "female" ? FALLBACK_FIELDS_FEMALE : FALLBACK_FIELDS_MALE;
449
+ }, [sizeGuide, formGender]);
428
450
  const submitSizing = useCallback(async () => {
429
451
  if (!apiRef.current) return;
430
452
  const baseUrl = getApiUrl(apiUrl);
@@ -435,10 +457,17 @@ function PrimeStyleTryonInner({
435
457
  product: { title: productTitle, description: "", variants: [] }
436
458
  };
437
459
  if (sizeGuide?.found) payload.sizeGuide = sizeGuide;
460
+ payload.sizingUnit = sizingUnit;
438
461
  if (sizingMethod === "exact") {
439
- const m = { gender: formRef.current.gender || "male" };
440
- const keys = ["chest", "bust", "waist", "hips", "shoulderWidth", "sleeveLength", "inseam", "neckCircumference", "footLengthCm"];
441
- for (const k of keys) {
462
+ const m = { gender: formRef.current.gender || "male", sizingUnit };
463
+ const numericKeys = /* @__PURE__ */ new Set();
464
+ for (const f of dynamicFields) {
465
+ if (f.unit !== "size" && !["shoeEU", "shoeUS", "shoeUK"].includes(f.key)) numericKeys.add(f.key);
466
+ }
467
+ for (const k of ["chest", "bust", "waist", "hips", "shoulderWidth", "sleeveLength", "inseam", "neckCircumference", "footLengthCm"]) {
468
+ if (formRef.current[k]) numericKeys.add(k);
469
+ }
470
+ for (const k of numericKeys) {
442
471
  if (formRef.current[k]) m[k] = sizingUnit === "in" ? inToCm(parseFloat(formRef.current[k])) : parseFloat(formRef.current[k]);
443
472
  }
444
473
  if (formRef.current.shoeEU) m.shoeEU = formRef.current.shoeEU;
@@ -474,7 +503,7 @@ function PrimeStyleTryonInner({
474
503
  } finally {
475
504
  setSizingLoading(false);
476
505
  }
477
- }, [apiUrl, sizingMethod, sizingCountry, heightUnit, weightUnit, sizingUnit, sizeGuide, productTitle]);
506
+ }, [apiUrl, sizingMethod, sizingCountry, heightUnit, weightUnit, sizingUnit, sizeGuide, productTitle, dynamicFields]);
478
507
  const handleSubmit = useCallback(async () => {
479
508
  if (!selectedFile || !apiRef.current || !sseRef.current) {
480
509
  const msg = !apiRef.current ? "Missing NEXT_PUBLIC_PRIMESTYLE_API_KEY" : "No file selected";
@@ -575,6 +604,11 @@ function PrimeStyleTryonInner({
575
604
  if (p.shoeUS) fd.shoeUS = p.shoeUS;
576
605
  if (p.shoeUK) fd.shoeUK = p.shoeUK;
577
606
  if (p.fitPreference) fd.fitPreference = p.fitPreference;
607
+ if (p.customMeasurements) {
608
+ for (const [key, value] of Object.entries(p.customMeasurements)) {
609
+ fd[key] = String(value);
610
+ }
611
+ }
578
612
  formRef.current = fd;
579
613
  setFormGender(fd.gender || "male");
580
614
  if (p.country) setSizingCountry(p.country);
@@ -610,6 +644,33 @@ function PrimeStyleTryonInner({
610
644
  weightUnit,
611
645
  createdAt: Date.now()
612
646
  };
647
+ const KNOWN_PROFILE_KEYS = /* @__PURE__ */ new Set([
648
+ "chest",
649
+ "bust",
650
+ "waist",
651
+ "hips",
652
+ "shoulderWidth",
653
+ "sleeveLength",
654
+ "inseam",
655
+ "neckCircumference",
656
+ "footLengthCm",
657
+ "shoeEU",
658
+ "shoeUS",
659
+ "shoeUK",
660
+ "fitPreference",
661
+ "gender",
662
+ "height",
663
+ "weight",
664
+ "heightFeet",
665
+ "heightInches"
666
+ ]);
667
+ const custom = {};
668
+ for (const [key, val] of Object.entries(formRef.current)) {
669
+ if (!KNOWN_PROFILE_KEYS.has(key) && val && !isNaN(Number(val))) {
670
+ custom[key] = parseFloat(val);
671
+ }
672
+ }
673
+ if (Object.keys(custom).length > 0) p.customMeasurements = custom;
613
674
  setProfiles((prev) => {
614
675
  const idx = prev.findIndex((x) => x.id === id);
615
676
  if (idx >= 0) {
@@ -821,7 +882,7 @@ function PrimeStyleTryonInner({
821
882
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-choice-icon", children: /* @__PURE__ */ jsx(RulerIcon, { size: 24 }) }),
822
883
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-choice-info", children: [
823
884
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-choice-title", children: "Enter my measurements" }),
824
- /* @__PURE__ */ jsx("div", { className: "ps-tryon-choice-desc", children: "Chest, waist, hips, shoes & more" })
885
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-choice-desc", children: sizeGuide?.requiredFields?.length ? sizeGuide.requiredFields.filter((f) => f.required).slice(0, 3).map((f) => f.label).join(", ") + (sizeGuide.requiredFields.length > 3 ? " & more" : "") : "Chest, waist, hips, shoes & more" })
825
886
  ] }),
826
887
  /* @__PURE__ */ jsx("span", { className: "ps-tryon-choice-badge", children: "Best accuracy" })
827
888
  ] }),
@@ -891,42 +952,77 @@ function PrimeStyleTryonInner({
891
952
  setHeightUnit(v === "cm" ? "cm" : "ft");
892
953
  setWeightUnit(v === "cm" ? "kg" : "lbs");
893
954
  } }) }),
894
- sizingMethod === "exact" ? /* @__PURE__ */ jsxs(Fragment, { children: [
895
- isFemale ? /* @__PURE__ */ jsxs(Fragment, { children: [
896
- /* @__PURE__ */ jsx(InputRow, { label: "Bust *", fieldKey: "bust", placeholder: isCm ? "e.g. 88" : "e.g. 35", type: "number", unit: sizingUnit }),
897
- /* @__PURE__ */ jsx(InputRow, { label: "Waist *", fieldKey: "waist", placeholder: isCm ? "e.g. 70" : "e.g. 28", type: "number", unit: sizingUnit }),
898
- /* @__PURE__ */ jsx(InputRow, { label: "Hips *", fieldKey: "hips", placeholder: isCm ? "e.g. 96" : "e.g. 38", type: "number", unit: sizingUnit }),
899
- /* @__PURE__ */ jsx(InputRow, { label: "Shoulders", fieldKey: "shoulderWidth", placeholder: isCm ? "e.g. 39" : "e.g. 15", type: "number", unit: sizingUnit }),
900
- /* @__PURE__ */ jsx(InputRow, { label: "Inseam", fieldKey: "inseam", placeholder: isCm ? "e.g. 76" : "e.g. 30", type: "number", unit: sizingUnit })
901
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
902
- /* @__PURE__ */ jsx(InputRow, { label: "Chest *", fieldKey: "chest", placeholder: isCm ? "e.g. 104" : "e.g. 41", type: "number", unit: sizingUnit }),
903
- /* @__PURE__ */ jsx(InputRow, { label: "Waist *", fieldKey: "waist", placeholder: isCm ? "e.g. 84" : "e.g. 33", type: "number", unit: sizingUnit }),
904
- /* @__PURE__ */ jsx(InputRow, { label: "Shoulders", fieldKey: "shoulderWidth", placeholder: isCm ? "e.g. 46" : "e.g. 18", type: "number", unit: sizingUnit }),
905
- /* @__PURE__ */ jsx(InputRow, { label: "Sleeve", fieldKey: "sleeveLength", placeholder: isCm ? "e.g. 64" : "e.g. 25", type: "number", unit: sizingUnit }),
906
- /* @__PURE__ */ jsx(InputRow, { label: "Inseam", fieldKey: "inseam", placeholder: isCm ? "e.g. 81" : "e.g. 32", type: "number", unit: sizingUnit })
907
- ] }),
908
- isFemale && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-input-row", children: [
909
- /* @__PURE__ */ jsx("label", { children: "Fit type" }),
910
- /* @__PURE__ */ jsx("div", { className: "ps-tryon-unit-toggle", children: ["petite", "standard", "tall", "plus"].map((fp) => /* @__PURE__ */ jsx(
911
- "button",
955
+ sizingMethod === "exact" ? /* @__PURE__ */ jsx(Fragment, { children: (() => {
956
+ const reqFields = dynamicFields.filter((f) => f.required);
957
+ const optFields = dynamicFields.filter((f) => !f.required);
958
+ const renderField = (field) => {
959
+ if (["shoeEU", "shoeUS", "shoeUK"].includes(field.key)) {
960
+ return /* @__PURE__ */ jsx(InputRow, { label: `${field.label} *`, fieldKey: field.key, placeholder: field.placeholder }, field.key);
961
+ }
962
+ const phCm = field.placeholder?.replace(/[^0-9.]/g, "") || "0";
963
+ const phIn = String(field.unit === "cm" ? Math.round(parseFloat(phCm) / 2.54) : phCm);
964
+ const placeholder = isCm ? field.placeholder || "" : `e.g. ${phIn}`;
965
+ return /* @__PURE__ */ jsx(
966
+ InputRow,
912
967
  {
913
- className: `ps-tryon-unit-btn${(formRef.current.fitPreference || "standard") === fp ? " ps-active" : ""}`,
914
- onClick: (e) => {
915
- updateField("fitPreference", fp);
916
- const btns = e.target.parentElement.querySelectorAll(".ps-tryon-unit-btn");
917
- btns.forEach((b) => b.classList.toggle("ps-active", b.textContent?.toLowerCase() === fp));
918
- },
919
- children: fp.charAt(0).toUpperCase() + fp.slice(1)
968
+ label: `${field.label}${field.required ? " *" : ""}`,
969
+ fieldKey: field.key,
970
+ placeholder,
971
+ type: "number",
972
+ unit: field.unit === "cm" ? sizingUnit : void 0
920
973
  },
921
- fp
922
- )) })
923
- ] }),
924
- /* @__PURE__ */ jsxs("div", { className: "ps-tryon-shoe-section", children: [
925
- /* @__PURE__ */ jsx("div", { className: "ps-tryon-shoe-title", children: "Shoe sizing (optional)" }),
926
- /* @__PURE__ */ jsx(InputRow, { label: "Foot length", fieldKey: "footLengthCm", placeholder: isCm ? "e.g. 27" : "e.g. 10.5", type: "number", unit: sizingUnit }),
927
- /* @__PURE__ */ jsx(InputRow, { label: shoeField.label, fieldKey: shoeField.key, placeholder: shoeField.ph })
928
- ] })
929
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
974
+ field.key
975
+ );
976
+ };
977
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
978
+ reqFields.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
979
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-section-label", children: "Required for this product" }),
980
+ reqFields.map(renderField)
981
+ ] }),
982
+ isFemale && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-input-row", children: [
983
+ /* @__PURE__ */ jsx("label", { children: "Fit type" }),
984
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-unit-toggle", children: ["petite", "standard", "tall", "plus"].map((fp) => /* @__PURE__ */ jsx(
985
+ "button",
986
+ {
987
+ className: `ps-tryon-unit-btn${(formRef.current.fitPreference || "standard") === fp ? " ps-active" : ""}`,
988
+ onClick: (e) => {
989
+ updateField("fitPreference", fp);
990
+ const btns = e.target.parentElement.querySelectorAll(".ps-tryon-unit-btn");
991
+ btns.forEach((b) => b.classList.toggle("ps-active", b.textContent?.toLowerCase() === fp));
992
+ },
993
+ children: fp.charAt(0).toUpperCase() + fp.slice(1)
994
+ },
995
+ fp
996
+ )) })
997
+ ] }),
998
+ optFields.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-optional-section", children: [
999
+ /* @__PURE__ */ jsxs("button", { className: "ps-tryon-optional-toggle", onClick: (e) => {
1000
+ const wrap = e.target.closest(".ps-tryon-optional-section").querySelector(".ps-tryon-optional-fields");
1001
+ const arrow = e.target.closest(".ps-tryon-optional-toggle").querySelector(".ps-tryon-chevron");
1002
+ if (wrap) {
1003
+ const open = wrap.style.display !== "none";
1004
+ wrap.style.display = open ? "none" : "flex";
1005
+ if (arrow) arrow.style.transform = open ? "rotate(0deg)" : "rotate(180deg)";
1006
+ }
1007
+ }, children: [
1008
+ /* @__PURE__ */ jsx("span", { children: "Optional — improve accuracy & save to profile" }),
1009
+ /* @__PURE__ */ jsx("span", { className: "ps-tryon-chevron", children: "▾" })
1010
+ ] }),
1011
+ /* @__PURE__ */ jsxs("div", { className: "ps-tryon-optional-fields", style: { display: "none" }, children: [
1012
+ optFields.map(renderField),
1013
+ !dynamicFields.some((f) => f.category === "shoe") && /* @__PURE__ */ jsxs(Fragment, { children: [
1014
+ /* @__PURE__ */ jsx(InputRow, { label: "Foot length", fieldKey: "footLengthCm", placeholder: isCm ? "e.g. 27" : "e.g. 10.5", type: "number", unit: sizingUnit }),
1015
+ /* @__PURE__ */ jsx(InputRow, { label: shoeField.label, fieldKey: shoeField.key, placeholder: shoeField.ph })
1016
+ ] })
1017
+ ] })
1018
+ ] }),
1019
+ optFields.length === 0 && !dynamicFields.some((f) => f.category === "shoe") && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-shoe-section", children: [
1020
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-shoe-title", children: "Shoe sizing (optional)" }),
1021
+ /* @__PURE__ */ jsx(InputRow, { label: "Foot length", fieldKey: "footLengthCm", placeholder: isCm ? "e.g. 27" : "e.g. 10.5", type: "number", unit: sizingUnit }),
1022
+ /* @__PURE__ */ jsx(InputRow, { label: shoeField.label, fieldKey: shoeField.key, placeholder: shoeField.ph })
1023
+ ] })
1024
+ ] });
1025
+ })() }) : /* @__PURE__ */ jsxs(Fragment, { children: [
930
1026
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-input-row", children: [
931
1027
  /* @__PURE__ */ jsx("label", { children: "Height *" }),
932
1028
  heightUnit === "ft" ? /* @__PURE__ */ jsxs("div", { className: "ps-tryon-height-ft", children: [
@@ -974,7 +1070,10 @@ function PrimeStyleTryonInner({
974
1070
  function ProcessingView() {
975
1071
  return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-processing", children: [
976
1072
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-processing-image-wrap", children: [
977
- previewUrl && /* @__PURE__ */ jsx("img", { src: previewUrl, alt: "Your photo", className: "ps-tryon-processing-model" }),
1073
+ previewUrl && /* @__PURE__ */ jsxs(Fragment, { children: [
1074
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-processing-blur", style: { backgroundImage: `url(${previewUrl})` } }),
1075
+ /* @__PURE__ */ jsx("img", { src: previewUrl, alt: "Your photo", className: "ps-tryon-processing-model" })
1076
+ ] }),
978
1077
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-scan-line" }),
979
1078
  /* @__PURE__ */ jsx("div", { className: "ps-tryon-scan-overlay" })
980
1079
  ] }),
@@ -990,6 +1089,8 @@ function PrimeStyleTryonInner({
990
1089
  const hasSizing = !!sizingResult || sizingLoading;
991
1090
  const hasBoth = !!resultImageUrl && hasSizing;
992
1091
  const [profileName, setProfileName] = useState("");
1092
+ const [showFitDetails, setShowFitDetails] = useState(false);
1093
+ const confidenceLabel = sizingResult?.confidence === "high" ? "High Confidence" : sizingResult?.confidence === "medium" ? "Medium Confidence" : sizingResult?.confidence === "low" ? "Low Confidence" : "";
993
1094
  return /* @__PURE__ */ jsxs("div", { className: `ps-tryon-result-layout${hasBoth ? " ps-tryon-result-split" : ""}`, children: [
994
1095
  resultImageUrl && /* @__PURE__ */ jsx("div", { className: "ps-tryon-result-image-col", children: /* @__PURE__ */ jsx("img", { src: resultImageUrl, alt: "Try-on result", className: cn.resultImage }) }),
995
1096
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-result-info-col", children: [
@@ -998,20 +1099,23 @@ function PrimeStyleTryonInner({
998
1099
  /* @__PURE__ */ jsx("p", { className: "ps-tryon-size-reasoning", children: "Analyzing your size..." })
999
1100
  ] }),
1000
1101
  sizingResult && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-size-recommend", children: [
1001
- /* @__PURE__ */ jsx("div", { className: "ps-tryon-size-badge", children: sizingResult.recommendedSize }),
1002
- /* @__PURE__ */ jsxs("div", { className: "ps-tryon-size-confidence", children: [
1003
- "Confidence: ",
1004
- /* @__PURE__ */ jsx("span", { className: `ps-conf-${sizingResult.confidence}`, children: sizingResult.confidence })
1102
+ /* @__PURE__ */ jsx("h3", { className: "ps-tryon-size-title", children: "Recommended Size" }),
1103
+ /* @__PURE__ */ jsxs("div", { className: "ps-tryon-size-hero-row", children: [
1104
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-size-badge", children: sizingResult.recommendedSize }),
1105
+ /* @__PURE__ */ jsx("span", { className: `ps-tryon-size-conf-label ps-conf-${sizingResult.confidence}`, children: confidenceLabel })
1005
1106
  ] }),
1006
- /* @__PURE__ */ jsx("p", { className: "ps-tryon-size-reasoning", children: sizingResult.reasoning }),
1007
- sizingResult.internationalSizes && /* @__PURE__ */ jsx("div", { className: "ps-tryon-intl-sizes", children: Object.entries(sizingResult.internationalSizes).map(([k, v]) => /* @__PURE__ */ jsxs("span", { className: "ps-tryon-intl-chip", children: [
1008
- k,
1009
- ": ",
1010
- v
1011
- ] }, k)) }),
1012
- sizingResult.matchDetails && sizingResult.matchDetails.length > 0 && /* @__PURE__ */ jsxs("details", { className: "ps-tryon-match-details", children: [
1013
- /* @__PURE__ */ jsx("summary", { children: "Measurement breakdown" }),
1014
- /* @__PURE__ */ jsxs("table", { children: [
1107
+ sizingResult.matchDetails && sizingResult.matchDetails.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-fit-summary", children: [
1108
+ /* @__PURE__ */ jsx("h4", { className: "ps-tryon-fit-summary-title", children: "Fit Summary" }),
1109
+ sizingResult.matchDetails.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "ps-tryon-fit-row", children: [
1110
+ /* @__PURE__ */ jsx("span", { className: `ps-tryon-fit-icon ps-fit-icon-${m.fit}`, children: m.fit === "good" ? "✓" : m.fit === "tight" ? "↑" : "↓" }),
1111
+ /* @__PURE__ */ jsxs("span", { className: "ps-tryon-fit-text", children: [
1112
+ /* @__PURE__ */ jsx("strong", { children: m.measurement }),
1113
+ " ",
1114
+ m.fit === "good" ? "within range" : m.fit === "tight" ? "may be snug" : "may be loose"
1115
+ ] })
1116
+ ] }, i)),
1117
+ /* @__PURE__ */ jsx("button", { className: "ps-tryon-fit-details-toggle", onClick: () => setShowFitDetails(!showFitDetails), children: showFitDetails ? "Hide detailed fit analysis ↑" : "See detailed fit analysis ↓" }),
1118
+ showFitDetails && /* @__PURE__ */ jsxs("table", { className: "ps-tryon-fit-table", children: [
1015
1119
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
1016
1120
  /* @__PURE__ */ jsx("th", { children: "Area" }),
1017
1121
  /* @__PURE__ */ jsx("th", { children: "You" }),
@@ -1025,7 +1129,15 @@ function PrimeStyleTryonInner({
1025
1129
  /* @__PURE__ */ jsx("td", { className: `ps-fit-${m.fit}`, children: m.fit })
1026
1130
  ] }, i)) })
1027
1131
  ] })
1028
- ] })
1132
+ ] }),
1133
+ sizingResult.internationalSizes && Object.keys(sizingResult.internationalSizes).length > 0 && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-equiv-section", children: [
1134
+ /* @__PURE__ */ jsx("h4", { className: "ps-tryon-equiv-title", children: "Equivalent Sizes" }),
1135
+ /* @__PURE__ */ jsx("div", { className: "ps-tryon-equiv-chips", children: Object.entries(sizingResult.internationalSizes).map(([k, v]) => /* @__PURE__ */ jsxs("div", { className: "ps-tryon-equiv-chip", children: [
1136
+ /* @__PURE__ */ jsx("span", { className: "ps-tryon-equiv-region", children: k }),
1137
+ /* @__PURE__ */ jsx("span", { className: "ps-tryon-equiv-value", children: v })
1138
+ ] }, k)) })
1139
+ ] }),
1140
+ (!sizingResult.matchDetails || sizingResult.matchDetails.length === 0) && sizingResult.reasoning && /* @__PURE__ */ jsx("p", { className: "ps-tryon-size-reasoning", children: sizingResult.reasoning })
1029
1141
  ] }),
1030
1142
  /* @__PURE__ */ jsxs("div", { className: cx("ps-tryon-result-actions", cn.resultActions), children: [
1031
1143
  /* @__PURE__ */ jsx("button", { onClick: handleDownload, className: cx("ps-tryon-btn-download", cn.downloadButton), children: "Download" }),
@@ -1036,15 +1148,21 @@ function PrimeStyleTryonInner({
1036
1148
  /* @__PURE__ */ jsxs("div", { className: "ps-tryon-save-row", children: [
1037
1149
  /* @__PURE__ */ jsx("input", { type: "text", placeholder: "Name this profile (e.g. John, Sarah)", value: profileName, onChange: (e) => setProfileName(e.target.value) }),
1038
1150
  activeProfileId ? /* @__PURE__ */ jsxs("div", { className: "ps-tryon-save-btn-group", children: [
1039
- /* @__PURE__ */ jsx("button", { onClick: () => {
1151
+ /* @__PURE__ */ jsxs("button", { onClick: () => {
1040
1152
  if (profileName.trim()) saveProfile(profileName.trim());
1041
- }, children: "Update" }),
1153
+ }, children: [
1154
+ "💾",
1155
+ " Update"
1156
+ ] }),
1042
1157
  /* @__PURE__ */ jsx("button", { className: "ps-tryon-save-new-btn", onClick: () => {
1043
1158
  if (profileName.trim()) saveProfile(profileName.trim(), true);
1044
1159
  }, children: "+ New" })
1045
- ] }) : /* @__PURE__ */ jsx("button", { onClick: () => {
1160
+ ] }) : /* @__PURE__ */ jsxs("button", { onClick: () => {
1046
1161
  if (profileName.trim()) saveProfile(profileName.trim());
1047
- }, children: "Save" })
1162
+ }, children: [
1163
+ "💾",
1164
+ " Save"
1165
+ ] })
1048
1166
  ] })
1049
1167
  ] }),
1050
1168
  profileSaved && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-save-done", children: [
@@ -1229,242 +1347,257 @@ const STYLES = `
1229
1347
  .ps-tryon-overlay {
1230
1348
  position: fixed; inset: 0; background: var(--ps-modal-overlay, rgba(0,0,0,0.6));
1231
1349
  display: flex; align-items: center; justify-content: center;
1232
- z-index: 999999; padding: 16px; animation: ps-fade-in 0.2s ease;
1350
+ z-index: 999999;
1351
+ padding: clamp(10px, 0.83vw, 16px);
1352
+ padding: max(clamp(10px, 0.83vw, 16px), env(safe-area-inset-top)) max(clamp(10px, 0.83vw, 16px), env(safe-area-inset-right)) max(clamp(10px, 0.83vw, 16px), env(safe-area-inset-bottom)) max(clamp(10px, 0.83vw, 16px), env(safe-area-inset-left));
1353
+ animation: ps-fade-in 0.2s ease;
1354
+ overflow-y: auto; -webkit-overflow-scrolling: touch;
1233
1355
  }
1234
1356
  @keyframes ps-fade-in { from { opacity: 0; } to { opacity: 1; } }
1235
1357
 
1236
1358
  .ps-tryon-modal {
1237
1359
  background: var(--ps-modal-bg, #111211); color: var(--ps-modal-color, #fff);
1238
- border-radius: var(--ps-modal-radius, 16px); width: var(--ps-modal-width, 100%);
1239
- max-width: var(--ps-modal-max-width, 520px); max-height: 92vh; overflow-y: auto;
1360
+ border-radius: var(--ps-modal-radius, clamp(10px, 0.83vw, 16px)); width: var(--ps-modal-width, 100%);
1361
+ max-width: var(--ps-modal-max-width, clamp(380px, 27vw, 520px)); max-height: 92vh; overflow-y: auto;
1240
1362
  font-family: var(--ps-modal-font, system-ui, -apple-system, sans-serif);
1241
- box-shadow: 0 25px 50px rgba(0,0,0,0.4); animation: ps-slide-up 0.3s ease;
1363
+ box-shadow: 0 clamp(16px, 1.3vw, 25px) clamp(32px, 2.6vw, 50px) rgba(0,0,0,0.4); animation: ps-slide-up 0.3s ease;
1242
1364
  scrollbar-width: thin; scrollbar-color: #333 transparent;
1365
+ flex-shrink: 0;
1243
1366
  }
1244
- .ps-tryon-modal-wide { max-width: 920px; }
1367
+ .ps-tryon-modal-wide { max-width: clamp(680px, 48vw, 920px); }
1245
1368
  .ps-tryon-modal:has(.ps-tryon-drawer-open) { overflow: hidden; }
1246
- @keyframes ps-slide-up { from { transform: translateY(20px) scale(0.97); opacity: 0; } to { transform: translateY(0) scale(1); opacity: 1; } }
1369
+ @keyframes ps-slide-up { from { transform: translateY(clamp(12px, 1.04vw, 20px)) scale(0.97); opacity: 0; } to { transform: translateY(0) scale(1); opacity: 1; } }
1247
1370
 
1248
1371
  /* Header */
1249
1372
  .ps-tryon-header {
1250
1373
  display: flex; align-items: center; justify-content: space-between;
1251
- padding: 18px 24px; background: var(--ps-modal-header-bg, #1a1b1a);
1374
+ padding: clamp(10px, 0.94vw, 18px) clamp(14px, 1.25vw, 24px); background: var(--ps-modal-header-bg, #1a1b1a);
1252
1375
  border-bottom: 1px solid #333;
1253
- border-radius: var(--ps-modal-radius, 16px) var(--ps-modal-radius, 16px) 0 0;
1376
+ border-radius: var(--ps-modal-radius, clamp(10px, 0.83vw, 16px)) var(--ps-modal-radius, clamp(10px, 0.83vw, 16px)) 0 0;
1254
1377
  }
1255
- .ps-tryon-title { font-size: 15px; font-weight: 600; color: var(--ps-modal-header-color, #fff); }
1256
- .ps-tryon-header-actions { display: flex; align-items: center; gap: 8px; }
1378
+ .ps-tryon-title { font-size: clamp(11px, 0.78vw, 15px); font-weight: 600; color: var(--ps-modal-header-color, #fff); }
1379
+ .ps-tryon-header-actions { display: flex; align-items: center; gap: clamp(5px, 0.42vw, 8px); }
1257
1380
  .ps-tryon-header-icon {
1258
- width: 34px; height: 34px; display: flex; align-items: center; justify-content: center;
1259
- border: 1.5px solid #333; border-radius: 10px; background: transparent;
1381
+ width: clamp(24px, 1.77vw, 34px); height: clamp(24px, 1.77vw, 34px); display: flex; align-items: center; justify-content: center;
1382
+ border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px); background: transparent;
1260
1383
  cursor: pointer; color: #999; transition: all 0.2s;
1261
1384
  }
1262
1385
  .ps-tryon-header-icon:hover { border-color: #bb945c; color: #bb945c; }
1263
1386
  .ps-tryon-header-icon svg { stroke: currentColor; fill: none; }
1264
1387
  .ps-tryon-close {
1265
- width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
1388
+ width: clamp(22px, 1.67vw, 32px); height: clamp(22px, 1.67vw, 32px); display: flex; align-items: center; justify-content: center;
1266
1389
  background: none; border: none; color: var(--ps-modal-close-color, #999);
1267
- cursor: pointer; border-radius: 6px; transition: background 0.15s;
1390
+ cursor: pointer; border-radius: clamp(4px, 0.31vw, 6px); transition: background 0.15s;
1268
1391
  }
1269
1392
  .ps-tryon-close:hover { background: rgba(255,255,255,0.1); }
1270
1393
 
1271
1394
  /* Stepper */
1272
- .ps-tryon-stepper { padding: 20px 24px 12px; }
1395
+ .ps-tryon-stepper { padding: clamp(12px, 1.04vw, 20px) clamp(14px, 1.25vw, 24px) clamp(7px, 0.63vw, 12px); }
1273
1396
  .ps-tryon-stepper-track { display: flex; align-items: flex-start; }
1274
1397
  .ps-tryon-stepper-fragment { display: flex; align-items: flex-start; flex: 1; }
1275
1398
  .ps-tryon-stepper-fragment:first-child { flex: 0 0 auto; }
1276
- .ps-tryon-stepper-line { flex: 1; height: 2px; background: #333; margin-top: 14px; transition: background 0.4s; }
1399
+ .ps-tryon-stepper-line { flex: 1; height: 2px; background: #333; margin-top: clamp(8px, 0.73vw, 14px); transition: background 0.4s; }
1277
1400
  .ps-tryon-stepper-line.ps-done { background: #bb945c; }
1278
1401
  .ps-tryon-stepper-step { display: flex; flex-direction: column; align-items: center; }
1279
1402
  .ps-tryon-stepper-circle {
1280
- width: 28px; height: 28px; border-radius: 50%;
1403
+ width: clamp(20px, 1.46vw, 28px); height: clamp(20px, 1.46vw, 28px); border-radius: 50%;
1281
1404
  display: flex; align-items: center; justify-content: center;
1282
- border: 2px solid #333; font-size: 12px; font-weight: 600; color: #666;
1405
+ border: 2px solid #333; font-size: clamp(9px, 0.63vw, 12px); font-weight: 600; color: #666;
1283
1406
  transition: all 0.3s;
1284
1407
  }
1285
1408
  .ps-tryon-stepper-step.ps-done .ps-tryon-stepper-circle { background: #bb945c; border-color: #bb945c; color: #111; }
1286
1409
  .ps-tryon-stepper-step.ps-done .ps-tryon-stepper-circle svg { stroke: #111; }
1287
- .ps-tryon-stepper-step.ps-active .ps-tryon-stepper-circle { border-color: #bb945c; color: #bb945c; box-shadow: 0 0 0 4px rgba(187,148,92,0.15); }
1288
- .ps-tryon-stepper-label { font-size: 10px; margin-top: 5px; color: #666; font-weight: 500; text-align: center; white-space: nowrap; }
1410
+ .ps-tryon-stepper-step.ps-active .ps-tryon-stepper-circle { border-color: #bb945c; color: #bb945c; box-shadow: 0 0 0 clamp(3px, 0.21vw, 4px) rgba(187,148,92,0.15); }
1411
+ .ps-tryon-stepper-label { font-size: clamp(8px, 0.52vw, 10px); margin-top: clamp(3px, 0.26vw, 5px); color: #666; font-weight: 500; text-align: center; white-space: nowrap; }
1289
1412
  .ps-tryon-stepper-step.ps-done .ps-tryon-stepper-label { color: #bb945c; }
1290
1413
  .ps-tryon-stepper-step.ps-active .ps-tryon-stepper-label { color: #bb945c; font-weight: 700; }
1291
1414
 
1292
1415
  /* Body */
1293
- .ps-tryon-body { padding: 24px; min-height: 300px; }
1294
- @keyframes ps-fade-up { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
1416
+ .ps-tryon-body { padding: clamp(14px, 1.25vw, 24px); min-height: clamp(200px, 15.6vw, 300px); }
1417
+ @keyframes ps-fade-up { from { opacity: 0; transform: translateY(clamp(7px, 0.63vw, 12px)); } to { opacity: 1; transform: translateY(0); } }
1295
1418
  .ps-tryon-view-enter { animation: ps-fade-up 0.35s ease both; }
1296
1419
 
1297
1420
  /* Welcome */
1298
1421
  .ps-tryon-welcome { text-align: center; }
1299
- .ps-tryon-welcome-hero { margin-bottom: 20px; }
1422
+ .ps-tryon-welcome-hero { margin-bottom: clamp(12px, 1.04vw, 20px); }
1300
1423
  .ps-tryon-welcome-img-wrap { position: relative; display: inline-block; }
1301
- .ps-tryon-welcome-product { width: 120px; height: 140px; object-fit: cover; border-radius: 14px; border: 2px solid #333; }
1302
- .ps-tryon-welcome-sparkle { position: absolute; top: -8px; right: -8px; width: 28px; height: 28px; background: #bb945c; border-radius: 50%; display: flex; align-items: center; justify-content: center; animation: ps-float 3s ease-in-out infinite; }
1303
- .ps-tryon-welcome-sparkle svg { stroke: #111; width: 14px; height: 14px; }
1304
- @keyframes ps-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
1305
- .ps-tryon-welcome-title { font-size: 20px; font-weight: 700; color: #fff; margin: 14px 0 4px; }
1306
- .ps-tryon-welcome-sub { font-size: 13px; color: #999; margin: 0; }
1307
- .ps-tryon-features { display: flex; gap: 10px; margin: 20px 0; }
1308
- .ps-tryon-feature { flex: 1; padding: 14px 10px; border: 1px solid #333; border-radius: 12px; text-align: center; }
1309
- .ps-tryon-feature-icon { margin-bottom: 6px; color: #bb945c; display: flex; justify-content: center; }
1424
+ .ps-tryon-welcome-product { width: clamp(80px, 6.25vw, 120px); height: clamp(96px, 7.3vw, 140px); object-fit: cover; border-radius: clamp(8px, 0.73vw, 14px); border: 2px solid #333; }
1425
+ .ps-tryon-welcome-sparkle { position: absolute; top: clamp(-6px, -0.42vw, -8px); right: clamp(-6px, -0.42vw, -8px); width: clamp(20px, 1.46vw, 28px); height: clamp(20px, 1.46vw, 28px); background: #bb945c; border-radius: 50%; display: flex; align-items: center; justify-content: center; animation: ps-float 3s ease-in-out infinite; }
1426
+ .ps-tryon-welcome-sparkle svg { stroke: #111; width: clamp(10px, 0.73vw, 14px); height: clamp(10px, 0.73vw, 14px); }
1427
+ @keyframes ps-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(clamp(-4px, -0.31vw, -6px)); } }
1428
+ .ps-tryon-welcome-title { font-size: clamp(14px, 1.04vw, 20px); font-weight: 700; color: #fff; margin: clamp(8px, 0.73vw, 14px) 0 clamp(2px, 0.21vw, 4px); }
1429
+ .ps-tryon-welcome-sub { font-size: clamp(10px, 0.68vw, 13px); color: #999; margin: 0; }
1430
+ .ps-tryon-features { display: flex; gap: clamp(6px, 0.52vw, 10px); margin: clamp(12px, 1.04vw, 20px) 0; }
1431
+ .ps-tryon-feature { flex: 1; padding: clamp(8px, 0.73vw, 14px) clamp(6px, 0.52vw, 10px); border: 1px solid #333; border-radius: clamp(8px, 0.63vw, 12px); text-align: center; }
1432
+ .ps-tryon-feature-icon { margin-bottom: clamp(4px, 0.31vw, 6px); color: #bb945c; display: flex; justify-content: center; }
1310
1433
  .ps-tryon-feature-icon svg { stroke: currentColor; fill: none; }
1311
- .ps-tryon-feature-title { font-size: 12px; font-weight: 600; color: #fff; margin-bottom: 2px; }
1312
- .ps-tryon-feature-desc { font-size: 10px; color: #999; }
1434
+ .ps-tryon-feature-title { font-size: clamp(9px, 0.63vw, 12px); font-weight: 600; color: #fff; margin-bottom: 2px; }
1435
+ .ps-tryon-feature-desc { font-size: clamp(8px, 0.52vw, 10px); color: #999; }
1313
1436
  .ps-tryon-cta {
1314
- width: 100%; padding: 14px; background: #bb945c; color: #111; border: none;
1315
- border-radius: 12px; font-size: 15px; font-weight: 700; cursor: pointer;
1316
- display: flex; align-items: center; justify-content: center; gap: 8px; transition: all 0.2s;
1437
+ width: 100%; padding: clamp(8px, 0.73vw, 14px); background: #bb945c; color: #111; border: none;
1438
+ border-radius: clamp(8px, 0.63vw, 12px); font-size: clamp(11px, 0.78vw, 15px); font-weight: 700; cursor: pointer;
1439
+ display: flex; align-items: center; justify-content: center; gap: clamp(5px, 0.42vw, 8px); transition: all 0.2s;
1317
1440
  font-family: var(--ps-modal-font, system-ui, sans-serif);
1318
1441
  }
1319
1442
  .ps-tryon-cta:hover { background: #a07d4e; transform: translateY(-1px); }
1320
1443
  .ps-tryon-cta svg { stroke: #111; }
1321
- .ps-tryon-welcome-note { font-size: 11px; color: #666; margin-top: 12px; }
1444
+ .ps-tryon-welcome-note { font-size: clamp(8px, 0.57vw, 11px); color: #666; margin-top: clamp(7px, 0.63vw, 12px); }
1322
1445
 
1323
1446
  /* Upload */
1324
1447
  .ps-tryon-upload {
1325
- border: 2px dashed var(--ps-upload-border, #333); border-radius: 12px;
1326
- padding: 40px 24px; text-align: center; cursor: pointer; transition: all 0.2s;
1448
+ border: 2px dashed var(--ps-upload-border, #333); border-radius: clamp(8px, 0.63vw, 12px);
1449
+ padding: clamp(24px, 2.08vw, 40px) clamp(14px, 1.25vw, 24px); text-align: center; cursor: pointer; transition: all 0.2s;
1327
1450
  background: var(--ps-upload-bg, transparent); display: flex; flex-direction: column; align-items: center;
1328
1451
  }
1329
1452
  .ps-tryon-upload:hover, .ps-tryon-drag-over { border-color: #bb945c; background: rgba(187,148,92,0.05); }
1330
- .ps-tryon-upload svg { color: var(--ps-upload-icon-color, #bb945c); margin-bottom: 12px; }
1331
- .ps-tryon-upload-text { font-size: 14px; color: var(--ps-upload-color, #fff); margin: 0 0 4px; }
1332
- .ps-tryon-upload-hint { font-size: 12px; color: #999; margin: 0; }
1333
- .ps-tryon-preview { position: relative; margin-bottom: 4px; }
1334
- .ps-tryon-preview img { width: 100%; border-radius: 12px; display: block; }
1453
+ .ps-tryon-upload svg { color: var(--ps-upload-icon-color, #bb945c); margin-bottom: clamp(7px, 0.63vw, 12px); }
1454
+ .ps-tryon-upload-text { font-size: clamp(10px, 0.73vw, 14px); color: var(--ps-upload-color, #fff); margin: 0 0 clamp(2px, 0.21vw, 4px); }
1455
+ .ps-tryon-upload-hint { font-size: clamp(9px, 0.63vw, 12px); color: #999; margin: 0; }
1456
+ .ps-tryon-preview { position: relative; margin-bottom: clamp(2px, 0.21vw, 4px); }
1457
+ .ps-tryon-preview img { width: 100%; border-radius: clamp(8px, 0.63vw, 12px); display: block; }
1335
1458
  .ps-tryon-preview-remove {
1336
- position: absolute; top: 8px; right: 8px; width: 28px; height: 28px;
1459
+ position: absolute; top: clamp(5px, 0.42vw, 8px); right: clamp(5px, 0.42vw, 8px); width: clamp(20px, 1.46vw, 28px); height: clamp(20px, 1.46vw, 28px);
1337
1460
  border-radius: 50%; background: rgba(0,0,0,0.6); border: none; color: white;
1338
1461
  cursor: pointer; display: flex; align-items: center; justify-content: center;
1339
- font-size: 16px; transition: background 0.15s;
1462
+ font-size: clamp(12px, 0.83vw, 16px); transition: background 0.15s;
1340
1463
  }
1341
1464
  .ps-tryon-preview-remove:hover { background: rgba(0,0,0,0.8); }
1342
1465
  .ps-tryon-submit {
1343
- width: 100%; padding: 14px; margin-top: 16px;
1466
+ width: 100%; padding: clamp(8px, 0.73vw, 14px); margin-top: clamp(10px, 0.83vw, 16px);
1344
1467
  background: var(--ps-modal-primary-bg, #bb945c); color: var(--ps-modal-primary-color, #111);
1345
1468
  font-family: var(--ps-modal-font, system-ui, sans-serif);
1346
- font-size: 14px; font-weight: 600; border: none;
1347
- border-radius: var(--ps-modal-primary-radius, 10px);
1469
+ font-size: clamp(10px, 0.73vw, 14px); font-weight: 600; border: none;
1470
+ border-radius: var(--ps-modal-primary-radius, clamp(6px, 0.52vw, 10px));
1348
1471
  cursor: pointer; transition: all 0.2s;
1349
- display: flex; align-items: center; justify-content: center; gap: 8px;
1472
+ display: flex; align-items: center; justify-content: center; gap: clamp(5px, 0.42vw, 8px);
1350
1473
  }
1351
1474
  .ps-tryon-submit:hover { opacity: 0.9; transform: translateY(-1px); }
1352
1475
  .ps-tryon-submit svg { stroke: currentColor; }
1353
1476
 
1354
1477
  /* Profile bar */
1355
- .ps-tryon-profile-bar { margin-bottom: 16px; }
1478
+ .ps-tryon-profile-bar { margin-bottom: clamp(10px, 0.83vw, 16px); }
1356
1479
  .ps-tryon-profile-select {
1357
- width: 100%; padding: 10px 36px 10px 14px; border: 1.5px solid #333; border-radius: 10px;
1358
- background: #1a1b1a; color: #fff; font-size: 13px; font-family: inherit;
1480
+ width: 100%; padding: clamp(6px, 0.52vw, 10px) clamp(22px, 1.88vw, 36px) clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px);
1481
+ background: #1a1b1a; color: #fff; font-size: clamp(10px, 0.68vw, 13px); font-family: inherit;
1359
1482
  appearance: none; -webkit-appearance: none; cursor: pointer; outline: none;
1360
1483
  background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%23999' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
1361
- background-repeat: no-repeat; background-position: right 14px center;
1484
+ background-repeat: no-repeat; background-position: right clamp(8px, 0.73vw, 14px) center;
1362
1485
  }
1363
1486
  .ps-tryon-profile-select:focus { border-color: #bb945c; }
1364
1487
 
1365
1488
  /* Sizing choice */
1366
1489
  .ps-tryon-sizing-choice { text-align: center; }
1367
- .ps-tryon-section-title { font-size: 16px; font-weight: 600; color: #fff; margin: 0 0 16px; }
1368
- .ps-tryon-choice-cards { display: flex; flex-direction: column; gap: 10px; }
1490
+ .ps-tryon-section-title { font-size: clamp(12px, 0.83vw, 16px); font-weight: 600; color: #fff; margin: 0 0 clamp(10px, 0.83vw, 16px); }
1491
+ .ps-tryon-choice-cards { display: flex; flex-direction: column; gap: clamp(6px, 0.52vw, 10px); }
1369
1492
  .ps-tryon-choice-card {
1370
- display: flex; align-items: center; gap: 14px; padding: 16px;
1371
- border: 1.5px solid #333; border-radius: 12px;
1493
+ display: flex; align-items: center; gap: clamp(8px, 0.73vw, 14px); padding: clamp(10px, 0.83vw, 16px);
1494
+ border: 1.5px solid #333; border-radius: clamp(8px, 0.63vw, 12px);
1372
1495
  background: #1a1b1a; cursor: pointer; transition: all 0.25s; text-align: left;
1373
1496
  width: 100%; font-family: inherit; position: relative; overflow: hidden;
1374
1497
  }
1375
- .ps-tryon-choice-card:hover { border-color: #bb945c; transform: translateY(-1px); box-shadow: 0 6px 20px rgba(187,148,92,0.08); }
1498
+ .ps-tryon-choice-card:hover { border-color: #bb945c; transform: translateY(-1px); box-shadow: 0 clamp(4px, 0.31vw, 6px) clamp(12px, 1.04vw, 20px) rgba(187,148,92,0.08); }
1376
1499
  .ps-tryon-choice-card:hover::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: #bb945c; }
1377
1500
  .ps-tryon-choice-icon { color: #bb945c; flex-shrink: 0; }
1378
1501
  .ps-tryon-choice-icon svg { stroke: currentColor; fill: none; }
1379
1502
  .ps-tryon-choice-info { flex: 1; min-width: 0; }
1380
- .ps-tryon-choice-title { font-size: 14px; font-weight: 600; color: #fff; }
1381
- .ps-tryon-choice-desc { font-size: 12px; color: #999; margin-top: 2px; }
1503
+ .ps-tryon-choice-title { font-size: clamp(10px, 0.73vw, 14px); font-weight: 600; color: #fff; }
1504
+ .ps-tryon-choice-desc { font-size: clamp(9px, 0.63vw, 12px); color: #999; margin-top: 2px; }
1382
1505
  .ps-tryon-choice-badge {
1383
- padding: 3px 10px; border-radius: 20px; flex-shrink: 0;
1384
- background: rgba(187,148,92,0.12); color: #bb945c; font-size: 10px; font-weight: 600;
1506
+ padding: clamp(2px, 0.16vw, 3px) clamp(6px, 0.52vw, 10px); border-radius: clamp(12px, 1.04vw, 20px); flex-shrink: 0;
1507
+ background: rgba(187,148,92,0.12); color: #bb945c; font-size: clamp(8px, 0.52vw, 10px); font-weight: 600;
1385
1508
  }
1386
1509
  .ps-tryon-sg-notice {
1387
- font-size: 12px; color: #999; text-align: center; padding: 10px 14px;
1388
- margin-bottom: 12px; border: 1px solid #333; border-radius: 10px; background: #1a1b1a;
1510
+ font-size: clamp(9px, 0.63vw, 12px); color: #999; text-align: center; padding: clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px);
1511
+ margin-bottom: clamp(7px, 0.63vw, 12px); border: 1px solid #333; border-radius: clamp(6px, 0.52vw, 10px); background: #1a1b1a;
1389
1512
  }
1390
1513
  .ps-tryon-sg-found {
1391
1514
  color: #4ade80; border-color: rgba(74,222,128,0.2); background: rgba(74,222,128,0.05);
1392
- display: flex; align-items: center; justify-content: center; gap: 6px;
1515
+ display: flex; align-items: center; justify-content: center; gap: clamp(4px, 0.31vw, 6px);
1393
1516
  }
1394
1517
  .ps-tryon-sg-found svg { stroke: #4ade80; }
1395
- .ps-tryon-sg-checking { display: flex; flex-direction: column; align-items: center; padding: 40px 20px; text-align: center; }
1396
- .ps-tryon-sg-checking-icon { color: #bb945c; margin-bottom: 16px; animation: ps-pulse-ruler 1.5s ease-in-out infinite; }
1518
+ .ps-tryon-sg-checking { display: flex; flex-direction: column; align-items: center; padding: clamp(24px, 2.08vw, 40px) clamp(12px, 1.04vw, 20px); text-align: center; }
1519
+ .ps-tryon-sg-checking-icon { color: #bb945c; margin-bottom: clamp(10px, 0.83vw, 16px); animation: ps-pulse-ruler 1.5s ease-in-out infinite; }
1397
1520
  .ps-tryon-sg-checking-icon svg { stroke: currentColor; fill: none; }
1398
1521
  @keyframes ps-pulse-ruler { 0%, 100% { transform: scale(1); opacity: 0.7; } 50% { transform: scale(1.15); opacity: 1; } }
1399
- .ps-tryon-sg-checking-bar-wrap { width: 180px; height: 4px; background: #333; border-radius: 2px; overflow: hidden; margin-bottom: 20px; }
1522
+ .ps-tryon-sg-checking-bar-wrap { width: clamp(120px, 9.4vw, 180px); height: 4px; background: #333; border-radius: 2px; overflow: hidden; margin-bottom: clamp(12px, 1.04vw, 20px); }
1400
1523
  .ps-tryon-sg-checking-bar { height: 100%; width: 40%; background: linear-gradient(90deg, #bb945c, #d6ba7d); border-radius: 2px; animation: ps-sg-bar 1.5s ease-in-out infinite; }
1401
1524
  @keyframes ps-sg-bar { 0% { transform: translateX(-100%); } 100% { transform: translateX(350%); } }
1402
- .ps-tryon-sg-checking .ps-tryon-section-title { margin-bottom: 6px; }
1403
- .ps-tryon-sg-checking-sub { font-size: 13px; color: #999; margin: 0; }
1525
+ .ps-tryon-sg-checking .ps-tryon-section-title { margin-bottom: clamp(4px, 0.31vw, 6px); }
1526
+ .ps-tryon-sg-checking-sub { font-size: clamp(10px, 0.68vw, 13px); color: #999; margin: 0; }
1404
1527
 
1405
1528
  /* Back button */
1406
- .ps-tryon-back { display: flex; align-items: center; gap: 6px; background: none; border: none; color: #999; font-size: 13px; cursor: pointer; padding: 0; margin-bottom: 12px; font-family: inherit; transition: color 0.2s; }
1529
+ .ps-tryon-back { display: flex; align-items: center; gap: clamp(4px, 0.31vw, 6px); background: none; border: none; color: #999; font-size: clamp(10px, 0.68vw, 13px); cursor: pointer; padding: 0; margin-bottom: clamp(7px, 0.63vw, 12px); font-family: inherit; transition: color 0.2s; }
1407
1530
  .ps-tryon-back:hover { color: #fff; }
1408
1531
  .ps-tryon-back svg { stroke: currentColor; fill: none; }
1409
1532
 
1410
1533
  /* Sizing form */
1411
- .ps-tryon-sizing-form { display: flex; flex-direction: column; gap: 12px; }
1412
- .ps-tryon-input-row { display: flex; align-items: center; gap: 10px; }
1413
- .ps-tryon-input-row label { font-size: 13px; font-weight: 500; color: #ccc; min-width: 90px; flex-shrink: 0; }
1534
+ .ps-tryon-sizing-form { display: flex; flex-direction: column; gap: clamp(7px, 0.63vw, 12px); }
1535
+ .ps-tryon-input-row { display: flex; align-items: center; gap: clamp(6px, 0.52vw, 10px); }
1536
+ .ps-tryon-input-row label { font-size: clamp(10px, 0.68vw, 13px); font-weight: 500; color: #ccc; min-width: clamp(60px, 4.7vw, 90px); flex-shrink: 0; }
1414
1537
  .ps-tryon-input-row input {
1415
- flex: 1; padding: 10px 14px; border: 1.5px solid #333; border-radius: 10px;
1416
- background: #1a1b1a; color: #fff; font-size: 14px; font-family: inherit; outline: none;
1538
+ flex: 1; padding: clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px);
1539
+ background: #1a1b1a; color: #fff; font-size: clamp(10px, 0.73vw, 14px); font-family: inherit; outline: none;
1417
1540
  transition: border-color 0.2s; -moz-appearance: textfield;
1418
1541
  }
1419
1542
  .ps-tryon-input-row input::-webkit-outer-spin-button,
1420
1543
  .ps-tryon-input-row input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
1421
1544
  .ps-tryon-input-row input:focus { border-color: #bb945c; }
1422
- .ps-tryon-input-unit { font-size: 12px; color: #666; flex-shrink: 0; }
1423
- .ps-tryon-height-ft { display: flex; align-items: center; gap: 6px; flex: 1; }
1424
- .ps-tryon-height-ft input { width: 60px; padding: 10px 10px; border: 1.5px solid #333; border-radius: 10px; background: #1a1b1a; color: #fff; font-size: 14px; font-family: inherit; outline: none; text-align: center; -moz-appearance: textfield; }
1545
+ .ps-tryon-input-unit { font-size: clamp(9px, 0.63vw, 12px); color: #666; flex-shrink: 0; }
1546
+ .ps-tryon-height-ft { display: flex; align-items: center; gap: clamp(4px, 0.31vw, 6px); flex: 1; }
1547
+ .ps-tryon-height-ft input { width: clamp(42px, 3.13vw, 60px); padding: clamp(6px, 0.52vw, 10px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px); background: #1a1b1a; color: #fff; font-size: clamp(10px, 0.73vw, 14px); font-family: inherit; outline: none; text-align: center; -moz-appearance: textfield; }
1425
1548
  .ps-tryon-height-ft input::-webkit-outer-spin-button, .ps-tryon-height-ft input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
1426
1549
  .ps-tryon-height-ft input:focus { border-color: #bb945c; }
1427
- .ps-tryon-height-ft span { font-size: 12px; color: #666; }
1550
+ .ps-tryon-height-ft span { font-size: clamp(9px, 0.63vw, 12px); color: #666; }
1428
1551
  .ps-tryon-country-select {
1429
- flex: 1; padding: 10px 36px 10px 14px; border: 1.5px solid #333; border-radius: 10px;
1430
- background: #1a1b1a; color: #fff; font-size: 13px; font-family: inherit;
1552
+ flex: 1; padding: clamp(6px, 0.52vw, 10px) clamp(22px, 1.88vw, 36px) clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px);
1553
+ background: #1a1b1a; color: #fff; font-size: clamp(10px, 0.68vw, 13px); font-family: inherit;
1431
1554
  appearance: none; -webkit-appearance: none; cursor: pointer; outline: none;
1432
1555
  background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2.5 4.5L6 8L9.5 4.5' stroke='%23999' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
1433
- background-repeat: no-repeat; background-position: right 14px center;
1556
+ background-repeat: no-repeat; background-position: right clamp(8px, 0.73vw, 14px) center;
1434
1557
  }
1435
1558
  .ps-tryon-country-select:focus { border-color: #bb945c; }
1436
- .ps-tryon-unit-toggle { display: flex; gap: 0; border: 1.5px solid #333; border-radius: 8px; overflow: hidden; }
1559
+ .ps-tryon-unit-toggle { display: flex; gap: 0; border: 1.5px solid #333; border-radius: clamp(5px, 0.42vw, 8px); overflow: hidden; }
1437
1560
  .ps-tryon-unit-btn {
1438
- padding: 6px 14px; background: transparent; border: none; color: #999;
1439
- font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.2s; font-family: inherit;
1561
+ padding: clamp(4px, 0.31vw, 6px) clamp(8px, 0.73vw, 14px); background: transparent; border: none; color: #999;
1562
+ font-size: clamp(9px, 0.63vw, 12px); font-weight: 600; cursor: pointer; transition: all 0.2s; font-family: inherit;
1440
1563
  }
1441
1564
  .ps-tryon-unit-btn.ps-active { background: #bb945c; color: #111; }
1442
- .ps-tryon-shoe-section { border-top: 1px solid #333; padding-top: 14px; margin-top: 6px; display: flex; flex-direction: column; gap: 10px; }
1443
- .ps-tryon-shoe-title { font-size: 13px; font-weight: 600; color: #999; }
1444
- .ps-tryon-disclaimer { font-size: 11px; color: #666; margin: 4px 0 0; }
1445
- .ps-tryon-form-save-toggle { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
1565
+ .ps-tryon-section-label { font-size: clamp(8px, 0.57vw, 11px); font-weight: 700; color: #bb945c; text-transform: uppercase; letter-spacing: 0.08em; margin: clamp(2px, 0.21vw, 4px) 0 clamp(1px, 0.1vw, 2px); }
1566
+ .ps-tryon-optional-section { border-top: 1px solid #333; padding-top: clamp(6px, 0.52vw, 10px); margin-top: clamp(4px, 0.31vw, 6px); }
1567
+ .ps-tryon-optional-toggle { display: flex; align-items: center; justify-content: space-between; width: 100%; background: none; border: 1px solid #333; border-radius: clamp(6px, 0.52vw, 10px); padding: clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px); color: #999; font-size: clamp(10px, 0.68vw, 13px); font-weight: 600; cursor: pointer; font-family: inherit; transition: all 0.2s; }
1568
+ .ps-tryon-optional-toggle:hover { border-color: #555; color: #ccc; }
1569
+ .ps-tryon-chevron { transition: transform 0.2s; font-size: clamp(10px, 0.73vw, 14px); }
1570
+ .ps-tryon-optional-fields { display: flex; flex-direction: column; gap: clamp(6px, 0.52vw, 10px); padding-top: clamp(7px, 0.63vw, 12px); }
1571
+ .ps-tryon-shoe-section { border-top: 1px solid #333; padding-top: clamp(8px, 0.73vw, 14px); margin-top: clamp(4px, 0.31vw, 6px); display: flex; flex-direction: column; gap: clamp(6px, 0.52vw, 10px); }
1572
+ .ps-tryon-shoe-title { font-size: clamp(10px, 0.68vw, 13px); font-weight: 600; color: #999; }
1573
+ .ps-tryon-disclaimer { font-size: clamp(8px, 0.57vw, 11px); color: #666; margin: clamp(2px, 0.21vw, 4px) 0 0; }
1574
+ .ps-tryon-form-save-toggle { margin-top: clamp(6px, 0.52vw, 10px); display: flex; flex-direction: column; gap: clamp(5px, 0.42vw, 8px); }
1446
1575
  .ps-tryon-form-save-check {
1447
- display: flex; align-items: center; gap: 8px; font-size: 13px; color: #ccc; cursor: pointer; user-select: none;
1576
+ display: flex; align-items: center; gap: clamp(5px, 0.42vw, 8px); font-size: clamp(10px, 0.68vw, 13px); color: #ccc; cursor: pointer; user-select: none;
1448
1577
  }
1449
1578
  .ps-tryon-form-save-check input[type="checkbox"] {
1450
- width: 16px; height: 16px; accent-color: #bb945c; cursor: pointer;
1579
+ width: clamp(12px, 0.83vw, 16px); height: clamp(12px, 0.83vw, 16px); accent-color: #bb945c; cursor: pointer;
1451
1580
  }
1452
1581
  .ps-tryon-form-save-name {
1453
- padding: 8px 12px; border: 1.5px solid #333; border-radius: 10px;
1454
- background: #1a1b1a; color: #fff; font-size: 13px; font-family: inherit; outline: none;
1582
+ padding: clamp(5px, 0.42vw, 8px) clamp(7px, 0.63vw, 12px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px);
1583
+ background: #1a1b1a; color: #fff; font-size: clamp(10px, 0.68vw, 13px); font-family: inherit; outline: none;
1455
1584
  transition: border-color 0.2s;
1456
1585
  }
1457
1586
  .ps-tryon-form-save-name:focus { border-color: #bb945c; }
1458
1587
 
1459
1588
  /* Processing */
1460
- .ps-tryon-processing { text-align: center; padding: 24px; display: flex; flex-direction: column; align-items: center; }
1589
+ .ps-tryon-processing { text-align: center; padding: clamp(14px, 1.25vw, 24px); display: flex; flex-direction: column; align-items: center; }
1461
1590
 
1462
1591
  .ps-tryon-processing-image-wrap {
1463
- position: relative; width: 200px; height: 260px; margin: 0 auto 24px;
1464
- border-radius: 16px; overflow: hidden; border: 2px solid #333;
1592
+ position: relative; width: clamp(160px, 11.5vw, 220px); height: clamp(200px, 14.6vw, 280px); margin: 0 auto clamp(14px, 1.25vw, 24px);
1593
+ border-radius: clamp(10px, 0.83vw, 16px); overflow: hidden; border: 2px solid #333;
1594
+ }
1595
+ .ps-tryon-processing-blur {
1596
+ position: absolute; inset: clamp(-14px, -1.04vw, -20px); background-size: cover; background-position: center;
1597
+ filter: blur(25px) brightness(0.5); transform: scale(1.2);
1465
1598
  }
1466
1599
  .ps-tryon-processing-model {
1467
- width: 100%; height: 100%; object-fit: cover; display: block;
1600
+ position: relative; z-index: 1; width: 100%; height: 100%; object-fit: contain; display: block;
1468
1601
  }
1469
1602
  .ps-tryon-scan-overlay {
1470
1603
  position: absolute; inset: 0;
@@ -1474,7 +1607,7 @@ const STYLES = `
1474
1607
  .ps-tryon-scan-line {
1475
1608
  position: absolute; left: 0; right: 0; height: 3px;
1476
1609
  background: linear-gradient(90deg, transparent, #bb945c 20%, #d6ba7d 50%, #bb945c 80%, transparent);
1477
- box-shadow: 0 0 15px rgba(187,148,92,0.6), 0 0 40px rgba(187,148,92,0.2);
1610
+ box-shadow: 0 0 clamp(10px, 0.78vw, 15px) rgba(187,148,92,0.6), 0 0 clamp(24px, 2.08vw, 40px) rgba(187,148,92,0.2);
1478
1611
  animation: ps-scan 2.5s ease-in-out infinite;
1479
1612
  pointer-events: none; z-index: 2;
1480
1613
  }
@@ -1486,35 +1619,35 @@ const STYLES = `
1486
1619
  }
1487
1620
 
1488
1621
  .ps-tryon-progress-section {
1489
- display: flex; align-items: center; gap: 12px; width: 100%; max-width: 300px; margin-bottom: 16px;
1622
+ display: flex; align-items: center; gap: clamp(7px, 0.63vw, 12px); width: 100%; max-width: clamp(200px, 15.6vw, 300px); margin-bottom: clamp(10px, 0.83vw, 16px);
1490
1623
  }
1491
1624
  .ps-tryon-progress-bar-wrap {
1492
- flex: 1; height: 6px; background: #333; border-radius: 3px; overflow: hidden;
1625
+ flex: 1; height: clamp(4px, 0.31vw, 6px); background: #333; border-radius: 3px; overflow: hidden;
1493
1626
  }
1494
1627
  .ps-tryon-progress-bar-fill {
1495
1628
  height: 100%; background: linear-gradient(90deg, #bb945c, #d6ba7d);
1496
1629
  border-radius: 3px; transition: width 0.3s ease; width: 0%;
1497
1630
  }
1498
1631
  .ps-tryon-progress-pct {
1499
- font-size: 13px; font-weight: 700; color: #bb945c; min-width: 36px; text-align: right;
1632
+ font-size: clamp(10px, 0.68vw, 13px); font-weight: 700; color: #bb945c; min-width: clamp(24px, 1.88vw, 36px); text-align: right;
1500
1633
  font-variant-numeric: tabular-nums;
1501
1634
  }
1502
1635
 
1503
1636
  @keyframes ps-scale-in { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } }
1504
- .ps-tryon-processing-text { font-size: 14px; color: #fff; margin: 0 0 4px; }
1505
- .ps-tryon-processing-sub { font-size: 12px; color: #999; margin: 0; }
1637
+ .ps-tryon-processing-text { font-size: clamp(10px, 0.73vw, 14px); color: #fff; margin: 0 0 clamp(2px, 0.21vw, 4px); }
1638
+ .ps-tryon-processing-sub { font-size: clamp(9px, 0.63vw, 12px); color: #999; margin: 0; }
1506
1639
 
1507
1640
  /* Result */
1508
1641
  .ps-tryon-result-layout { text-align: center; }
1509
- .ps-tryon-result-split { display: flex; gap: 24px; text-align: left; align-items: stretch; }
1642
+ .ps-tryon-result-split { display: flex; gap: clamp(14px, 1.25vw, 24px); text-align: left; align-items: stretch; }
1510
1643
  .ps-tryon-result-image-col { flex: 0 0 45%; min-width: 0; display: flex; align-items: center; justify-content: center; }
1511
- .ps-tryon-result-image-col img { width: 100%; max-height: 400px; object-fit: contain; border-radius: 14px; box-shadow: 0 8px 32px rgba(0,0,0,0.2); animation: ps-scale-in 0.5s ease both; }
1644
+ .ps-tryon-result-image-col img { width: 100%; max-height: clamp(280px, 20.8vw, 400px); object-fit: contain; border-radius: clamp(8px, 0.73vw, 14px); box-shadow: 0 clamp(5px, 0.42vw, 8px) clamp(20px, 1.67vw, 32px) rgba(0,0,0,0.2); animation: ps-scale-in 0.5s ease both; }
1512
1645
  .ps-tryon-result-info-col { flex: 1; min-width: 0; }
1513
- .ps-tryon-result-layout:not(.ps-tryon-result-split) img { width: 100%; border-radius: 12px; margin-bottom: 16px; }
1514
- .ps-tryon-result-actions { display: flex; gap: 8px; margin-top: 16px; }
1646
+ .ps-tryon-result-layout:not(.ps-tryon-result-split) img { width: 100%; border-radius: clamp(8px, 0.63vw, 12px); margin-bottom: clamp(10px, 0.83vw, 16px); }
1647
+ .ps-tryon-result-actions { display: flex; gap: clamp(5px, 0.42vw, 8px); margin-top: clamp(10px, 0.83vw, 16px); }
1515
1648
  .ps-tryon-result-actions button {
1516
- flex: 1; padding: 12px; font-family: var(--ps-modal-font, system-ui, sans-serif);
1517
- font-size: 13px; font-weight: 600; border-radius: 10px; cursor: pointer; transition: all 0.2s; border: none;
1649
+ flex: 1; padding: clamp(7px, 0.63vw, 12px); font-family: var(--ps-modal-font, system-ui, sans-serif);
1650
+ font-size: clamp(10px, 0.68vw, 13px); font-weight: 600; border-radius: clamp(6px, 0.52vw, 10px); cursor: pointer; transition: all 0.2s; border: none;
1518
1651
  }
1519
1652
  .ps-tryon-btn-download { background: #bb945c; color: #111; }
1520
1653
  .ps-tryon-btn-download:hover { opacity: 0.9; }
@@ -1522,121 +1655,153 @@ const STYLES = `
1522
1655
  .ps-tryon-btn-retry:hover { background: rgba(255,255,255,0.12); }
1523
1656
 
1524
1657
  /* Size recommendation */
1525
- .ps-tryon-size-recommend { margin-bottom: 16px; }
1658
+ .ps-tryon-size-recommend { margin-bottom: clamp(10px, 0.83vw, 16px); }
1659
+ .ps-tryon-size-title { font-size: clamp(13px, 0.94vw, 18px); font-weight: 700; color: #fff; margin: 0 0 clamp(8px, 0.73vw, 14px); }
1660
+ .ps-tryon-size-hero-row {
1661
+ display: flex; align-items: center; gap: clamp(10px, 0.83vw, 16px); padding: clamp(10px, 0.83vw, 16px) clamp(12px, 1.04vw, 20px);
1662
+ border: 1.5px solid #333; border-radius: clamp(8px, 0.73vw, 14px); margin-bottom: clamp(10px, 0.94vw, 18px); background: rgba(255,255,255,0.02);
1663
+ }
1526
1664
  .ps-tryon-size-badge {
1527
1665
  display: inline-flex; align-items: center; justify-content: center;
1528
- width: 56px; height: 56px; border-radius: 50%;
1666
+ min-width: clamp(40px, 2.92vw, 56px); height: clamp(40px, 2.92vw, 56px); padding: 0 clamp(7px, 0.63vw, 12px); border-radius: clamp(8px, 0.63vw, 12px);
1529
1667
  background: linear-gradient(135deg, #bb945c, #d6ba7d);
1530
- color: #111; font-size: 20px; font-weight: 700; margin-bottom: 10px;
1668
+ color: #111; font-size: clamp(16px, 1.25vw, 24px); font-weight: 800; letter-spacing: -0.02em;
1531
1669
  }
1532
- .ps-tryon-sizing-loading { text-align: center; padding: 20px 0; }
1670
+ .ps-tryon-size-conf-label { font-size: clamp(11px, 0.78vw, 15px); font-weight: 600; }
1671
+ .ps-conf-high { color: #4ade80; } .ps-conf-medium { color: #bb945c; } .ps-conf-low { color: #ef4444; }
1672
+
1673
+ .ps-tryon-sizing-loading { text-align: center; padding: clamp(12px, 1.04vw, 20px) 0; }
1533
1674
  .ps-tryon-size-loading-spinner {
1534
- width: 36px; height: 36px; border: 3px solid #333;
1675
+ width: clamp(24px, 1.88vw, 36px); height: clamp(24px, 1.88vw, 36px); border: 3px solid #333;
1535
1676
  border-top-color: #bb945c; border-radius: 50%;
1536
- animation: ps-spin 0.8s linear infinite; margin: 0 auto 12px;
1677
+ animation: ps-spin 0.8s linear infinite; margin: 0 auto clamp(7px, 0.63vw, 12px);
1537
1678
  }
1538
1679
  @keyframes ps-spin { to { transform: rotate(360deg); } }
1539
- .ps-tryon-size-confidence { font-size: 12px; color: #999; margin-bottom: 8px; }
1540
- .ps-conf-high { color: #4ade80; } .ps-conf-medium { color: #bb945c; } .ps-conf-low { color: #ef4444; }
1541
- .ps-tryon-size-reasoning { font-size: 13px; color: #ccc; line-height: 1.5; margin-bottom: 12px; }
1542
- .ps-tryon-intl-sizes { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
1543
- .ps-tryon-intl-chip { padding: 4px 10px; border: 1px solid #333; border-radius: 8px; font-size: 11px; color: #ccc; font-weight: 500; }
1544
- .ps-tryon-match-details { margin-top: 12px; }
1545
- .ps-tryon-match-details summary { font-size: 12px; color: #bb945c; cursor: pointer; font-weight: 600; }
1546
- .ps-tryon-match-details table { width: 100%; border-collapse: collapse; margin-top: 8px; font-size: 12px; }
1547
- .ps-tryon-match-details th { text-align: left; padding: 6px 8px; border-bottom: 1px solid #333; color: #999; font-weight: 600; }
1548
- .ps-tryon-match-details td { padding: 6px 8px; border-bottom: 1px solid #222; color: #ccc; }
1680
+
1681
+ /* Fit Summary */
1682
+ .ps-tryon-fit-summary { margin-bottom: clamp(10px, 0.83vw, 16px); }
1683
+ .ps-tryon-fit-summary-title { font-size: clamp(11px, 0.78vw, 15px); font-weight: 700; color: #fff; margin: 0 0 clamp(6px, 0.52vw, 10px); }
1684
+ .ps-tryon-fit-row { display: flex; align-items: center; gap: clamp(6px, 0.52vw, 10px); padding: clamp(5px, 0.42vw, 8px) 0; }
1685
+ .ps-tryon-fit-icon {
1686
+ width: clamp(16px, 1.15vw, 22px); height: clamp(16px, 1.15vw, 22px); border-radius: 50%; display: flex; align-items: center; justify-content: center;
1687
+ font-size: clamp(9px, 0.63vw, 12px); font-weight: 700; flex-shrink: 0;
1688
+ }
1689
+ .ps-fit-icon-good { background: rgba(74,222,128,0.15); color: #4ade80; }
1690
+ .ps-fit-icon-tight { background: rgba(245,158,11,0.15); color: #f59e0b; }
1691
+ .ps-fit-icon-loose { background: rgba(96,165,250,0.15); color: #60a5fa; }
1692
+ .ps-tryon-fit-text { font-size: clamp(10px, 0.73vw, 14px); color: #ccc; line-height: 1.4; }
1693
+ .ps-tryon-fit-text strong { color: #fff; font-weight: 600; }
1694
+ .ps-tryon-fit-details-toggle {
1695
+ display: inline-block; margin-top: clamp(5px, 0.42vw, 8px); font-size: clamp(10px, 0.68vw, 13px); color: #bb945c; cursor: pointer;
1696
+ font-weight: 600; background: none; border: none; padding: 0; font-family: inherit;
1697
+ }
1698
+ .ps-tryon-fit-details-toggle:hover { color: #d6ba7d; }
1699
+ .ps-tryon-fit-table { width: 100%; border-collapse: collapse; margin-top: clamp(6px, 0.52vw, 10px); font-size: clamp(10px, 0.68vw, 13px); }
1700
+ .ps-tryon-fit-table th { text-align: left; padding: clamp(5px, 0.42vw, 8px) clamp(6px, 0.52vw, 10px); border-bottom: 1px solid #333; color: #999; font-weight: 600; }
1701
+ .ps-tryon-fit-table td { padding: clamp(5px, 0.42vw, 8px) clamp(6px, 0.52vw, 10px); border-bottom: 1px solid #222; color: #ccc; }
1549
1702
  .ps-fit-good { color: #4ade80; } .ps-fit-tight { color: #f59e0b; } .ps-fit-loose { color: #60a5fa; }
1550
1703
 
1704
+ /* Equivalent Sizes */
1705
+ .ps-tryon-equiv-section { margin-bottom: clamp(10px, 0.83vw, 16px); }
1706
+ .ps-tryon-equiv-title { font-size: clamp(11px, 0.78vw, 15px); font-weight: 700; color: #fff; margin: 0 0 clamp(6px, 0.52vw, 10px); }
1707
+ .ps-tryon-equiv-chips { display: flex; flex-wrap: wrap; gap: clamp(5px, 0.42vw, 8px); }
1708
+ .ps-tryon-equiv-chip {
1709
+ display: flex; align-items: center; border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px); overflow: hidden;
1710
+ }
1711
+ .ps-tryon-equiv-region { padding: clamp(4px, 0.36vw, 7px) clamp(6px, 0.52vw, 10px); font-size: clamp(9px, 0.63vw, 12px); color: #999; font-weight: 600; background: rgba(255,255,255,0.03); }
1712
+ .ps-tryon-equiv-value { padding: clamp(4px, 0.36vw, 7px) clamp(7px, 0.63vw, 12px); font-size: clamp(10px, 0.73vw, 14px); color: #fff; font-weight: 700; }
1713
+
1714
+ .ps-tryon-size-reasoning { font-size: clamp(10px, 0.73vw, 14px); color: #ccc; line-height: 1.6; margin-bottom: clamp(8px, 0.73vw, 14px); }
1715
+
1551
1716
  /* Save profile prompt */
1552
- .ps-tryon-save-prompt { margin-top: 14px; padding: 14px; border: 1px solid #333; border-radius: 12px; background: #1a1b1a; }
1553
- .ps-tryon-save-label { font-size: 12px; color: #999; margin-bottom: 10px; }
1554
- .ps-tryon-save-row { display: flex; gap: 8px; }
1717
+ .ps-tryon-save-prompt { margin-top: clamp(8px, 0.73vw, 14px); padding: clamp(8px, 0.73vw, 14px); border: 1px solid #333; border-radius: clamp(8px, 0.63vw, 12px); background: #1a1b1a; }
1718
+ .ps-tryon-save-label { font-size: clamp(9px, 0.63vw, 12px); color: #999; margin-bottom: clamp(6px, 0.52vw, 10px); }
1719
+ .ps-tryon-save-row { display: flex; gap: clamp(5px, 0.42vw, 8px); }
1555
1720
  .ps-tryon-save-row input {
1556
- flex: 1; padding: 10px 14px; border: 1.5px solid #333; border-radius: 10px;
1557
- background: #111211; color: #fff; font-size: 13px; font-family: inherit; outline: none;
1721
+ flex: 1; padding: clamp(6px, 0.52vw, 10px) clamp(8px, 0.73vw, 14px); border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px);
1722
+ background: #111211; color: #fff; font-size: clamp(10px, 0.68vw, 13px); font-family: inherit; outline: none;
1558
1723
  }
1559
1724
  .ps-tryon-save-row input:focus { border-color: #bb945c; }
1560
1725
  .ps-tryon-save-row button {
1561
- padding: 10px 20px; background: #bb945c; color: #111; border: none; border-radius: 10px;
1562
- font-size: 13px; font-weight: 600; cursor: pointer; transition: opacity 0.2s; font-family: inherit;
1726
+ padding: clamp(6px, 0.52vw, 10px) clamp(12px, 1.04vw, 20px); background: #bb945c; color: #111; border: none; border-radius: clamp(6px, 0.52vw, 10px);
1727
+ font-size: clamp(10px, 0.68vw, 13px); font-weight: 600; cursor: pointer; transition: opacity 0.2s; font-family: inherit;
1563
1728
  }
1564
1729
  .ps-tryon-save-row button:hover { opacity: 0.9; }
1565
- .ps-tryon-save-btn-group { display: flex; gap: 6px; }
1730
+ .ps-tryon-save-btn-group { display: flex; gap: clamp(4px, 0.31vw, 6px); }
1566
1731
  .ps-tryon-save-new-btn { background: transparent !important; border: 1.5px solid #bb945c !important; color: #bb945c !important; }
1567
1732
  .ps-tryon-save-new-btn:hover { background: rgba(187,148,92,0.1) !important; }
1568
- .ps-tryon-save-done { font-size: 12px; color: #4ade80; margin-top: 10px; display: flex; align-items: center; gap: 6px; justify-content: center; }
1733
+ .ps-tryon-save-done { font-size: clamp(9px, 0.63vw, 12px); color: #4ade80; margin-top: clamp(6px, 0.52vw, 10px); display: flex; align-items: center; gap: clamp(4px, 0.31vw, 6px); justify-content: center; }
1569
1734
  .ps-tryon-save-done svg { stroke: currentColor; }
1570
1735
 
1571
1736
  /* Error */
1572
- .ps-tryon-error { text-align: center; padding: 24px; display: flex; flex-direction: column; align-items: center; }
1573
- .ps-tryon-error svg { color: #ef4444; margin-bottom: 12px; }
1574
- .ps-tryon-error-text { font-size: 14px; color: #ef4444; margin: 0 0 16px; }
1737
+ .ps-tryon-error { text-align: center; padding: clamp(14px, 1.25vw, 24px); display: flex; flex-direction: column; align-items: center; }
1738
+ .ps-tryon-error svg { color: #ef4444; margin-bottom: clamp(7px, 0.63vw, 12px); }
1739
+ .ps-tryon-error-text { font-size: clamp(10px, 0.73vw, 14px); color: #ef4444; margin: 0 0 clamp(10px, 0.83vw, 16px); }
1575
1740
 
1576
1741
  /* Footer */
1577
- .ps-tryon-powered { text-align: center; padding: 12px 24px 16px; font-size: 11px; color: #666; }
1742
+ .ps-tryon-powered { text-align: center; padding: clamp(7px, 0.63vw, 12px) clamp(14px, 1.25vw, 24px) clamp(10px, 0.83vw, 16px); font-size: clamp(8px, 0.57vw, 11px); color: #666; }
1578
1743
  .ps-tryon-powered a { color: #bb945c; text-decoration: none; }
1579
1744
  .ps-tryon-powered a:hover { text-decoration: underline; }
1580
1745
 
1581
1746
  /* Drawer */
1582
1747
  .ps-tryon-drawer {
1583
1748
  position: absolute; inset: 0; z-index: 20; background: var(--ps-modal-bg, #111211);
1584
- overflow-y: auto; scrollbar-width: thin; padding: 20px 24px;
1749
+ overflow-y: auto; scrollbar-width: thin; padding: clamp(12px, 1.04vw, 20px) clamp(14px, 1.25vw, 24px);
1585
1750
  transform: translateX(100%); transition: transform 0.25s cubic-bezier(0.4,0,0.2,1);
1586
1751
  }
1587
1752
  .ps-tryon-drawer-open { transform: translateX(0); }
1588
- .ps-tryon-drawer-header { display: flex; align-items: center; gap: 10px; padding-bottom: 14px; margin-bottom: 14px; border-bottom: 1px solid #333; }
1753
+ .ps-tryon-drawer-header { display: flex; align-items: center; gap: clamp(6px, 0.52vw, 10px); padding-bottom: clamp(8px, 0.73vw, 14px); margin-bottom: clamp(8px, 0.73vw, 14px); border-bottom: 1px solid #333; }
1589
1754
  .ps-tryon-drawer-back {
1590
- width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
1591
- border: 1.5px solid #333; border-radius: 10px; background: transparent;
1755
+ width: clamp(22px, 1.67vw, 32px); height: clamp(22px, 1.67vw, 32px); display: flex; align-items: center; justify-content: center;
1756
+ border: 1.5px solid #333; border-radius: clamp(6px, 0.52vw, 10px); background: transparent;
1592
1757
  cursor: pointer; color: #999; transition: all 0.2s; flex-shrink: 0;
1593
1758
  }
1594
1759
  .ps-tryon-drawer-back:hover { border-color: #bb945c; color: #bb945c; }
1595
- .ps-tryon-drawer-title { font-size: 16px; font-weight: 600; color: #fff; }
1596
- .ps-tryon-drawer-list { display: flex; flex-direction: column; gap: 10px; }
1597
- .ps-tryon-drawer-empty { text-align: center; padding: 32px 16px; color: #666; font-size: 14px; }
1760
+ .ps-tryon-drawer-title { font-size: clamp(12px, 0.83vw, 16px); font-weight: 600; color: #fff; }
1761
+ .ps-tryon-drawer-list { display: flex; flex-direction: column; gap: clamp(6px, 0.52vw, 10px); }
1762
+ .ps-tryon-drawer-empty { text-align: center; padding: clamp(20px, 1.67vw, 32px) clamp(10px, 0.83vw, 16px); color: #666; font-size: clamp(10px, 0.73vw, 14px); }
1598
1763
 
1599
1764
  /* Profile items */
1600
1765
  .ps-tryon-profile-item {
1601
- display: flex; align-items: center; gap: 12px; padding: 14px;
1602
- border: 1px solid #333; border-radius: 12px; cursor: pointer; transition: all 0.2s;
1766
+ display: flex; align-items: center; gap: clamp(7px, 0.63vw, 12px); padding: clamp(8px, 0.73vw, 14px);
1767
+ border: 1px solid #333; border-radius: clamp(8px, 0.63vw, 12px); cursor: pointer; transition: all 0.2s;
1603
1768
  }
1604
1769
  .ps-tryon-profile-item:hover { border-color: #bb945c; }
1605
1770
  .ps-tryon-profile-avatar {
1606
- width: 40px; height: 40px; border-radius: 50%;
1771
+ width: clamp(28px, 2.08vw, 40px); height: clamp(28px, 2.08vw, 40px); border-radius: 50%;
1607
1772
  display: flex; align-items: center; justify-content: center;
1608
1773
  background: rgba(187,148,92,0.1); flex-shrink: 0;
1609
1774
  }
1610
1775
  .ps-tryon-profile-avatar svg { stroke: #bb945c; fill: none; }
1611
1776
  .ps-tryon-profile-info { flex: 1; min-width: 0; }
1612
- .ps-tryon-profile-name { font-size: 14px; font-weight: 600; color: #fff; }
1613
- .ps-tryon-profile-detail { font-size: 11px; color: #999; margin-top: 2px; }
1777
+ .ps-tryon-profile-name { font-size: clamp(10px, 0.73vw, 14px); font-weight: 600; color: #fff; }
1778
+ .ps-tryon-profile-detail { font-size: clamp(8px, 0.57vw, 11px); color: #999; margin-top: 2px; }
1614
1779
  .ps-tryon-profile-item > svg:last-child { color: #666; flex-shrink: 0; transition: color 0.2s; }
1615
1780
  .ps-tryon-profile-item:hover > svg:last-child { color: #bb945c; }
1616
1781
 
1617
1782
  /* History items */
1618
1783
  .ps-tryon-history-item {
1619
- display: flex; gap: 14px; padding: 14px;
1620
- border: 1px solid #333; border-radius: 12px; align-items: flex-start; transition: all 0.2s;
1784
+ display: flex; gap: clamp(8px, 0.73vw, 14px); padding: clamp(8px, 0.73vw, 14px);
1785
+ border: 1px solid #333; border-radius: clamp(8px, 0.63vw, 12px); align-items: flex-start; transition: all 0.2s;
1621
1786
  }
1622
- .ps-tryon-history-item:hover { border-color: #bb945c; box-shadow: 0 4px 12px rgba(187,148,92,0.06); }
1623
- .ps-tryon-history-images { display: flex; gap: 8px; flex-shrink: 0; }
1624
- .ps-tryon-history-thumb { width: 64px; height: 80px; border-radius: 10px; object-fit: cover; flex-shrink: 0; }
1787
+ .ps-tryon-history-item:hover { border-color: #bb945c; box-shadow: 0 clamp(2px, 0.21vw, 4px) clamp(7px, 0.63vw, 12px) rgba(187,148,92,0.06); }
1788
+ .ps-tryon-history-images { display: flex; gap: clamp(5px, 0.42vw, 8px); flex-shrink: 0; }
1789
+ .ps-tryon-history-thumb { width: clamp(44px, 3.33vw, 64px); height: clamp(56px, 4.17vw, 80px); border-radius: clamp(6px, 0.52vw, 10px); object-fit: cover; flex-shrink: 0; }
1625
1790
  .ps-tryon-history-info { flex: 1; min-width: 0; }
1626
- .ps-tryon-history-product { font-size: 13px; font-weight: 600; color: #fff; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1627
- .ps-tryon-history-meta { font-size: 11px; color: #666; margin-top: 3px; }
1628
- .ps-tryon-history-sizing { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
1629
- .ps-tryon-history-sizing-reason { font-size: 11px; color: #999; flex: 1; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1791
+ .ps-tryon-history-product { font-size: clamp(10px, 0.68vw, 13px); font-weight: 600; color: #fff; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1792
+ .ps-tryon-history-meta { font-size: clamp(8px, 0.57vw, 11px); color: #666; margin-top: 3px; }
1793
+ .ps-tryon-history-sizing { display: flex; align-items: center; gap: clamp(5px, 0.42vw, 8px); margin-top: clamp(4px, 0.31vw, 6px); }
1794
+ .ps-tryon-history-sizing-reason { font-size: clamp(8px, 0.57vw, 11px); color: #999; flex: 1; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1630
1795
  .ps-tryon-history-size-badge {
1631
- flex-shrink: 0; width: 40px; height: 40px; border-radius: 50%;
1796
+ flex-shrink: 0; width: clamp(28px, 2.08vw, 40px); height: clamp(28px, 2.08vw, 40px); border-radius: 50%;
1632
1797
  display: flex; align-items: center; justify-content: center;
1633
1798
  background: linear-gradient(135deg, #bb945c, #d6ba7d);
1634
- color: #111; font-size: 13px; font-weight: 700;
1799
+ color: #111; font-size: clamp(10px, 0.68vw, 13px); font-weight: 700;
1635
1800
  }
1636
- .ps-tryon-history-result-img { width: 64px; height: 80px; border-radius: 10px; object-fit: cover; flex-shrink: 0; border: 2px solid #bb945c; }
1801
+ .ps-tryon-history-result-img { width: clamp(44px, 3.33vw, 64px); height: clamp(56px, 4.17vw, 80px); border-radius: clamp(6px, 0.52vw, 10px); object-fit: cover; flex-shrink: 0; border: 2px solid #bb945c; }
1637
1802
  .ps-tryon-history-delete {
1638
- width: 28px; height: 28px; display: flex; align-items: center; justify-content: center;
1639
- border: none; background: transparent; cursor: pointer; color: #666; border-radius: 6px; transition: all 0.2s; flex-shrink: 0;
1803
+ width: clamp(20px, 1.46vw, 28px); height: clamp(20px, 1.46vw, 28px); display: flex; align-items: center; justify-content: center;
1804
+ border: none; background: transparent; cursor: pointer; color: #666; border-radius: clamp(4px, 0.31vw, 6px); transition: all 0.2s; flex-shrink: 0;
1640
1805
  }
1641
1806
  .ps-tryon-history-delete:hover { background: rgba(239,68,68,0.1); color: #ef4444; }
1642
1807
  .ps-tryon-history-delete svg { stroke: currentColor; fill: none; }
@@ -1645,45 +1810,59 @@ const STYLES = `
1645
1810
  .ps-tryon-detail-overlay {
1646
1811
  position: fixed; inset: 0; background: rgba(0,0,0,0.55);
1647
1812
  display: flex; align-items: center; justify-content: center;
1648
- z-index: 9999999; padding: 16px; animation: ps-fade-in 0.2s ease;
1813
+ z-index: 9999999; padding: clamp(10px, 0.83vw, 16px); animation: ps-fade-in 0.2s ease;
1649
1814
  }
1650
1815
  .ps-tryon-detail-modal {
1651
- background: #111211; border-radius: 16px; width: 100%; max-width: 440px; max-height: 85vh;
1652
- overflow-y: auto; box-shadow: 0 32px 64px rgba(0,0,0,0.3); animation: ps-slide-up 0.25s ease;
1816
+ background: #111211; border-radius: clamp(10px, 0.83vw, 16px); width: 100%; max-width: clamp(340px, 23vw, 440px); max-height: 85vh;
1817
+ overflow-y: auto; box-shadow: 0 clamp(20px, 1.67vw, 32px) clamp(40px, 3.33vw, 64px) rgba(0,0,0,0.3); animation: ps-slide-up 0.25s ease;
1653
1818
  font-family: var(--ps-modal-font, system-ui, sans-serif); color: #fff;
1654
1819
  }
1655
1820
  .ps-tryon-detail-header {
1656
1821
  display: flex; align-items: center; justify-content: space-between;
1657
- padding: 18px 24px; border-bottom: 1px solid #333;
1822
+ padding: clamp(10px, 0.94vw, 18px) clamp(14px, 1.25vw, 24px); border-bottom: 1px solid #333;
1658
1823
  }
1659
- .ps-tryon-detail-header span { font-size: 15px; font-weight: 600; }
1660
- .ps-tryon-detail-header button { background: none; border: none; color: #999; cursor: pointer; display: flex; align-items: center; border-radius: 6px; padding: 4px; transition: background 0.15s; }
1824
+ .ps-tryon-detail-header span { font-size: clamp(11px, 0.78vw, 15px); font-weight: 600; }
1825
+ .ps-tryon-detail-header button { background: none; border: none; color: #999; cursor: pointer; display: flex; align-items: center; border-radius: clamp(4px, 0.31vw, 6px); padding: clamp(2px, 0.21vw, 4px); transition: background 0.15s; }
1661
1826
  .ps-tryon-detail-header button:hover { background: rgba(255,255,255,0.1); }
1662
- .ps-tryon-detail-body { padding: 20px 24px; }
1663
- .ps-tryon-detail-gender { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; padding-bottom: 14px; border-bottom: 1px solid #333; margin-bottom: 14px; }
1827
+ .ps-tryon-detail-body { padding: clamp(12px, 1.04vw, 20px) clamp(14px, 1.25vw, 24px); }
1828
+ .ps-tryon-detail-gender { display: flex; align-items: center; gap: clamp(5px, 0.42vw, 8px); font-size: clamp(10px, 0.73vw, 14px); font-weight: 600; padding-bottom: clamp(8px, 0.73vw, 14px); border-bottom: 1px solid #333; margin-bottom: clamp(8px, 0.73vw, 14px); }
1664
1829
  .ps-tryon-detail-gender svg { stroke: #bb945c; fill: none; }
1665
- .ps-tryon-detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 16px; }
1666
- .ps-tryon-detail-cell { background: #1a1b1a; border-radius: 10px; padding: 12px 14px; }
1667
- .ps-tryon-detail-cell-label { font-size: 11px; color: #999; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 4px; }
1668
- .ps-tryon-detail-cell-value { font-size: 16px; font-weight: 600; color: #fff; }
1669
- .ps-tryon-detail-date { font-size: 11px; color: #666; text-align: center; margin-top: 8px; }
1830
+ .ps-tryon-detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(6px, 0.52vw, 10px); margin-bottom: clamp(10px, 0.83vw, 16px); }
1831
+ .ps-tryon-detail-cell { background: #1a1b1a; border-radius: clamp(6px, 0.52vw, 10px); padding: clamp(7px, 0.63vw, 12px) clamp(8px, 0.73vw, 14px); }
1832
+ .ps-tryon-detail-cell-label { font-size: clamp(8px, 0.57vw, 11px); color: #999; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: clamp(2px, 0.21vw, 4px); }
1833
+ .ps-tryon-detail-cell-value { font-size: clamp(12px, 0.83vw, 16px); font-weight: 600; color: #fff; }
1834
+ .ps-tryon-detail-date { font-size: clamp(8px, 0.57vw, 11px); color: #666; text-align: center; margin-top: clamp(5px, 0.42vw, 8px); }
1670
1835
  .ps-tryon-detail-delete {
1671
- width: 100%; display: flex; align-items: center; justify-content: center; gap: 6px;
1672
- padding: 12px; border: 1px solid #333; border-radius: 10px; background: none;
1673
- color: #ef4444; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s;
1674
- font-family: inherit; margin-top: 16px;
1836
+ width: 100%; display: flex; align-items: center; justify-content: center; gap: clamp(4px, 0.31vw, 6px);
1837
+ padding: clamp(7px, 0.63vw, 12px); border: 1px solid #333; border-radius: clamp(6px, 0.52vw, 10px); background: none;
1838
+ color: #ef4444; font-size: clamp(10px, 0.68vw, 13px); font-weight: 500; cursor: pointer; transition: all 0.2s;
1839
+ font-family: inherit; margin-top: clamp(10px, 0.83vw, 16px);
1675
1840
  }
1676
1841
  .ps-tryon-detail-delete:hover { background: rgba(239,68,68,0.06); border-color: #ef4444; }
1677
1842
  .ps-tryon-detail-delete svg { stroke: currentColor; fill: none; }
1678
1843
 
1679
1844
  /* Mobile responsive */
1845
+ @media (max-width: 768px) {
1846
+ .ps-tryon-overlay {
1847
+ padding: 0;
1848
+ padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
1849
+ align-items: stretch; justify-content: stretch;
1850
+ }
1851
+ .ps-tryon-modal {
1852
+ max-width: 100%; max-height: none; width: 100%;
1853
+ border-radius: 0; box-shadow: none;
1854
+ min-height: 100%; flex: 1;
1855
+ display: flex; flex-direction: column;
1856
+ }
1857
+ .ps-tryon-modal-wide { max-width: 100%; }
1858
+ .ps-tryon-modal > :last-child { flex: 1; }
1859
+ .ps-tryon-header { border-radius: 0; }
1860
+ }
1680
1861
  @media (max-width: 720px) {
1681
1862
  .ps-tryon-result-split { flex-direction: column; }
1682
1863
  .ps-tryon-result-image-col { flex: none; }
1683
- .ps-tryon-modal-wide { max-width: 520px; }
1684
1864
  }
1685
1865
  @media (max-width: 480px) {
1686
- .ps-tryon-modal { max-height: 100vh; border-radius: 14px; }
1687
1866
  .ps-tryon-body { padding: 18px; }
1688
1867
  .ps-tryon-header { padding: 14px 18px; }
1689
1868
  .ps-tryon-stepper { padding: 14px 18px 8px; }