@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.
- package/README.md +433 -433
- package/dist/react/index.js +423 -244
- package/logo.svg +46 -46
- package/package.json +1 -1
package/dist/react/index.js
CHANGED
|
@@ -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
|
|
441
|
-
for (const
|
|
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__ */
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
/* @__PURE__ */ jsx(
|
|
905
|
-
|
|
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
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
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
|
-
|
|
922
|
-
)
|
|
923
|
-
|
|
924
|
-
/* @__PURE__ */ jsxs(
|
|
925
|
-
/* @__PURE__ */
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
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__ */
|
|
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("
|
|
1002
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-size-
|
|
1003
|
-
"
|
|
1004
|
-
/* @__PURE__ */ jsx("span", { className: `ps-conf-${sizingResult.confidence}`, children:
|
|
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__ */
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
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__ */
|
|
1151
|
+
/* @__PURE__ */ jsxs("button", { onClick: () => {
|
|
1040
1152
|
if (profileName.trim()) saveProfile(profileName.trim());
|
|
1041
|
-
}, children:
|
|
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__ */
|
|
1160
|
+
] }) : /* @__PURE__ */ jsxs("button", { onClick: () => {
|
|
1046
1161
|
if (profileName.trim()) saveProfile(profileName.trim());
|
|
1047
|
-
}, children:
|
|
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;
|
|
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:
|
|
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-
|
|
1443
|
-
.ps-tryon-
|
|
1444
|
-
.ps-tryon-
|
|
1445
|
-
.ps-tryon-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1668
|
+
color: #111; font-size: clamp(16px, 1.25vw, 24px); font-weight: 800; letter-spacing: -0.02em;
|
|
1531
1669
|
}
|
|
1532
|
-
.ps-tryon-
|
|
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
|
-
|
|
1540
|
-
|
|
1541
|
-
.ps-tryon-
|
|
1542
|
-
.ps-tryon-
|
|
1543
|
-
.ps-tryon-
|
|
1544
|
-
.ps-tryon-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
.ps-
|
|
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; }
|