@primestyleai/tryon 5.8.32 → 5.8.33

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.
@@ -14603,101 +14603,141 @@ const STYLES$1 = `
14603
14603
  }
14604
14604
 
14605
14605
  /* ════════════════════════════════════════════════════════════════
14606
- ProfileMeasurementsView (.ps-pmv-*) — full profile detail with
14607
- all body measurements, basics, saved sizes history, and actions.
14606
+ ProfileMeasurementsView (.ps-pmv-*) — minimal monoline-icon
14607
+ redesign. Two-column body: silhouette diagram on the left,
14608
+ basics + measurements list (each with an inline line-art icon)
14609
+ on the right. No avatar, no card boxes — just typography, icons
14610
+ and a body diagram, all vw/clamp scaled.
14608
14611
  ════════════════════════════════════════════════════════════════ */
14609
14612
  .ps-pmv-root {
14610
- display: flex; flex-direction: column; gap: 24px;
14611
- padding: 4px 4px 24px;
14613
+ display: flex; flex-direction: column;
14614
+ gap: clamp(14px, 1.3vw, 28px);
14615
+ padding: clamp(2px, 0.25vw, 6px) clamp(2px, 0.25vw, 6px) clamp(14px, 1.3vw, 28px);
14612
14616
  }
14617
+
14618
+ /* Hero — name + eyebrow only, no avatar */
14613
14619
  .ps-pmv-hero {
14614
- display: flex; align-items: center; gap: 18px;
14615
- padding-bottom: 18px;
14620
+ display: flex; flex-direction: column;
14621
+ gap: clamp(4px, 0.35vw, 10px);
14622
+ padding-bottom: clamp(10px, 0.95vw, 20px);
14616
14623
  border-bottom: 1px solid var(--ps-border-subtle);
14617
14624
  }
14618
- .ps-pmv-hero-avatar {
14619
- width: 76px; height: 76px;
14620
- border-radius: 50%;
14621
- background: var(--ps-bg-secondary);
14622
- border: 2px solid var(--ps-accent);
14623
- color: var(--ps-accent);
14624
- display: flex; align-items: center; justify-content: center;
14625
- overflow: hidden; flex-shrink: 0;
14626
- }
14627
- .ps-pmv-hero-avatar img {
14628
- width: 100%; height: 100%; object-fit: cover;
14629
- /* Bias the crop toward the top of the photo so the head/face shows
14630
- through the circular avatar instead of the torso. Works for any
14631
- full-body or head-and-torso photo where the head is in the upper
14632
- portion of the frame. */
14633
- object-position: 50% 12%;
14634
- }
14635
- .ps-pmv-hero-info { flex: 1; min-width: 0; }
14636
14625
  .ps-pmv-hero-eyebrow {
14637
- font-size: 10px; font-weight: 700;
14638
- letter-spacing: 0.16em; text-transform: uppercase;
14626
+ font-size: clamp(9px, 0.6vw, 12px); font-weight: 700;
14627
+ letter-spacing: 0.18em; text-transform: uppercase;
14639
14628
  color: var(--ps-accent);
14640
- margin-bottom: 6px;
14641
14629
  }
14642
14630
  .ps-pmv-hero-name {
14643
- font-size: 28px; font-weight: 700;
14631
+ font-size: clamp(18px, 1.5vw, 32px); font-weight: 700;
14644
14632
  color: var(--ps-text-primary);
14645
14633
  margin: 0;
14646
14634
  letter-spacing: -0.01em;
14635
+ line-height: 1.1;
14647
14636
  }
14648
14637
 
14649
- /* Basics rowheight / weight / age stats */
14650
- .ps-pmv-basics {
14638
+ /* Two-column splitdiagram on left, data on right */
14639
+ .ps-pmv-split {
14651
14640
  display: grid;
14652
- grid-template-columns: repeat(3, 1fr);
14653
- gap: 14px;
14641
+ grid-template-columns: minmax(0, 0.42fr) minmax(0, 1fr);
14642
+ gap: clamp(16px, 1.6vw, 36px);
14643
+ align-items: start;
14654
14644
  }
14655
- .ps-pmv-basic {
14656
- background: var(--ps-bg-secondary);
14657
- border: 1px solid var(--ps-border-subtle);
14658
- border-radius: 10px;
14659
- padding: 16px 18px;
14660
- display: flex; flex-direction: column; gap: 4px;
14645
+ .ps-pmv-diagram {
14646
+ display: flex; flex-direction: column; align-items: center;
14647
+ gap: clamp(6px, 0.5vw, 12px);
14648
+ padding: clamp(8px, 0.8vw, 18px) 0;
14649
+ color: var(--ps-text-primary);
14650
+ }
14651
+ .ps-pmv-body-diagram-svg {
14652
+ width: 100%;
14653
+ max-width: clamp(110px, 9vw, 180px);
14654
+ height: auto;
14655
+ color: var(--ps-text-primary);
14656
+ opacity: 0.78;
14657
+ }
14658
+ .ps-pmv-diagram-caption {
14659
+ font-size: clamp(8px, 0.55vw, 11px);
14660
+ font-weight: 600;
14661
+ letter-spacing: 0.16em;
14662
+ text-transform: uppercase;
14663
+ color: var(--ps-text-muted);
14664
+ }
14665
+ .ps-pmv-data {
14666
+ display: flex; flex-direction: column;
14667
+ gap: clamp(14px, 1.2vw, 26px);
14668
+ min-width: 0;
14669
+ }
14670
+
14671
+ /* Basics list — height / weight / age, inline icon + label + value */
14672
+ .ps-pmv-basics {
14673
+ display: flex; flex-direction: column;
14674
+ gap: clamp(6px, 0.55vw, 14px);
14675
+ padding-bottom: clamp(10px, 0.9vw, 18px);
14676
+ border-bottom: 1px solid var(--ps-border-subtle);
14661
14677
  }
14678
+ .ps-pmv-basic-row {
14679
+ display: flex; align-items: center;
14680
+ gap: clamp(8px, 0.7vw, 16px);
14681
+ }
14682
+ .ps-pmv-basic-icon {
14683
+ flex-shrink: 0;
14684
+ width: clamp(14px, 1vw, 20px);
14685
+ height: clamp(14px, 1vw, 20px);
14686
+ color: var(--ps-text-muted);
14687
+ display: inline-flex; align-items: center; justify-content: center;
14688
+ }
14689
+ .ps-pmv-basic-icon svg { width: 100%; height: 100%; }
14662
14690
  .ps-pmv-basic-label {
14663
- font-size: 10px; font-weight: 700;
14664
- letter-spacing: 0.14em; text-transform: uppercase;
14691
+ flex: 1; min-width: 0;
14692
+ font-size: clamp(9px, 0.65vw, 12px);
14693
+ font-weight: 700;
14694
+ letter-spacing: 0.14em;
14695
+ text-transform: uppercase;
14665
14696
  color: var(--ps-text-muted);
14666
14697
  }
14667
14698
  .ps-pmv-basic-value {
14668
- font-size: 22px; font-weight: 700;
14699
+ font-size: clamp(13px, 0.95vw, 18px);
14700
+ font-weight: 700;
14669
14701
  color: var(--ps-text-primary);
14670
14702
  font-feature-settings: "tnum" 1;
14703
+ text-align: right;
14671
14704
  }
14672
14705
 
14673
- /* Section blocks */
14706
+ /* Section blocks (BODY MEASUREMENTS) */
14674
14707
  .ps-pmv-section {
14675
- display: flex; flex-direction: column; gap: 14px;
14708
+ display: flex; flex-direction: column;
14709
+ gap: clamp(8px, 0.7vw, 16px);
14676
14710
  }
14677
14711
  .ps-pmv-section-head {
14678
- display: flex; flex-direction: column; gap: 4px;
14712
+ display: flex; flex-direction: column; gap: clamp(2px, 0.2vw, 6px);
14679
14713
  }
14680
14714
  .ps-pmv-section-title {
14681
- font-size: 12px; font-weight: 700;
14682
- letter-spacing: 0.14em; text-transform: uppercase;
14715
+ font-size: clamp(9px, 0.65vw, 12px);
14716
+ font-weight: 700;
14717
+ letter-spacing: 0.16em;
14718
+ text-transform: uppercase;
14683
14719
  color: var(--ps-text-primary);
14684
14720
  }
14685
14721
  .ps-pmv-section-title-row {
14686
14722
  display: flex; align-items: center; justify-content: space-between;
14687
- gap: 12px;
14723
+ gap: clamp(8px, 0.7vw, 14px);
14688
14724
  }
14689
14725
  .ps-pmv-loading-pill {
14690
- display: inline-flex; align-items: center; gap: 8px;
14691
- padding: 6px 12px;
14726
+ display: inline-flex; align-items: center;
14727
+ gap: clamp(4px, 0.4vw, 10px);
14728
+ padding: clamp(3px, 0.3vw, 7px) clamp(7px, 0.6vw, 14px);
14692
14729
  background: rgba(33, 84, 239, 0.08);
14693
14730
  color: var(--ps-accent);
14694
14731
  border-radius: 999px;
14695
- font-size: 10px; font-weight: 700;
14696
- letter-spacing: 0.1em; text-transform: uppercase;
14732
+ font-size: clamp(8px, 0.55vw, 11px);
14733
+ font-weight: 700;
14734
+ letter-spacing: 0.12em;
14735
+ text-transform: uppercase;
14697
14736
  }
14698
14737
  .ps-pmv-loading-spinner {
14699
- width: 12px; height: 12px;
14700
- border: 2px solid rgba(33, 84, 239, 0.25);
14738
+ width: clamp(8px, 0.65vw, 14px);
14739
+ height: clamp(8px, 0.65vw, 14px);
14740
+ border: 1.5px solid rgba(33, 84, 239, 0.25);
14701
14741
  border-top-color: var(--ps-accent);
14702
14742
  border-radius: 50%;
14703
14743
  animation: ps-pmv-spin 0.8s linear infinite;
@@ -14705,141 +14745,111 @@ const STYLES$1 = `
14705
14745
  @keyframes ps-pmv-spin {
14706
14746
  to { transform: rotate(360deg); }
14707
14747
  }
