@primestyleai/tryon 5.8.31 → 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.
@@ -14398,44 +14398,179 @@ const STYLES$1 = `
14398
14398
  color: var(--ps-text-muted);
14399
14399
  }
14400
14400
 
14401
- /* ── Image path — single combined screen, vw-scaled ── */
14402
- .ps-cpw-image-combined {
14403
- display: flex; flex-direction: column; align-items: stretch;
14404
- gap: clamp(8px, 0.7vw, 14px);
14401
+ /* ── Image path — split layout with dropzone + photo guide ──
14402
+ Two columns: dropzone with silhouette placeholder on the LEFT,
14403
+ gender pills + name input + photo-guide checklist on the RIGHT.
14404
+ Collapses to single column on narrow viewports via flex-wrap. */
14405
+ .ps-cpw-image-split {
14406
+ display: grid;
14407
+ grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
14408
+ gap: clamp(14px, 1.2vw, 26px);
14405
14409
  flex: 1; min-height: 0;
14406
14410
  width: 100%; box-sizing: border-box;
14407
14411
  }
14408
- .ps-cpw-photo-dropzone {
14409
- display: flex; flex-direction: column; align-items: center; justify-content: center;
14410
- gap: clamp(4px, 0.4vw, 10px);
14412
+ .ps-cpw-image-left {
14413
+ display: flex; flex-direction: column;
14414
+ min-width: 0; min-height: 0;
14415
+ }
14416
+ .ps-cpw-image-right {
14417
+ display: flex; flex-direction: column;
14418
+ gap: clamp(10px, 0.9vw, 18px);
14419
+ min-width: 0; min-height: 0;
14420
+ }
14421
+
14422
+ /* Dropzone — premium card with a faded body silhouette behind the
14423
+ upload prompt. Communicates "this is where the body photo goes". */
14424
+ .ps-cpw-dropzone {
14425
+ position: relative;
14426
+ display: flex; align-items: center; justify-content: center;
14411
14427
  flex: 1; min-height: 0;
14412
14428
  width: 100%; box-sizing: border-box;
14413
- padding: clamp(10px, 0.9vw, 18px);
14414
- border: 2px dashed var(--ps-border-color);
14415
- border-radius: clamp(8px, 0.6vw, 14px);
14416
- background: var(--ps-bg-secondary);
14429
+ padding: clamp(14px, 1.2vw, 26px);
14430
+ border: 1.5px dashed var(--ps-border-color);
14431
+ border-radius: clamp(10px, 0.75vw, 16px);
14432
+ background:
14433
+ radial-gradient(ellipse at 50% 60%, rgba(33, 84, 239, 0.05) 0%, transparent 70%),
14434
+ var(--ps-bg-secondary);
14417
14435
  color: var(--ps-text-muted);
14418
14436
  cursor: pointer; font-family: inherit;
14419
- transition: border-color 0.18s, background 0.18s;
14437
+ overflow: hidden;
14438
+ transition: border-color 0.22s, background 0.22s, transform 0.22s;
14439
+ }
14440
+ .ps-cpw-dropzone:hover {
14441
+ border-color: var(--ps-accent);
14442
+ transform: translateY(-1px);
14443
+ }
14444
+ .ps-cpw-dropzone:disabled { opacity: 0.6; cursor: default; transform: none; }
14445
+ /* Faded body silhouette behind the upload prompt */
14446
+ .ps-cpw-dropzone-silhouette {
14447
+ position: absolute;
14448
+ left: 50%; top: 50%;
14449
+ transform: translate(-50%, -50%);
14450
+ width: clamp(60px, 7vw, 130px);
14451
+ height: auto;
14452
+ color: var(--ps-accent);
14453
+ opacity: 0.08;
14454
+ pointer-events: none;
14455
+ }
14456
+ .ps-cpw-dropzone-content {
14457
+ position: relative;
14458
+ z-index: 1;
14459
+ display: flex; flex-direction: column; align-items: center;
14460
+ gap: clamp(4px, 0.4vw, 10px);
14461
+ }
14462
+ .ps-cpw-dropzone-upload-icon {
14463
+ width: clamp(28px, 2vw, 40px);
14464
+ height: clamp(28px, 2vw, 40px);
14465
+ color: var(--ps-accent);
14466
+ margin-bottom: clamp(2px, 0.2vw, 6px);
14420
14467
  }
14421
- .ps-cpw-photo-dropzone:hover { border-color: var(--ps-accent); background: rgba(33, 84, 239, 0.04); }
14422
- .ps-cpw-photo-dropzone:disabled { opacity: 0.6; cursor: default; }
14423
- .ps-cpw-photo-dropzone-title {
14468
+ .ps-cpw-dropzone-title {
14424
14469
  font-size: clamp(11px, 0.78vw, 14px);
14425
- font-weight: 600; color: var(--ps-text-primary);
14470
+ font-weight: 600;
14471
+ color: var(--ps-text-primary);
14472
+ text-align: center;
14426
14473
  }
14427
- .ps-cpw-photo-dropzone-hint {
14474
+ .ps-cpw-dropzone-hint {
14428
14475
  font-size: clamp(9px, 0.62vw, 12px);
14429
14476
  color: var(--ps-text-muted);
14477
+ letter-spacing: 0.04em;
14430
14478
  }
14431
- .ps-cpw-photo-frame {
14479
+
14480
+ /* Photo preview frame (after upload) */
14481
+ .ps-cpw-photo-preview-frame {
14432
14482
  position: relative;
14433
14483
  flex: 1; min-height: 0;
14434
14484
  width: 100%;
14435
14485
  background: var(--ps-bg-secondary);
14436
- border-radius: clamp(8px, 0.6vw, 14px);
14486
+ border-radius: clamp(10px, 0.75vw, 16px);
14437
14487
  overflow: hidden;
14438
14488
  border: 1px solid var(--ps-border-subtle);
14489
+ display: flex; align-items: center; justify-content: center;
14490
+ }
14491
+ .ps-cpw-photo-preview-img {
14492
+ width: 100%; height: 100%;
14493
+ object-fit: contain;
14494
+ display: block;
14495
+ }
14496
+ .ps-cpw-photo-retake-pill {
14497
+ position: absolute;
14498
+ bottom: clamp(8px, 0.7vw, 14px);
14499
+ left: 50%;
14500
+ transform: translateX(-50%);
14501
+ background: rgba(255,255,255,0.95);
14502
+ border: 1px solid var(--ps-border-subtle);
14503
+ color: var(--ps-text-primary);
14504
+ padding: clamp(6px, 0.55vw, 12px) clamp(12px, 1vw, 20px);
14505
+ border-radius: 999px;
14506
+ font-family: inherit;
14507
+ font-size: clamp(10px, 0.7vw, 13px);
14508
+ font-weight: 600;
14509
+ cursor: pointer;
14510
+ backdrop-filter: blur(6px);
14511
+ transition: background 0.22s, color 0.22s;
14512
+ }
14513
+ .ps-cpw-photo-retake-pill:hover {
14514
+ background: var(--ps-accent);
14515
+ color: #FFFFFF;
14516
+ border-color: var(--ps-accent);
14517
+ }
14518
+ .ps-cpw-photo-remove {
14519
+ position: absolute;
14520
+ top: clamp(8px, 0.7vw, 14px);
14521
+ right: clamp(8px, 0.7vw, 14px);
14522
+ width: clamp(24px, 1.8vw, 34px);
14523
+ height: clamp(24px, 1.8vw, 34px);
14524
+ border-radius: 50%;
14525
+ background: rgba(28, 29, 30, 0.7);
14526
+ color: #FFFFFF;
14527
+ border: none;
14528
+ cursor: pointer;
14529
+ font-size: clamp(14px, 1.1vw, 18px);
14530
+ font-weight: 600;
14531
+ display: flex; align-items: center; justify-content: center;
14532
+ backdrop-filter: blur(6px);
14533
+ transition: background 0.18s;
14534
+ }
14535
+ .ps-cpw-photo-remove:hover { background: rgba(28, 29, 30, 0.9); }
14536
+
14537
+ /* Photo guide checklist — soft tinted card on the right column */
14538
+ .ps-cpw-photo-guide {
14539
+ background: var(--ps-bg-secondary);
14540
+ border: 1px solid var(--ps-border-subtle);
14541
+ border-radius: clamp(10px, 0.75vw, 16px);
14542
+ padding: clamp(12px, 1vw, 20px) clamp(14px, 1.1vw, 22px);
14543
+ display: flex; flex-direction: column;
14544
+ gap: clamp(6px, 0.55vw, 12px);
14545
+ margin-top: auto;
14546
+ }
14547
+ .ps-cpw-photo-guide-title {
14548
+ font-size: clamp(9px, 0.62vw, 11px);
14549
+ font-weight: 700;
14550
+ letter-spacing: 0.14em;
14551
+ text-transform: uppercase;
14552
+ color: var(--ps-text-primary);
14553
+ }
14554
+ .ps-cpw-photo-guide-list {
14555
+ list-style: none;
14556
+ margin: 0;
14557
+ padding: 0;
14558
+ display: flex; flex-direction: column;
14559
+ gap: clamp(4px, 0.4vw, 10px);
14560
+ }
14561
+ .ps-cpw-photo-guide-list li {
14562
+ display: flex; align-items: flex-start;
14563
+ gap: clamp(6px, 0.55vw, 12px);
14564
+ font-size: clamp(10px, 0.72vw, 13px);
14565
+ line-height: 1.45;
14566
+ color: var(--ps-text-secondary);
14567
+ }
14568
+ .ps-cpw-photo-guide-list li svg {
14569
+ flex-shrink: 0;
14570
+ width: clamp(12px, 0.9vw, 16px);
14571
+ height: clamp(12px, 0.9vw, 16px);
14572
+ color: var(--ps-accent);
14573
+ margin-top: 0.15em;
14439
14574
  }
14440
14575
  .ps-cpw-photo-frame-img {
14441
14576
  width: 100%; height: 100%;
@@ -14468,101 +14603,141 @@ const STYLES$1 = `
14468
14603
  }
