@primestyleai/tryon 4.3.2 → 4.4.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/dist/react/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useEffect, useMemo, useRef, useCallback } from "react";
|
|
4
|
-
import { c as createT, A as ApiClient, S as SseClient, i as isValidImageFile, a as compressImage, P as PrimeStyleError, L as LOCALE_LABELS, b as SUPPORTED_LOCALES } from "../index-
|
|
4
|
+
import { c as createT, A as ApiClient, S as SseClient, i as isValidImageFile, a as compressImage, P as PrimeStyleError, L as LOCALE_LABELS, b as SUPPORTED_LOCALES } from "../index-CZHknuGH.js";
|
|
5
5
|
const HEADER_ALIASES = {
|
|
6
6
|
// ── Size label columns (skipped during field derivation) ──
|
|
7
7
|
size: "__size__",
|
|
@@ -226,7 +226,14 @@ function tryPreNormalized(input) {
|
|
|
226
226
|
rows = obj.rows.map((r) => r.map(String));
|
|
227
227
|
} else if (isObject(firstRow)) {
|
|
228
228
|
rows = obj.rows.map(
|
|
229
|
-
(rowObj) => headers.map((h) =>
|
|
229
|
+
(rowObj) => headers.map((h) => {
|
|
230
|
+
if (rowObj[h] !== void 0) return String(rowObj[h]);
|
|
231
|
+
const lh = h.toLowerCase();
|
|
232
|
+
for (const k of Object.keys(rowObj)) {
|
|
233
|
+
if (k.toLowerCase() === lh) return String(rowObj[k]);
|
|
234
|
+
}
|
|
235
|
+
return "";
|
|
236
|
+
})
|
|
230
237
|
);
|
|
231
238
|
} else {
|
|
232
239
|
return null;
|
|
@@ -371,6 +378,79 @@ function normalizeSizeGuide(input) {
|
|
|
371
378
|
reason: typeof input === "string" ? "unstructured string" : "unrecognised format"
|
|
372
379
|
};
|
|
373
380
|
}
|
|
381
|
+
const LEFT_SHOULDER = 11;
|
|
382
|
+
const RIGHT_SHOULDER = 12;
|
|
383
|
+
const LEFT_HIP = 23;
|
|
384
|
+
const RIGHT_HIP = 24;
|
|
385
|
+
let poseLandmarker = null;
|
|
386
|
+
let loadingPromise = null;
|
|
387
|
+
async function loadMediaPipe() {
|
|
388
|
+
if (poseLandmarker) return;
|
|
389
|
+
if (loadingPromise) return loadingPromise;
|
|
390
|
+
loadingPromise = (async () => {
|
|
391
|
+
const vision = await import(
|
|
392
|
+
/* webpackIgnore: true */
|
|
393
|
+
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.33/vision_bundle.mjs"
|
|
394
|
+
);
|
|
395
|
+
const { FilesetResolver, PoseLandmarker } = vision;
|
|
396
|
+
const filesetResolver = await FilesetResolver.forVisionTasks(
|
|
397
|
+
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.33/wasm"
|
|
398
|
+
);
|
|
399
|
+
poseLandmarker = await PoseLandmarker.createFromOptions(filesetResolver, {
|
|
400
|
+
baseOptions: {
|
|
401
|
+
modelAssetPath: "https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task",
|
|
402
|
+
delegate: "GPU"
|
|
403
|
+
},
|
|
404
|
+
runningMode: "IMAGE",
|
|
405
|
+
numPoses: 1
|
|
406
|
+
});
|
|
407
|
+
})();
|
|
408
|
+
return loadingPromise;
|
|
409
|
+
}
|
|
410
|
+
async function detectMeasurementLines(imageSrc) {
|
|
411
|
+
try {
|
|
412
|
+
await loadMediaPipe();
|
|
413
|
+
const img = new Image();
|
|
414
|
+
img.crossOrigin = "anonymous";
|
|
415
|
+
await new Promise((resolve, reject) => {
|
|
416
|
+
img.onload = () => resolve();
|
|
417
|
+
img.onerror = () => reject(new Error("Failed to load image"));
|
|
418
|
+
img.src = imageSrc;
|
|
419
|
+
});
|
|
420
|
+
const result = poseLandmarker.detect(img);
|
|
421
|
+
if (!result?.landmarks?.length || result.landmarks[0].length < 25) {
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
const landmarks = result.landmarks[0];
|
|
425
|
+
const lShoulder = landmarks[LEFT_SHOULDER];
|
|
426
|
+
const rShoulder = landmarks[RIGHT_SHOULDER];
|
|
427
|
+
const lHip = landmarks[LEFT_HIP];
|
|
428
|
+
const rHip = landmarks[RIGHT_HIP];
|
|
429
|
+
const shoulderY = (lShoulder.y + rShoulder.y) / 2;
|
|
430
|
+
const hipY = (lHip.y + rHip.y) / 2;
|
|
431
|
+
const torsoLen = hipY - shoulderY;
|
|
432
|
+
const chestY = shoulderY + torsoLen * 0.28;
|
|
433
|
+
const shoulderWidth = Math.abs(rShoulder.x - lShoulder.x);
|
|
434
|
+
const chestX1 = Math.min(lShoulder.x, rShoulder.x) - shoulderWidth * 0.05;
|
|
435
|
+
const chestX2 = Math.max(lShoulder.x, rShoulder.x) + shoulderWidth * 0.05;
|
|
436
|
+
const hipWidth = Math.abs(rHip.x - lHip.x);
|
|
437
|
+
const hipX1 = Math.min(lHip.x, rHip.x) - hipWidth * 0.15;
|
|
438
|
+
const hipX2 = Math.max(lHip.x, rHip.x) + hipWidth * 0.15;
|
|
439
|
+
const waistY = chestY + (hipY - chestY) * 0.55;
|
|
440
|
+
const waistWidth = shoulderWidth * 0.85;
|
|
441
|
+
const waistCenterX = (lShoulder.x + rShoulder.x + lHip.x + rHip.x) / 4;
|
|
442
|
+
const waistX1 = waistCenterX - waistWidth / 2;
|
|
443
|
+
const waistX2 = waistCenterX + waistWidth / 2;
|
|
444
|
+
return {
|
|
445
|
+
chest: { y: chestY, x1: chestX1, x2: chestX2 },
|
|
446
|
+
waist: { y: waistY, x1: waistX1, x2: waistX2 },
|
|
447
|
+
hips: { y: hipY, x1: hipX1, x2: hipX2 }
|
|
448
|
+
};
|
|
449
|
+
} catch (err) {
|
|
450
|
+
console.error("[PS-SDK] Pose detection failed:", err);
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
374
454
|
function cx(base, override) {
|
|
375
455
|
return override ? `${base} ${override}` : base;
|
|
376
456
|
}
|
|
@@ -427,6 +507,8 @@ const SIZE_CONVERSIONS = {
|
|
|
427
507
|
"50": { US: "XXXL", UK: "22", EU: "50", IT: "54", FR: "50", DE: "50", JP: "21", KR: "110", AU: "22" }
|
|
428
508
|
};
|
|
429
509
|
const TOTAL_STEPS = 4;
|
|
510
|
+
const MEASURE_GUIDE_IMG = "data:image/webp;base64,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";
|
|
511
|
+
const LOGO_IMG = "data:image/webp;base64,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";
|
|
430
512
|
function detectLocale() {
|
|
431
513
|
if (typeof window === "undefined") return "US";
|
|
432
514
|
const l = (navigator.language || "en-US").toLowerCase();
|
|
@@ -446,6 +528,9 @@ function isImperial(locale) {
|
|
|
446
528
|
function inToCm(inches) {
|
|
447
529
|
return +(inches * 2.54).toFixed(1);
|
|
448
530
|
}
|
|
531
|
+
function kgToLbs(kg) {
|
|
532
|
+
return +(kg * 2.205).toFixed(1);
|
|
533
|
+
}
|
|
449
534
|
function lbsToKg(lbs) {
|
|
450
535
|
return +(lbs / 2.205).toFixed(1);
|
|
451
536
|
}
|
|
@@ -822,7 +907,7 @@ function PrimeStyleTryonInner({
|
|
|
822
907
|
if (progressTextRef.current) progressTextRef.current.textContent = "100%";
|
|
823
908
|
if (progressStatusRef.current) progressStatusRef.current.textContent = t("Complete!");
|
|
824
909
|
cleanupJob();
|
|
825
|
-
setTimeout(() => setView("result"), 400);
|
|
910
|
+
setTimeout(() => setView("size-result"), 400);
|
|
826
911
|
onComplete?.({ jobId: update.galleryId, imageUrl: update.imageUrl });
|
|
827
912
|
}
|
|
828
913
|
} else if (update.status === "failed") {
|
|
@@ -842,12 +927,13 @@ function PrimeStyleTryonInner({
|
|
|
842
927
|
}
|
|
843
928
|
return formGender === "female" ? FALLBACK_FIELDS_FEMALE : FALLBACK_FIELDS_MALE;
|
|
844
929
|
}, [sizeGuide, formGender]);
|
|
845
|
-
const submitSizing = useCallback(async () => {
|
|
930
|
+
const submitSizing = useCallback(async (methodOverride) => {
|
|
846
931
|
if (!apiRef.current) return;
|
|
932
|
+
const method = methodOverride || sizingMethod;
|
|
847
933
|
const baseUrl = getApiUrl(apiUrl);
|
|
848
934
|
const key = getApiKey();
|
|
849
935
|
const payload = {
|
|
850
|
-
method
|
|
936
|
+
method,
|
|
851
937
|
locale: sizingCountry,
|
|
852
938
|
product: { title: productTitle, description: "", variants: [] }
|
|
853
939
|
};
|
|
@@ -858,7 +944,7 @@ function PrimeStyleTryonInner({
|
|
|
858
944
|
payload.sizingUnit = sizingUnit;
|
|
859
945
|
console.log("[PS-SDK] sizeGuide state:", JSON.stringify({ found: sizeGuide?.found, hasHeaders: !!sizeGuide?.headers, hasRows: !!sizeGuide?.rows, headers: sizeGuide?.headers, rowCount: sizeGuide?.rows?.length }));
|
|
860
946
|
console.log("[PS-SDK] payload.sizeGuide:", payload.sizeGuide ? "present" : "MISSING");
|
|
861
|
-
if (
|
|
947
|
+
if (method === "exact") {
|
|
862
948
|
const m = { gender: formRef.current.gender || "male", sizingUnit };
|
|
863
949
|
const numericKeys = /* @__PURE__ */ new Set();
|
|
864
950
|
for (const f of dynamicFields) {
|
|
@@ -1240,20 +1326,44 @@ function PrimeStyleTryonInner({
|
|
|
1240
1326
|
}
|
|
1241
1327
|
function SizingChoiceView() {
|
|
1242
1328
|
const [mode, setMode] = useState("exact");
|
|
1329
|
+
const [showMeasureGuide, setShowMeasureGuide] = useState(false);
|
|
1330
|
+
const [hoveredField, setHoveredField] = useState(null);
|
|
1243
1331
|
const [saveToggle, setSaveToggle] = useState(false);
|
|
1244
1332
|
const [saveFormName, setSaveFormName] = useState("");
|
|
1333
|
+
const [optOpen, setOptOpen] = useState(false);
|
|
1334
|
+
const blurTimer = useRef(null);
|
|
1245
1335
|
const isCm = sizingUnit === "cm";
|
|
1246
1336
|
const sgAvailable = sizeGuide?.found === true;
|
|
1247
1337
|
const sgChecked = !sizeGuideFetching && sizeGuide !== null;
|
|
1248
1338
|
const exactAvailable = sgChecked ? sgAvailable : true;
|
|
1339
|
+
const [validationError, setValidationError] = useState("");
|
|
1249
1340
|
const handleSubmit = async () => {
|
|
1341
|
+
setValidationError("");
|
|
1342
|
+
if (mode === "quick") {
|
|
1343
|
+
const hasHeight = heightUnit === "ft" ? formRef.current.heightFeet && parseFloat(formRef.current.heightFeet) > 0 : formRef.current.height && parseFloat(formRef.current.height) > 0;
|
|
1344
|
+
const hasWeight = formRef.current.weight && parseFloat(formRef.current.weight) > 0;
|
|
1345
|
+
if (!hasHeight || !hasWeight) {
|
|
1346
|
+
setValidationError(t("Please fill in height and weight"));
|
|
1347
|
+
return;
|
|
1348
|
+
}
|
|
1349
|
+
} else {
|
|
1350
|
+
const reqFields = dynamicFields.filter((f) => f.required);
|
|
1351
|
+
const missing = reqFields.filter((f) => {
|
|
1352
|
+
const val = formRef.current[f.key];
|
|
1353
|
+
return !val || f.unit !== "size" && parseFloat(val) <= 0;
|
|
1354
|
+
});
|
|
1355
|
+
if (missing.length > 0) {
|
|
1356
|
+
setValidationError(t("Please fill in all required fields") + ": " + missing.map((f) => t(f.label)).join(", "));
|
|
1357
|
+
return;
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1250
1360
|
if (saveToggle && saveFormName.trim()) {
|
|
1251
1361
|
saveProfile(saveFormName.trim());
|
|
1252
1362
|
}
|
|
1253
1363
|
setSizingMethod(mode);
|
|
1254
1364
|
setSizingLoading(true);
|
|
1255
1365
|
setView("size-result");
|
|
1256
|
-
|
|
1366
|
+
submitSizing(mode);
|
|
1257
1367
|
};
|
|
1258
1368
|
const renderQuickFields = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1259
1369
|
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-row", children: [
|
|
@@ -1278,11 +1388,20 @@ function PrimeStyleTryonInner({
|
|
|
1278
1388
|
] });
|
|
1279
1389
|
const renderExactFields = () => {
|
|
1280
1390
|
const reqFields = dynamicFields.filter((f) => f.required);
|
|
1281
|
-
|
|
1391
|
+
dynamicFields.filter((f) => !f.required);
|
|
1392
|
+
const fieldHover = (key) => ({
|
|
1393
|
+
onFocus: () => {
|
|
1394
|
+
if (blurTimer.current) clearTimeout(blurTimer.current);
|
|
1395
|
+
setHoveredField(key);
|
|
1396
|
+
},
|
|
1397
|
+
onBlur: () => {
|
|
1398
|
+
blurTimer.current = setTimeout(() => setHoveredField(null), 150);
|
|
1399
|
+
}
|
|
1400
|
+
});
|
|
1282
1401
|
const renderField = (field) => {
|
|
1283
1402
|
if (["shoeEU", "shoeUS", "shoeUK"].includes(field.key)) {
|
|
1284
1403
|
const regionField = shoeField;
|
|
1285
|
-
return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-row", children: [
|
|
1404
|
+
return /* @__PURE__ */ jsxs("div", { className: `ps-tryon-sf-row${hoveredField === field.key ? " ps-tryon-sf-row-active" : ""}`, ...fieldHover(field.key), children: [
|
|
1286
1405
|
/* @__PURE__ */ jsxs("label", { className: "ps-tryon-sf-label", children: [
|
|
1287
1406
|
regionField.label.toUpperCase(),
|
|
1288
1407
|
field.required ? " *" : ""
|
|
@@ -1293,7 +1412,7 @@ function PrimeStyleTryonInner({
|
|
|
1293
1412
|
const phNum = parseFloat(field.placeholder?.replace(/[^0-9.]/g, "") || "");
|
|
1294
1413
|
const phIn = !isNaN(phNum) && phNum > 0 && field.unit === "cm" ? String(Math.round(phNum / 2.54)) : "";
|
|
1295
1414
|
const placeholder = isCm ? field.placeholder?.replace("e.g. ", "") || "" : phIn || field.placeholder?.replace("e.g. ", "") || "";
|
|
1296
|
-
return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-row", children: [
|
|
1415
|
+
return /* @__PURE__ */ jsxs("div", { className: `ps-tryon-sf-row${hoveredField === field.key ? " ps-tryon-sf-row-active" : ""}`, ...fieldHover(field.key), children: [
|
|
1297
1416
|
/* @__PURE__ */ jsxs("label", { className: "ps-tryon-sf-label", children: [
|
|
1298
1417
|
t(field.label).toUpperCase(),
|
|
1299
1418
|
field.required ? " *" : ""
|
|
@@ -1304,41 +1423,55 @@ function PrimeStyleTryonInner({
|
|
|
1304
1423
|
] })
|
|
1305
1424
|
] }, field.key);
|
|
1306
1425
|
};
|
|
1307
|
-
return /* @__PURE__ */
|
|
1308
|
-
reqFields.map(renderField),
|
|
1309
|
-
optFields.length > 0 && /* @__PURE__ */ jsxs("details", { className: "ps-tryon-sf-optional", children: [
|
|
1310
|
-
/* @__PURE__ */ jsx("summary", { className: "ps-tryon-sf-optional-toggle", children: t("Optional fields") }),
|
|
1311
|
-
/* @__PURE__ */ jsx("div", { className: "ps-tryon-sf-optional-fields", children: optFields.map(renderField) })
|
|
1312
|
-
] })
|
|
1313
|
-
] });
|
|
1426
|
+
return /* @__PURE__ */ jsx(Fragment, { children: reqFields.map(renderField) });
|
|
1314
1427
|
};
|
|
1315
1428
|
return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sizing-split", children: [
|
|
1316
|
-
/* @__PURE__ */
|
|
1429
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sizing-img-col", children: [
|
|
1430
|
+
/* @__PURE__ */ jsx("img", { src: productImage, alt: productTitle, className: `ps-tryon-sizing-product-img${hoveredField || showMeasureGuide ? " ps-tryon-img-hidden" : ""}` }),
|
|
1431
|
+
/* @__PURE__ */ jsx("img", { src: MEASURE_GUIDE_IMG, alt: "How to measure", className: `ps-tryon-sizing-measure-img${hoveredField || showMeasureGuide ? " ps-tryon-img-visible" : ""}` })
|
|
1432
|
+
] }),
|
|
1317
1433
|
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sizing-form-col", children: [
|
|
1318
1434
|
/* @__PURE__ */ jsx("h3", { className: "ps-tryon-sf-title", children: t("Let's find your best fit") }),
|
|
1319
1435
|
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-unit-tabs", children: [
|
|
1320
1436
|
/* @__PURE__ */ jsx(
|
|
1321
1437
|
"button",
|
|
1322
1438
|
{
|
|
1323
|
-
className: `ps-tryon-sf-unit-tab${
|
|
1439
|
+
className: `ps-tryon-sf-unit-tab${heightUnit === "cm" ? " ps-active" : ""}`,
|
|
1324
1440
|
onClick: () => {
|
|
1441
|
+
if (formRef.current.heightFeet) {
|
|
1442
|
+
const cm = ftInToCm(parseFloat(formRef.current.heightFeet || "0"), parseFloat(formRef.current.heightInches || "0"));
|
|
1443
|
+
if (cm > 0) formRef.current.height = String(Math.round(cm));
|
|
1444
|
+
}
|
|
1445
|
+
if (formRef.current.weight && weightUnit === "lbs") {
|
|
1446
|
+
formRef.current.weight = String(Math.round(lbsToKg(parseFloat(formRef.current.weight))));
|
|
1447
|
+
}
|
|
1325
1448
|
setSizingUnit("cm");
|
|
1326
1449
|
setHeightUnit("cm");
|
|
1327
1450
|
setWeightUnit("kg");
|
|
1451
|
+
setFormKey((k) => k + 1);
|
|
1328
1452
|
},
|
|
1329
|
-
children: t("
|
|
1453
|
+
children: t("Centimeters")
|
|
1330
1454
|
}
|
|
1331
1455
|
),
|
|
1332
1456
|
/* @__PURE__ */ jsx(
|
|
1333
1457
|
"button",
|
|
1334
1458
|
{
|
|
1335
|
-
className: `ps-tryon-sf-unit-tab${
|
|
1459
|
+
className: `ps-tryon-sf-unit-tab${heightUnit === "ft" ? " ps-active" : ""}`,
|
|
1336
1460
|
onClick: () => {
|
|
1461
|
+
if (formRef.current.height) {
|
|
1462
|
+
const totalIn = parseFloat(formRef.current.height) / 2.54;
|
|
1463
|
+
formRef.current.heightFeet = String(Math.floor(totalIn / 12));
|
|
1464
|
+
formRef.current.heightInches = String(Math.round(totalIn % 12));
|
|
1465
|
+
}
|
|
1466
|
+
if (formRef.current.weight && weightUnit === "kg") {
|
|
1467
|
+
formRef.current.weight = String(Math.round(kgToLbs(parseFloat(formRef.current.weight))));
|
|
1468
|
+
}
|
|
1337
1469
|
setSizingUnit("in");
|
|
1338
1470
|
setHeightUnit("ft");
|
|
1339
1471
|
setWeightUnit("lbs");
|
|
1472
|
+
setFormKey((k) => k + 1);
|
|
1340
1473
|
},
|
|
1341
|
-
children: t("
|
|
1474
|
+
children: t("Inches")
|
|
1342
1475
|
}
|
|
1343
1476
|
)
|
|
1344
1477
|
] }),
|
|
@@ -1348,34 +1481,26 @@ function PrimeStyleTryonInner({
|
|
|
1348
1481
|
/* @__PURE__ */ jsx("option", { value: "", children: t("Load saved profile...") }),
|
|
1349
1482
|
profiles.map((p) => /* @__PURE__ */ jsx("option", { value: p.id, children: p.name }, p.id))
|
|
1350
1483
|
] }) }),
|
|
1351
|
-
/* @__PURE__ */ jsx("div", { className: "ps-tryon-sf-fields", children: mode === "quick" ? renderQuickFields() : renderExactFields() }),
|
|
1352
|
-
/* @__PURE__ */
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
" ",
|
|
1358
|
-
/* @__PURE__ */ jsx(ArrowRightIcon, {})
|
|
1359
|
-
] }) : mode === "exact" ? /* @__PURE__ */ jsx("button", { className: "ps-tryon-sf-switch-btn", onClick: () => {
|
|
1360
|
-
setMode("quick");
|
|
1361
|
-
setSizingMethod("quick");
|
|
1362
|
-
}, children: t("Not sure? Use height & weight instead") }) : null }),
|
|
1363
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-save", children: [
|
|
1364
|
-
/* @__PURE__ */ jsxs("label", { className: "ps-tryon-sf-save-check", children: [
|
|
1365
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: saveToggle, onChange: (e) => setSaveToggle(e.target.checked) }),
|
|
1366
|
-
/* @__PURE__ */ jsx("span", { children: t("Save as profile") })
|
|
1484
|
+
/* @__PURE__ */ jsx("div", { className: "ps-tryon-sf-fields", children: mode === "quick" ? renderQuickFields() : renderExactFields() }, `${mode}-${formKey}`),
|
|
1485
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sf-switch", children: [
|
|
1486
|
+
mode === "exact" && /* @__PURE__ */ jsxs("button", { type: "button", className: `ps-tryon-sf-measure-btn${showMeasureGuide ? " ps-active" : ""}`, onClick: () => setShowMeasureGuide(!showMeasureGuide), children: [
|
|
1487
|
+
/* @__PURE__ */ jsx(RulerIcon, { size: 14 }),
|
|
1488
|
+
" ",
|
|
1489
|
+
showMeasureGuide ? t("Hide guide") : t("How to measure")
|
|
1367
1490
|
] }),
|
|
1368
|
-
|
|
1369
|
-
"
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1491
|
+
mode === "quick" && exactAvailable ? /* @__PURE__ */ jsxs("button", { type: "button", className: "ps-tryon-sf-switch-btn", onClick: () => {
|
|
1492
|
+
setMode("exact");
|
|
1493
|
+
setShowMeasureGuide(false);
|
|
1494
|
+
}, children: [
|
|
1495
|
+
t("I know my measurements"),
|
|
1496
|
+
" ",
|
|
1497
|
+
/* @__PURE__ */ jsx(ArrowRightIcon, {})
|
|
1498
|
+
] }) : mode === "exact" ? /* @__PURE__ */ jsx("button", { type: "button", className: "ps-tryon-sf-switch-btn", onClick: () => {
|
|
1499
|
+
setMode("quick");
|
|
1500
|
+
setShowMeasureGuide(false);
|
|
1501
|
+
}, children: t("Not sure? Use height & weight instead") }) : null
|
|
1378
1502
|
] }),
|
|
1503
|
+
validationError && /* @__PURE__ */ jsx("div", { className: "ps-tryon-sf-error", children: validationError }),
|
|
1379
1504
|
/* @__PURE__ */ jsx("button", { className: "ps-tryon-sf-next", onClick: handleSubmit, children: t("Next") })
|
|
1380
1505
|
] })
|
|
1381
1506
|
] });
|
|
@@ -1401,19 +1526,34 @@ function PrimeStyleTryonInner({
|
|
|
1401
1526
|
const ns = s.replace(/[^\d.\-–]/g, " ").trim().split(/[\s\-–]+/).filter(Boolean).map(Number).filter((n) => !isNaN(n));
|
|
1402
1527
|
return ns.length ? { min: Math.min(...ns), max: Math.max(...ns) } : { min: 0, max: 0 };
|
|
1403
1528
|
};
|
|
1529
|
+
const cellVal = useCallback((row, colIdx, header) => {
|
|
1530
|
+
if (!row) return "";
|
|
1531
|
+
if (Array.isArray(row)) return (row[colIdx] ?? "").toString().trim();
|
|
1532
|
+
const obj = row;
|
|
1533
|
+
if (header && obj[header] !== void 0) return obj[header].toString().trim();
|
|
1534
|
+
if (header) {
|
|
1535
|
+
const lh = header.toLowerCase();
|
|
1536
|
+
for (const k of Object.keys(obj)) {
|
|
1537
|
+
if (k.toLowerCase() === lh) return obj[k].toString().trim();
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
return "";
|
|
1541
|
+
}, []);
|
|
1404
1542
|
const sizeColIdx = useMemo(() => {
|
|
1405
1543
|
if (!sizeGuide?.headers || !sizeGuide?.rows) return -1;
|
|
1406
1544
|
const byName = sizeGuide.headers.findIndex((h) => /size|taglia|größe|taille/i.test(h.trim()));
|
|
1407
1545
|
if (byName >= 0) return byName;
|
|
1408
1546
|
for (let c = 0; c < sizeGuide.headers.length; c++) {
|
|
1409
|
-
|
|
1547
|
+
const hdr = sizeGuide.headers[c];
|
|
1548
|
+
if (sizeGuide.rows.some((r) => /^(XXS|XS|S|M|L|XL|XXL|XXXL|ONE SIZE|\d{1,2})$/i.test(cellVal(r, c, hdr)))) return c;
|
|
1410
1549
|
}
|
|
1411
1550
|
return 0;
|
|
1412
|
-
}, [sizeGuide]);
|
|
1551
|
+
}, [sizeGuide, cellVal]);
|
|
1552
|
+
const sizeHeader = sizeGuide?.headers?.[sizeColIdx] || "Size";
|
|
1413
1553
|
const allSizes = useMemo(() => {
|
|
1414
1554
|
if (sizeColIdx < 0 || !sizeGuide?.rows) return [];
|
|
1415
|
-
return sizeGuide.rows.map((r) => r
|
|
1416
|
-
}, [sizeGuide, sizeColIdx]);
|
|
1555
|
+
return sizeGuide.rows.map((r) => cellVal(r, sizeColIdx, sizeHeader)).filter(Boolean);
|
|
1556
|
+
}, [sizeGuide, sizeColIdx, sizeHeader, cellVal]);
|
|
1417
1557
|
const chartRangeFor = useCallback((measurement, size) => {
|
|
1418
1558
|
if (!sizeGuide?.headers || !sizeGuide?.rows || sizeColIdx < 0) return null;
|
|
1419
1559
|
const mc = sizeGuide.headers.findIndex((h) => {
|
|
@@ -1421,9 +1561,12 @@ function PrimeStyleTryonInner({
|
|
|
1421
1561
|
return a === b || a.includes(b) || b.includes(a);
|
|
1422
1562
|
});
|
|
1423
1563
|
if (mc < 0) return null;
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1426
|
-
|
|
1564
|
+
const mHeader = sizeGuide.headers[mc];
|
|
1565
|
+
const row = sizeGuide.rows.find((r) => cellVal(r, sizeColIdx, sizeHeader) === size);
|
|
1566
|
+
if (!row) return null;
|
|
1567
|
+
const val = cellVal(row, mc, mHeader);
|
|
1568
|
+
return val ? { range: val, ...pRange(val) } : null;
|
|
1569
|
+
}, [sizeGuide, sizeColIdx, sizeHeader, cellVal]);
|
|
1427
1570
|
const bestSize = useMemo(() => {
|
|
1428
1571
|
if (!sizingResult?.matchDetails?.length || !allSizes.length) return sizingResult?.recommendedSize || "";
|
|
1429
1572
|
if (!Object.keys(editVals).length) return sizingResult?.recommendedSize || "";
|
|
@@ -1446,8 +1589,8 @@ function PrimeStyleTryonInner({
|
|
|
1446
1589
|
}, [editVals, sizingResult, allSizes, chartRangeFor]);
|
|
1447
1590
|
const origSize = sizingResult?.recommendedSize || "";
|
|
1448
1591
|
const activeSize = bestSize || origSize;
|
|
1449
|
-
|
|
1450
|
-
|
|
1592
|
+
Object.keys(editVals).length > 0 && bestSize !== origSize;
|
|
1593
|
+
useMemo(() => {
|
|
1451
1594
|
if (!sizingResult?.matchDetails?.length) return [];
|
|
1452
1595
|
return sizingResult.matchDetails.map((m) => {
|
|
1453
1596
|
const origNum = pNum(m.userValue);
|
|
@@ -1463,90 +1606,280 @@ function PrimeStyleTryonInner({
|
|
|
1463
1606
|
rMax = alt.max;
|
|
1464
1607
|
}
|
|
1465
1608
|
}
|
|
1466
|
-
const
|
|
1609
|
+
const range = rMax - rMin;
|
|
1610
|
+
const threshold = range > 0 ? range * 0.5 : rMin * 0.05 || 3;
|
|
1611
|
+
let fit;
|
|
1612
|
+
if (userNum >= rMin && userNum <= rMax) {
|
|
1613
|
+
fit = "good";
|
|
1614
|
+
} else if (userNum < rMin) {
|
|
1615
|
+
const diff = rMin - userNum;
|
|
1616
|
+
fit = diff > threshold * 2 ? "too-loose" : diff > threshold ? "loose" : "a-bit-loose";
|
|
1617
|
+
} else {
|
|
1618
|
+
const diff = userNum - rMax;
|
|
1619
|
+
fit = diff > threshold * 2 ? "too-tight" : diff > threshold ? "tight" : "a-bit-tight";
|
|
1620
|
+
}
|
|
1467
1621
|
return { area: m.measurement, userNum, chartLabel: cleanNum(chartLabel), fit };
|
|
1468
1622
|
});
|
|
1469
1623
|
}, [sizingResult, editVals, chartRangeFor, activeSize, origSize]);
|
|
1470
|
-
|
|
1624
|
+
useMemo(() => {
|
|
1471
1625
|
const backendIntl = sizingResult?.internationalSizes || {};
|
|
1472
1626
|
const upper = activeSize.toUpperCase().trim();
|
|
1473
1627
|
const fromTable = SIZE_CONVERSIONS[upper] || SIZE_CONVERSIONS[activeSize] || {};
|
|
1474
1628
|
return { ...fromTable, ...backendIntl };
|
|
1475
1629
|
}, [sizingResult, activeSize]);
|
|
1630
|
+
const [resultTab, setResultTab] = useState("fit");
|
|
1631
|
+
const [selectedSize, setSelectedSize] = useState(null);
|
|
1632
|
+
const [showFullChart, setShowFullChart] = useState(false);
|
|
1633
|
+
const [showVisualFit, setShowVisualFit] = useState(false);
|
|
1634
|
+
const [poseLines, setPoseLines] = useState(null);
|
|
1635
|
+
const [poseLoading, setPoseLoading] = useState(false);
|
|
1636
|
+
const displaySize = selectedSize || activeSize;
|
|
1637
|
+
const isRecommended = displaySize === origSize || displaySize === bestSize;
|
|
1638
|
+
const displayFitRows = useMemo(() => {
|
|
1639
|
+
if (!sizingResult?.matchDetails?.length) return [];
|
|
1640
|
+
return sizingResult.matchDetails.map((m) => {
|
|
1641
|
+
const origNum = pNum(m.userValue);
|
|
1642
|
+
const edited = editVals[m.measurement];
|
|
1643
|
+
const userNum = edited !== void 0 && edited !== "" ? parseFloat(edited) : origNum;
|
|
1644
|
+
let { min: rMin, max: rMax } = pRange(m.chartRange);
|
|
1645
|
+
let chartLabel = m.chartRange;
|
|
1646
|
+
if (displaySize !== origSize) {
|
|
1647
|
+
const alt = chartRangeFor(m.measurement, displaySize);
|
|
1648
|
+
if (alt) {
|
|
1649
|
+
chartLabel = alt.range;
|
|
1650
|
+
rMin = alt.min;
|
|
1651
|
+
rMax = alt.max;
|
|
1652
|
+
}
|
|
1653
|
+
}
|
|
1654
|
+
const range = rMax - rMin;
|
|
1655
|
+
const threshold = range > 0 ? range * 0.5 : rMin * 0.05 || 3;
|
|
1656
|
+
let fit;
|
|
1657
|
+
if (userNum >= rMin && userNum <= rMax) {
|
|
1658
|
+
fit = "good";
|
|
1659
|
+
} else if (userNum < rMin) {
|
|
1660
|
+
const diff = rMin - userNum;
|
|
1661
|
+
fit = diff > threshold * 2 ? "too-loose" : diff > threshold ? "loose" : "a-bit-loose";
|
|
1662
|
+
} else {
|
|
1663
|
+
const diff = userNum - rMax;
|
|
1664
|
+
fit = diff > threshold * 2 ? "too-tight" : diff > threshold ? "tight" : "a-bit-tight";
|
|
1665
|
+
}
|
|
1666
|
+
return { area: m.measurement, userNum, chartLabel: cleanNum(chartLabel), fit };
|
|
1667
|
+
});
|
|
1668
|
+
}, [sizingResult, editVals, chartRangeFor, displaySize, origSize]);
|
|
1669
|
+
const sizeGuideRow = useMemo(() => {
|
|
1670
|
+
if (!sizeGuide?.headers || !sizeGuide?.rows || sizeColIdx < 0) return null;
|
|
1671
|
+
const row = sizeGuide.rows.find((r) => cellVal(r, sizeColIdx, sizeHeader) === displaySize);
|
|
1672
|
+
if (!row) return null;
|
|
1673
|
+
const entries = [];
|
|
1674
|
+
for (let i = 0; i < sizeGuide.headers.length; i++) {
|
|
1675
|
+
const h = sizeGuide.headers[i] || "";
|
|
1676
|
+
if (i === sizeColIdx) continue;
|
|
1677
|
+
const val = cellVal(row, i, h);
|
|
1678
|
+
if (val) entries.push({ header: h, value: val });
|
|
1679
|
+
}
|
|
1680
|
+
return entries;
|
|
1681
|
+
}, [sizeGuide, sizeColIdx, sizeHeader, displaySize, cellVal]);
|
|
1682
|
+
const userMeasureValues = useMemo(() => {
|
|
1683
|
+
if (!sizingResult?.matchDetails) return [];
|
|
1684
|
+
return sizingResult.matchDetails.map((m) => ({
|
|
1685
|
+
area: m.measurement,
|
|
1686
|
+
value: editVals[m.measurement] !== void 0 ? parseFloat(editVals[m.measurement]) : pNum(m.userValue)
|
|
1687
|
+
}));
|
|
1688
|
+
}, [sizingResult, editVals]);
|
|
1476
1689
|
return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr", children: [
|
|
1477
1690
|
sizingLoading && !sizingResult && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-loading", children: [
|
|
1478
1691
|
/* @__PURE__ */ jsx("div", { className: "ps-tryon-size-loading-spinner" }),
|
|
1479
1692
|
/* @__PURE__ */ jsx("p", { children: t("Analyzing your size...") })
|
|
1480
1693
|
] }),
|
|
1481
1694
|
sizingResult && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1482
|
-
/* @__PURE__ */ jsxs("button", { className: "ps-tryon-back", onClick: () => {
|
|
1483
|
-
setView("sizing-form");
|
|
1484
|
-
setEditVals({});
|
|
1485
|
-
}, children: [
|
|
1486
|
-
/* @__PURE__ */ jsx(ArrowLeftIcon, {}),
|
|
1487
|
-
" ",
|
|
1488
|
-
t("Back")
|
|
1489
|
-
] }),
|
|
1490
1695
|
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-split", children: [
|
|
1491
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-
|
|
1492
|
-
/* @__PURE__ */
|
|
1493
|
-
|
|
1494
|
-
/* @__PURE__ */
|
|
1495
|
-
/* @__PURE__ */ jsx("
|
|
1496
|
-
/* @__PURE__ */ jsx("
|
|
1696
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-img-col", children: [
|
|
1697
|
+
/* @__PURE__ */ jsx("img", { src: resultImageUrl || productImage, alt: productTitle, className: "ps-tryon-sr-product-img" }),
|
|
1698
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-img-actions", children: [
|
|
1699
|
+
resultImageUrl && /* @__PURE__ */ jsx("button", { className: "ps-tryon-sr-img-icon", onClick: handleDownload, title: t("Download"), children: /* @__PURE__ */ jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1700
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
1701
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
1702
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "15", x2: "12", y2: "3" })
|
|
1703
|
+
] }) }),
|
|
1704
|
+
sizeGuide?.found && /* @__PURE__ */ jsx("button", { className: "ps-tryon-sr-img-icon", onClick: () => setShowFullChart(true), title: t("Size chart"), children: /* @__PURE__ */ jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1705
|
+
/* @__PURE__ */ jsx("path", { d: "M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z" }),
|
|
1706
|
+
/* @__PURE__ */ jsx("path", { d: "m14.5 12.5 2-2" }),
|
|
1707
|
+
/* @__PURE__ */ jsx("path", { d: "m11.5 9.5 2-2" }),
|
|
1708
|
+
/* @__PURE__ */ jsx("path", { d: "m8.5 6.5 2-2" }),
|
|
1709
|
+
/* @__PURE__ */ jsx("path", { d: "m17.5 15.5 2-2" })
|
|
1710
|
+
] }) })
|
|
1711
|
+
] }),
|
|
1712
|
+
showVisualFit && poseLines && (() => {
|
|
1713
|
+
const lineMap = [
|
|
1714
|
+
{ key: "chest", pattern: /chest|bust/i, poseLine: poseLines.chest },
|
|
1715
|
+
{ key: "waist", pattern: /waist/i, poseLine: poseLines.waist },
|
|
1716
|
+
{ key: "hips", pattern: /hip/i, poseLine: poseLines.hips }
|
|
1717
|
+
];
|
|
1718
|
+
const visibleLines = lineMap.filter((m) => displayFitRows.some((r) => m.pattern.test(r.area)));
|
|
1719
|
+
const getFit = (pattern) => {
|
|
1720
|
+
const r = displayFitRows.find((row) => pattern.test(row.area));
|
|
1721
|
+
if (!r) return { color: "#888", label: "", name: "" };
|
|
1722
|
+
const color = r.fit === "good" ? "#4ade80" : /too/.test(r.fit) ? "#dc2626" : /^(loose|tight)$/.test(r.fit) ? "#e87040" : "#f59e0b";
|
|
1723
|
+
const label = r.fit === "good" ? t("perfect fit") : r.fit.replace(/-/g, " ");
|
|
1724
|
+
return { color, label, name: r.area };
|
|
1725
|
+
};
|
|
1726
|
+
const curvedPath = (x1, y, x2) => {
|
|
1727
|
+
const mid = (x1 + x2) / 2;
|
|
1728
|
+
const sag = 2;
|
|
1729
|
+
return `M ${x1} ${y} Q ${mid} ${y + sag}, ${x2} ${y}`;
|
|
1730
|
+
};
|
|
1731
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1732
|
+
/* @__PURE__ */ jsx("div", { className: "ps-tryon-pose-overlay" }),
|
|
1733
|
+
/* @__PURE__ */ jsx("svg", { className: "ps-tryon-pose-svg", viewBox: "0 0 100 100", preserveAspectRatio: "none", children: visibleLines.map((m, i) => {
|
|
1734
|
+
const { color } = getFit(m.pattern);
|
|
1735
|
+
const x1 = m.poseLine.x1 * 100;
|
|
1736
|
+
const x2 = m.poseLine.x2 * 100;
|
|
1737
|
+
const y = m.poseLine.y * 100;
|
|
1738
|
+
const d = curvedPath(x1, y, x2);
|
|
1739
|
+
return /* @__PURE__ */ jsx(
|
|
1740
|
+
"path",
|
|
1741
|
+
{
|
|
1742
|
+
d,
|
|
1743
|
+
fill: "none",
|
|
1744
|
+
stroke: color,
|
|
1745
|
+
strokeWidth: "0.5",
|
|
1746
|
+
strokeLinecap: "round",
|
|
1747
|
+
opacity: "0.9",
|
|
1748
|
+
className: "ps-tryon-pose-line",
|
|
1749
|
+
style: { animationDelay: `${i * 0.3}s` }
|
|
1750
|
+
},
|
|
1751
|
+
m.key
|
|
1752
|
+
);
|
|
1753
|
+
}) }),
|
|
1754
|
+
visibleLines.map((m, i) => {
|
|
1755
|
+
const { color, label, name } = getFit(m.pattern);
|
|
1756
|
+
const y = m.poseLine.y * 100;
|
|
1757
|
+
const x = m.poseLine.x2 * 100;
|
|
1758
|
+
return /* @__PURE__ */ jsxs("div", { className: "ps-tryon-pose-pill", style: { top: `${y}%`, left: `${Math.min(x + 2, 65)}%`, animationDelay: `${i * 0.3 + 0.4}s` }, children: [
|
|
1759
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-pose-pill-dot", style: { background: color } }),
|
|
1760
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-pose-pill-text", children: [
|
|
1761
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-pose-pill-name", children: name }),
|
|
1762
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-pose-pill-fit", style: { color }, children: label })
|
|
1763
|
+
] })
|
|
1764
|
+
] }, m.key);
|
|
1765
|
+
})
|
|
1766
|
+
] });
|
|
1767
|
+
})()
|
|
1768
|
+
] }),
|
|
1769
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-right-col", children: [
|
|
1770
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-size-hero", children: [
|
|
1771
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-size-letter", children: displaySize }),
|
|
1772
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-size-meta", children: [
|
|
1773
|
+
/* @__PURE__ */ jsx("span", { className: `ps-tryon-sr-size-label${isRecommended ? "" : " ps-not-rec"}`, children: isRecommended ? t("RECOMMENDED SIZE") : t("NOT RECOMMENDED") }),
|
|
1774
|
+
/* @__PURE__ */ jsx("button", { className: "ps-tryon-sr-edit-link", onClick: () => {
|
|
1775
|
+
setView("sizing-choice");
|
|
1776
|
+
setEditVals({});
|
|
1777
|
+
setSelectedSize(null);
|
|
1778
|
+
}, children: t("Edit measurements") })
|
|
1497
1779
|
] })
|
|
1498
1780
|
] }),
|
|
1499
|
-
|
|
1500
|
-
/* @__PURE__ */
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1781
|
+
(displayFitRows.length > 0 || sizeGuideRow) && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-tabs", children: [
|
|
1782
|
+
/* @__PURE__ */ jsxs("button", { className: `ps-tryon-sr-tab${resultTab === "chart" ? " ps-active" : ""}`, onClick: () => setResultTab("chart"), children: [
|
|
1783
|
+
t("Size guide"),
|
|
1784
|
+
" ",
|
|
1785
|
+
displaySize
|
|
1786
|
+
] }),
|
|
1787
|
+
/* @__PURE__ */ jsx("button", { className: `ps-tryon-sr-tab${resultTab === "fit" ? " ps-active" : ""}`, onClick: () => setResultTab("fit"), children: t("Your fit") })
|
|
1505
1788
|
] }),
|
|
1506
|
-
|
|
1507
|
-
/* @__PURE__ */
|
|
1508
|
-
|
|
1509
|
-
/* @__PURE__ */
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
] }),
|
|
1514
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-right", children: [
|
|
1515
|
-
/* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-section-title", children: t("Your Measurements") }),
|
|
1516
|
-
fitRows.map((row, i) => /* @__PURE__ */ jsxs("div", { className: `ps-tryon-sr-meas ps-fit-${row.fit}`, children: [
|
|
1517
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-meas-head", children: [
|
|
1518
|
-
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-meas-area", children: row.area }),
|
|
1519
|
-
/* @__PURE__ */ jsx("span", { className: `ps-tryon-sr-meas-badge ps-fit-${row.fit}`, children: row.fit === "good" ? `✓ ${t("within range")}` : row.fit === "tight" ? `↑ ${t("may be snug")}` : `↓ ${t("may be loose")}` })
|
|
1789
|
+
resultTab === "fit" && displayFitRows.length > 0 && /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-fit-list", children: displayFitRows.map((row, i) => /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-fit-item", children: /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-fit-row-grid", children: [
|
|
1790
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-fit-left", children: [
|
|
1791
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-fit-area", children: row.area }),
|
|
1792
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-fit-user-line", children: [
|
|
1793
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-fit-user-label", children: t("Your measure") }),
|
|
1794
|
+
/* @__PURE__ */ jsx("span", { className: `ps-tryon-sr-fit-status ps-fit-${row.fit}`, children: row.fit === "good" ? t("perfect fit") : row.fit === "too-tight" ? t("too tight") : row.fit === "tight" ? t("tight") : row.fit === "a-bit-tight" ? t("a bit tight") : row.fit === "too-loose" ? t("too loose") : row.fit === "loose" ? t("loose") : t("a bit loose") })
|
|
1795
|
+
] })
|
|
1520
1796
|
] }),
|
|
1521
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-
|
|
1522
|
-
/* @__PURE__ */ jsxs("
|
|
1523
|
-
/* @__PURE__ */ jsx(
|
|
1524
|
-
"input",
|
|
1525
|
-
{
|
|
1526
|
-
type: "number",
|
|
1527
|
-
className: "ps-tryon-sr-meas-input",
|
|
1528
|
-
value: editVals[row.area] !== void 0 ? editVals[row.area] : row.userNum,
|
|
1529
|
-
onChange: (e) => setEditVals((prev) => ({ ...prev, [row.area]: e.target.value }))
|
|
1530
|
-
}
|
|
1531
|
-
),
|
|
1532
|
-
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-meas-unit", children: unitLbl })
|
|
1533
|
-
] }),
|
|
1534
|
-
/* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-meas-vs", children: "vs" }),
|
|
1535
|
-
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-meas-chart", children: [
|
|
1797
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-fit-right", children: [
|
|
1798
|
+
/* @__PURE__ */ jsxs("span", { className: "ps-tryon-sr-fit-range", children: [
|
|
1536
1799
|
row.chartLabel,
|
|
1537
1800
|
" ",
|
|
1538
1801
|
unitLbl
|
|
1802
|
+
] }),
|
|
1803
|
+
/* @__PURE__ */ jsxs("span", { className: "ps-tryon-sr-fit-user-val", children: [
|
|
1804
|
+
row.userNum,
|
|
1805
|
+
" ",
|
|
1806
|
+
unitLbl
|
|
1539
1807
|
] })
|
|
1540
1808
|
] })
|
|
1541
|
-
] }, i)),
|
|
1542
|
-
|
|
1809
|
+
] }) }, i)) }),
|
|
1810
|
+
resultTab === "chart" && sizeGuideRow && /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-fit-list", children: sizeGuideRow.map((entry, i) => /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-fit-item", children: /* @__PURE__ */ jsxs("div", { className: "ps-tryon-sr-fit-head", children: [
|
|
1811
|
+
/* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-fit-area", children: entry.header }),
|
|
1812
|
+
/* @__PURE__ */ jsxs("span", { className: "ps-tryon-sr-fit-range", children: [
|
|
1813
|
+
cleanNum(entry.value),
|
|
1814
|
+
" ",
|
|
1815
|
+
unitLbl
|
|
1816
|
+
] })
|
|
1817
|
+
] }) }, i)) }),
|
|
1818
|
+
allSizes.length > 1 && /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-chips", children: allSizes.map((s) => /* @__PURE__ */ jsxs(
|
|
1819
|
+
"button",
|
|
1820
|
+
{
|
|
1821
|
+
className: `ps-tryon-sr-chip${s === displaySize ? " ps-active" : ""}${s === origSize && s !== displaySize ? " ps-recommended" : ""}`,
|
|
1822
|
+
onClick: () => setSelectedSize(s === origSize ? null : s),
|
|
1823
|
+
children: [
|
|
1824
|
+
s,
|
|
1825
|
+
s === origSize && /* @__PURE__ */ jsx("span", { className: "ps-tryon-sr-rec-dot" })
|
|
1826
|
+
]
|
|
1827
|
+
},
|
|
1828
|
+
s
|
|
1829
|
+
)) }),
|
|
1830
|
+
displayFitRows.length === 0 && !sizeGuideRow && sizingResult.reasoning && /* @__PURE__ */ jsx("div", { className: "ps-tryon-sr-reasoning", children: /* @__PURE__ */ jsx("p", { children: sizingResult.reasoning }) }),
|
|
1831
|
+
resultImageUrl && /* @__PURE__ */ jsxs("button", { className: "ps-tryon-sr-visual-btn", onClick: async () => {
|
|
1832
|
+
if (showVisualFit) {
|
|
1833
|
+
setShowVisualFit(false);
|
|
1834
|
+
return;
|
|
1835
|
+
}
|
|
1836
|
+
if (poseLines) {
|
|
1837
|
+
setShowVisualFit(true);
|
|
1838
|
+
return;
|
|
1839
|
+
}
|
|
1840
|
+
setPoseLoading(true);
|
|
1841
|
+
const lines = await detectMeasurementLines(resultImageUrl);
|
|
1842
|
+
setPoseLines(lines);
|
|
1843
|
+
setPoseLoading(false);
|
|
1844
|
+
if (lines) setShowVisualFit(true);
|
|
1845
|
+
}, children: [
|
|
1846
|
+
/* @__PURE__ */ jsx(SparkleIcon, { size: 14 }),
|
|
1847
|
+
poseLoading ? t("Analyzing...") : showVisualFit ? t("Hide visual fit") : t("See fit on your photo")
|
|
1848
|
+
] }),
|
|
1849
|
+
!resultImageUrl && /* @__PURE__ */ jsx("button", { className: "ps-tryon-sf-next", onClick: () => setView("upload"), children: t("Try it on") })
|
|
1543
1850
|
] })
|
|
1544
1851
|
] }),
|
|
1545
|
-
/* @__PURE__ */
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1852
|
+
showFullChart && sizeGuide?.headers && sizeGuide?.rows && /* @__PURE__ */ jsx("div", { className: "ps-tryon-fc-overlay", onClick: () => setShowFullChart(false), children: /* @__PURE__ */ jsxs("div", { className: "ps-tryon-fc-panel", onClick: (e) => e.stopPropagation(), children: [
|
|
1853
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-fc-header", children: [
|
|
1854
|
+
/* @__PURE__ */ jsx("h3", { className: "ps-tryon-fc-title", children: t("SIZE CHART") }),
|
|
1855
|
+
/* @__PURE__ */ jsx("button", { className: "ps-tryon-fc-close", onClick: () => setShowFullChart(false), children: "×" })
|
|
1856
|
+
] }),
|
|
1857
|
+
userMeasureValues.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ps-tryon-fc-measures", children: [
|
|
1858
|
+
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-fc-measures-label", children: [
|
|
1859
|
+
t("YOUR ESTIMATED MEASUREMENTS"),
|
|
1860
|
+
/* @__PURE__ */ jsx("button", { className: "ps-tryon-sr-edit-link", onClick: () => {
|
|
1861
|
+
setShowFullChart(false);
|
|
1862
|
+
setView("sizing-choice");
|
|
1863
|
+
}, children: t("Edit") })
|
|
1864
|
+
] }),
|
|
1865
|
+
/* @__PURE__ */ jsx("div", { className: "ps-tryon-fc-measures-vals", children: userMeasureValues.map((v, i) => /* @__PURE__ */ jsxs("div", { className: "ps-tryon-fc-measures-val", children: [
|
|
1866
|
+
/* @__PURE__ */ jsx("strong", { children: v.value }),
|
|
1867
|
+
" ",
|
|
1868
|
+
/* @__PURE__ */ jsx("span", { children: unitLbl })
|
|
1869
|
+
] }, i)) })
|
|
1870
|
+
] }),
|
|
1871
|
+
/* @__PURE__ */ jsx("div", { className: "ps-tryon-fc-table-wrap", children: /* @__PURE__ */ jsxs("table", { className: "ps-tryon-fc-table", children: [
|
|
1872
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: sizeGuide.headers.map((h, i) => /* @__PURE__ */ jsx("th", { children: h }, i)) }) }),
|
|
1873
|
+
/* @__PURE__ */ jsx("tbody", { children: sizeGuide.rows.map((row, i) => {
|
|
1874
|
+
const sizeVal = cellVal(row, sizeColIdx, sizeHeader);
|
|
1875
|
+
const isRec = sizeVal === origSize;
|
|
1876
|
+
return /* @__PURE__ */ jsx("tr", { className: isRec ? "ps-tryon-fc-rec-row" : "", children: sizeGuide.headers.map((h, j) => {
|
|
1877
|
+
const cell = cellVal(row, j, h);
|
|
1878
|
+
return /* @__PURE__ */ jsx("td", { children: j === sizeColIdx && isRec ? /* @__PURE__ */ jsx("span", { className: "ps-tryon-fc-rec-pill", children: cell }) : cell }, j);
|
|
1879
|
+
}) }, i);
|
|
1880
|
+
}) })
|
|
1881
|
+
] }) })
|
|
1882
|
+
] }) })
|
|
1550
1883
|
] })
|
|
1551
1884
|
] });
|
|
1552
1885
|
}
|
|
@@ -1580,19 +1913,10 @@ function PrimeStyleTryonInner({
|
|
|
1580
1913
|
] });
|
|
1581
1914
|
}
|
|
1582
1915
|
function ResultView() {
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
/* @__PURE__ */ jsx("span", { className: "ps-tryon-size-compact-label", children: t("Your size:") }),
|
|
1588
|
-
/* @__PURE__ */ jsx("div", { className: "ps-tryon-size-badge", children: sizingResult.recommendedSize })
|
|
1589
|
-
] }) }),
|
|
1590
|
-
/* @__PURE__ */ jsxs("div", { className: cx("ps-tryon-result-actions", cn.resultActions), children: [
|
|
1591
|
-
/* @__PURE__ */ jsx("button", { onClick: handleDownload, className: cx("ps-tryon-btn-download", cn.downloadButton), children: t("Download") }),
|
|
1592
|
-
/* @__PURE__ */ jsx("button", { onClick: handleRetry, className: cx("ps-tryon-btn-retry", cn.retryButton), children: t("Start Over") })
|
|
1593
|
-
] })
|
|
1594
|
-
] })
|
|
1595
|
-
] });
|
|
1916
|
+
useEffect(() => {
|
|
1917
|
+
setView("size-result");
|
|
1918
|
+
}, []);
|
|
1919
|
+
return null;
|
|
1596
1920
|
}
|
|
1597
1921
|
function ErrorView() {
|
|
1598
1922
|
return /* @__PURE__ */ jsxs("div", { className: cx("ps-tryon-error", cn.error), children: [
|
|
@@ -1767,7 +2091,7 @@ function PrimeStyleTryonInner({
|
|
|
1767
2091
|
if (e.target === e.currentTarget) handleClose();
|
|
1768
2092
|
}, children: /* @__PURE__ */ jsxs("div", { className: cx(`ps-tryon-modal${view === "result" && resultImageUrl && sizingResult || view === "size-result" || view === "sizing-choice" ? " ps-tryon-modal-wide" : ""}`, cn.modal), onClick: (e) => e.stopPropagation(), children: [
|
|
1769
2093
|
/* @__PURE__ */ jsxs("div", { className: cx("ps-tryon-header", cn.header), children: [
|
|
1770
|
-
/* @__PURE__ */ jsx("span", { className: cx("ps-tryon-title", cn.title), children:
|
|
2094
|
+
/* @__PURE__ */ jsx("span", { className: cx("ps-tryon-title", cn.title), children: /* @__PURE__ */ jsx("img", { src: LOGO_IMG, alt: "PrimeStyle AI", className: "ps-tryon-logo-img" }) }),
|
|
1771
2095
|
/* @__PURE__ */ jsxs("div", { className: "ps-tryon-header-actions", children: [
|
|
1772
2096
|
/* @__PURE__ */ jsx(LangSwitcher, { activeLocale, onSelect: setActiveLocale }),
|
|
1773
2097
|
profiles.length > 0 && /* @__PURE__ */ jsx("button", { className: "ps-tryon-header-icon", title: t("Profiles"), onClick: () => setDrawer(drawer === "profiles" ? null : "profiles"), children: /* @__PURE__ */ jsx(UserIcon, {}) }),
|
|
@@ -1827,7 +2151,7 @@ const STYLES = `
|
|
|
1827
2151
|
scrollbar-width: thin; scrollbar-color: #333 transparent;
|
|
1828
2152
|
flex-shrink: 0;
|
|
1829
2153
|
}
|
|
1830
|
-
.ps-tryon-modal-wide { max-width:
|
|
2154
|
+
.ps-tryon-modal-wide { max-width: 56vw; }
|
|
1831
2155
|
.ps-tryon-modal:has(.ps-tryon-drawer-open) { overflow: hidden; }
|
|
1832
2156
|
@keyframes ps-slide-up { from { transform: translateY(1.04vw) scale(0.97); opacity: 0; } to { transform: translateY(0) scale(1); opacity: 1; } }
|
|
1833
2157
|
|
|
@@ -1838,7 +2162,8 @@ const STYLES = `
|
|
|
1838
2162
|
border-bottom: 1px solid #333;
|
|
1839
2163
|
border-radius: var(--ps-modal-radius, 0.83vw) var(--ps-modal-radius, 0.83vw) 0 0;
|
|
1840
2164
|
}
|
|
1841
|
-
.ps-tryon-title {
|
|
2165
|
+
.ps-tryon-title { display: flex; align-items: center; }
|
|
2166
|
+
.ps-tryon-logo-img { height: 2vw; width: auto; }
|
|
1842
2167
|
.ps-tryon-header-actions { display: flex; align-items: center; gap: 0.42vw; }
|
|
1843
2168
|
.ps-tryon-header-icon {
|
|
1844
2169
|
width: 1.77vw; height: 1.77vw; display: flex; align-items: center; justify-content: center;
|
|
@@ -2007,26 +2332,108 @@ const STYLES = `
|
|
|
2007
2332
|
|
|
2008
2333
|
/* Sizing — split layout (product image left, form right) */
|
|
2009
2334
|
.ps-tryon-sizing-split {
|
|
2010
|
-
display: grid; grid-template-columns:
|
|
2011
|
-
min-height:
|
|
2335
|
+
display: grid; grid-template-columns: 1.2fr 1fr; gap: 1.5vw;
|
|
2336
|
+
min-height: 24vw;
|
|
2012
2337
|
}
|
|
2013
2338
|
.ps-tryon-sizing-img-col {
|
|
2014
|
-
display:
|
|
2339
|
+
display: grid; align-items: stretch; justify-content: center;
|
|
2015
2340
|
background: #0e0e0f; border-radius: 0.8vw; overflow: hidden;
|
|
2341
|
+
position: relative;
|
|
2342
|
+
}
|
|
2343
|
+
.ps-tryon-sizing-img-col > img {
|
|
2344
|
+
grid-area: 1 / 1; width: 100%; height: 100%; object-fit: cover;
|
|
2345
|
+
transition: opacity 0.5s ease;
|
|
2346
|
+
}
|
|
2347
|
+
.ps-tryon-sizing-product-img { object-position: top; opacity: 1; }
|
|
2348
|
+
.ps-tryon-sizing-product-img.ps-tryon-img-hidden { opacity: 0; }
|
|
2349
|
+
.ps-tryon-sizing-measure-img { object-fit: cover; object-position: top; opacity: 0; }
|
|
2350
|
+
.ps-tryon-sizing-measure-img.ps-tryon-img-visible { opacity: 1; }
|
|
2351
|
+
|
|
2352
|
+
/* Model overlay — positioned on top of the image column */
|
|
2353
|
+
.ps-tryon-model-overlay {
|
|
2354
|
+
grid-area: 1 / 1; position: relative; opacity: 0; transition: opacity 0.5s ease;
|
|
2355
|
+
width: 100%; aspect-ratio: 896 / 1200; overflow: hidden;
|
|
2356
|
+
}
|
|
2357
|
+
.ps-tryon-model-overlay.ps-tryon-img-visible { opacity: 1; }
|
|
2358
|
+
.ps-tryon-model-raw { width: 100%; height: 100%; object-fit: contain; }
|
|
2359
|
+
|
|
2360
|
+
/* Measurement overlay group — each measurement is one group */
|
|
2361
|
+
.ps-tryon-mline-group { position: absolute; inset: 0; pointer-events: none; }
|
|
2362
|
+
|
|
2363
|
+
/* Horizontal dashed line */
|
|
2364
|
+
.ps-tryon-mline-h {
|
|
2365
|
+
position: absolute; height: 0;
|
|
2366
|
+
border-top: 2.5px dashed #333;
|
|
2367
|
+
animation: ps-dash-draw 0.5s ease 0.1s both;
|
|
2368
|
+
}
|
|
2369
|
+
/* Vertical dashed line (inseam, sleeve) */
|
|
2370
|
+
.ps-tryon-mline-v {
|
|
2371
|
+
position: absolute; width: 0;
|
|
2372
|
+
border-left: 2.5px dashed #333;
|
|
2373
|
+
animation: ps-vdash-draw 0.5s ease 0.1s both;
|
|
2374
|
+
}
|
|
2375
|
+
/* Tick marks at line endpoints — vertical ticks for horizontal lines */
|
|
2376
|
+
.ps-tryon-mline-tick {
|
|
2377
|
+
position: absolute; width: 0;
|
|
2378
|
+
border-left: 2.5px solid #333;
|
|
2379
|
+
animation: ps-label-pop 0.3s ease 0.2s both;
|
|
2380
|
+
}
|
|
2381
|
+
/* Horizontal ticks for vertical lines */
|
|
2382
|
+
.ps-tryon-mline-htick {
|
|
2383
|
+
position: absolute; height: 0;
|
|
2384
|
+
border-top: 2.5px solid #333;
|
|
2385
|
+
animation: ps-label-pop 0.3s ease 0.2s both;
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
/* Label box — matches reference: black title box + left-bordered description */
|
|
2389
|
+
.ps-tryon-mline-label {
|
|
2390
|
+
position: absolute;
|
|
2391
|
+
animation: ps-label-pop 0.35s ease 0.25s both;
|
|
2392
|
+
max-width: 33%;
|
|
2393
|
+
}
|
|
2394
|
+
.ps-tryon-mline-title {
|
|
2395
|
+
display: inline-block; background: #222; color: #fff;
|
|
2396
|
+
font-size: 0.55vw; font-weight: 800; letter-spacing: 0.06em;
|
|
2397
|
+
padding: 0.12vw 0.35vw; margin-bottom: 0.2vw;
|
|
2398
|
+
}
|
|
2399
|
+
.ps-tryon-mline-desc {
|
|
2400
|
+
font-size: 0.42vw; color: #444; line-height: 1.4;
|
|
2401
|
+
font-style: italic;
|
|
2402
|
+
border-left: 1.5px solid #555; padding-left: 0.3vw;
|
|
2403
|
+
margin-top: 0.1vw;
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
@keyframes ps-measure-in {
|
|
2407
|
+
from { opacity: 0; transform: translateY(4px); }
|
|
2408
|
+
to { opacity: 1; transform: translateY(0); }
|
|
2016
2409
|
}
|
|
2017
|
-
|
|
2018
|
-
|
|
2410
|
+
@keyframes ps-dash-draw {
|
|
2411
|
+
from { clip-path: inset(0 100% 0 0); }
|
|
2412
|
+
to { clip-path: inset(0 0 0 0); }
|
|
2019
2413
|
}
|
|
2414
|
+
@keyframes ps-vdash-draw {
|
|
2415
|
+
from { clip-path: inset(0 0 100% 0); }
|
|
2416
|
+
to { clip-path: inset(0 0 0 0); }
|
|
2417
|
+
}
|
|
2418
|
+
@keyframes ps-label-pop {
|
|
2419
|
+
from { opacity: 0; transform: scale(0.9); }
|
|
2420
|
+
to { opacity: 1; transform: scale(1); }
|
|
2421
|
+
}
|
|
2422
|
+
|
|
2423
|
+
/* Active field row highlight */
|
|
2424
|
+
.ps-tryon-sf-row-active { border-bottom-color: #bb945c; }
|
|
2425
|
+
.ps-tryon-sf-row-active .ps-tryon-sf-label { color: #bb945c; }
|
|
2020
2426
|
.ps-tryon-sizing-form-col {
|
|
2021
2427
|
display: flex; flex-direction: column; justify-content: center;
|
|
2022
|
-
padding: 0.5vw 0;
|
|
2428
|
+
padding: 0.5vw 0; min-height: 22vw;
|
|
2429
|
+
transition: min-height 0.3s ease;
|
|
2023
2430
|
}
|
|
2024
2431
|
.ps-tryon-sf-title {
|
|
2025
2432
|
font-size: 1.3vw; font-weight: 700; color: #fff;
|
|
2026
|
-
margin: 0 0 1vw; letter-spacing: -0.01em;
|
|
2433
|
+
margin: 0 0 1vw; letter-spacing: -0.01em; text-align: center;
|
|
2027
2434
|
}
|
|
2028
2435
|
.ps-tryon-sf-unit-tabs {
|
|
2029
|
-
display: flex; border-bottom: 1.5px solid #333; margin-bottom: 1vw;
|
|
2436
|
+
display: flex; justify-content: center; border-bottom: 1.5px solid #333; margin-bottom: 1vw;
|
|
2030
2437
|
}
|
|
2031
2438
|
.ps-tryon-sf-unit-tab {
|
|
2032
2439
|
background: none; border: none; padding: 0.4vw 0.8vw;
|
|
@@ -2046,48 +2453,70 @@ const STYLES = `
|
|
|
2046
2453
|
|
|
2047
2454
|
.ps-tryon-sf-fields {
|
|
2048
2455
|
display: flex; flex-direction: column; gap: 1.1vw;
|
|
2049
|
-
flex: 1;
|
|
2456
|
+
flex: 1; transition: all 0.3s ease;
|
|
2050
2457
|
}
|
|
2051
2458
|
.ps-tryon-sf-row {
|
|
2052
|
-
display: flex; align-items: center; justify-content:
|
|
2053
|
-
|
|
2459
|
+
display: flex; align-items: center; justify-content: center; gap: 1.2vw;
|
|
2460
|
+
padding: 1.3vw 0;
|
|
2461
|
+
max-width: 22vw; margin: 0 auto;
|
|
2054
2462
|
}
|
|
2055
2463
|
.ps-tryon-sf-label {
|
|
2056
|
-
font-size: 0.
|
|
2057
|
-
letter-spacing: 0.
|
|
2464
|
+
font-size: 0.78vw; font-weight: 700; color: #ccc;
|
|
2465
|
+
letter-spacing: 0.1em; text-transform: uppercase;
|
|
2466
|
+
flex-shrink: 0; min-width: 5vw;
|
|
2058
2467
|
}
|
|
2059
|
-
.ps-tryon-sf-input-wrap { flex: 1; display: flex;
|
|
2060
|
-
.ps-tryon-sf-inline { display: flex; align-items: center; gap: 0.4vw; }
|
|
2061
|
-
.ps-tryon-sf-ft-group { display: flex; align-items: center; gap: 0.
|
|
2468
|
+
.ps-tryon-sf-input-wrap { flex: 1; display: flex; align-items: center; gap: 0.4vw; }
|
|
2469
|
+
.ps-tryon-sf-inline { flex: 1; display: flex; align-items: center; gap: 0.4vw; }
|
|
2470
|
+
.ps-tryon-sf-ft-group { flex: 1; display: flex; align-items: center; gap: 0.4vw; }
|
|
2062
2471
|
.ps-tryon-sf-input {
|
|
2063
|
-
background: transparent; border: none; border-bottom: 1.5px solid #
|
|
2064
|
-
color: #fff; font-size: 1vw; font-family: inherit;
|
|
2065
|
-
padding: 0.
|
|
2472
|
+
background: transparent; border: none; border-bottom: 1.5px solid #555;
|
|
2473
|
+
color: #fff; font-size: 1vw; font-weight: 500; font-family: inherit;
|
|
2474
|
+
padding: 0.36vw 0; flex: 1;
|
|
2066
2475
|
text-align: center; outline: none; transition: border-color 0.2s;
|
|
2476
|
+
-moz-appearance: textfield;
|
|
2067
2477
|
}
|
|
2068
2478
|
.ps-tryon-sf-input:focus { border-bottom-color: #bb945c; }
|
|
2069
2479
|
.ps-tryon-sf-input::placeholder { color: #555; }
|
|
2070
2480
|
.ps-tryon-sf-input::-webkit-outer-spin-button,
|
|
2071
2481
|
.ps-tryon-sf-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
|
|
2072
2482
|
.ps-tryon-sf-unit {
|
|
2073
|
-
font-size: 0.
|
|
2483
|
+
font-size: 0.73vw; color: #ccc; font-weight: 500; flex-shrink: 0;
|
|
2074
2484
|
}
|
|
2075
2485
|
|
|
2076
|
-
.ps-tryon-sf-optional { margin-top: 0.
|
|
2077
|
-
.ps-tryon-sf-optional {
|
|
2486
|
+
.ps-tryon-sf-optional { border-top: 1px solid #222; margin-top: 0.52vw; padding-top: 0.52vw; }
|
|
2487
|
+
.ps-tryon-sf-optional-toggle {
|
|
2488
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
2489
|
+
width: 100%; padding: 0.52vw 0.73vw;
|
|
2490
|
+
font-size: 0.83vw; font-weight: 600; color: #fff; cursor: pointer;
|
|
2491
|
+
font-family: inherit;
|
|
2492
|
+
border: 1px solid #333; border-radius: 0.52vw;
|
|
2493
|
+
background: #161616; transition: all 0.2s;
|
|
2494
|
+
}
|
|
2495
|
+
.ps-tryon-sf-optional-toggle:hover { border-color: #555; background: #1a1a1a; }
|
|
2496
|
+
.ps-tryon-sf-optional-arrow {
|
|
2497
|
+
font-size: 0.83vw; color: #999; transition: transform 0.3s ease; display: inline-block;
|
|
2498
|
+
}
|
|
2499
|
+
.ps-tryon-sf-optional-arrow.ps-open { transform: rotate(180deg); }
|
|
2078
2500
|
.ps-tryon-sf-optional-fields {
|
|
2079
|
-
display: flex; flex-direction: column; gap: 0.
|
|
2080
|
-
|
|
2501
|
+
display: flex; flex-direction: column; gap: 0.8vw;
|
|
2502
|
+
max-height: 0; overflow: hidden; opacity: 0;
|
|
2503
|
+
transition: max-height 0.35s ease, opacity 0.25s ease, padding 0.35s ease;
|
|
2504
|
+
padding-top: 0;
|
|
2081
2505
|
}
|
|
2082
|
-
.ps-tryon-sf-optional-
|
|
2083
|
-
|
|
2084
|
-
font-family: inherit; list-style: none;
|
|
2506
|
+
.ps-tryon-sf-optional-fields.ps-open {
|
|
2507
|
+
max-height: 30vw; opacity: 1; padding-top: 0.7vw;
|
|
2085
2508
|
}
|
|
2086
|
-
.ps-tryon-sf-optional-toggle:hover { color: #999; }
|
|
2087
|
-
.ps-tryon-sf-optional-toggle::-webkit-details-marker { display: none; }
|
|
2088
|
-
.ps-tryon-sf-optional-fields { display: flex; flex-direction: column; gap: 0.8vw; padding-top: 0.7vw; }
|
|
2089
2509
|
|
|
2090
|
-
.ps-tryon-sf-switch { margin-top: 0.8vw;
|
|
2510
|
+
.ps-tryon-sf-switch { margin-top: 0.8vw; display: flex; align-items: center; justify-content: center; gap: 1.2vw; flex-wrap: wrap; }
|
|
2511
|
+
.ps-tryon-sf-measure-btn {
|
|
2512
|
+
background: none; border: 1px solid #333; color: #999; font-size: 0.75vw;
|
|
2513
|
+
font-weight: 500; cursor: pointer; font-family: inherit;
|
|
2514
|
+
display: inline-flex; align-items: center; gap: 0.3vw;
|
|
2515
|
+
padding: 0.3vw 0.7vw; border-radius: 0.4vw; transition: all 0.2s;
|
|
2516
|
+
}
|
|
2517
|
+
.ps-tryon-sf-measure-btn:hover { border-color: #bb945c; color: #bb945c; }
|
|
2518
|
+
.ps-tryon-sf-measure-btn.ps-active { border-color: #bb945c; color: #bb945c; background: rgba(187,148,92,0.08); }
|
|
2519
|
+
.ps-tryon-sf-measure-btn svg { stroke: currentColor; }
|
|
2091
2520
|
.ps-tryon-sf-switch-btn {
|
|
2092
2521
|
background: none; border: none; color: #bb945c; font-size: 0.8vw;
|
|
2093
2522
|
font-weight: 600; cursor: pointer; font-family: inherit;
|
|
@@ -2110,6 +2539,9 @@ const STYLES = `
|
|
|
2110
2539
|
}
|
|
2111
2540
|
.ps-tryon-sf-save-name:focus { border-color: #bb945c; }
|
|
2112
2541
|
|
|
2542
|
+
.ps-tryon-sf-error {
|
|
2543
|
+
color: #ef4444; font-size: 0.75vw; text-align: center; margin-top: 0.3vw;
|
|
2544
|
+
}
|
|
2113
2545
|
.ps-tryon-sf-next {
|
|
2114
2546
|
margin-top: 1vw; align-self: flex-end;
|
|
2115
2547
|
padding: 0.7vw 2vw;
|
|
@@ -2267,13 +2699,48 @@ const STYLES = `
|
|
|
2267
2699
|
.ps-tryon-processing-text { font-size: 0.73vw; color: #fff; margin: 0 0 0.21vw; }
|
|
2268
2700
|
.ps-tryon-processing-sub { font-size: 0.63vw; color: #999; margin: 0; }
|
|
2269
2701
|
|
|
2270
|
-
/* Result */
|
|
2702
|
+
/* Result — split layout */
|
|
2703
|
+
.ps-tryon-result-split {
|
|
2704
|
+
display: flex; gap: 1.5vw; text-align: left; align-items: flex-start;
|
|
2705
|
+
}
|
|
2706
|
+
.ps-tryon-result-img-col {
|
|
2707
|
+
flex: 0 0 48%; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 0.63vw;
|
|
2708
|
+
}
|
|
2709
|
+
.ps-tryon-result-img-col img {
|
|
2710
|
+
width: 100%; max-height: 24vw; object-fit: contain; border-radius: 0.73vw;
|
|
2711
|
+
box-shadow: 0 0.42vw 1.67vw rgba(0,0,0,0.3); animation: ps-scale-in 0.5s ease both;
|
|
2712
|
+
}
|
|
2713
|
+
.ps-tryon-result-dl-btn {
|
|
2714
|
+
display: inline-flex; align-items: center; gap: 0.31vw;
|
|
2715
|
+
padding: 0.36vw 0.83vw; background: transparent; border: 1px solid #444;
|
|
2716
|
+
border-radius: 0.42vw; color: #ccc; font-size: 0.68vw; font-weight: 600;
|
|
2717
|
+
cursor: pointer; font-family: inherit; transition: all 0.2s;
|
|
2718
|
+
}
|
|
2719
|
+
.ps-tryon-result-dl-btn:hover { border-color: #bb945c; color: #bb945c; }
|
|
2720
|
+
.ps-tryon-result-dl-btn svg { stroke: currentColor; }
|
|
2721
|
+
.ps-tryon-result-info-col {
|
|
2722
|
+
flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1vw;
|
|
2723
|
+
}
|
|
2724
|
+
.ps-tryon-result-fit {
|
|
2725
|
+
display: flex; flex-direction: column; gap: 0.36vw;
|
|
2726
|
+
}
|
|
2727
|
+
.ps-tryon-result-fit-row {
|
|
2728
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
2729
|
+
padding: 0.42vw 0; border-bottom: 1px solid #1a1a1a;
|
|
2730
|
+
}
|
|
2731
|
+
.ps-tryon-result-fit-area { font-size: 0.78vw; font-weight: 600; color: #ccc; }
|
|
2732
|
+
.ps-tryon-result-actions-col {
|
|
2733
|
+
display: flex; flex-direction: column; gap: 0.42vw; margin-top: 0.52vw;
|
|
2734
|
+
}
|
|
2735
|
+
.ps-tryon-result-startover {
|
|
2736
|
+
background: none; border: none; color: #666; font-size: 0.68vw;
|
|
2737
|
+
font-weight: 600; cursor: pointer; font-family: inherit; transition: color 0.2s;
|
|
2738
|
+
text-align: center;
|
|
2739
|
+
}
|
|
2740
|
+
.ps-tryon-result-startover:hover { color: #999; }
|
|
2741
|
+
/* Legacy result layout */
|
|
2271
2742
|
.ps-tryon-result-layout { text-align: center; }
|
|
2272
|
-
.ps-tryon-result-
|
|
2273
|
-
.ps-tryon-result-image-col { flex: 0 0 45%; min-width: 0; display: flex; align-items: center; justify-content: center; }
|
|
2274
|
-
.ps-tryon-result-image-col img { width: 100%; max-height: 20.8vw; object-fit: contain; border-radius: 0.73vw; box-shadow: 0 0.42vw 1.67vw rgba(0,0,0,0.2); animation: ps-scale-in 0.5s ease both; }
|
|
2275
|
-
.ps-tryon-result-info-col { flex: 1; min-width: 0; }
|
|
2276
|
-
.ps-tryon-result-layout:not(.ps-tryon-result-split) img { width: 100%; border-radius: 0.63vw; margin-bottom: 0.83vw; }
|
|
2743
|
+
.ps-tryon-result-layout img { width: 100%; border-radius: 0.63vw; margin-bottom: 0.83vw; }
|
|
2277
2744
|
.ps-tryon-result-actions { display: flex; gap: 0.42vw; margin-top: 0.83vw; }
|
|
2278
2745
|
.ps-tryon-result-actions button {
|
|
2279
2746
|
flex: 1; padding: 0.63vw; font-family: var(--ps-modal-font, system-ui, sans-serif);
|
|
@@ -2284,8 +2751,8 @@ const STYLES = `
|
|
|
2284
2751
|
.ps-tryon-btn-retry { background: rgba(255,255,255,0.08); color: #fff; border: 1px solid #333 !important; }
|
|
2285
2752
|
.ps-tryon-btn-retry:hover { background: rgba(255,255,255,0.12); }
|
|
2286
2753
|
|
|
2287
|
-
/* ── Size Result
|
|
2288
|
-
.ps-tryon-sr {
|
|
2754
|
+
/* ── Size Result ── */
|
|
2755
|
+
.ps-tryon-sr { }
|
|
2289
2756
|
.ps-tryon-sr-loading { text-align: center; padding: 3vw 0; }
|
|
2290
2757
|
.ps-tryon-sr-loading p { font-size: 0.83vw; color: #666; margin-top: 0.6vw; }
|
|
2291
2758
|
.ps-tryon-size-loading-spinner {
|
|
@@ -2295,142 +2762,285 @@ const STYLES = `
|
|
|
2295
2762
|
}
|
|
2296
2763
|
@keyframes ps-spin { to { transform: rotate(360deg); } }
|
|
2297
2764
|
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
}
|
|
2304
|
-
.ps-tryon-sr-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
padding: 0 0.
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
.ps-tryon-sr-
|
|
2312
|
-
.ps-tryon-sr-hero-conf { font-size: 0.73vw; font-weight: 600; }
|
|
2313
|
-
.ps-conf-high { color: #4ade80; } .ps-conf-medium { color: #bb945c; } .ps-conf-low { color: #ef4444; }
|
|
2765
|
+
.ps-tryon-sr-split { display: grid; grid-template-columns: 1fr 1.2fr; gap: 1.5vw; min-height: 22vw; }
|
|
2766
|
+
|
|
2767
|
+
/* Left: product image */
|
|
2768
|
+
.ps-tryon-sr-img-col {
|
|
2769
|
+
position: relative; border-radius: 0.8vw; overflow: hidden; background: #0e0e0f;
|
|
2770
|
+
}
|
|
2771
|
+
.ps-tryon-sr-product-img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
|
|
2772
|
+
.ps-tryon-sr-chart-btn {
|
|
2773
|
+
position: absolute; bottom: 1vw; left: 1vw;
|
|
2774
|
+
background: rgba(255,255,255,0.95); color: #111; border: none;
|
|
2775
|
+
padding: 0.4vw 0.8vw; border-radius: 0.3vw; font-size: 0.7vw; font-weight: 600;
|
|
2776
|
+
cursor: pointer; font-family: inherit; transition: all 0.2s;
|
|
2777
|
+
}
|
|
2778
|
+
.ps-tryon-sr-chart-btn:hover { background: #fff; }
|
|
2314
2779
|
|
|
2315
|
-
|
|
2316
|
-
.ps-tryon-sr-
|
|
2780
|
+
/* Right column */
|
|
2781
|
+
.ps-tryon-sr-right-col { display: flex; flex-direction: column; gap: 0.8vw; }
|
|
2317
2782
|
|
|
2318
|
-
/* Size
|
|
2783
|
+
/* Size hero — big letter + label */
|
|
2784
|
+
.ps-tryon-sr-size-hero { display: flex; align-items: flex-start; gap: 0.8vw; }
|
|
2785
|
+
.ps-tryon-sr-size-letter {
|
|
2786
|
+
font-size: 3vw; font-weight: 800; color: #fff; line-height: 1; letter-spacing: -0.02em;
|
|
2787
|
+
}
|
|
2788
|
+
.ps-tryon-sr-size-meta { display: flex; flex-direction: column; gap: 0.15vw; padding-top: 0.3vw; }
|
|
2789
|
+
.ps-tryon-sr-size-label { font-size: 0.65vw; font-weight: 700; color: #888; text-transform: uppercase; letter-spacing: 0.1em; }
|
|
2790
|
+
.ps-tryon-sr-size-label.ps-not-rec { color: #ef4444; }
|
|
2791
|
+
.ps-tryon-sr-edit-link {
|
|
2792
|
+
background: none; border: none; color: #bb945c; font-size: 0.7vw; font-weight: 500;
|
|
2793
|
+
cursor: pointer; font-family: inherit; text-decoration: underline; padding: 0; text-align: left;
|
|
2794
|
+
}
|
|
2795
|
+
.ps-tryon-sr-edit-link:hover { color: #d6ba7d; }
|
|
2796
|
+
|
|
2797
|
+
/* Size changed */
|
|
2319
2798
|
.ps-tryon-sr-size-changed {
|
|
2320
|
-
display: flex; align-items: center; gap: 0.
|
|
2321
|
-
padding: 0.
|
|
2799
|
+
display: inline-flex; align-items: center; gap: 0.3vw;
|
|
2800
|
+
padding: 0.3vw 0.6vw; border-radius: 0.3vw;
|
|
2322
2801
|
background: rgba(187,148,92,0.08); border: 1px solid rgba(187,148,92,0.2);
|
|
2323
|
-
font-size: 0.
|
|
2324
|
-
animation: ps-fade-up 0.25s ease both;
|
|
2802
|
+
font-size: 0.7vw; color: #d6ba7d;
|
|
2325
2803
|
}
|
|
2326
2804
|
.ps-tryon-sr-size-changed svg { stroke: #bb945c; }
|
|
2327
2805
|
.ps-tryon-sr-size-changed strong { color: #fff; }
|
|
2328
2806
|
|
|
2329
|
-
/*
|
|
2330
|
-
.ps-tryon-sr-
|
|
2331
|
-
.ps-tryon-sr-
|
|
2332
|
-
|
|
2807
|
+
/* Tabs */
|
|
2808
|
+
.ps-tryon-sr-tabs { display: flex; border-bottom: 1.5px solid #333; }
|
|
2809
|
+
.ps-tryon-sr-tab {
|
|
2810
|
+
background: none; border: none; padding: 0.4vw 0.8vw; margin-bottom: -1.5px;
|
|
2811
|
+
font-size: 0.75vw; font-weight: 600; color: #666; cursor: pointer;
|
|
2812
|
+
font-family: inherit; border-bottom: 2px solid transparent; transition: all 0.2s;
|
|
2813
|
+
}
|
|
2814
|
+
.ps-tryon-sr-tab:hover { color: #999; }
|
|
2815
|
+
.ps-tryon-sr-tab.ps-active { color: #fff; border-bottom-color: #bb945c; }
|
|
2333
2816
|
|
|
2334
|
-
/*
|
|
2335
|
-
.ps-tryon-sr-
|
|
2817
|
+
/* Fit list — "Your fit" tab */
|
|
2818
|
+
.ps-tryon-sr-fit-list { display: flex; flex-direction: column; gap: 0; }
|
|
2819
|
+
.ps-tryon-sr-fit-item {
|
|
2820
|
+
padding: 0.7vw 0; border-bottom: 1px solid #1e1e1e;
|
|
2821
|
+
}
|
|
2822
|
+
.ps-tryon-sr-fit-item:last-child { border-bottom: none; }
|
|
2823
|
+
.ps-tryon-sr-fit-row-grid {
|
|
2824
|
+
display: flex; justify-content: space-between; align-items: flex-start;
|
|
2825
|
+
}
|
|
2826
|
+
.ps-tryon-sr-fit-left { display: flex; flex-direction: column; gap: 0.2vw; }
|
|
2827
|
+
.ps-tryon-sr-fit-right { display: flex; flex-direction: column; align-items: flex-end; gap: 0.15vw; }
|
|
2828
|
+
.ps-tryon-sr-fit-head {
|
|
2829
|
+
display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.2vw;
|
|
2830
|
+
}
|
|
2831
|
+
.ps-tryon-sr-fit-area { font-size: 0.85vw; font-weight: 600; color: #fff; }
|
|
2832
|
+
.ps-tryon-sr-fit-range { font-size: 0.85vw; font-weight: 700; color: #888; }
|
|
2833
|
+
.ps-tryon-sr-fit-user-line {
|
|
2834
|
+
display: flex; align-items: center; gap: 0.3vw;
|
|
2835
|
+
}
|
|
2836
|
+
.ps-tryon-sr-fit-user-label { font-size: 0.65vw; color: #bb945c; font-weight: 500; }
|
|
2837
|
+
.ps-tryon-sr-fit-status {
|
|
2838
|
+
font-size: 0.6vw; font-weight: 600; padding: 0.1vw 0.35vw; border-radius: 0.25vw;
|
|
2839
|
+
}
|
|
2840
|
+
.ps-tryon-sr-fit-status.ps-fit-good { color: #4ade80; background: rgba(74,222,128,0.1); }
|
|
2841
|
+
.ps-tryon-sr-fit-status.ps-fit-a-bit-tight { color: #f59e0b; background: rgba(245,158,11,0.1); }
|
|
2842
|
+
.ps-tryon-sr-fit-status.ps-fit-tight { color: #e87040; background: rgba(232,112,64,0.1); }
|
|
2843
|
+
.ps-tryon-sr-fit-status.ps-fit-too-tight { color: #dc2626; background: rgba(220,38,38,0.1); }
|
|
2844
|
+
.ps-tryon-sr-fit-status.ps-fit-a-bit-loose { color: #f59e0b; background: rgba(245,158,11,0.1); }
|
|
2845
|
+
.ps-tryon-sr-fit-status.ps-fit-loose { color: #e87040; background: rgba(232,112,64,0.1); }
|
|
2846
|
+
.ps-tryon-sr-fit-status.ps-fit-too-loose { color: #dc2626; background: rgba(220,38,38,0.1); }
|
|
2847
|
+
.ps-tryon-sr-fit-user-val { font-size: 0.75vw; color: #ccc; font-weight: 600; }
|
|
2848
|
+
.ps-tryon-sr-fit-note { font-size: 0.6vw; color: #555; margin-top: 0.5vw; text-align: center; }
|
|
2849
|
+
.ps-tryon-sr-full-chart-btn {
|
|
2850
|
+
display: flex; align-items: center; justify-content: center; gap: 0.3vw;
|
|
2851
|
+
margin: 0.6vw auto 0; padding: 0.4vw 1vw;
|
|
2852
|
+
border: 1.5px solid #333; border-radius: 0.4vw; background: transparent;
|
|
2853
|
+
color: #ccc; font-size: 0.7vw; font-weight: 600; cursor: pointer;
|
|
2854
|
+
font-family: inherit; transition: all 0.2s;
|
|
2855
|
+
}
|
|
2856
|
+
.ps-tryon-sr-full-chart-btn:hover { border-color: #bb945c; color: #bb945c; }
|
|
2336
2857
|
|
|
2337
|
-
/*
|
|
2338
|
-
.ps-tryon-sr-
|
|
2339
|
-
.ps-tryon-sr-
|
|
2340
|
-
.ps-tryon-sr-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2858
|
+
/* Chart table — "Size guide" tab */
|
|
2859
|
+
.ps-tryon-sr-chart-table-wrap { overflow-x: auto; max-height: 14vw; overflow-y: auto; }
|
|
2860
|
+
.ps-tryon-sr-chart-table { width: 100%; font-size: 0.7vw; border-collapse: collapse; }
|
|
2861
|
+
.ps-tryon-sr-chart-table th {
|
|
2862
|
+
text-align: left; padding: 0.35vw 0.5vw; color: #666; font-weight: 600;
|
|
2863
|
+
border-bottom: 1px solid #333; position: sticky; top: 0; background: #111211;
|
|
2864
|
+
}
|
|
2865
|
+
.ps-tryon-sr-chart-table td { padding: 0.3vw 0.5vw; color: #999; border-bottom: 1px solid #1a1a1a; }
|
|
2866
|
+
.ps-tryon-sr-chart-active td { color: #fff; background: rgba(187,148,92,0.08); }
|
|
2867
|
+
|
|
2868
|
+
/* Size chips */
|
|
2869
|
+
.ps-tryon-sr-chips { display: flex; flex-wrap: wrap; gap: 0.4vw; justify-content: center; }
|
|
2870
|
+
.ps-tryon-sr-chip {
|
|
2871
|
+
min-width: 2.2vw; height: 2.2vw; display: flex; align-items: center; justify-content: center;
|
|
2872
|
+
border: 1.5px solid #333; border-radius: 0.4vw; background: transparent;
|
|
2873
|
+
color: #999; font-size: 0.75vw; font-weight: 600; cursor: pointer;
|
|
2874
|
+
font-family: inherit; transition: all 0.2s; padding: 0 0.5vw;
|
|
2875
|
+
}
|
|
2876
|
+
.ps-tryon-sr-chip:hover { border-color: #555; color: #ccc; }
|
|
2877
|
+
.ps-tryon-sr-chip.ps-active { background: #111; border-color: #bb945c; color: #fff; }
|
|
2878
|
+
|
|
2879
|
+
/* Reasoning */
|
|
2880
|
+
.ps-tryon-sr-reasoning { padding: 0.8vw; border: 1px solid #333; border-radius: 0.6vw; background: #1a1b1a; }
|
|
2881
|
+
.ps-tryon-sr-reasoning p { font-size: 0.75vw; color: #ccc; line-height: 1.6; margin: 0; }
|
|
2882
|
+
|
|
2883
|
+
/* Result actions */
|
|
2884
|
+
/* Image action icons — bottom-left of image */
|
|
2885
|
+
.ps-tryon-sr-img-actions {
|
|
2886
|
+
position: absolute; bottom: 0.6vw; left: 0.6vw; z-index: 3;
|
|
2887
|
+
display: flex; flex-direction: column; gap: 0.3vw;
|
|
2888
|
+
}
|
|
2889
|
+
.ps-tryon-sr-img-icon {
|
|
2890
|
+
width: 1.8vw; height: 1.8vw; display: flex; align-items: center; justify-content: center;
|
|
2891
|
+
background: rgba(0,0,0,0.6); border: 1px solid rgba(255,255,255,0.15); border-radius: 0.4vw;
|
|
2892
|
+
color: #ccc; cursor: pointer; transition: all 0.2s; backdrop-filter: blur(4px);
|
|
2893
|
+
}
|
|
2894
|
+
.ps-tryon-sr-img-icon:hover { background: rgba(0,0,0,0.8); color: #fff; border-color: rgba(255,255,255,0.3); }
|
|
2895
|
+
|
|
2896
|
+
/* See fit visually — below size chips */
|
|
2897
|
+
.ps-tryon-sr-visual-btn {
|
|
2898
|
+
display: flex; align-items: center; justify-content: center; gap: 0.3vw;
|
|
2899
|
+
width: 100%; padding: 0.5vw; margin-top: 0.3vw;
|
|
2900
|
+
background: transparent; border: 1px solid #333; border-radius: 0.5vw;
|
|
2901
|
+
color: #999; font-size: 0.7vw; font-weight: 600; cursor: pointer;
|
|
2902
|
+
font-family: inherit; transition: all 0.2s;
|
|
2903
|
+
}
|
|
2904
|
+
.ps-tryon-sr-visual-btn:hover { border-color: #bb945c; color: #bb945c; }
|
|
2905
|
+
.ps-tryon-sr-visual-btn svg { stroke: currentColor; }
|
|
2906
|
+
|
|
2907
|
+
/* Dark overlay behind SVG lines */
|
|
2908
|
+
.ps-tryon-pose-overlay {
|
|
2909
|
+
position: absolute; inset: 0; z-index: 1;
|
|
2910
|
+
background: rgba(0,0,0,0.35);
|
|
2911
|
+
animation: ps-fade-in 0.4s ease both;
|
|
2912
|
+
border-radius: inherit;
|
|
2344
2913
|
}
|
|
2345
|
-
.ps-tryon-sr-intl-card:hover { border-color: #444; background: #1c1c1c; }
|
|
2346
|
-
.ps-tryon-sr-intl-card-val { font-size: 1.1vw; font-weight: 800; color: #fff; line-height: 1.15; }
|
|
2347
|
-
.ps-tryon-sr-intl-card-code { font-size: 0.52vw; font-weight: 700; color: #555; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 0.15vw; }
|
|
2348
2914
|
|
|
2349
|
-
/*
|
|
2915
|
+
/* SVG pose overlay */
|
|
2916
|
+
.ps-tryon-pose-svg {
|
|
2917
|
+
position: absolute; inset: 0; width: 100%; height: 100%;
|
|
2918
|
+
pointer-events: none; z-index: 2;
|
|
2919
|
+
}
|
|
2350
2920
|
|
|
2351
|
-
/*
|
|
2352
|
-
.ps-tryon-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
position: relative; min-width: 2.6vw; height: 2.4vw; padding: 0 0.73vw;
|
|
2356
|
-
display: flex; align-items: center; justify-content: center;
|
|
2357
|
-
border: 1.5px solid #333; border-radius: 0.52vw; background: transparent;
|
|
2358
|
-
color: #999; font-size: 0.83vw; font-weight: 600; cursor: pointer;
|
|
2359
|
-
transition: all 0.2s; font-family: inherit;
|
|
2921
|
+
/* Dotted curved line — draws in smoothly */
|
|
2922
|
+
.ps-tryon-pose-line {
|
|
2923
|
+
stroke-dashoffset: 80;
|
|
2924
|
+
animation: ps-pose-draw 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
2360
2925
|
}
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2926
|
+
|
|
2927
|
+
/* HTML pill labels — positioned absolutely on the image */
|
|
2928
|
+
.ps-tryon-pose-pill {
|
|
2929
|
+
position: absolute; z-index: 3; transform: translateY(-50%);
|
|
2930
|
+
display: flex; align-items: center; gap: 0.4vw;
|
|
2931
|
+
background: rgba(15,15,15,0.85); backdrop-filter: blur(6px);
|
|
2932
|
+
border-radius: 0.5vw; padding: 0.35vw 0.6vw;
|
|
2933
|
+
opacity: 0;
|
|
2934
|
+
animation: ps-pose-pill-in 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
2935
|
+
}
|
|
2936
|
+
.ps-tryon-pose-pill-dot {
|
|
2937
|
+
width: 0.5vw; height: 0.5vw; border-radius: 50%; flex-shrink: 0;
|
|
2938
|
+
}
|
|
2939
|
+
.ps-tryon-pose-pill-text { display: flex; flex-direction: column; gap: 0.05vw; }
|
|
2940
|
+
.ps-tryon-pose-pill-name {
|
|
2941
|
+
font-size: 0.75vw; font-weight: 700; color: #fff; line-height: 1.2;
|
|
2942
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
2943
|
+
}
|
|
2944
|
+
.ps-tryon-pose-pill-fit {
|
|
2945
|
+
font-size: 0.6vw; font-weight: 600; line-height: 1.2;
|
|
2946
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
2365
2947
|
}
|
|
2366
|
-
|
|
2948
|
+
|
|
2949
|
+
@keyframes ps-pose-draw {
|
|
2950
|
+
from { stroke-dashoffset: 80; opacity: 0; }
|
|
2951
|
+
10% { opacity: 1; }
|
|
2952
|
+
to { stroke-dashoffset: 0; opacity: 1; }
|
|
2953
|
+
}
|
|
2954
|
+
@keyframes ps-pose-pill-in {
|
|
2955
|
+
from { opacity: 0; transform: translateX(-2px); }
|
|
2956
|
+
to { opacity: 1; transform: translateX(0); }
|
|
2957
|
+
}
|
|
2958
|
+
.ps-tryon-sr-cta {
|
|
2959
|
+
width: 100%; padding: 0.8vw; background: #111; color: #fff; border: 1.5px solid #333;
|
|
2960
|
+
border-radius: 0.6vw; font-size: 0.85vw; font-weight: 700; cursor: pointer;
|
|
2961
|
+
font-family: inherit; transition: all 0.2s; margin-top: auto;
|
|
2962
|
+
}
|
|
2963
|
+
.ps-tryon-sr-cta:hover { background: #1a1a1a; border-color: #bb945c; }
|
|
2964
|
+
|
|
2965
|
+
/* Size chip recommended dot */
|
|
2966
|
+
.ps-tryon-sr-chip { position: relative; }
|
|
2367
2967
|
.ps-tryon-sr-rec-dot {
|
|
2368
|
-
position: absolute; bottom: -0.
|
|
2369
|
-
width: 0.
|
|
2968
|
+
position: absolute; bottom: -0.3vw; left: 50%; transform: translateX(-50%);
|
|
2969
|
+
width: 0.25vw; height: 0.25vw; border-radius: 50%; background: #bb945c;
|
|
2370
2970
|
}
|
|
2371
|
-
.ps-tryon-sr-
|
|
2372
|
-
.ps-tryon-sr-
|
|
2373
|
-
.ps-tryon-sr-comparing strong { color: #d6ba7d; }
|
|
2971
|
+
.ps-tryon-sr-chip.ps-active .ps-tryon-sr-rec-dot { background: #fff; }
|
|
2972
|
+
.ps-tryon-sr-chip.ps-recommended { border-color: rgba(187,148,92,0.4); }
|
|
2374
2973
|
|
|
2375
|
-
/*
|
|
2376
|
-
.ps-tryon-
|
|
2377
|
-
|
|
2378
|
-
|
|
2974
|
+
/* ── Full Size Chart Overlay ── */
|
|
2975
|
+
.ps-tryon-fc-overlay {
|
|
2976
|
+
position: absolute; inset: 0; z-index: 10;
|
|
2977
|
+
background: #111211;
|
|
2978
|
+
display: flex; flex-direction: column;
|
|
2979
|
+
animation: ps-fade-in 0.2s ease;
|
|
2980
|
+
}
|
|
2981
|
+
@keyframes ps-fade-in { from { opacity: 0; } to { opacity: 1; } }
|
|
2982
|
+
.ps-tryon-fc-panel {
|
|
2983
|
+
background: #111211;
|
|
2984
|
+
width: 100%; height: 100%; overflow: hidden;
|
|
2985
|
+
display: flex; flex-direction: column;
|
|
2379
2986
|
}
|
|
2380
|
-
.ps-tryon-
|
|
2381
|
-
.ps-tryon-sr-meas.ps-fit-tight { border-left: 3px solid #f59e0b; }
|
|
2382
|
-
.ps-tryon-sr-meas.ps-fit-loose { border-left: 3px solid #60a5fa; }
|
|
2383
|
-
.ps-tryon-sr-meas-head {
|
|
2987
|
+
.ps-tryon-fc-header {
|
|
2384
2988
|
display: flex; align-items: center; justify-content: space-between;
|
|
2385
|
-
padding: 0.
|
|
2386
|
-
}
|
|
2387
|
-
.ps-tryon-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
.ps-tryon-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
.ps-tryon-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
.ps-tryon-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
.ps-tryon-
|
|
2410
|
-
.ps-tryon-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
.ps-tryon-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
.ps-tryon-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
.ps-tryon-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
}
|
|
2433
|
-
.ps-tryon-
|
|
2989
|
+
padding: 0.8vw 1.2vw; border-bottom: 1px solid #282828;
|
|
2990
|
+
}
|
|
2991
|
+
.ps-tryon-fc-title {
|
|
2992
|
+
font-size: 0.8vw; font-weight: 700; color: #fff;
|
|
2993
|
+
letter-spacing: 0.12em; margin: 0;
|
|
2994
|
+
}
|
|
2995
|
+
.ps-tryon-fc-close {
|
|
2996
|
+
background: none; border: none; color: #666; font-size: 1.4vw;
|
|
2997
|
+
cursor: pointer; line-height: 1; padding: 0; transition: color 0.2s;
|
|
2998
|
+
}
|
|
2999
|
+
.ps-tryon-fc-close:hover { color: #fff; }
|
|
3000
|
+
|
|
3001
|
+
/* Your measurements bar */
|
|
3002
|
+
.ps-tryon-fc-measures {
|
|
3003
|
+
padding: 0.7vw 1.2vw; background: #1a1a1a; border-bottom: 1px solid #282828;
|
|
3004
|
+
}
|
|
3005
|
+
.ps-tryon-fc-measures-label {
|
|
3006
|
+
display: flex; align-items: center; gap: 0.5vw;
|
|
3007
|
+
font-size: 0.6vw; font-weight: 700; color: #888;
|
|
3008
|
+
letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 0.4vw;
|
|
3009
|
+
}
|
|
3010
|
+
.ps-tryon-fc-measures-vals {
|
|
3011
|
+
display: flex; gap: 1.5vw;
|
|
3012
|
+
}
|
|
3013
|
+
.ps-tryon-fc-measures-val { font-size: 0.9vw; color: #ccc; }
|
|
3014
|
+
.ps-tryon-fc-measures-val strong { font-weight: 700; color: #fff; margin-right: 0.15vw; }
|
|
3015
|
+
.ps-tryon-fc-measures-val span { font-size: 0.65vw; color: #666; }
|
|
3016
|
+
|
|
3017
|
+
/* Full table */
|
|
3018
|
+
.ps-tryon-fc-table-wrap {
|
|
3019
|
+
flex: 1; overflow: auto; padding: 0.5vw 1.2vw 1.2vw;
|
|
3020
|
+
}
|
|
3021
|
+
.ps-tryon-fc-table {
|
|
3022
|
+
width: 100%; border-collapse: collapse; font-size: 0.75vw;
|
|
3023
|
+
}
|
|
3024
|
+
.ps-tryon-fc-table th {
|
|
3025
|
+
text-align: center; padding: 0.5vw 0.6vw;
|
|
3026
|
+
font-size: 0.6vw; font-weight: 700; color: #666;
|
|
3027
|
+
text-transform: uppercase; letter-spacing: 0.06em;
|
|
3028
|
+
border-bottom: 1.5px solid #333;
|
|
3029
|
+
}
|
|
3030
|
+
.ps-tryon-fc-table th:first-child { text-align: left; }
|
|
3031
|
+
.ps-tryon-fc-table td {
|
|
3032
|
+
text-align: center; padding: 0.45vw 0.6vw;
|
|
3033
|
+
color: #999; border-bottom: 1px solid #1e1e1e;
|
|
3034
|
+
}
|
|
3035
|
+
.ps-tryon-fc-table td:first-child { text-align: left; font-weight: 600; color: #ccc; }
|
|
3036
|
+
.ps-tryon-fc-rec-row td { color: #fff; font-weight: 600; background: rgba(187,148,92,0.05); }
|
|
3037
|
+
.ps-tryon-fc-rec-pill {
|
|
3038
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
3039
|
+
background: #fff; color: #111; padding: 0.15vw 0.5vw;
|
|
3040
|
+
border-radius: 1vw; font-weight: 800; font-size: 0.7vw;
|
|
3041
|
+
}
|
|
3042
|
+
|
|
3043
|
+
.ps-conf-high { color: #4ade80; } .ps-conf-medium { color: #bb945c; } .ps-conf-low { color: #ef4444; }
|
|
2434
3044
|
.ps-tryon-size-compact { padding: 0.5vw 0; }
|
|
2435
3045
|
.ps-tryon-size-compact-label { font-size: 0.78vw; color: #999; font-weight: 500; }
|
|
2436
3046
|
|