14708
- .ps-pmv-section-sub {
14709
- font-size: 12px; font-weight: 400;
14710
- color: var(--ps-text-muted);
14711
- }
14712
14748
 
14713
- /* Body measurements grid */
14714
- .ps-pmv-measure-grid {
14715
- display: grid;
14716
- grid-template-columns: repeat(4, 1fr);
14717
- gap: 10px;
14749
+ /* Body measurements list — single column, icon + label + value rows */
14750
+ .ps-pmv-measure-list {
14751
+ display: flex; flex-direction: column;
14718
14752
  }
14719
- .ps-pmv-measure {
14720
- background: var(--ps-bg-primary);
14721
- border: 1px solid var(--ps-border-subtle);
14722
- border-radius: 10px;
14723
- padding: 12px 14px;
14724
- display: flex; flex-direction: column; gap: 4px;
14753
+ .ps-pmv-measure-row {
14754
+ display: flex; align-items: center;
14755
+ gap: clamp(8px, 0.7vw, 16px);
14756
+ padding: clamp(8px, 0.7vw, 14px) 0;
14757
+ border-bottom: 1px solid var(--ps-border-subtle);
14725
14758
  }
14759
+ .ps-pmv-measure-row:last-child { border-bottom: none; }
14760
+ .ps-pmv-measure-icon {
14761
+ flex-shrink: 0;
14762
+ width: clamp(14px, 1vw, 20px);
14763
+ height: clamp(14px, 1vw, 20px);
14764
+ color: var(--ps-text-muted);
14765
+ display: inline-flex; align-items: center; justify-content: center;
14766
+ }
14767
+ .ps-pmv-measure-icon svg { width: 100%; height: 100%; }
14726
14768
  .ps-pmv-measure-label {
14727
- font-size: 9px; font-weight: 700;
14728
- letter-spacing: 0.12em; text-transform: uppercase;
14769
+ flex: 1; min-width: 0;
14770
+ font-size: clamp(9px, 0.65vw, 12px);
14771
+ font-weight: 700;
14772
+ letter-spacing: 0.14em;
14773
+ text-transform: uppercase;
14729
14774
  color: var(--ps-text-muted);
14730
14775
  }
14731
14776
  .ps-pmv-measure-value {
14732
- font-size: 18px; font-weight: 700;
14777
+ font-size: clamp(12px, 0.85vw, 16px);
14778
+ font-weight: 700;
14733
14779
  color: var(--ps-text-primary);
14734
14780
  font-feature-settings: "tnum" 1;
14781
+ text-align: right;
14735
14782
  }
14736
14783
  .ps-pmv-measure-value.ps-loading {
14737
14784
  color: var(--ps-border-color);
14738
14785
  animation: ps-pmv-shimmer 1.4s ease-in-out infinite;
14739
14786
  }
14740
- .ps-pmv-measure.ps-loading {
14741
- background: linear-gradient(
14742
- 90deg,
14743
- var(--ps-bg-primary) 0%,
14744
- var(--ps-bg-secondary) 50%,
14745
- var(--ps-bg-primary) 100%
14746
- );
14747
- background-size: 200% 100%;
14748
- animation: ps-pmv-skeleton 1.6s ease-in-out infinite;
14787
+ .ps-pmv-measure-row.ps-loading .ps-pmv-measure-icon,
14788
+ .ps-pmv-measure-row.ps-loading .ps-pmv-measure-label {
14789
+ opacity: 0.55;
14749
14790
  }
14750
14791
  @keyframes ps-pmv-shimmer {
14751
14792
  0%, 100% { opacity: 0.5; }
14752
14793
  50% { opacity: 1; }
14753
14794
  }
14754
- @keyframes ps-pmv-skeleton {
14755
- 0% { background-position: 200% 0; }
14756
- 100% { background-position: -200% 0; }
14757
- }
14758
14795
 
14759
14796
  /* Inline measurement edit inputs */
14760
- .ps-pmv-measure.ps-editing {
14761
- border-color: var(--ps-accent);
14797
+ .ps-pmv-measure-row.ps-editing {
14762
14798
  background: rgba(33, 84, 239, 0.04);
14763
14799
  }
14764
14800
  .ps-pmv-measure-edit {
14765
- display: flex; align-items: baseline; gap: 4px;
14801
+ display: flex; align-items: baseline;
14802
+ gap: clamp(2px, 0.2vw, 6px);
14766
14803
  }
14767
14804
  .ps-pmv-measure-input {
14768
- flex: 1; min-width: 0;
14769
- background: transparent; border: none; outline: none;
14805
+ width: clamp(40px, 3vw, 70px);
14806
+ background: transparent;
14807
+ border: none;
14808
+ border-bottom: 1px solid var(--ps-border-color);
14809
+ outline: none;
14770
14810
  font-family: inherit;
14771
- font-size: 18px; font-weight: 700;
14811
+ font-size: clamp(12px, 0.85vw, 16px);
14812
+ font-weight: 700;
14772
14813
  color: var(--ps-text-primary);
14773
- padding: 0;
14814
+ padding: clamp(2px, 0.15vw, 4px) 0;
14815
+ text-align: right;
14774
14816
  font-feature-settings: "tnum" 1;
14775
14817
  }
14818
+ .ps-pmv-measure-input:focus {
14819
+ border-bottom-color: var(--ps-accent);
14820
+ }
14776
14821
  .ps-pmv-measure-input::-webkit-outer-spin-button,
14777
14822
  .ps-pmv-measure-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
14778
14823
  .ps-pmv-measure-input[type="number"] { -moz-appearance: textfield; }
14779
14824
  .ps-pmv-measure-input-unit {
14780
- font-size: 11px; color: var(--ps-text-muted); font-weight: 500;
14781
- }
14782
-
14783
- /* Saved sizes history (per-product cache) — kept for backwards compat,
14784
- no longer rendered inside ProfileMeasurementsView */
14785
- .ps-pmv-history {
14786
- display: flex; flex-direction: column; gap: 8px;
14787
- }
14788
- .ps-pmv-history-card {
14789
- display: flex; align-items: center; gap: 12px;
14790
- padding: 12px;
14791
- background: var(--ps-bg-primary);
14792
- border: 1px solid var(--ps-border-subtle);
14793
- border-radius: 10px;
14794
- }
14795
- .ps-pmv-history-thumb {
14796
- width: 44px; height: 44px;
14797
- border-radius: 6px; overflow: hidden;
14798
- background: var(--ps-bg-secondary);
14799
- flex-shrink: 0;
14800
- display: flex; align-items: center; justify-content: center;
14801
- }
14802
- .ps-pmv-history-thumb img {
14803
- max-width: 100%; max-height: 100%; object-fit: contain;
14804
- }
14805
- .ps-pmv-history-info {
14806
- flex: 1; min-width: 0;
14807
- display: flex; flex-direction: column; gap: 2px;
14808
- }
14809
- .ps-pmv-history-name {
14810
- font-size: 13px; font-weight: 600;
14811
- color: var(--ps-text-primary);
14812
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
14813
- }
14814
- .ps-pmv-history-meta {
14815
- font-size: 10px;
14825
+ font-size: clamp(8px, 0.55vw, 11px);
14816
14826
  color: var(--ps-text-muted);
14817
- }
14818
- .ps-pmv-history-size {
14819
- font-size: 22px; font-weight: 700;
14820
- color: var(--ps-accent);
14821
- font-feature-settings: "tnum" 1;
14827
+ font-weight: 500;
14822
14828
  }
14823
14829
 
14824
14830
  /* Actions */
14825
14831
  .ps-pmv-actions {
14826
14832
  display: flex; align-items: center; justify-content: space-between;
14827
- gap: 12px;
14828
- padding-top: 18px;
14833
+ gap: clamp(8px, 0.7vw, 14px);
14834
+ padding-top: clamp(12px, 1vw, 22px);
14829
14835
  border-top: 1px solid var(--ps-border-subtle);
14830
- margin-top: 4px;
14836
+ margin-top: clamp(2px, 0.2vw, 6px);
14831
14837
  }
14832
14838
  .ps-pmv-actions-right {
14833
- display: flex; align-items: center; gap: 8px;
14839
+ display: flex; align-items: center;
14840
+ gap: clamp(6px, 0.5vw, 12px);
14834
14841
  }
14835
14842
  .ps-pmv-btn-secondary,
14836
14843
  .ps-pmv-btn-edit,
14837
14844
  .ps-pmv-btn-delete {
14838
- background: none; border: 1px solid var(--ps-border-color);
14839
- border-radius: 6px;
14840
- padding: 10px 16px;
14841
- font-family: inherit; font-size: 11px; font-weight: 600;
14842
- letter-spacing: 0.06em;
14845
+ background: none;
14846
+ border: 1px solid var(--ps-border-color);
14847
+ border-radius: clamp(4px, 0.35vw, 8px);
14848
+ padding: clamp(6px, 0.55vw, 12px) clamp(10px, 0.9vw, 20px);
14849
+ font-family: inherit;
14850
+ font-size: clamp(9px, 0.65vw, 12px);
14851
+ font-weight: 600;
14852
+ letter-spacing: 0.08em;
14843
14853
  color: var(--ps-text-secondary);
14844
14854
  cursor: pointer;
14845
14855
  transition: border-color 0.15s, color 0.15s;
@@ -14855,14 +14865,19 @@ const STYLES$1 = `
14855
14865
  }
14856
14866
  .ps-pmv-btn-primary {
14857
14867
  background: var(--ps-accent); color: #FFFFFF;
14858
- border: none; border-radius: 6px;
14859
- padding: 11px 18px;
14860
- font-family: inherit; font-size: 11px; font-weight: 700;
14861
- letter-spacing: 0.12em; text-transform: uppercase;
14868
+ border: none;
14869
+ border-radius: clamp(4px, 0.35vw, 8px);
14870
+ padding: clamp(7px, 0.65vw, 14px) clamp(12px, 1vw, 22px);
14871
+ font-family: inherit;
14872
+ font-size: clamp(9px, 0.65vw, 12px);
14873
+ font-weight: 700;
14874
+ letter-spacing: 0.14em;
14875
+ text-transform: uppercase;
14862
14876
  cursor: pointer;
14863
14877
  transition: opacity 0.15s, transform 0.15s, background 0.2s;
14864
- box-shadow: 0 4px 14px rgba(33, 84, 239, 0.18);
14865
- display: inline-flex; align-items: center; gap: 8px;
14878
+ box-shadow: 0 0.3vw 1vw rgba(33, 84, 239, 0.18);
14879
+ display: inline-flex; align-items: center;
14880
+ gap: clamp(4px, 0.4vw, 10px);
14866
14881
  justify-content: center;
14867
14882
  }
14868
14883
  .ps-pmv-btn-primary:hover:not(:disabled) { opacity: 0.92; }
@@ -14874,22 +14889,14 @@ const STYLES$1 = `
14874
14889
  opacity: 0.65;
14875
14890
  }
14876
14891
  .ps-pmv-btn-spinner {
14877
- width: 12px; height: 12px;
14878
- border: 2px solid rgba(255, 255, 255, 0.35);
14892
+ width: clamp(8px, 0.65vw, 14px);
14893
+ height: clamp(8px, 0.65vw, 14px);
14894
+ border: 1.5px solid rgba(255, 255, 255, 0.35);
14879
14895
  border-top-color: #FFFFFF;
14880
14896
  border-radius: 50%;
14881
14897
  animation: ps-pmv-spin 0.8s linear infinite;
14882
14898
  }
14883
14899
 
14884
- @media (max-width: 768px) {
14885
- .ps-pmv-hero { flex-direction: column; align-items: flex-start; gap: 12px; }
14886
- .ps-pmv-hero-name { font-size: 22px; }
14887
- .ps-pmv-basics { grid-template-columns: 1fr; }
14888
- .ps-pmv-measure-grid { grid-template-columns: repeat(2, 1fr); }
14889
- .ps-pmv-actions { flex-direction: column; align-items: stretch; gap: 10px; }
14890
- .ps-pmv-actions-right { flex-wrap: wrap; }
14891
- }
14892
-
14893
14900
  /* Big product / try-on image */
14894
14901
  .ps-msd-image {
14895
14902
  width: 100%; height: 420px;
@@ -18890,26 +18897,95 @@ function CreateProfileWizard({ onSave, onCancel, t: t2 }) {
18890
18897
  ] })
18891
18898
  ] });