14469
14604
 
14470
14605
  /* ════════════════════════════════════════════════════════════════
14471
- ProfileMeasurementsView (.ps-pmv-*) — full profile detail with
14472
- 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.
14473
14611
  ════════════════════════════════════════════════════════════════ */
14474
14612
  .ps-pmv-root {
14475
- display: flex; flex-direction: column; gap: 24px;
14476
- 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);
14477
14616
  }
14617
+
14618
+ /* Hero — name + eyebrow only, no avatar */
14478
14619
  .ps-pmv-hero {
14479
- display: flex; align-items: center; gap: 18px;
14480
- padding-bottom: 18px;
14620
+ display: flex; flex-direction: column;
14621
+ gap: clamp(4px, 0.35vw, 10px);
14622
+ padding-bottom: clamp(10px, 0.95vw, 20px);
14481
14623
  border-bottom: 1px solid var(--ps-border-subtle);
14482
14624
  }
14483
- .ps-pmv-hero-avatar {
14484
- width: 76px; height: 76px;
14485
- border-radius: 50%;
14486
- background: var(--ps-bg-secondary);
14487
- border: 2px solid var(--ps-accent);
14488
- color: var(--ps-accent);
14489
- display: flex; align-items: center; justify-content: center;
14490
- overflow: hidden; flex-shrink: 0;
14491
- }
14492
- .ps-pmv-hero-avatar img {
14493
- width: 100%; height: 100%; object-fit: cover;
14494
- /* Bias the crop toward the top of the photo so the head/face shows
14495
- through the circular avatar instead of the torso. Works for any
14496
- full-body or head-and-torso photo where the head is in the upper
14497
- portion of the frame. */
14498
- object-position: 50% 12%;
14499
- }
14500
- .ps-pmv-hero-info { flex: 1; min-width: 0; }
14501
14625
  .ps-pmv-hero-eyebrow {
14502
- font-size: 10px; font-weight: 700;
14503
- 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;
14504
14628
  color: var(--ps-accent);
14505
- margin-bottom: 6px;
14506
14629
  }
