@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.
@@ -4974,44 +4974,179 @@ const STYLES = `
4974
4974
  color: var(--ps-text-muted);
4975
4975
  }
4976
4976
 
4977
- /* ── Image path — single combined screen, vw-scaled ── */
4978
- .ps-cpw-image-combined {
4979
- display: flex; flex-direction: column; align-items: stretch;
4980
- gap: clamp(8px, 0.7vw, 14px);
4977
+ /* ── Image path — split layout with dropzone + photo guide ──
4978
+ Two columns: dropzone with silhouette placeholder on the LEFT,
4979
+ gender pills + name input + photo-guide checklist on the RIGHT.
4980
+ Collapses to single column on narrow viewports via flex-wrap. */
4981
+ .ps-cpw-image-split {
4982
+ display: grid;
4983
+ grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
4984
+ gap: clamp(14px, 1.2vw, 26px);
4981
4985
  flex: 1; min-height: 0;
4982
4986
  width: 100%; box-sizing: border-box;
4983
4987
  }
4984
- .ps-cpw-photo-dropzone {
4985
- display: flex; flex-direction: column; align-items: center; justify-content: center;
4986
- gap: clamp(4px, 0.4vw, 10px);
4988
+ .ps-cpw-image-left {
4989
+ display: flex; flex-direction: column;
4990
+ min-width: 0; min-height: 0;
4991
+ }
4992
+ .ps-cpw-image-right {
4993
+ display: flex; flex-direction: column;
4994
+ gap: clamp(10px, 0.9vw, 18px);
4995
+ min-width: 0; min-height: 0;
4996
+ }
4997
+
4998
+ /* Dropzone — premium card with a faded body silhouette behind the
4999
+ upload prompt. Communicates "this is where the body photo goes". */
5000
+ .ps-cpw-dropzone {
5001
+ position: relative;
5002
+ display: flex; align-items: center; justify-content: center;
4987
5003
  flex: 1; min-height: 0;
4988
5004
  width: 100%; box-sizing: border-box;
4989
- padding: clamp(10px, 0.9vw, 18px);
4990
- border: 2px dashed var(--ps-border-color);
4991
- border-radius: clamp(8px, 0.6vw, 14px);
4992
- background: var(--ps-bg-secondary);
5005
+ padding: clamp(14px, 1.2vw, 26px);
5006
+ border: 1.5px dashed var(--ps-border-color);
5007
+ border-radius: clamp(10px, 0.75vw, 16px);
5008
+ background:
5009
+ radial-gradient(ellipse at 50% 60%, rgba(33, 84, 239, 0.05) 0%, transparent 70%),
5010
+ var(--ps-bg-secondary);
4993
5011
  color: var(--ps-text-muted);
4994
5012
  cursor: pointer; font-family: inherit;
4995
- transition: border-color 0.18s, background 0.18s;
5013
+ overflow: hidden;
5014
+ transition: border-color 0.22s, background 0.22s, transform 0.22s;
5015
+ }
5016
+ .ps-cpw-dropzone:hover {
5017
+ border-color: var(--ps-accent);
5018
+ transform: translateY(-1px);
5019
+ }
5020
+ .ps-cpw-dropzone:disabled { opacity: 0.6; cursor: default; transform: none; }
5021
+ /* Faded body silhouette behind the upload prompt */
5022
+ .ps-cpw-dropzone-silhouette {
5023
+ position: absolute;
5024
+ left: 50%; top: 50%;
5025
+ transform: translate(-50%, -50%);
5026
+ width: clamp(60px, 7vw, 130px);
5027
+ height: auto;
5028
+ color: var(--ps-accent);
5029
+ opacity: 0.08;
5030
+ pointer-events: none;
5031
+ }
5032
+ .ps-cpw-dropzone-content {
5033
+ position: relative;
5034
+ z-index: 1;
5035
+ display: flex; flex-direction: column; align-items: center;
5036
+ gap: clamp(4px, 0.4vw, 10px);
5037
+ }
5038
+ .ps-cpw-dropzone-upload-icon {
5039
+ width: clamp(28px, 2vw, 40px);
5040
+ height: clamp(28px, 2vw, 40px);
5041
+ color: var(--ps-accent);
5042
+ margin-bottom: clamp(2px, 0.2vw, 6px);
4996
5043
  }
4997
- .ps-cpw-photo-dropzone:hover { border-color: var(--ps-accent); background: rgba(33, 84, 239, 0.04); }
4998
- .ps-cpw-photo-dropzone:disabled { opacity: 0.6; cursor: default; }
4999
- .ps-cpw-photo-dropzone-title {
5044
+ .ps-cpw-dropzone-title {
5000
5045
  font-size: clamp(11px, 0.78vw, 14px);
5001
- font-weight: 600; color: var(--ps-text-primary);
5046
+ font-weight: 600;
5047
+ color: var(--ps-text-primary);
5048
+ text-align: center;
5002
5049
  }
5003
- .ps-cpw-photo-dropzone-hint {
5050
+ .ps-cpw-dropzone-hint {
5004
5051
  font-size: clamp(9px, 0.62vw, 12px);
5005
5052
  color: var(--ps-text-muted);
5053
+ letter-spacing: 0.04em;
5006
5054
  }
5007
- .ps-cpw-photo-frame {
5055
+
5056
+ /* Photo preview frame (after upload) */
5057
+ .ps-cpw-photo-preview-frame {
5008
5058
  position: relative;
5009
5059
  flex: 1; min-height: 0;
5010
5060
  width: 100%;
5011
5061
  background: var(--ps-bg-secondary);
5012
- border-radius: clamp(8px, 0.6vw, 14px);
5062
+ border-radius: clamp(10px, 0.75vw, 16px);
5013
5063
  overflow: hidden;
5014
5064
  border: 1px solid var(--ps-border-subtle);
5065
+ display: flex; align-items: center; justify-content: center;
5066
+ }
5067
+ .ps-cpw-photo-preview-img {
5068
+ width: 100%; height: 100%;
5069
+ object-fit: contain;
5070
+ display: block;
5071
+ }
5072
+ .ps-cpw-photo-retake-pill {
5073
+ position: absolute;
5074
+ bottom: clamp(8px, 0.7vw, 14px);
5075
+ left: 50%;
5076
+ transform: translateX(-50%);
5077
+ background: rgba(255,255,255,0.95);
5078
+ border: 1px solid var(--ps-border-subtle);
5079
+ color: var(--ps-text-primary);
5080
+ padding: clamp(6px, 0.55vw, 12px) clamp(12px, 1vw, 20px);
5081
+ border-radius: 999px;
5082
+ font-family: inherit;
5083
+ font-size: clamp(10px, 0.7vw, 13px);
5084
+ font-weight: 600;
5085
+ cursor: pointer;
5086
+ backdrop-filter: blur(6px);
5087
+ transition: background 0.22s, color 0.22s;
5088
+ }
5089
+ .ps-cpw-photo-retake-pill:hover {
5090
+ background: var(--ps-accent);
5091
+ color: #FFFFFF;
5092
+ border-color: var(--ps-accent);
5093
+ }
5094
+ .ps-cpw-photo-remove {
5095
+ position: absolute;
5096
+ top: clamp(8px, 0.7vw, 14px);
5097
+ right: clamp(8px, 0.7vw, 14px);
5098
+ width: clamp(24px, 1.8vw, 34px);
5099
+ height: clamp(24px, 1.8vw, 34px);
5100
+ border-radius: 50%;
5101
+ background: rgba(28, 29, 30, 0.7);
5102
+ color: #FFFFFF;
5103
+ border: none;
5104
+ cursor: pointer;
5105
+ font-size: clamp(14px, 1.1vw, 18px);
5106
+ font-weight: 600;
5107
+ display: flex; align-items: center; justify-content: center;
5108
+ backdrop-filter: blur(6px);
5109
+ transition: background 0.18s;
5110
+ }
5111
+ .ps-cpw-photo-remove:hover { background: rgba(28, 29, 30, 0.9); }
5112
+
5113
+ /* Photo guide checklist — soft tinted card on the right column */
5114
+ .ps-cpw-photo-guide {
5115
+ background: var(--ps-bg-secondary);
5116
+ border: 1px solid var(--ps-border-subtle);
5117
+ border-radius: clamp(10px, 0.75vw, 16px);
5118
+ padding: clamp(12px, 1vw, 20px) clamp(14px, 1.1vw, 22px);
5119
+ display: flex; flex-direction: column;
5120
+ gap: clamp(6px, 0.55vw, 12px);
5121
+ margin-top: auto;
5122
+ }
5123
+ .ps-cpw-photo-guide-title {
5124
+ font-size: clamp(9px, 0.62vw, 11px);
5125
+ font-weight: 700;
5126
+ letter-spacing: 0.14em;
5127
+ text-transform: uppercase;
5128
+ color: var(--ps-text-primary);
5129
+ }
5130
+ .ps-cpw-photo-guide-list {
5131
+ list-style: none;
5132
+ margin: 0;
5133
+ padding: 0;
5134
+ display: flex; flex-direction: column;
5135
+ gap: clamp(4px, 0.4vw, 10px);
5136
+ }
5137
+ .ps-cpw-photo-guide-list li {
5138
+ display: flex; align-items: flex-start;
5139
+ gap: clamp(6px, 0.55vw, 12px);
5140
+ font-size: clamp(10px, 0.72vw, 13px);
5141
+ line-height: 1.45;
5142
+ color: var(--ps-text-secondary);
5143
+ }
5144
+ .ps-cpw-photo-guide-list li svg {
5145
+ flex-shrink: 0;
5146
+ width: clamp(12px, 0.9vw, 16px);
5147
+ height: clamp(12px, 0.9vw, 16px);
5148
+ color: var(--ps-accent);
5149
+ margin-top: 0.15em;
5015
5150
  }
5016
5151
  .ps-cpw-photo-frame-img {
5017
5152
  width: 100%; height: 100%;
@@ -5044,101 +5179,141 @@ const STYLES = `
5044
5179
  }