18892
18899
  }
18900
+ const HeightIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18901
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "21" }),
18902
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "7 6 12 3 17 6" }),
18903
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "7 18 12 21 17 18" })
18904
+ ] });
18905
+ const WeightIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18906
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 7h14l-1.5 12a2 2 0 0 1-2 2h-9a2 2 0 0 1-2-2L5 7z" }),
18907
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M9 7a3 3 0 0 1 6 0" }),
18908
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "11", x2: "12", y2: "15" })
18909
+ ] });
18910
+ const AgeIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18911
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "9" }),
18912
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "12 7 12 12 15 14" })
18913
+ ] });
18914
+ const ChestIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M4 8 L8 5 L16 5 L20 8 L20 13 L17 11 L17 17 L7 17 L7 11 L4 13 Z" }) });
18915
+ const BustIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18916
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 9 Q12 3 19 9" }),
18917
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "9", cy: "13", r: "2.5" }),
18918
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "15", cy: "13", r: "2.5" })
18919
+ ] });
18920
+ const WaistIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18921
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 4 Q10 4 10 9 Q10 12 6 14" }),
18922
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18 4 Q14 4 14 9 Q14 12 18 14" }),
18923
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 14 Q10 16 10 20" }),
18924
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18 14 Q14 16 14 20" })
18925
+ ] });
18926
+ const HipsIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18927
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M7 4 Q10 4 10 9 Q10 11 9 13" }),
18928
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M17 4 Q14 4 14 9 Q14 11 15 13" }),
18929
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 14 Q12 22 19 14" })
18930
+ ] });
18931
+ const ShoulderIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18932
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "6", r: "2.5" }),
18933
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M4 13 Q8 9 12 9 Q16 9 20 13" }),
18934
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "4", y1: "15", x2: "20", y2: "15" })
18935
+ ] });
18936
+ const SleeveIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M4 6 L8 4 L12 6 L11 11 L9 21 L5 21 L5 11 Z" }) });
18937
+ const NeckIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18938
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "6", r: "3" }),
18939
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M9 9 L9 13 Q9 15 12 15 Q15 15 15 13 L15 9" }),
18940
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M5 17 Q12 19 19 17" })
18941
+ ] });
18942
+ const InseamIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18943
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "21" }),
18944
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "9", y1: "3", x2: "15", y2: "3" }),
18945
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "9", y1: "21", x2: "15", y2: "21" })
18946
+ ] });
18947
+ const ThighIcon = () => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18948
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M8 4 Q10 8 10 14 L9 21" }),
18949
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M16 4 Q14 8 14 14 L15 21" }),
18950
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ellipse", { cx: "12", cy: "11", rx: "6", ry: "2" })
18951
+ ] });
18893
18952
  const FIELDS_MEN = [
18894
- { key: "chest", label: "CHEST" },
18895
- { key: "waist", label: "WAIST" },
18896
- { key: "hips", label: "HIPS" },
18897
- { key: "shoulderWidth", label: "SHOULDER" },
18898
- { key: "sleeveLength", label: "SLEEVE" },
18899
- { key: "neckCircumference", label: "NECK" },
18900
- { key: "inseam", label: "INSEAM" },
18901
- { key: "thighCircumference", label: "THIGH" }
18953
+ { key: "chest", label: "CHEST", Icon: ChestIcon },
18954
+ { key: "waist", label: "WAIST", Icon: WaistIcon },
18955
+ { key: "hips", label: "HIPS", Icon: HipsIcon },
18956
+ { key: "shoulderWidth", label: "SHOULDER", Icon: ShoulderIcon },
18957
+ { key: "sleeveLength", label: "SLEEVE", Icon: SleeveIcon },
18958
+ { key: "neckCircumference", label: "NECK", Icon: NeckIcon },
18959
+ { key: "inseam", label: "INSEAM", Icon: InseamIcon },
18960
+ { key: "thighCircumference", label: "THIGH", Icon: ThighIcon }
18902
18961
  ];