14507
14630
  .ps-pmv-hero-name {
14508
- font-size: 28px; font-weight: 700;
14631
+ font-size: clamp(18px, 1.5vw, 32px); font-weight: 700;
14509
14632
  color: var(--ps-text-primary);
14510
14633
  margin: 0;
14511
14634
  letter-spacing: -0.01em;
14635
+ line-height: 1.1;
14512
14636
  }
14513
14637
 
14514
- /* Basics rowheight / weight / age stats */
14515
- .ps-pmv-basics {
14638
+ /* Two-column splitdiagram on left, data on right */
14639
+ .ps-pmv-split {
14516
14640
  display: grid;
14517
- grid-template-columns: repeat(3, 1fr);
14518
- gap: 14px;
14641
+ grid-template-columns: minmax(0, 0.42fr) minmax(0, 1fr);
14642
+ gap: clamp(16px, 1.6vw, 36px);
14643
+ align-items: start;
14519
14644
  }
14520
- .ps-pmv-basic {
14521
- background: var(--ps-bg-secondary);
14522
- border: 1px solid var(--ps-border-subtle);
14523
- border-radius: 10px;
14524
- padding: 16px 18px;
14525
- 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);
14677
+ }
14678
+ .ps-pmv-basic-row {
14679
+ display: flex; align-items: center;
14680
+ gap: clamp(8px, 0.7vw, 16px);
14526
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%; }
14527
14690
  .ps-pmv-basic-label {
14528
- font-size: 10px; font-weight: 700;
14529
- 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;
14530
14696
  color: var(--ps-text-muted);
14531
14697
  }