5045
5180
 
5046
5181
  /* ════════════════════════════════════════════════════════════════
5047
- ProfileMeasurementsView (.ps-pmv-*) — full profile detail with
5048
- all body measurements, basics, saved sizes history, and actions.
5182
+ ProfileMeasurementsView (.ps-pmv-*) — minimal monoline-icon
5183
+ redesign. Two-column body: silhouette diagram on the left,
5184
+ basics + measurements list (each with an inline line-art icon)
5185
+ on the right. No avatar, no card boxes — just typography, icons
5186
+ and a body diagram, all vw/clamp scaled.
5049
5187
  ════════════════════════════════════════════════════════════════ */
5050
5188
  .ps-pmv-root {
5051
- display: flex; flex-direction: column; gap: 24px;
5052
- padding: 4px 4px 24px;
5189
+ display: flex; flex-direction: column;
5190
+ gap: clamp(14px, 1.3vw, 28px);
5191
+ padding: clamp(2px, 0.25vw, 6px) clamp(2px, 0.25vw, 6px) clamp(14px, 1.3vw, 28px);
5053
5192
  }
5193
+
5194
+ /* Hero — name + eyebrow only, no avatar */
5054
5195
  .ps-pmv-hero {
5055
- display: flex; align-items: center; gap: 18px;
5056
- padding-bottom: 18px;
5196
+ display: flex; flex-direction: column;
5197
+ gap: clamp(4px, 0.35vw, 10px);
5198
+ padding-bottom: clamp(10px, 0.95vw, 20px);
5057
5199
  border-bottom: 1px solid var(--ps-border-subtle);
5058
5200
  }
5059
- .ps-pmv-hero-avatar {
5060
- width: 76px; height: 76px;
5061
- border-radius: 50%;
5062
- background: var(--ps-bg-secondary);
5063
- border: 2px solid var(--ps-accent);
5064
- color: var(--ps-accent);
5065
- display: flex; align-items: center; justify-content: center;
5066
- overflow: hidden; flex-shrink: 0;
5067
- }
5068
- .ps-pmv-hero-avatar img {
5069
- width: 100%; height: 100%; object-fit: cover;
5070
- /* Bias the crop toward the top of the photo so the head/face shows
5071
- through the circular avatar instead of the torso. Works for any
5072
- full-body or head-and-torso photo where the head is in the upper
5073
- portion of the frame. */
5074
- object-position: 50% 12%;
5075
- }
5076
- .ps-pmv-hero-info { flex: 1; min-width: 0; }
5077
5201
  .ps-pmv-hero-eyebrow {
5078
- font-size: 10px; font-weight: 700;
5079
- letter-spacing: 0.16em; text-transform: uppercase;
5202
+ font-size: clamp(9px, 0.6vw, 12px); font-weight: 700;
5203
+ letter-spacing: 0.18em; text-transform: uppercase;
5080
5204
  color: var(--ps-accent);
5081
- margin-bottom: 6px;
5082
5205
  }
5083
5206
  .ps-pmv-hero-name {
5084
- font-size: 28px; font-weight: 700;
5207
+ font-size: clamp(18px, 1.5vw, 32px); font-weight: 700;
5085
5208
  color: var(--ps-text-primary);
5086
5209
  margin: 0;
5087
5210
  letter-spacing: -0.01em;
5211
+ line-height: 1.1;
5088
5212
  }
5089
5213
 