18903
18962
  const FIELDS_WOMEN = [
18904
- { key: "bust", label: "BUST" },
18905
- { key: "waist", label: "WAIST" },
18906
- { key: "hips", label: "HIPS" },
18907
- { key: "shoulderWidth", label: "SHOULDER" },
18908
- { key: "sleeveLength", label: "SLEEVE" },
18909
- { key: "neckCircumference", label: "NECK" },
18910
- { key: "inseam", label: "INSEAM" },
18911
- { key: "thighCircumference", label: "THIGH" }
18963
+ { key: "bust", label: "BUST", Icon: BustIcon },
18964
+ { key: "waist", label: "WAIST", Icon: WaistIcon },
18965
+ { key: "hips", label: "HIPS", Icon: HipsIcon },
18966
+ { key: "shoulderWidth", label: "SHOULDER", Icon: ShoulderIcon },
18967
+ { key: "sleeveLength", label: "SLEEVE", Icon: SleeveIcon },
18968
+ { key: "neckCircumference", label: "NECK", Icon: NeckIcon },
18969
+ { key: "inseam", label: "INSEAM", Icon: InseamIcon },
18970
+ { key: "thighCircumference", label: "THIGH", Icon: ThighIcon }
18912
18971
  ];
18972
+ const BodyDiagram = ({ female }) => /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 120 320", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: "ps-pmv-body-diagram-svg", "aria-hidden": "true", children: [
18973
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "60", cy: "28", r: "18" }),
18974
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "60", y1: "46", x2: "60", y2: "58" }),
18975
+ female ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
18976
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 70 Q35 65 60 65 Q85 65 90 70" }),
18977
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M30 70 Q26 110 32 145 Q40 165 60 168 Q80 165 88 145 Q94 110 90 70" })
18978
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
18979
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M22 72 Q32 62 60 62 Q88 62 98 72" }),
18980
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M22 72 Q24 110 32 145 Q42 162 60 165 Q78 162 88 145 Q96 110 98 72" })
18981
+ ] }),
18982
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M22 72 Q12 130 18 175" }),
18983
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M98 72 Q108 130 102 175" }),
18984
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 168 L36 295" }),
18985
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M80 168 L84 295" }),
18986
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "30", y1: "295", x2: "42", y2: "295" }),
18987
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "78", y1: "295", x2: "90", y2: "295" })
18988
+ ] });
18913
18989
  function ProfileMeasurementsView({
18914
18990
  profile,
18915
18991
  isActive,
@@ -18969,60 +19045,64 @@ function ProfileMeasurementsView({
18969
19045
  const ageDisplay = profile.age ? `${profile.age}` : "—";
18970
19046
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-root", children: [
18971
19047
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-hero", children: [
18972
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-hero-avatar", children: profile.photoBase64 ? /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: profile.photoBase64, alt: profile.name }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", width: "32", height: "32", children: [
18973
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
18974
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "4" })
18975
- ] }) }),
18976
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-hero-info", children: [
18977
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-hero-eyebrow", children: isActive ? t2("ACTIVE PROFILE") : profile.gender === "female" ? t2("WOMEN'S FIT") : t2("MEN'S FIT") }),
18978
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "ps-pmv-hero-name", children: profile.name })
18979
- ] })
19048
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-hero-eyebrow", children: isActive ? t2("ACTIVE PROFILE") : profile.gender === "female" ? t2("WOMEN'S FIT") : t2("MEN'S FIT") }),
19049
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "ps-pmv-hero-name", children: profile.name })
18980
19050
  ] }),