14532
14698
  .ps-pmv-basic-value {
14533
- font-size: 22px; font-weight: 700;
14699
+ font-size: clamp(13px, 0.95vw, 18px);
14700
+ font-weight: 700;
14534
14701
  color: var(--ps-text-primary);
14535
14702
  font-feature-settings: "tnum" 1;
14703
+ text-align: right;
14536
14704
  }
14537
14705
 
14538
- /* Section blocks */
14706
+ /* Section blocks (BODY MEASUREMENTS) */
14539
14707
  .ps-pmv-section {
14540
- display: flex; flex-direction: column; gap: 14px;
14708
+ display: flex; flex-direction: column;
14709
+ gap: clamp(8px, 0.7vw, 16px);
14541
14710
  }
14542
14711
  .ps-pmv-section-head {
14543
- display: flex; flex-direction: column; gap: 4px;
14712
+ display: flex; flex-direction: column; gap: clamp(2px, 0.2vw, 6px);
14544
14713
  }
14545
14714
  .ps-pmv-section-title {
14546
- font-size: 12px; font-weight: 700;
14547
- 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;
14548
14719
  color: var(--ps-text-primary);
14549
14720
  }
14550
14721
  .ps-pmv-section-title-row {
14551
14722
  display: flex; align-items: center; justify-content: space-between;
14552
- gap: 12px;
14723
+ gap: clamp(8px, 0.7vw, 14px);
14553
14724
  }
14554
14725
  .ps-pmv-loading-pill {
14555
- display: inline-flex; align-items: center; gap: 8px;
14556
- 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);
14557
14729
  background: rgba(33, 84, 239, 0.08);
14558
14730
  color: var(--ps-accent);
14559
14731
  border-radius: 999px;
14560
- font-size: 10px; font-weight: 700;
14561
- 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;
14562
14736
  }
14563
14737
  .ps-pmv-loading-spinner {
14564
- width: 12px; height: 12px;
14565
- 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);
14566
14741
  border-top-color: var(--ps-accent);
14567
14742
  border-radius: 50%;
14568
14743
  animation: ps-pmv-spin 0.8s linear infinite;