5090
- /* Basics rowheight / weight / age stats */
5091
- .ps-pmv-basics {
5214
+ /* Two-column splitdiagram on left, data on right */
5215
+ .ps-pmv-split {
5092
5216
  display: grid;
5093
- grid-template-columns: repeat(3, 1fr);
5094
- gap: 14px;
5217
+ grid-template-columns: minmax(0, 0.42fr) minmax(0, 1fr);
5218
+ gap: clamp(16px, 1.6vw, 36px);
5219
+ align-items: start;
5095
5220
  }
5096
- .ps-pmv-basic {
5097
- background: var(--ps-bg-secondary);
5098
- border: 1px solid var(--ps-border-subtle);
5099
- border-radius: 10px;
5100
- padding: 16px 18px;
5101
- display: flex; flex-direction: column; gap: 4px;
5221
+ .ps-pmv-diagram {
5222
+ display: flex; flex-direction: column; align-items: center;
5223
+ gap: clamp(6px, 0.5vw, 12px);
5224
+ padding: clamp(8px, 0.8vw, 18px) 0;
5225
+ color: var(--ps-text-primary);
5102
5226
  }
5227
+ .ps-pmv-body-diagram-svg {
5228
+ width: 100%;
5229
+ max-width: clamp(110px, 9vw, 180px);
5230
+ height: auto;
5231
+ color: var(--ps-text-primary);
5232
+ opacity: 0.78;
5233
+ }
5234
+ .ps-pmv-diagram-caption {
5235
+ font-size: clamp(8px, 0.55vw, 11px);
5236
+ font-weight: 600;
5237
+ letter-spacing: 0.16em;
5238
+ text-transform: uppercase;
5239
+ color: var(--ps-text-muted);
5240
+ }
5241
+ .ps-pmv-data {
5242
+ display: flex; flex-direction: column;
5243
+ gap: clamp(14px, 1.2vw, 26px);
5244
+ min-width: 0;
5245
+ }
5246
+
5247
+ /* Basics list — height / weight / age, inline icon + label + value */
5248
+ .ps-pmv-basics {
5249
+ display: flex; flex-direction: column;
5250
+ gap: clamp(6px, 0.55vw, 14px);
5251
+ padding-bottom: clamp(10px, 0.9vw, 18px);
5252
+ border-bottom: 1px solid var(--ps-border-subtle);
5253
+ }
5254
+ .ps-pmv-basic-row {
5255
+ display: flex; align-items: center;
5256
+ gap: clamp(8px, 0.7vw, 16px);
5257
+ }
5258
+ .ps-pmv-basic-icon {
5259
+ flex-shrink: 0;
5260
+ width: clamp(14px, 1vw, 20px);
5261
+ height: clamp(14px, 1vw, 20px);
5262
+ color: var(--ps-text-muted);
5263
+ display: inline-flex; align-items: center; justify-content: center;
5264
+ }
5265
+ .ps-pmv-basic-icon svg { width: 100%; height: 100%; }
5103
5266
  .ps-pmv-basic-label {
5104
- font-size: 10px; font-weight: 700;
5105
- letter-spacing: 0.14em; text-transform: uppercase;
5267
+ flex: 1; min-width: 0;
5268
+ font-size: clamp(9px, 0.65vw, 12px);
5269
+ font-weight: 700;
5270
+ letter-spacing: 0.14em;
5271
+ text-transform: uppercase;
5106
5272
  color: var(--ps-text-muted);
5107
5273
  }
5108
5274
  .ps-pmv-basic-value {
5109
- font-size: 22px; font-weight: 700;
5275
+ font-size: clamp(13px, 0.95vw, 18px);
5276
+ font-weight: 700;
5110
5277
  color: var(--ps-text-primary);
5111
5278
  font-feature-settings: "tnum" 1;
5279
+ text-align: right;
5112
5280
  }
5113
5281
 
5114
- /* Section blocks */
5282
+ /* Section blocks (BODY MEASUREMENTS) */
5115
5283
  .ps-pmv-section {
5116
- display: flex; flex-direction: column; gap: 14px;
5284
+ display: flex; flex-direction: column;
5285
+ gap: clamp(8px, 0.7vw, 16px);
5117
5286
  }
5118
5287
  .ps-pmv-section-head {
5119
- display: flex; flex-direction: column; gap: 4px;
5288
+ display: flex; flex-direction: column; gap: clamp(2px, 0.2vw, 6px);
5120
5289
  }
5121
5290
  .ps-pmv-section-title {
5122
- font-size: 12px; font-weight: 700;
5123
- letter-spacing: 0.14em; text-transform: uppercase;
5291
+ font-size: clamp(9px, 0.65vw, 12px);
5292
+ font-weight: 700;
5293
+ letter-spacing: 0.16em;
5294
+ text-transform: uppercase;
5124
5295
  color: var(--ps-text-primary);
5125
5296
  }
5126
5297
  .ps-pmv-section-title-row {
5127
5298
  display: flex; align-items: center; justify-content: space-between;
5128
- gap: 12px;
5299
+ gap: clamp(8px, 0.7vw, 14px);
5129
5300
  }
5130
5301
  .ps-pmv-loading-pill {
5131
- display: inline-flex; align-items: center; gap: 8px;
5132
- padding: 6px 12px;
5302
+ display: inline-flex; align-items: center;
5303
+ gap: clamp(4px, 0.4vw, 10px);
5304
+ padding: clamp(3px, 0.3vw, 7px) clamp(7px, 0.6vw, 14px);
5133
5305
  background: rgba(33, 84, 239, 0.08);
5134
5306
  color: var(--ps-accent);
5135
5307
  border-radius: 999px;
5136
- font-size: 10px; font-weight: 700;
5137
- letter-spacing: 0.1em; text-transform: uppercase;
5308
+ font-size: clamp(8px, 0.55vw, 11px);
5309
+ font-weight: 700;
5310
+ letter-spacing: 0.12em;
5311
+ text-transform: uppercase;
5138
5312
  }
5139
5313
  .ps-pmv-loading-spinner {
5140
- width: 12px; height: 12px;
5141
- border: 2px solid rgba(33, 84, 239, 0.25);
5314
+ width: clamp(8px, 0.65vw, 14px);
5315
+ height: clamp(8px, 0.65vw, 14px);
5316
+ border: 1.5px solid rgba(33, 84, 239, 0.25);
5142
5317
  border-top-color: var(--ps-accent);
5143
5318
  border-radius: 50%;
5144
5319
  animation: ps-pmv-spin 0.8s linear infinite;
@@ -5146,141 +5321,111 @@ const STYLES = `
5146
5321
  @keyframes ps-pmv-spin {
5147
5322
  to { transform: rotate(360deg); }
5148
5323
  }
5149
- .ps-pmv-section-sub {
5150
- font-size: 12px; font-weight: 400;
5151
- color: var(--ps-text-muted);
5152
- }
5153
5324
 
5154
- /* Body measurements grid */
5155
- .ps-pmv-measure-grid {
5156
- display: grid;
5157
- grid-template-columns: repeat(4, 1fr);
5158
- gap: 10px;
5325
+ /* Body measurements list — single column, icon + label + value rows */
5326
+ .ps-pmv-measure-list {
5327
+ display: flex; flex-direction: column;
5159
5328
  }
5160
- .ps-pmv-measure {
5161
- background: var(--ps-bg-primary);
5162
- border: 1px solid var(--ps-border-subtle);
5163
- border-radius: 10px;
5164
- padding: 12px 14px;
5165
- display: flex; flex-direction: column; gap: 4px;
5329
+ .ps-pmv-measure-row {
5330
+ display: flex; align-items: center;
5331
+ gap: clamp(8px, 0.7vw, 16px);
5332
+ padding: clamp(8px, 0.7vw, 14px) 0;
5333
+ border-bottom: 1px solid var(--ps-border-subtle);
5334
+ }
5335
+ .ps-pmv-measure-row:last-child { border-bottom: none; }
5336
+ .ps-pmv-measure-icon {
5337
+ flex-shrink: 0;
5338
+ width: clamp(14px, 1vw, 20px);
5339
+ height: clamp(14px, 1vw, 20px);
5340
+ color: var(--ps-text-muted);
5341
+ display: inline-flex; align-items: center; justify-content: center;
5166
5342
  }
5343
+ .ps-pmv-measure-icon svg { width: 100%; height: 100%; }
5167
5344
  .ps-pmv-measure-label {
5168
- font-size: 9px; font-weight: 700;
5169
- letter-spacing: 0.12em; text-transform: uppercase;
5345
+ flex: 1; min-width: 0;
5346
+ font-size: clamp(9px, 0.65vw, 12px);
5347
+ font-weight: 700;
5348
+ letter-spacing: 0.14em;
5349
+ text-transform: uppercase;
5170
5350
  color: var(--ps-text-muted);
5171
5351
  }
5172
5352
  .ps-pmv-measure-value {
5173
- font-size: 18px; font-weight: 700;
5353
+ font-size: clamp(12px, 0.85vw, 16px);
5354
+ font-weight: 700;
5174
5355
  color: var(--ps-text-primary);
5175
5356
  font-feature-settings: "tnum" 1;
5357
+ text-align: right;
5176
5358
  }
5177
5359
  .ps-pmv-measure-value.ps-loading {
5178
5360
  color: var(--ps-border-color);
5179
5361
  animation: ps-pmv-shimmer 1.4s ease-in-out infinite;
5180
5362
  }
5181
- .ps-pmv-measure.ps-loading {
5182
- background: linear-gradient(
5183
- 90deg,
5184
- var(--ps-bg-primary) 0%,
5185
- var(--ps-bg-secondary) 50%,
5186
- var(--ps-bg-primary) 100%
5187
- );
5188
- background-size: 200% 100%;
5189
- animation: ps-pmv-skeleton 1.6s ease-in-out infinite;
5363
+ .ps-pmv-measure-row.ps-loading .ps-pmv-measure-icon,
5364
+ .ps-pmv-measure-row.ps-loading .ps-pmv-measure-label {
5365
+ opacity: 0.55;
5190
5366
  }
5191
5367
  @keyframes ps-pmv-shimmer {
5192
5368
  0%, 100% { opacity: 0.5; }
5193
5369
  50% { opacity: 1; }
5194
5370
  }
5195
- @keyframes ps-pmv-skeleton {
5196
- 0% { background-position: 200% 0; }
5197
- 100% { background-position: -200% 0; }
5198
- }
5199
5371
 
5200
5372
  /* Inline measurement edit inputs */
5201
- .ps-pmv-measure.ps-editing {
5202
- border-color: var(--ps-accent);
5373
+ .ps-pmv-measure-row.ps-editing {
5203
5374
  background: rgba(33, 84, 239, 0.04);
5204
5375
  }
5205
5376
  .ps-pmv-measure-edit {
5206
- display: flex; align-items: baseline; gap: 4px;
5377
+ display: flex; align-items: baseline;
5378
+ gap: clamp(2px, 0.2vw, 6px);
5207
5379
  }
5208
5380
  .ps-pmv-measure-input {
5209
- flex: 1; min-width: 0;
5210
- background: transparent; border: none; outline: none;
5381
+ width: clamp(40px, 3vw, 70px);
5382
+ background: transparent;
5383
+ border: none;
5384
+ border-bottom: 1px solid var(--ps-border-color);
5385
+ outline: none;
5211
5386
  font-family: inherit;
5212
- font-size: 18px; font-weight: 700;
5387
+ font-size: clamp(12px, 0.85vw, 16px);
5388
+ font-weight: 700;
5213
5389
  color: var(--ps-text-primary);
5214
- padding: 0;
5390
+ padding: clamp(2px, 0.15vw, 4px) 0;
5391
+ text-align: right;
5215
5392
  font-feature-settings: "tnum" 1;
5216
5393
  }
5394
+ .ps-pmv-measure-input:focus {
5395
+ border-bottom-color: var(--ps-accent);
5396
+ }
5217
5397
  .ps-pmv-measure-input::-webkit-outer-spin-button,
5218
5398
  .ps-pmv-measure-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
5219
5399
  .ps-pmv-measure-input[type="number"] { -moz-appearance: textfield; }
5220
5400
  .ps-pmv-measure-input-unit {
5221
- font-size: 11px; color: var(--ps-text-muted); font-weight: 500;
5222
- }
5223
-
5224
- /* Saved sizes history (per-product cache) — kept for backwards compat,
5225
- no longer rendered inside ProfileMeasurementsView */
5226
- .ps-pmv-history {
5227
- display: flex; flex-direction: column; gap: 8px;
5228
- }
5229
- .ps-pmv-history-card {
5230
- display: flex; align-items: center; gap: 12px;
5231
- padding: 12px;
5232
- background: var(--ps-bg-primary);
5233
- border: 1px solid var(--ps-border-subtle);
5234
- border-radius: 10px;
5235
- }
5236
- .ps-pmv-history-thumb {
5237
- width: 44px; height: 44px;
5238
- border-radius: 6px; overflow: hidden;
5239
- background: var(--ps-bg-secondary);
5240
- flex-shrink: 0;
5241
- display: flex; align-items: center; justify-content: center;
5242
- }
5243
- .ps-pmv-history-thumb img {
5244
- max-width: 100%; max-height: 100%; object-fit: contain;
5245
- }
5246
- .ps-pmv-history-info {
5247
- flex: 1; min-width: 0;
5248
- display: flex; flex-direction: column; gap: 2px;
5249
- }
5250
- .ps-pmv-history-name {
5251
- font-size: 13px; font-weight: 600;
5252
- color: var(--ps-text-primary);
5253
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
5254
- }
5255
- .ps-pmv-history-meta {
5256
- font-size: 10px;
5401
+ font-size: clamp(8px, 0.55vw, 11px);
5257
5402
  color: var(--ps-text-muted);
5258
- }
5259
- .ps-pmv-history-size {
5260
- font-size: 22px; font-weight: 700;
5261
- color: var(--ps-accent);
5262
- font-feature-settings: "tnum" 1;
5403
+ font-weight: 500;
5263
5404
  }
5264
5405
 
5265
5406
  /* Actions */
5266
5407
  .ps-pmv-actions {
5267
5408
  display: flex; align-items: center; justify-content: space-between;
5268
- gap: 12px;
5269
- padding-top: 18px;
5409
+ gap: clamp(8px, 0.7vw, 14px);
5410
+ padding-top: clamp(12px, 1vw, 22px);
5270
5411
  border-top: 1px solid var(--ps-border-subtle);
5271
- margin-top: 4px;
5412
+ margin-top: clamp(2px, 0.2vw, 6px);
5272
5413
  }
5273
5414
  .ps-pmv-actions-right {
5274
- display: flex; align-items: center; gap: 8px;
5415
+ display: flex; align-items: center;
5416
+ gap: clamp(6px, 0.5vw, 12px);
5275
5417
  }
5276
5418
  .ps-pmv-btn-secondary,
5277
5419
  .ps-pmv-btn-edit,
5278
5420
  .ps-pmv-btn-delete {
5279
- background: none; border: 1px solid var(--ps-border-color);
5280
- border-radius: 6px;
5281
- padding: 10px 16px;
5282
- font-family: inherit; font-size: 11px; font-weight: 600;
5283
- letter-spacing: 0.06em;
5421
+ background: none;
5422
+ border: 1px solid var(--ps-border-color);
5423
+ border-radius: clamp(4px, 0.35vw, 8px);
5424
+ padding: clamp(6px, 0.55vw, 12px) clamp(10px, 0.9vw, 20px);
5425
+ font-family: inherit;
5426
+ font-size: clamp(9px, 0.65vw, 12px);
5427
+ font-weight: 600;
5428
+ letter-spacing: 0.08em;
5284
5429
  color: var(--ps-text-secondary);
5285
5430
  cursor: pointer;
5286
5431
  transition: border-color 0.15s, color 0.15s;
@@ -5296,14 +5441,19 @@ const STYLES = `
5296
5441
  }
5297
5442
  .ps-pmv-btn-primary {
5298
5443
  background: var(--ps-accent); color: #FFFFFF;
5299
- border: none; border-radius: 6px;
5300
- padding: 11px 18px;
5301
- font-family: inherit; font-size: 11px; font-weight: 700;
5302
- letter-spacing: 0.12em; text-transform: uppercase;
5444
+ border: none;
5445
+ border-radius: clamp(4px, 0.35vw, 8px);
5446
+ padding: clamp(7px, 0.65vw, 14px) clamp(12px, 1vw, 22px);
5447
+ font-family: inherit;
5448
+ font-size: clamp(9px, 0.65vw, 12px);
5449
+ font-weight: 700;
5450
+ letter-spacing: 0.14em;
5451
+ text-transform: uppercase;
5303
5452
  cursor: pointer;
5304
5453
  transition: opacity 0.15s, transform 0.15s, background 0.2s;
5305
- box-shadow: 0 4px 14px rgba(33, 84, 239, 0.18);
5306
- display: inline-flex; align-items: center; gap: 8px;
5454
+ box-shadow: 0 0.3vw 1vw rgba(33, 84, 239, 0.18);
5455
+ display: inline-flex; align-items: center;
5456
+ gap: clamp(4px, 0.4vw, 10px);
5307
5457
  justify-content: center;
5308
5458
  }
5309
5459
  .ps-pmv-btn-primary:hover:not(:disabled) { opacity: 0.92; }
@@ -5315,22 +5465,14 @@ const STYLES = `
5315
5465
  opacity: 0.65;
5316
5466
  }
5317
5467
  .ps-pmv-btn-spinner {
5318
- width: 12px; height: 12px;
5319
- border: 2px solid rgba(255, 255, 255, 0.35);
5468
+ width: clamp(8px, 0.65vw, 14px);
5469
+ height: clamp(8px, 0.65vw, 14px);
5470
+ border: 1.5px solid rgba(255, 255, 255, 0.35);
5320
5471
  border-top-color: #FFFFFF;
5321
5472
  border-radius: 50%;
5322
5473
  animation: ps-pmv-spin 0.8s linear infinite;
5323
5474
  }
5324
5475
 
5325
- @media (max-width: 768px) {
5326
- .ps-pmv-hero { flex-direction: column; align-items: flex-start; gap: 12px; }
5327
- .ps-pmv-hero-name { font-size: 22px; }
5328
- .ps-pmv-basics { grid-template-columns: 1fr; }
5329
- .ps-pmv-measure-grid { grid-template-columns: repeat(2, 1fr); }
5330
- .ps-pmv-actions { flex-direction: column; align-items: stretch; gap: 10px; }
5331
- .ps-pmv-actions-right { flex-wrap: wrap; }
5332
- }
5333
-
5334
5476
  /* Big product / try-on image */
5335
5477
  .ps-msd-image {
5336
5478
  width: 100%; height: 420px;
@@ -9213,27 +9355,7 @@ function CreateProfileWizard({ onSave, onCancel, t }) {
9213
9355
  ] })
9214
9356
  ] }, "bra"),
9215
9357
  mode === "manual" && error && /* @__PURE__ */ jsx("div", { className: "ps-cpw-error", children: error }),
9216
- mode === "image" && /* @__PURE__ */ jsxs("div", { className: "ps-cpw-image-combined ps-cpw-fade-in", children: [
9217
- /* @__PURE__ */ jsx("div", { className: "ps-cpw-pill-row", children: /* @__PURE__ */ jsxs("div", { className: "ps-cpw-pill-group", children: [
9218
- /* @__PURE__ */ jsx("button", { type: "button", className: `ps-cpw-pill${gender === "male" ? " ps-active" : ""}`, onClick: () => setGender("male"), children: t("Male") }),
9219
- /* @__PURE__ */ jsx("button", { type: "button", className: `ps-cpw-pill${gender === "female" ? " ps-active" : ""}`, onClick: () => setGender("female"), children: t("Female") })
9220
- ] }) }),
9221
- /* @__PURE__ */ jsx("div", { className: "ps-bp-inline-fields ps-cpw-inline-fields", children: /* @__PURE__ */ jsxs("div", { className: "ps-bp-inline-row", children: [
9222
- /* @__PURE__ */ jsx("span", { className: "ps-bp-inline-label", children: t("NAME") }),
9223
- /* @__PURE__ */ jsx("div", { className: "ps-bp-inline-input-group", children: /* @__PURE__ */ jsx(
9224
- "input",
9225
- {
9226
- type: "text",
9227
- className: "ps-bp-inline-input",
9228
- value: name,
9229
- placeholder: t("e.g. My Photo Profile"),
9230
- onChange: (e) => {
9231
- setName(e.target.value);
9232
- setError("");
9233
- }
9234
- }
9235
- ) })
9236
- ] }) }),
9358
+ mode === "image" && /* @__PURE__ */ jsxs("div", { className: "ps-cpw-image-split ps-cpw-fade-in", children: [
9237
9359
  /* @__PURE__ */ jsx(
9238
9360
  "input",
9239
9361
  {
@@ -9244,8 +9366,8 @@ function CreateProfileWizard({ onSave, onCancel, t }) {
9244
9366
  onChange: handlePhotoSelect
9245
9367
  }
9246
9368
  ),
9247
- photoBase64 ? /* @__PURE__ */ jsxs("div", { className: "ps-cpw-photo-frame", children: [
9248
- /* @__PURE__ */ jsx("img", { src: photoBase64, alt: t("Profile photo"), className: "ps-cpw-photo-frame-img" }),
9369
+ /* @__PURE__ */ jsx("div", { className: "ps-cpw-image-left", children: photoBase64 ? /* @__PURE__ */ jsxs("div", { className: "ps-cpw-photo-preview-frame", children: [
9370
+ /* @__PURE__ */ jsx("img", { src: photoBase64, alt: t("Profile photo"), className: "ps-cpw-photo-preview-img" }),
9249
9371
  /* @__PURE__ */ jsx(
9250
9372
  "button",
9251
9373
  {
@@ -9255,26 +9377,84 @@ function CreateProfileWizard({ onSave, onCancel, t }) {
9255
9377
  "aria-label": t("Remove photo"),
9256
9378
  children: "×"
9257
9379
  }
9380
+ ),
9381
+ /* @__PURE__ */ jsx(
9382
+ "button",
9383
+ {
9384
+ type: "button",
9385
+ className: "ps-cpw-photo-retake-pill",
9386
+ onClick: () => photoInputRef.current?.click(),
9387
+ children: t("Retake")
9388
+ }
9258
9389
  )
9259
9390
  ] }) : /* @__PURE__ */ jsxs(
9260
9391
  "button",
9261
9392
  {
9262
9393
  type: "button",
9263
- className: "ps-cpw-photo-dropzone",
9394
+ className: "ps-cpw-dropzone",
9264
9395
  onClick: () => photoInputRef.current?.click(),
9265
9396
  disabled: photoUploading,
9266
9397
  children: [
9267
- /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", width: "36", height: "36", children: [
9268
- /* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
9269
- /* @__PURE__ */ jsx("polyline", { points: "17 8 12 3 7 8" }),
9270
- /* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
9398
+ /* @__PURE__ */ 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: [
9399
+ /* @__PURE__ */ jsx("circle", { cx: "40", cy: "20", r: "13" }),
9400
+ /* @__PURE__ */ 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" })
9271
9401
  ] }),
9272
- /* @__PURE__ */ jsx("span", { className: "ps-cpw-photo-dropzone-title", children: photoUploading ? t("Processing...") : t("Tap to upload a photo") }),
9273
- /* @__PURE__ */ jsx("span", { className: "ps-cpw-photo-dropzone-hint", children: t("JPEG / PNG / WebP up to 10MB") })
9402
+ /* @__PURE__ */ jsxs("div", { className: "ps-cpw-dropzone-content", children: [
9403
+ /* @__PURE__ */ 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: [
9404
+ /* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
9405
+ /* @__PURE__ */ jsx("polyline", { points: "17 8 12 3 7 8" }),
9406
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
9407
+ ] }),
9408
+ /* @__PURE__ */ jsx("span", { className: "ps-cpw-dropzone-title", children: photoUploading ? t("Processing…") : t("Drop a photo or click to upload") }),
9409
+ /* @__PURE__ */ jsx("span", { className: "ps-cpw-dropzone-hint", children: t("JPEG · PNG · WebP · up to 10MB") })
9410
+ ] })
9274
9411
  ]
9275
9412
  }
9276
- ),
9277
- error && /* @__PURE__ */ jsx("div", { className: "ps-cpw-error", children: error })
9413
+ ) }),
9414
+ /* @__PURE__ */ jsxs("div", { className: "ps-cpw-image-right", children: [
9415
+ /* @__PURE__ */ jsx("div", { className: "ps-cpw-pill-row", children: /* @__PURE__ */ jsxs("div", { className: "ps-cpw-pill-group", children: [
9416
+ /* @__PURE__ */ jsx("button", { type: "button", className: `ps-cpw-pill${gender === "male" ? " ps-active" : ""}`, onClick: () => setGender("male"), children: t("Male") }),
9417
+ /* @__PURE__ */ jsx("button", { type: "button", className: `ps-cpw-pill${gender === "female" ? " ps-active" : ""}`, onClick: () => setGender("female"), children: t("Female") })
9418
+ ] }) }),
9419
+ /* @__PURE__ */ jsx("div", { className: "ps-bp-inline-fields ps-cpw-inline-fields", children: /* @__PURE__ */ jsxs("div", { className: "ps-bp-inline-row", children: [
9420
+ /* @__PURE__ */ jsx("span", { className: "ps-bp-inline-label", children: t("NAME") }),
9421
+ /* @__PURE__ */ jsx("div", { className: "ps-bp-inline-input-group", children: /* @__PURE__ */ jsx(
9422
+ "input",
9423
+ {
9424
+ type: "text",
9425
+ className: "ps-bp-inline-input",
9426
+ value: name,
9427
+ placeholder: t("e.g. My Photo Profile"),
9428
+ onChange: (e) => {
9429
+ setName(e.target.value);
9430
+ setError("");
9431
+ }
9432
+ }
9433
+ ) })
9434
+ ] }) }),
9435
+ /* @__PURE__ */ jsxs("div", { className: "ps-cpw-photo-guide", children: [
9436
+ /* @__PURE__ */ jsx("div", { className: "ps-cpw-photo-guide-title", children: t("HOW TO TAKE A GOOD PHOTO") }),
9437
+ /* @__PURE__ */ jsxs("ul", { className: "ps-cpw-photo-guide-list", children: [
9438
+ /* @__PURE__ */ jsxs("li", { children: [
9439
+ /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("polyline", { points: "3 8 7 12 13 4" }) }),
9440
+ t("Stand straight, arms relaxed at your sides")
9441
+ ] }),
9442
+ /* @__PURE__ */ jsxs("li", { children: [
9443
+ /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("polyline", { points: "3 8 7 12 13 4" }) }),
9444
+ t("Full body in frame, head to toes")
9445
+ ] }),
9446
+ /* @__PURE__ */ jsxs("li", { children: [
9447
+ /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("polyline", { points: "3 8 7 12 13 4" }) }),
9448
+ t("Form-fitting clothing, no loose layers")
9449
+ ] }),
9450
+ /* @__PURE__ */ jsxs("li", { children: [
9451
+ /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("polyline", { points: "3 8 7 12 13 4" }) }),
9452
+ t("Plain background, neutral lighting")
9453
+ ] })
9454
+ ] })
9455
+ ] }),
9456
+ error && /* @__PURE__ */ jsx("div", { className: "ps-cpw-error", children: error })
9457
+ ] })
9278
9458
  ] }, "image-combined")
9279
9459
  ] }),
9280
9460
  /* @__PURE__ */ jsxs("div", { className: "ps-cpw-footer", children: [
@@ -9293,26 +9473,95 @@ function CreateProfileWizard({ onSave, onCancel, t }) {
9293
9473
  ] })
9294
9474
  ] });
9295
9475
  }
9476
+ const HeightIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9477
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "21" }),
9478
+ /* @__PURE__ */ jsx("polyline", { points: "7 6 12 3 17 6" }),
9479
+ /* @__PURE__ */ jsx("polyline", { points: "7 18 12 21 17 18" })
9480
+ ] });
9481
+ const WeightIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9482
+ /* @__PURE__ */ jsx("path", { d: "M5 7h14l-1.5 12a2 2 0 0 1-2 2h-9a2 2 0 0 1-2-2L5 7z" }),
9483
+ /* @__PURE__ */ jsx("path", { d: "M9 7a3 3 0 0 1 6 0" }),
9484
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "11", x2: "12", y2: "15" })
9485
+ ] });
9486
+ const AgeIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9487
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "9" }),
9488
+ /* @__PURE__ */ jsx("polyline", { points: "12 7 12 12 15 14" })
9489
+ ] });
9490
+ const ChestIcon = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M4 8 L8 5 L16 5 L20 8 L20 13 L17 11 L17 17 L7 17 L7 11 L4 13 Z" }) });
9491
+ const BustIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9492
+ /* @__PURE__ */ jsx("path", { d: "M5 9 Q12 3 19 9" }),
9493
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "13", r: "2.5" }),
9494
+ /* @__PURE__ */ jsx("circle", { cx: "15", cy: "13", r: "2.5" })
9495
+ ] });
9496
+ const WaistIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9497
+ /* @__PURE__ */ jsx("path", { d: "M6 4 Q10 4 10 9 Q10 12 6 14" }),
9498
+ /* @__PURE__ */ jsx("path", { d: "M18 4 Q14 4 14 9 Q14 12 18 14" }),
9499
+ /* @__PURE__ */ jsx("path", { d: "M6 14 Q10 16 10 20" }),
9500
+ /* @__PURE__ */ jsx("path", { d: "M18 14 Q14 16 14 20" })
9501
+ ] });
9502
+ const HipsIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9503
+ /* @__PURE__ */ jsx("path", { d: "M7 4 Q10 4 10 9 Q10 11 9 13" }),
9504
+ /* @__PURE__ */ jsx("path", { d: "M17 4 Q14 4 14 9 Q14 11 15 13" }),
9505
+ /* @__PURE__ */ jsx("path", { d: "M5 14 Q12 22 19 14" })
9506
+ ] });
9507
+ const ShoulderIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9508
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "6", r: "2.5" }),
9509
+ /* @__PURE__ */ jsx("path", { d: "M4 13 Q8 9 12 9 Q16 9 20 13" }),
9510
+ /* @__PURE__ */ jsx("line", { x1: "4", y1: "15", x2: "20", y2: "15" })
9511
+ ] });
9512
+ const SleeveIcon = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M4 6 L8 4 L12 6 L11 11 L9 21 L5 21 L5 11 Z" }) });
9513
+ const NeckIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9514
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "6", r: "3" }),
9515
+ /* @__PURE__ */ jsx("path", { d: "M9 9 L9 13 Q9 15 12 15 Q15 15 15 13 L15 9" }),
9516
+ /* @__PURE__ */ jsx("path", { d: "M5 17 Q12 19 19 17" })
9517
+ ] });
9518
+ const InseamIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9519
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "21" }),
9520
+ /* @__PURE__ */ jsx("line", { x1: "9", y1: "3", x2: "15", y2: "3" }),
9521
+ /* @__PURE__ */ jsx("line", { x1: "9", y1: "21", x2: "15", y2: "21" })
9522
+ ] });
9523
+ const ThighIcon = () => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9524
+ /* @__PURE__ */ jsx("path", { d: "M8 4 Q10 8 10 14 L9 21" }),
9525
+ /* @__PURE__ */ jsx("path", { d: "M16 4 Q14 8 14 14 L15 21" }),
9526
+ /* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "11", rx: "6", ry: "2" })
9527
+ ] });
9296
9528
  const FIELDS_MEN = [
9297
- { key: "chest", label: "CHEST" },
9298
- { key: "waist", label: "WAIST" },
9299
- { key: "hips", label: "HIPS" },
9300
- { key: "shoulderWidth", label: "SHOULDER" },
9301
- { key: "sleeveLength", label: "SLEEVE" },
9302
- { key: "neckCircumference", label: "NECK" },
9303
- { key: "inseam", label: "INSEAM" },
9304
- { key: "thighCircumference", label: "THIGH" }
9529
+ { key: "chest", label: "CHEST", Icon: ChestIcon },
9530
+ { key: "waist", label: "WAIST", Icon: WaistIcon },
9531
+ { key: "hips", label: "HIPS", Icon: HipsIcon },
9532
+ { key: "shoulderWidth", label: "SHOULDER", Icon: ShoulderIcon },
9533
+ { key: "sleeveLength", label: "SLEEVE", Icon: SleeveIcon },
9534
+ { key: "neckCircumference", label: "NECK", Icon: NeckIcon },
9535
+ { key: "inseam", label: "INSEAM", Icon: InseamIcon },
9536
+ { key: "thighCircumference", label: "THIGH", Icon: ThighIcon }
9305
9537
  ];
9306
9538
  const FIELDS_WOMEN = [
9307
- { key: "bust", label: "BUST" },
9308
- { key: "waist", label: "WAIST" },
9309
- { key: "hips", label: "HIPS" },
9310
- { key: "shoulderWidth", label: "SHOULDER" },
9311
- { key: "sleeveLength", label: "SLEEVE" },
9312
- { key: "neckCircumference", label: "NECK" },
9313
- { key: "inseam", label: "INSEAM" },
9314
- { key: "thighCircumference", label: "THIGH" }
9539
+ { key: "bust", label: "BUST", Icon: BustIcon },
9540
+ { key: "waist", label: "WAIST", Icon: WaistIcon },
9541
+ { key: "hips", label: "HIPS", Icon: HipsIcon },
9542
+ { key: "shoulderWidth", label: "SHOULDER", Icon: ShoulderIcon },
9543
+ { key: "sleeveLength", label: "SLEEVE", Icon: SleeveIcon },
9544
+ { key: "neckCircumference", label: "NECK", Icon: NeckIcon },
9545
+ { key: "inseam", label: "INSEAM", Icon: InseamIcon },
9546
+ { key: "thighCircumference", label: "THIGH", Icon: ThighIcon }
9315
9547
  ];
9548
+ const BodyDiagram = ({ female }) => /* @__PURE__ */ 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: [
9549
+ /* @__PURE__ */ jsx("circle", { cx: "60", cy: "28", r: "18" }),
9550
+ /* @__PURE__ */ jsx("line", { x1: "60", y1: "46", x2: "60", y2: "58" }),
9551
+ female ? /* @__PURE__ */ jsxs(Fragment, { children: [
9552
+ /* @__PURE__ */ jsx("path", { d: "M30 70 Q35 65 60 65 Q85 65 90 70" }),
9553
+ /* @__PURE__ */ jsx("path", { d: "M30 70 Q26 110 32 145 Q40 165 60 168 Q80 165 88 145 Q94 110 90 70" })
9554
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
9555
+ /* @__PURE__ */ jsx("path", { d: "M22 72 Q32 62 60 62 Q88 62 98 72" }),
9556
+ /* @__PURE__ */ jsx("path", { d: "M22 72 Q24 110 32 145 Q42 162 60 165 Q78 162 88 145 Q96 110 98 72" })
9557
+ ] }),
9558
+ /* @__PURE__ */ jsx("path", { d: "M22 72 Q12 130 18 175" }),
9559
+ /* @__PURE__ */ jsx("path", { d: "M98 72 Q108 130 102 175" }),
9560
+ /* @__PURE__ */ jsx("path", { d: "M40 168 L36 295" }),
9561
+ /* @__PURE__ */ jsx("path", { d: "M80 168 L84 295" }),
9562
+ /* @__PURE__ */ jsx("line", { x1: "30", y1: "295", x2: "42", y2: "295" }),
9563
+ /* @__PURE__ */ jsx("line", { x1: "78", y1: "295", x2: "90", y2: "295" })
9564
+ ] });
9316
9565
  function ProfileMeasurementsView({
9317
9566
  profile,
9318
9567
  isActive,
@@ -9372,60 +9621,64 @@ function ProfileMeasurementsView({
9372
9621
  const ageDisplay = profile.age ? `${profile.age}` : "—";
9373
9622
  return /* @__PURE__ */ jsxs("div", { className: "ps-pmv-root", children: [
9374
9623
  /* @__PURE__ */ jsxs("div", { className: "ps-pmv-hero", children: [
9375
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-hero-avatar", children: profile.photoBase64 ? /* @__PURE__ */ jsx("img", { src: profile.photoBase64, alt: profile.name }) : /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", width: "32", height: "32", children: [
9376
- /* @__PURE__ */ jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
9377
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "7", r: "4" })
9378
- ] }) }),
9379
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-hero-info", children: [
9380
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-hero-eyebrow", children: isActive ? t("ACTIVE PROFILE") : profile.gender === "female" ? t("WOMEN'S FIT") : t("MEN'S FIT") }),
9381
- /* @__PURE__ */ jsx("h2", { className: "ps-pmv-hero-name", children: profile.name })
9382
- ] })
9624
+ /* @__PURE__ */ jsx("div", { className: "ps-pmv-hero-eyebrow", children: isActive ? t("ACTIVE PROFILE") : profile.gender === "female" ? t("WOMEN'S FIT") : t("MEN'S FIT") }),
9625
+ /* @__PURE__ */ jsx("h2", { className: "ps-pmv-hero-name", children: profile.name })
9383
9626
  ] }),
9384
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basics", children: [
9385
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic", children: [
9386
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-label", children: t("HEIGHT") }),
9387
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-value", children: heightDisplay })
9388
- ] }),
9389
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic", children: [
9390
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-label", children: t("WEIGHT") }),
9391
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-value", children: weightDisplay })
9627
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-split", children: [
9628
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-diagram", children: [
9629
+ /* @__PURE__ */ jsx(BodyDiagram, { female: profile.gender === "female" }),
9630
+ /* @__PURE__ */ jsx("div", { className: "ps-pmv-diagram-caption", children: t("Reference figure") })
9392
9631
  ] }),
9393
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic", children: [
9394
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-label", children: t("AGE") }),
9395
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-basic-value", children: ageDisplay })
9396
- ] })
9397
- ] }),
9398
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-section", children: [
9399
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-section-head", children: [
9400
- /* @__PURE__ */ jsxs("div", { className: "ps-pmv-section-title-row", children: [
9401
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-section-title", children: t("BODY MEASUREMENTS") }),
9402
- !hasMeasurements && /* @__PURE__ */ jsxs("div", { className: "ps-pmv-loading-pill", children: [
9403
- /* @__PURE__ */ jsx("span", { className: "ps-pmv-loading-spinner" }),
9404
- /* @__PURE__ */ jsx("span", { children: t("Calculating...") })
9632
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-data", children: [
9633
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basics", children: [
9634
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic-row", children: [
9635
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsx(HeightIcon, {}) }),
9636
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-label", children: t("HEIGHT") }),
9637
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-value", children: heightDisplay })
9638
+ ] }),
9639
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic-row", children: [
9640
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsx(WeightIcon, {}) }),
9641
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-label", children: t("WEIGHT") }),
9642
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-value", children: weightDisplay })
9643
+ ] }),
9644
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-basic-row", children: [
9645
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-icon", children: /* @__PURE__ */ jsx(AgeIcon, {}) }),
9646
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-label", children: t("AGE") }),
9647
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-basic-value", children: ageDisplay })
9405
9648
  ] })
9406
9649
  ] }),
9407
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-section-sub", children: hasMeasurements ? editing ? t("Tap any value to edit. Save when you're done.") : t("Calculated from your basics. Used to recommend the perfect size for any product.") : t("Our AI is computing your full body proportions — this usually takes a few seconds.") })
9408
- ] }),
9409
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-measure-grid", children: fields.map((f) => {
9410
- const v = measurements[f.key];
9411
- return /* @__PURE__ */ jsxs("div", { className: `ps-pmv-measure${v == null && !editing ? " ps-loading" : ""}${editing ? " ps-editing" : ""}`, children: [
9412
- /* @__PURE__ */ jsx("div", { className: "ps-pmv-measure-label", children: t(f.label) }),
9413
- editing ? /* @__PURE__ */ jsxs("div", { className: "ps-pmv-measure-edit", children: [
9414
- /* @__PURE__ */ jsx(
9415
- "input",
9416
- {
9417
- type: "number",
9418
- inputMode: "decimal",
9419
- className: "ps-pmv-measure-input",
9420
- value: draft[f.key] ?? "",
9421
- placeholder: "",
9422
- onChange: (e) => handleDraftChange(f.key, e.target.value)
9423
- }
9424
- ),
9425
- /* @__PURE__ */ jsx("span", { className: "ps-pmv-measure-input-unit", children: unit })
9426
- ] }) : /* @__PURE__ */ jsx("div", { className: `ps-pmv-measure-value${v == null ? " ps-loading" : ""}`, children: v != null ? `${Math.round(v * 10) / 10} ${unit}` : "—" })
9427
- ] }, f.key);
9428
- }) })
9650
+ /* @__PURE__ */ jsxs("div", { className: "ps-pmv-section", children: [
9651
+ /* @__PURE__ */ jsx("div", { className: "ps-pmv-section-head", children: /* @__PURE__ */ jsxs("div", { className: "ps-pmv-section-title-row", children: [
9652
+ /* @__PURE__ */ jsx("div", { className: "ps-pmv-section-title", children: t("BODY MEASUREMENTS") }),
9653
+ !hasMeasurements && /* @__PURE__ */ jsxs("div", { className: "ps-pmv-loading-pill", children: [
9654
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-loading-spinner" }),
9655
+ /* @__PURE__ */ jsx("span", { children: t("Calculating...") })
9656
+ ] })
9657
+ ] }) }),
9658
+ /* @__PURE__ */ jsx("div", { className: "ps-pmv-measure-list", children: fields.map((f) => {
9659
+ const v = measurements[f.key];
9660
+ const Icon = f.Icon;
9661
+ return /* @__PURE__ */ jsxs("div", { className: `ps-pmv-measure-row${v == null && !editing ? " ps-loading" : ""}${editing ? " ps-editing" : ""}`, children: [
9662
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-measure-icon", children: /* @__PURE__ */ jsx(Icon, {}) }),
9663
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-measure-label", children: t(f.label) }),
9664
+ editing ? /* @__PURE__ */ jsxs("div", { className: "ps-pmv-measure-edit", children: [
9665
+ /* @__PURE__ */ jsx(
9666
+ "input",
9667
+ {
9668
+ type: "number",
9669
+ inputMode: "decimal",
9670
+ className: "ps-pmv-measure-input",
9671
+ value: draft[f.key] ?? "",
9672
+ placeholder: "—",
9673
+ onChange: (e) => handleDraftChange(f.key, e.target.value)
9674
+ }
9675
+ ),
9676
+ /* @__PURE__ */ jsx("span", { className: "ps-pmv-measure-input-unit", children: unit })
9677
+ ] }) : /* @__PURE__ */ jsx("span", { className: `ps-pmv-measure-value${v == null ? " ps-loading" : ""}`, children: v != null ? `${Math.round(v * 10) / 10} ${unit}` : "—" })
9678
+ ] }, f.key);
9679
+ }) })
9680
+ ] })
9681
+ ] })
9429
9682
  ] }),
9430
9683
  /* @__PURE__ */ jsxs("div", { className: "ps-pmv-actions", children: [
9431
9684
  /* @__PURE__ */ jsx("button", { type: "button", className: "ps-pmv-btn-secondary", onClick: editing ? handleEditCancel : onBack, children: editing ? t("Cancel") : t("Back") }),