18981
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basics", children: [
18982
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18983
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("HEIGHT") }),
18984
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-value", children: heightDisplay })
18985
- ] }),
18986
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18987
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("WEIGHT") }),
18988
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-value", children: weightDisplay })
19051
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-split", children: [
19052
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-diagram", children: [
19053
+ /* @__PURE__ */ jsxRuntimeExports.jsx(BodyDiagram, { female: profile.gender === "female" }),
19054
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-diagram-caption", children: t2("Reference figure") })
18989
19055
  ] }),
18990
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18991
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("AGE") }),
18992
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-value", children: ageDisplay })
18993
- ] })
18994
- ] }),
18995
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section", children: [
18996
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section-head", children: [
18997
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section-title-row", children: [
18998
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-section-title", children: t2("BODY MEASUREMENTS") }),
18999
- !hasMeasurements && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-loading-pill", children: [
19000
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-loading-spinner" }),
19001
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t2("Calculating...") })
19056
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-data", children: [
19057
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basics", children: [
19058
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic-row", children: [
19059
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(HeightIcon, {}) }),
19060
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-label", children: t2("HEIGHT") }),
19061
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-value", children: heightDisplay })
19062
+ ] }),
19063
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic-row", children: [
19064
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(WeightIcon, {}) }),
19065
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-label", children: t2("WEIGHT") }),
19066
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-value", children: weightDisplay })
19067
+ ] }),
19068
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic-row", children: [
19069
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(AgeIcon, {}) }),
19070
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-label", children: t2("AGE") }),
19071
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-basic-value", children: ageDisplay })
19002
19072
  ] })