@@ -14570,141 +14745,111 @@ const STYLES$1 = `
14570
14745
  @keyframes ps-pmv-spin {
14571
14746
  to { transform: rotate(360deg); }
14572
14747
  }
14573
- .ps-pmv-section-sub {
14574
- font-size: 12px; font-weight: 400;
14575
- color: var(--ps-text-muted);
14576
- }
14577
14748
 
14578
- /* Body measurements grid */
14579
- .ps-pmv-measure-grid {
14580
- display: grid;
14581
- grid-template-columns: repeat(4, 1fr);
14582
- gap: 10px;
14749
+ /* Body measurements list — single column, icon + label + value rows */
14750
+ .ps-pmv-measure-list {
14751
+ display: flex; flex-direction: column;
14583
14752
  }
14584
- .ps-pmv-measure {
14585
- background: var(--ps-bg-primary);
14586
- border: 1px solid var(--ps-border-subtle);
14587
- border-radius: 10px;
14588
- padding: 12px 14px;
14589
- 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);
14590
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%; }
14591
14768
  .ps-pmv-measure-label {
14592
- font-size: 9px; font-weight: 700;
14593
- 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;
14594
14774
  color: var(--ps-text-muted);
14595
14775
  }
14596
14776
  .ps-pmv-measure-value {
14597
- font-size: 18px; font-weight: 700;
14777
+ font-size: clamp(12px, 0.85vw, 16px);
14778
+ font-weight: 700;
14598
14779
  color: var(--ps-text-primary);
14599
14780
  font-feature-settings: "tnum" 1;
14781
+ text-align: right;
14600
14782
  }
14601
14783
  .ps-pmv-measure-value.ps-loading {
14602
14784
  color: var(--ps-border-color);
14603
14785
  animation: ps-pmv-shimmer 1.4s ease-in-out infinite;
14604
14786
  }
14605
- .ps-pmv-measure.ps-loading {
14606
- background: linear-gradient(
14607
- 90deg,
14608
- var(--ps-bg-primary) 0%,
14609
- var(--ps-bg-secondary) 50%,
14610
- var(--ps-bg-primary) 100%
14611
- );
14612
- background-size: 200% 100%;
14613
- 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;
14614
14790
  }
14615
14791
  @keyframes ps-pmv-shimmer {
14616
14792
  0%, 100% { opacity: 0.5; }
14617
14793
  50% { opacity: 1; }
14618
14794
  }
14619
- @keyframes ps-pmv-skeleton {
14620
- 0% { background-position: 200% 0; }
14621
- 100% { background-position: -200% 0; }
14622
- }
14623
14795
 
14624
14796
  /* Inline measurement edit inputs */
14625
- .ps-pmv-measure.ps-editing {
14626
- border-color: var(--ps-accent);
14797
+ .ps-pmv-measure-row.ps-editing {
14627
14798
  background: rgba(33, 84, 239, 0.04);
14628
14799
  }
14629
14800
  .ps-pmv-measure-edit {
14630
- display: flex; align-items: baseline; gap: 4px;
14801
+ display: flex; align-items: baseline;
14802
+ gap: clamp(2px, 0.2vw, 6px);
14631
14803
  }
14632
14804
  .ps-pmv-measure-input {
14633
- flex: 1; min-width: 0;
14634
- 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;
14635
14810
  font-family: inherit;
14636
- font-size: 18px; font-weight: 700;
14811
+ font-size: clamp(12px, 0.85vw, 16px);
14812
+ font-weight: 700;
14637
14813
  color: var(--ps-text-primary);
14638
- padding: 0;
14814
+ padding: clamp(2px, 0.15vw, 4px) 0;
14815
+ text-align: right;
14639
14816
  font-feature-settings: "tnum" 1;
14640
14817
  }
14818
+ .ps-pmv-measure-input:focus {
14819
+ border-bottom-color: var(--ps-accent);
14820
+ }
14641
14821
  .ps-pmv-measure-input::-webkit-outer-spin-button,
14642
14822
  .ps-pmv-measure-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
14643
14823
  .ps-pmv-measure-input[type="number"] { -moz-appearance: textfield; }
14644
14824
  .ps-pmv-measure-input-unit {
14645
- font-size: 11px; color: var(--ps-text-muted); font-weight: 500;
14646
- }
14647
-
14648
- /* Saved sizes history (per-product cache) — kept for backwards compat,
14649
- no longer rendered inside ProfileMeasurementsView */
14650
- .ps-pmv-history {
14651
- display: flex; flex-direction: column; gap: 8px;
14652
- }
14653
- .ps-pmv-history-card {
14654
- display: flex; align-items: center; gap: 12px;
14655
- padding: 12px;
14656
- background: var(--ps-bg-primary);
14657
- border: 1px solid var(--ps-border-subtle);
14658
- border-radius: 10px;
14659
- }
14660
- .ps-pmv-history-thumb {
14661
- width: 44px; height: 44px;
14662
- border-radius: 6px; overflow: hidden;
14663
- background: var(--ps-bg-secondary);
14664
- flex-shrink: 0;
14665
- display: flex; align-items: center; justify-content: center;
14666
- }
14667
- .ps-pmv-history-thumb img {
14668
- max-width: 100%; max-height: 100%; object-fit: contain;
14669
- }
14670
- .ps-pmv-history-info {
14671
- flex: 1; min-width: 0;
14672
- display: flex; flex-direction: column; gap: 2px;
14673
- }
14674
- .ps-pmv-history-name {
14675
- font-size: 13px; font-weight: 600;
14676
- color: var(--ps-text-primary);
14677
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
14678
- }
14679
- .ps-pmv-history-meta {
14680
- font-size: 10px;
14825
+ font-size: clamp(8px, 0.55vw, 11px);
14681
14826
  color: var(--ps-text-muted);
14682
- }
14683
- .ps-pmv-history-size {
14684
- font-size: 22px; font-weight: 700;
14685
- color: var(--ps-accent);
14686
- font-feature-settings: "tnum" 1;
14827
+ font-weight: 500;
14687
14828
  }
14688
14829
 
14689
14830
  /* Actions */
14690
14831
  .ps-pmv-actions {
14691
14832
  display: flex; align-items: center; justify-content: space-between;
14692
- gap: 12px;
14693
- padding-top: 18px;
14833
+ gap: clamp(8px, 0.7vw, 14px);
14834
+ padding-top: clamp(12px, 1vw, 22px);
14694
14835
  border-top: 1px solid var(--ps-border-subtle);
14695
- margin-top: 4px;
14836
+ margin-top: clamp(2px, 0.2vw, 6px);
14696
14837
  }
14697
14838
  .ps-pmv-actions-right {
14698
- display: flex; align-items: center; gap: 8px;
14839
+ display: flex; align-items: center;
14840
+ gap: clamp(6px, 0.5vw, 12px);
14699
14841
  }
14700
14842
  .ps-pmv-btn-secondary,
14701
14843
  .ps-pmv-btn-edit,
14702
14844
  .ps-pmv-btn-delete {
14703
- background: none; border: 1px solid var(--ps-border-color);
14704
- border-radius: 6px;
14705
- padding: 10px 16px;
14706
- font-family: inherit; font-size: 11px; font-weight: 600;
14707
- 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;
14708
14853
  color: var(--ps-text-secondary);
14709
14854
  cursor: pointer;
14710
14855
  transition: border-color 0.15s, color 0.15s;
@@ -14720,14 +14865,19 @@ const STYLES$1 = `
14720
14865
  }