19003
19073
  ] }),
19004
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-section-sub", children: hasMeasurements ? editing ? t2("Tap any value to edit. Save when you're done.") : t2("Calculated from your basics. Used to recommend the perfect size for any product.") : t2("Our AI is computing your full body proportions — this usually takes a few seconds.") })
19005
- ] }),
19006
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-measure-grid", children: fields.map((f2) => {
19007
- const v2 = measurements[f2.key];
19008
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ps-pmv-measure${v2 == null && !editing ? " ps-loading" : ""}${editing ? " ps-editing" : ""}`, children: [
19009
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-measure-label", children: t2(f2.label) }),
19010
- editing ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-measure-edit", children: [
19011
- /* @__PURE__ */ jsxRuntimeExports.jsx(
19012
- "input",
19013
- {
19014
- type: "number",
19015
- inputMode: "decimal",
19016
- className: "ps-pmv-measure-input",
19017
- value: draft[f2.key] ?? "",
19018
- placeholder: "",
19019
- onChange: (e) => handleDraftChange(f2.key, e.target.value)
19020
- }
19021
- ),
19022
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-measure-input-unit", children: unit })
19023
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `ps-pmv-measure-value${v2 == null ? " ps-loading" : ""}`, children: v2 != null ? `${Math.round(v2 * 10) / 10} ${unit}` : "—" })
19024
- ] }, f2.key);
19025
- }) })
19074
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section", children: [
19075
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-section-head", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section-title-row", children: [
19076
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-section-title", children: t2("BODY MEASUREMENTS") }),
19077
+ !hasMeasurements && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-loading-pill", children: [
19078
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-loading-spinner" }),
19079
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t2("Calculating...") })
19080
+ ] })
19081
+ ] }) }),
19082
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-measure-list", children: fields.map((f2) => {
19083
+ const v2 = measurements[f2.key];
19084
+ const Icon = f2.Icon;
19085
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ps-pmv-measure-row${v2 == null && !editing ? " ps-loading" : ""}${editing ? " ps-editing" : ""}`, children: [
19086
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-measure-icon", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, {}) }),
19087
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-measure-label", children: t2(f2.label) }),
19088
+ editing ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-measure-edit", children: [
19089
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
19090
+ "input",
19091
+ {
19092
+ type: "number",
19093
+ inputMode: "decimal",
19094
+ className: "ps-pmv-measure-input",
19095
+ value: draft[f2.key] ?? "",
19096
+ placeholder: "—",
19097
+ onChange: (e) => handleDraftChange(f2.key, e.target.value)
19098
+ }
19099
+ ),
19100
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-measure-input-unit", children: unit })
19101
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `ps-pmv-measure-value${v2 == null ? " ps-loading" : ""}`, children: v2 != null ? `${Math.round(v2 * 10) / 10} ${unit}` : "—" })
19102
+ ] }, f2.key);
19103
+ }) })
19104
+ ] })
19105
+ ] })
19026
19106
  ] }),
19027
19107
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-actions", children: [
19028
19108
  /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: "ps-pmv-btn-secondary", onClick: editing ? handleEditCancel : onBack, children: editing ? t2("Cancel") : t2("Back") }),