14721
14866
  .ps-pmv-btn-primary {
14722
14867
  background: var(--ps-accent); color: #FFFFFF;
14723
- border: none; border-radius: 6px;
14724
- padding: 11px 18px;
14725
- font-family: inherit; font-size: 11px; font-weight: 700;
14726
- 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;
14727
14876
  cursor: pointer;
14728
14877
  transition: opacity 0.15s, transform 0.15s, background 0.2s;
14729
- box-shadow: 0 4px 14px rgba(33, 84, 239, 0.18);
14730
- 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);
14731
14881
  justify-content: center;
14732
14882
  }
14733
14883
  .ps-pmv-btn-primary:hover:not(:disabled) { opacity: 0.92; }
@@ -14739,22 +14889,14 @@ const STYLES$1 = `
14739
14889
  opacity: 0.65;
14740
14890
  }
14741
14891
  .ps-pmv-btn-spinner {
14742
- width: 12px; height: 12px;
14743
- 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);
14744
14895
  border-top-color: #FFFFFF;
14745
14896
  border-radius: 50%;
14746
14897
  animation: ps-pmv-spin 0.8s linear infinite;
14747
14898
  }
14748
14899
 
14749
- @media (max-width: 768px) {
14750
- .ps-pmv-hero { flex-direction: column; align-items: flex-start; gap: 12px; }
14751
- .ps-pmv-hero-name { font-size: 22px; }
14752
- .ps-pmv-basics { grid-template-columns: 1fr; }
14753
- .ps-pmv-measure-grid { grid-template-columns: repeat(2, 1fr); }
14754
- .ps-pmv-actions { flex-direction: column; align-items: stretch; gap: 10px; }
14755
- .ps-pmv-actions-right { flex-wrap: wrap; }
14756
- }
14757
-
14758
14900
  /* Big product / try-on image */
14759
14901
  .ps-msd-image {
14760
14902
  width: 100%; height: 420px;
@@ -18637,27 +18779,7 @@ function CreateProfileWizard({ onSave, onCancel, t: t2 }) {
18637
18779
  ] })
18638
18780
  ] }, "bra"),
18639
18781
  mode === "manual" && error && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-error", children: error }),
18640
- mode === "image" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-image-combined ps-cpw-fade-in", children: [
18641
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-pill-row", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-pill-group", children: [
18642
- /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: `ps-cpw-pill${gender === "male" ? " ps-active" : ""}`, onClick: () => setGender("male"), children: t2("Male") }),
18643
- /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: `ps-cpw-pill${gender === "female" ? " ps-active" : ""}`, onClick: () => setGender("female"), children: t2("Female") })
18644
- ] }) }),
18645
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-bp-inline-fields ps-cpw-inline-fields", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-bp-inline-row", children: [
18646
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-bp-inline-label", children: t2("NAME") }),
18647
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-bp-inline-input-group", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
18648
- "input",
18649
- {
18650
- type: "text",
18651
- className: "ps-bp-inline-input",
18652
- value: name,
18653
- placeholder: t2("e.g. My Photo Profile"),
18654
- onChange: (e) => {
18655
- setName(e.target.value);
18656
- setError("");
18657
- }
18658
- }
18659
- ) })
18660
- ] }) }),
18782
+ mode === "image" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-image-split ps-cpw-fade-in", children: [
18661
18783
  /* @__PURE__ */ jsxRuntimeExports.jsx(
18662
18784
  "input",
18663
18785
  {
@@ -18668,8 +18790,8 @@ function CreateProfileWizard({ onSave, onCancel, t: t2 }) {
18668
18790
  onChange: handlePhotoSelect
18669
18791
  }
18670
18792
  ),
18671
- photoBase64 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-photo-frame", children: [
18672
- /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: photoBase64, alt: t2("Profile photo"), className: "ps-cpw-photo-frame-img" }),
18793
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-image-left", children: photoBase64 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-photo-preview-frame", children: [
18794
+ /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: photoBase64, alt: t2("Profile photo"), className: "ps-cpw-photo-preview-img" }),
18673
18795
  /* @__PURE__ */ jsxRuntimeExports.jsx(
18674
18796
  "button",
18675
18797
  {
@@ -18679,26 +18801,84 @@ function CreateProfileWizard({ onSave, onCancel, t: t2 }) {
18679
18801
  "aria-label": t2("Remove photo"),
18680
18802
  children: "×"
18681
18803
  }
18804
+ ),
18805
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
18806
+ "button",
18807
+ {
18808
+ type: "button",
18809
+ className: "ps-cpw-photo-retake-pill",
18810
+ onClick: () => photoInputRef.current?.click(),
18811
+ children: t2("Retake")
18812
+ }
18682
18813
  )
18683
18814
  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(
18684
18815
  "button",
18685
18816
  {
18686
18817
  type: "button",
18687
- className: "ps-cpw-photo-dropzone",
18818
+ className: "ps-cpw-dropzone",
18688
18819
  onClick: () => photoInputRef.current?.click(),
18689
18820
  disabled: photoUploading,
18690
18821
  children: [
18691
- /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", width: "36", height: "36", children: [
18692
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
18693
- /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }),
18694
- /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
18822
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "ps-cpw-dropzone-silhouette", viewBox: "0 0 80 200", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18823
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "40", cy: "20", r: "13" }),
18824
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M40 35 L40 110 M22 60 L22 105 M58 60 L58 105 M22 60 Q40 50 58 60 M40 110 L25 195 M40 110 L55 195" })
18695
18825
  ] }),
18696
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-cpw-photo-dropzone-title", children: photoUploading ? t2("Processing...") : t2("Tap to upload a photo") }),
18697
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-cpw-photo-dropzone-hint", children: t2("JPEG / PNG / WebP up to 10MB") })
18826
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-dropzone-content", children: [
18827
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "ps-cpw-dropzone-upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
18828
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
18829
+ /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }),
18830
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
18831
+ ] }),
18832
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-cpw-dropzone-title", children: photoUploading ? t2("Processing…") : t2("Drop a photo or click to upload") }),
18833
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-cpw-dropzone-hint", children: t2("JPEG · PNG · WebP · up to 10MB") })
18834
+ ] })
18698
18835
  ]
18699
18836
  }
18700
- ),
18701
- error && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-error", children: error })
18837
+ ) }),
18838
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-image-right", children: [
18839
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-pill-row", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-pill-group", children: [
18840
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: `ps-cpw-pill${gender === "male" ? " ps-active" : ""}`, onClick: () => setGender("male"), children: t2("Male") }),
18841
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: `ps-cpw-pill${gender === "female" ? " ps-active" : ""}`, onClick: () => setGender("female"), children: t2("Female") })
18842
+ ] }) }),
18843
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-bp-inline-fields ps-cpw-inline-fields", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-bp-inline-row", children: [
18844
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-bp-inline-label", children: t2("NAME") }),
18845
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-bp-inline-input-group", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
18846
+ "input",
18847
+ {
18848
+ type: "text",
18849
+ className: "ps-bp-inline-input",
18850
+ value: name,
18851
+ placeholder: t2("e.g. My Photo Profile"),
18852
+ onChange: (e) => {
18853
+ setName(e.target.value);
18854
+ setError("");
18855
+ }
18856
+ }
18857
+ ) })
18858
+ ] }) }),
18859
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-photo-guide", children: [
18860
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-photo-guide-title", children: t2("HOW TO TAKE A GOOD PHOTO") }),
18861
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "ps-cpw-photo-guide-list", children: [
18862
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
18863
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 8 7 12 13 4" }) }),
18864
+ t2("Stand straight, arms relaxed at your sides")
18865
+ ] }),
18866
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
18867
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 8 7 12 13 4" }) }),
18868
+ t2("Full body in frame, head to toes")
18869
+ ] }),
18870
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
18871
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 8 7 12 13 4" }) }),
18872
+ t2("Form-fitting clothing, no loose layers")
18873
+ ] }),
18874
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
18875
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "3 8 7 12 13 4" }) }),
18876
+ t2("Plain background, neutral lighting")
18877
+ ] })
18878
+ ] })
18879
+ ] }),
18880
+ error && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-cpw-error", children: error })
18881
+ ] })
18702
18882
  ] }, "image-combined")
18703
18883
  ] }),
18704
18884
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-cpw-footer", children: [
@@ -18717,26 +18897,95 @@ function CreateProfileWizard({ onSave, onCancel, t: t2 }) {
18717
18897
  ] })
18718
18898
  ] });
18719
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
+ ] });
18720
18952
  const FIELDS_MEN = [
18721
- { key: "chest", label: "CHEST" },
18722
- { key: "waist", label: "WAIST" },
18723
- { key: "hips", label: "HIPS" },
18724
- { key: "shoulderWidth", label: "SHOULDER" },
18725
- { key: "sleeveLength", label: "SLEEVE" },
18726
- { key: "neckCircumference", label: "NECK" },
18727
- { key: "inseam", label: "INSEAM" },
18728
- { 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 }
18729
18961
  ];
18730
18962
  const FIELDS_WOMEN = [
18731
- { key: "bust", label: "BUST" },
18732
- { key: "waist", label: "WAIST" },
18733
- { key: "hips", label: "HIPS" },
18734
- { key: "shoulderWidth", label: "SHOULDER" },
18735
- { key: "sleeveLength", label: "SLEEVE" },
18736
- { key: "neckCircumference", label: "NECK" },
18737
- { key: "inseam", label: "INSEAM" },
18738
- { 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 }
18739
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
+ ] });
18740
18989
  function ProfileMeasurementsView({
18741
18990
  profile,
18742
18991
  isActive,
@@ -18796,60 +19045,64 @@ function ProfileMeasurementsView({
18796
19045
  const ageDisplay = profile.age ? `${profile.age}` : "—";
18797
19046
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-root", children: [
18798
19047
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-hero", children: [
18799
- /* @__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: [
18800
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
18801
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "4" })
18802
- ] }) }),
18803
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-hero-info", children: [
18804
- /* @__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") }),
18805
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "ps-pmv-hero-name", children: profile.name })
18806
- ] })
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 })
18807
19050
  ] }),
18808
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basics", children: [
18809
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18810
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("HEIGHT") }),
18811
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-value", children: heightDisplay })
18812
- ] }),
18813
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18814
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("WEIGHT") }),
18815
- /* @__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") })
18816
19055
  ] }),
18817
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-basic", children: [
18818
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-label", children: t2("AGE") }),
18819
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-basic-value", children: ageDisplay })
18820
- ] })
18821
- ] }),
18822
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section", children: [
18823
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section-head", children: [
18824
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-section-title-row", children: [
18825
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-section-title", children: t2("BODY MEASUREMENTS") }),
18826
- !hasMeasurements && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-loading-pill", children: [
18827
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-loading-spinner" }),
18828
- /* @__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 })
18829
19072
  ] })
18830
19073
  ] }),
18831
- /* @__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.") })
18832
- ] }),
18833
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-measure-grid", children: fields.map((f2) => {
18834
- const v2 = measurements[f2.key];
18835
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `ps-pmv-measure${v2 == null && !editing ? " ps-loading" : ""}${editing ? " ps-editing" : ""}`, children: [
18836
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ps-pmv-measure-label", children: t2(f2.label) }),
18837
- editing ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-measure-edit", children: [
18838
- /* @__PURE__ */ jsxRuntimeExports.jsx(
18839
- "input",
18840
- {
18841
- type: "number",
18842
- inputMode: "decimal",
18843
- className: "ps-pmv-measure-input",
18844
- value: draft[f2.key] ?? "",
18845
- placeholder: "",
18846
- onChange: (e) => handleDraftChange(f2.key, e.target.value)
18847
- }
18848
- ),
18849
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ps-pmv-measure-input-unit", children: unit })
18850
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `ps-pmv-measure-value${v2 == null ? " ps-loading" : ""}`, children: v2 != null ? `${Math.round(v2 * 10) / 10} ${unit}` : "—" })
18851
- ] }, f2.key);
18852
- }) })
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
+ ] })
18853
19106
  ] }),
18854
19107
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ps-pmv-actions", children: [
18855
19108
  /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: "ps-pmv-btn-secondary", onClick: editing ? handleEditCancel : onBack, children: editing ? t2("Cancel") : t2("Back") }),