@primestyleai/tryon 5.8.27 → 5.8.29

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.
@@ -965,10 +965,11 @@ const STYLES = `
965
965
  height: 100%; overflow: hidden;
966
966
  }
967
967
 
968
- /* Left image column — proper contained display */
968
+ /* Left image column — proper contained display.
969
+ No background — the product/try-on image sits directly on the modal
970
+ surface without a gray placeholder box behind it. */
969
971
  .ps-tryon-v2-bg {
970
972
  flex: 0 0 43%; position: relative; min-width: 0;
971
- background: var(--ps-bg-secondary);
972
973
  border-radius: 0.9vw; overflow: hidden;
973
974
  display: flex; align-items: center; justify-content: center;
974
975
  }
@@ -4096,30 +4097,32 @@ const STYLES = `
4096
4097
  overflow-y: auto; -webkit-overflow-scrolling: touch;
4097
4098
  padding: 4px 4px 32px;
4098
4099
  }
4099
- .ps-msp-header { margin-bottom: 18px; }
4100
+ .ps-msp-header { margin-bottom: clamp(10px, 0.85vw, 18px); }
4100
4101
  .ps-msp-title {
4101
- font-size: 26px; font-weight: 700;
4102
+ font-size: clamp(13px, 0.95vw, 18px);
4103
+ font-weight: 700;
4102
4104
  color: var(--ps-text-primary);
4103
- margin: 0 0 6px;
4104
- letter-spacing: -0.01em;
4105
+ margin: 0 0 clamp(2px, 0.2vw, 6px);
4106
+ letter-spacing: -0.005em;
4105
4107
  }
4106
4108
  .ps-msp-subtitle {
4107
- font-size: 13px; color: var(--ps-text-muted);
4109
+ font-size: clamp(10px, 0.7vw, 13px);
4110
+ color: var(--ps-text-muted);
4108
4111
  margin: 0; line-height: 1.5;
4109
4112
  }
4110
4113
 
4111
- /* Card grid */
4114
+ /* Card grid — compact saved profile cards */
4112
4115
  .ps-msp-grid {
4113
4116
  display: grid;
4114
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
4115
- gap: 14px;
4116
- margin-bottom: 28px;
4117
+ grid-template-columns: repeat(auto-fill, minmax(clamp(140px, 11vw, 200px), 1fr));
4118
+ gap: clamp(8px, 0.7vw, 14px);
4119
+ margin-bottom: clamp(14px, 1.2vw, 24px);
4117
4120
  }
4118
4121
  .ps-msp-card {
4119
4122
  background: var(--ps-bg-primary);
4120
4123
  border: 1px solid var(--ps-border-subtle);
4121
- border-radius: 12px;
4122
- padding: 14px;
4124
+ border-radius: clamp(8px, 0.6vw, 14px);
4125
+ padding: clamp(8px, 0.7vw, 14px);
4123
4126
  display: flex; flex-direction: column;
4124
4127
  transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;
4125
4128
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
@@ -4153,18 +4156,18 @@ const STYLES = `
4153
4156
  .ps-msp-avatar { color: var(--ps-accent); border-color: var(--ps-accent); }
4154
4157
  .ps-msp-avatar-tag { background: var(--ps-accent); }
4155
4158
 
4156
- /* Big circular profile avatar — only chrome on the card, no
4157
- rectangular hero. Shows the head crop via object-position 12%. */
4159
+ /* Compact circular profile avatar — vw-scaled. */
4158
4160
  .ps-msp-card-circle {
4159
- width: 110px; height: 110px;
4161
+ width: clamp(56px, 4.5vw, 90px);
4162
+ height: clamp(56px, 4.5vw, 90px);
4160
4163
  border-radius: 50%;
4161
4164
  background: var(--ps-bg-secondary);
4162
- border: 3px solid var(--ps-accent);
4163
- box-shadow: 0 6px 18px rgba(33, 84, 239, 0.18);
4165
+ border: 2px solid var(--ps-accent);
4166
+ box-shadow: 0 0.3vw 0.9vw rgba(33, 84, 239, 0.15);
4164
4167
  overflow: hidden;
4165
4168
  display: flex; align-items: center; justify-content: center;
4166
4169
  color: var(--ps-accent);
4167
- margin: 6px auto 14px;
4170
+ margin: clamp(4px, 0.35vw, 8px) auto clamp(8px, 0.7vw, 14px);
4168
4171
  }
4169
4172
  .ps-msp-card-circle img {
4170
4173
  width: 100%; height: 100%; object-fit: cover;
@@ -4189,42 +4192,47 @@ const STYLES = `
4189
4192
  }
4190
4193
 
4191
4194
  .ps-msp-card-name {
4192
- font-size: 16px; font-weight: 700;
4195
+ font-size: clamp(12px, 0.85vw, 16px);
4196
+ font-weight: 700;
4193
4197
  color: var(--ps-text-primary);
4194
- margin-bottom: 8px;
4198
+ margin-bottom: clamp(4px, 0.4vw, 10px);
4195
4199
  }
4196
4200
  .ps-msp-card-meta {
4197
4201
  display: flex; flex-direction: column;
4198
- gap: 4px;
4199
- margin-bottom: 12px;
4202
+ gap: clamp(2px, 0.2vw, 6px);
4203
+ margin-bottom: clamp(6px, 0.55vw, 14px);
4200
4204
  }
4201
4205
  .ps-msp-meta-row {
4202
4206
  display: flex; align-items: center; justify-content: space-between;
4203
- padding: 4px 0;
4207
+ padding: clamp(2px, 0.2vw, 6px) 0;
4204
4208
  border-bottom: 1px solid var(--ps-border-subtle);
4205
4209
  }
4206
4210
  .ps-msp-meta-row:last-child { border-bottom: none; }
4207
4211
  .ps-msp-meta-label {
4208
- font-size: 9px; font-weight: 600;
4212
+ font-size: clamp(8px, 0.55vw, 11px);
4213
+ font-weight: 600;
4209
4214
  letter-spacing: 0.1em; text-transform: uppercase;
4210
4215
  color: var(--ps-text-muted);
4211
4216
  }
4212
4217
  .ps-msp-meta-value {
4213
- font-size: 12px; font-weight: 600;
4218
+ font-size: clamp(10px, 0.7vw, 13px);
4219
+ font-weight: 600;
4214
4220
  color: var(--ps-text-primary);
4215
4221
  font-feature-settings: "tnum" 1;
4216
4222
  }
4217
4223
 
4218
4224
  .ps-msp-card-actions {
4219
- display: flex; gap: 8px;
4225
+ display: flex; gap: clamp(4px, 0.4vw, 10px);
4220
4226
  margin-top: auto;
4221
4227
  }
4222
4228
  .ps-msp-card-select {
4223
4229
  flex: 1;
4224
4230
  background: var(--ps-accent); color: #FFFFFF;
4225
- border: none; border-radius: 6px;
4226
- padding: 10px;
4227
- font-family: inherit; font-size: 11px; font-weight: 700;
4231
+ border: none; border-radius: clamp(4px, 0.35vw, 8px);
4232
+ padding: clamp(6px, 0.55vw, 12px);
4233
+ font-family: inherit;
4234
+ font-size: clamp(9px, 0.65vw, 12px);
4235
+ font-weight: 700;
4228
4236
  letter-spacing: 0.12em; text-transform: uppercase;
4229
4237
  cursor: pointer;
4230
4238
  transition: opacity 0.15s, transform 0.15s;
@@ -4329,14 +4337,15 @@ const STYLES = `
4329
4337
  }
4330
4338
  .ps-msp-edit-save:hover { opacity: 0.9; }
4331
4339
 
4332
- /* "Create New Profile" empty card */
4340
+ /* "Create New Profile" empty card — same compact size as the saved
4341
+ profile cards (no min-height forcing it taller). */
4333
4342
  .ps-msp-card-create {
4334
4343
  background: var(--ps-bg-secondary);
4335
4344
  border: 2px dashed var(--ps-border-color);
4336
4345
  align-items: center; justify-content: center;
4337
4346
  text-align: center;
4338
4347
  cursor: pointer;
4339
- min-height: 280px;
4348
+ min-height: 0;
4340
4349
  transition: border-color 0.15s, background 0.15s;
4341
4350
  }
4342
4351
  .ps-msp-card-create:hover {
@@ -4344,19 +4353,22 @@ const STYLES = `
4344
4353
  background: rgba(33,84,239,0.04);
4345
4354
  }
4346
4355
  .ps-msp-create-icon {
4347
- width: 50px; height: 50px;
4356
+ width: clamp(32px, 2.6vw, 48px);
4357
+ height: clamp(32px, 2.6vw, 48px);
4348
4358
  background: var(--ps-accent); color: #FFFFFF;
4349
- border-radius: 8px;
4359
+ border-radius: clamp(4px, 0.35vw, 8px);
4350
4360
  display: flex; align-items: center; justify-content: center;
4351
- margin-bottom: 12px;
4361
+ margin-bottom: clamp(6px, 0.55vw, 12px);
4352
4362
  }
4353
4363
  .ps-msp-create-title {
4354
- font-size: 15px; font-weight: 700;
4364
+ font-size: clamp(11px, 0.78vw, 14px);
4365
+ font-weight: 700;
4355
4366
  color: var(--ps-text-primary);
4356
- margin-bottom: 4px;
4367
+ margin-bottom: clamp(2px, 0.2vw, 6px);
4357
4368
  }
4358
4369
  .ps-msp-create-sub {
4359
- font-size: 9px; font-weight: 700;
4370
+ font-size: clamp(8px, 0.55vw, 11px);
4371
+ font-weight: 700;
4360
4372
  letter-spacing: 0.14em; text-transform: uppercase;
4361
4373
  color: var(--ps-text-muted);
4362
4374
  }
@@ -4449,17 +4461,21 @@ const STYLES = `
4449
4461
  overflow-x: hidden;
4450
4462
  }
4451
4463
 
4452
- /* Step header — single tiny title + a thin progress bar inline */
4464
+ /* Step header — single tiny title + a thin progress bar inline.
4465
+ All sizing is vw-based with sensible clamps so the wizard scales
4466
+ proportionally from a 320px phone all the way up to a 5000px display
4467
+ without losing its ratios. */
4453
4468
  .ps-cpw-step-head {
4454
4469
  display: flex; align-items: center; justify-content: space-between;
4455
- gap: 12px;
4456
- padding: 6px 16px;
4470
+ gap: clamp(8px, 0.75vw, 16px);
4471
+ padding: clamp(4px, 0.4vw, 10px) clamp(12px, 1vw, 22px);
4457
4472
  border-bottom: 1px solid var(--ps-border-subtle);
4458
4473
  flex-shrink: 0;
4459
4474
  }
4460
4475
  .ps-cpw-eyebrow { display: none; }
4461
4476
  .ps-cpw-step-title {
4462
- font-size: 11px; font-weight: 600;
4477
+ font-size: clamp(10px, 0.7vw, 14px);
4478
+ font-weight: 600;
4463
4479
  color: var(--ps-text-primary);
4464
4480
  letter-spacing: 0.02em;
4465
4481
  margin: 0;
@@ -4468,10 +4484,10 @@ const STYLES = `
4468
4484
  .ps-cpw-progress {
4469
4485
  display: flex; flex-direction: column; align-items: flex-end;
4470
4486
  gap: 0; flex-shrink: 0;
4471
- min-width: 80px;
4487
+ min-width: clamp(60px, 5vw, 100px);
4472
4488
  }
4473
4489
  .ps-cpw-progress-track {
4474
- width: 100%; height: 2px;
4490
+ width: 100%; height: clamp(2px, 0.12vw, 3px);
4475
4491
  background: var(--ps-border-color); border-radius: 2px;
4476
4492
  overflow: hidden;
4477
4493
  }
@@ -4483,30 +4499,29 @@ const STYLES = `
4483
4499
 
4484
4500
  .ps-cpw-body {
4485
4501
  display: flex; flex-direction: column;
4486
- gap: 14px;
4502
+ gap: clamp(10px, 0.85vw, 18px);
4487
4503
  flex: 1; min-height: 0;
4488
4504
  width: 100%; max-width: 100%;
4489
4505
  box-sizing: border-box;
4490
- /* Modal height is fixed by the parent — don't grow it. If a step
4491
- happens to be taller (rare), let it scroll inside the body
4492
- instead of forcing the modal to expand. */
4493
4506
  overflow-y: auto; overflow-x: hidden;
4494
4507
  -webkit-overflow-scrolling: touch;
4495
- padding: 14px 16px;
4508
+ padding: clamp(10px, 0.9vw, 18px) clamp(12px, 1vw, 22px);
4496
4509
  }
4497
4510
 
4498
- /* Step 1 — Identity form (compact) */
4511
+ /* Step 1 — Identity form (compact, vw-scaled) */
4499
4512
  .ps-cpw-identity {
4500
- display: flex; flex-direction: column; gap: 10px;
4513
+ display: flex; flex-direction: column;
4514
+ gap: clamp(8px, 0.7vw, 14px);
4501
4515
  flex: 1; min-height: 0;
4502
4516
  width: 100%; box-sizing: border-box;
4503
4517
  }
4504
4518
  .ps-cpw-field {
4505
4519
  display: flex; flex-direction: column;
4506
- gap: 6px;
4520
+ gap: clamp(4px, 0.4vw, 10px);
4507
4521
  }
4508
4522
  .ps-cpw-field-label {
4509
- font-size: 10px; font-weight: 700;
4523
+ font-size: clamp(9px, 0.62vw, 12px);
4524
+ font-weight: 700;
4510
4525
  letter-spacing: 0.14em; text-transform: uppercase;
4511
4526
  color: var(--ps-text-muted);
4512
4527
  }
@@ -4514,8 +4529,10 @@ const STYLES = `
4514
4529
  background: transparent; border: none;
4515
4530
  border-bottom: 1px solid var(--ps-border-color);
4516
4531
  color: var(--ps-text-primary);
4517
- font-family: inherit; font-size: 18px; font-weight: 500;
4518
- padding: 6px 0 8px;
4532
+ font-family: inherit;
4533
+ font-size: clamp(13px, 0.95vw, 18px);
4534
+ font-weight: 500;
4535
+ padding: clamp(4px, 0.4vw, 10px) 0 clamp(6px, 0.55vw, 12px);
4519
4536
  outline: none;
4520
4537
  transition: border-color 0.15s;
4521
4538
  }
@@ -4526,7 +4543,8 @@ const STYLES = `
4526
4543
  .ps-cpw-input[type="number"] { -moz-appearance: textfield; }
4527
4544
 
4528
4545
  .ps-cpw-pill-row {
4529
- display: flex; align-items: center; gap: 8px;
4546
+ display: flex; align-items: center;
4547
+ gap: clamp(6px, 0.5vw, 12px);
4530
4548
  flex-wrap: wrap;
4531
4549
  }
4532
4550
  .ps-cpw-pill-group {
@@ -4534,12 +4552,15 @@ const STYLES = `
4534
4552
  background: var(--ps-bg-secondary);
4535
4553
  border: 1px solid var(--ps-border-color);
4536
4554
  border-radius: 999px;
4537
- padding: 2px;
4555
+ padding: clamp(2px, 0.15vw, 4px);
4538
4556
  }
4539
4557
  .ps-cpw-pill {
4540
4558
  background: none; border: none;
4541
- padding: 5px 14px; border-radius: 999px;
4542
- font-family: inherit; font-size: 11px; font-weight: 600;
4559
+ padding: clamp(4px, 0.35vw, 8px) clamp(10px, 0.9vw, 20px);
4560
+ border-radius: 999px;
4561
+ font-family: inherit;
4562
+ font-size: clamp(10px, 0.7vw, 13px);
4563
+ font-weight: 600;
4543
4564
  color: var(--ps-text-secondary); cursor: pointer;
4544
4565
  transition: background 0.15s, color 0.15s;
4545
4566
  }
@@ -4549,29 +4570,31 @@ const STYLES = `
4549
4570
 
4550
4571
  .ps-cpw-field-grid {
4551
4572
  display: grid;
4552
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
4553
- gap: 24px;
4573
+ grid-template-columns: repeat(auto-fit, minmax(clamp(140px, 11vw, 220px), 1fr));
4574
+ gap: clamp(14px, 1.2vw, 28px);
4554
4575
  }
4555
4576
 
4556
4577
  /* Two-column split: inputs stacked left, photo right */
4557
4578
  .ps-cpw-split {
4558
4579
  display: grid;
4559
- grid-template-columns: 1fr 280px;
4560
- gap: 28px;
4580
+ grid-template-columns: 1fr clamp(180px, 14vw, 320px);
4581
+ gap: clamp(16px, 1.4vw, 32px);
4561
4582
  align-items: start;
4562
4583
  }
4563
4584
  .ps-cpw-split-left {
4564
- display: flex; flex-direction: column; gap: 22px;
4585
+ display: flex; flex-direction: column;
4586
+ gap: clamp(14px, 1.2vw, 24px);
4565
4587
  min-width: 0;
4566
4588
  }
4567
4589
  .ps-cpw-split-right {
4568
- display: flex; flex-direction: column; gap: 8px;
4590
+ display: flex; flex-direction: column;
4591
+ gap: clamp(6px, 0.55vw, 12px);
4569
4592
  min-width: 0;
4570
4593
  }
4571
4594
  .ps-cpw-error {
4572
- font-size: 12px;
4595
+ font-size: clamp(10px, 0.72vw, 13px);
4573
4596
  color: var(--ps-error-color);
4574
- margin-top: -6px;
4597
+ margin-top: calc(clamp(4px, 0.4vw, 10px) * -1);
4575
4598
  }
4576
4599
 
4577
4600
  /* Optional photo upload (step 1) */
@@ -4627,67 +4650,84 @@ const STYLES = `
4627
4650
  display: flex; align-items: center; justify-content: center;
4628
4651
  }
4629
4652
 
4630
- /* Step 2 — Silhouette */
4653
+ /* Step 2 — Silhouette (vw-scaled) */
4631
4654
  .ps-cpw-silhouette {
4632
- display: flex; flex-direction: column; gap: 28px;
4655
+ display: flex; flex-direction: column;
4656
+ gap: clamp(16px, 1.4vw, 32px);
4633
4657
  }
4634
4658
  .ps-cpw-section {
4635
- display: flex; flex-direction: column; gap: 14px;
4659
+ display: flex; flex-direction: column;
4660
+ gap: clamp(8px, 0.7vw, 16px);
4636
4661
  }
4637
4662
  .ps-cpw-section-head {
4638
- display: flex; flex-direction: column; gap: 4px;
4663
+ display: flex; flex-direction: column;
4664
+ gap: clamp(2px, 0.2vw, 6px);
4639
4665
  }
4640
4666
  .ps-cpw-section-title {
4641
- font-size: 11px; font-weight: 700;
4667
+ font-size: clamp(10px, 0.72vw, 14px);
4668
+ font-weight: 700;
4642
4669
  letter-spacing: 0.14em; text-transform: uppercase;
4643
4670
  color: var(--ps-text-primary);
4644
4671
  }
4645
4672
  .ps-cpw-section-sub {
4646
- font-size: 12px; font-weight: 400;
4673
+ font-size: clamp(10px, 0.7vw, 13px);
4674
+ font-weight: 400;
4647
4675
  color: var(--ps-text-muted);
4648
4676
  }
4649
4677
  .ps-cpw-card-row {
4650
4678
  display: grid;
4651
4679
  grid-template-columns: repeat(3, 1fr);
4652
- gap: 12px;
4680
+ gap: clamp(8px, 0.75vw, 16px);
4681
+ /* Inside a flex parent (ProgressiveStep with flex:1), let the row
4682
+ claim leftover vertical space so the cards stretch to fill it. */
4683
+ flex: 1; min-height: 0;
4653
4684
  }
4654
4685
  .ps-cpw-bra-row {
4655
4686
  display: grid;
4656
4687
  grid-template-columns: 1fr 1fr;
4657
- gap: 12px;
4688
+ gap: clamp(8px, 0.75vw, 16px);
4658
4689
  }
4659
4690
  .ps-cpw-bra-field {
4660
- display: flex; flex-direction: column; gap: 6px;
4691
+ display: flex; flex-direction: column;
4692
+ gap: clamp(4px, 0.4vw, 10px);
4661
4693
  }
4662
4694
  .ps-cpw-card {
4663
4695
  display: flex; flex-direction: column; align-items: center;
4664
4696
  background: var(--ps-bg-primary);
4665
4697
  border: 2px solid var(--ps-border-subtle);
4666
- border-radius: 10px;
4667
- padding: 14px 8px 10px;
4698
+ border-radius: clamp(8px, 0.6vw, 14px);
4699
+ padding: clamp(10px, 0.85vw, 18px) clamp(6px, 0.5vw, 12px) clamp(8px, 0.65vw, 14px);
4668
4700
  cursor: pointer; font-family: inherit;
4669
4701
  transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;
4702
+ /* Stretch inside the grid track so all 3 cards in the row fill
4703
+ the available height equally. */
4704
+ min-width: 0; min-height: 0;
4670
4705
  }
4671
4706
  .ps-cpw-card:hover {
4672
4707
  border-color: rgba(33, 84, 239, 0.35);
4673
4708
  }
4674
4709
  .ps-cpw-card.ps-active {
4675
4710
  border-color: var(--ps-accent);
4676
- box-shadow: 0 6px 16px rgba(33, 84, 239, 0.12);
4711
+ box-shadow: 0 0.4vw 1.1vw rgba(33, 84, 239, 0.16);
4677
4712
  transform: translateY(-1px);
4678
4713
  }
4679
4714
  .ps-cpw-card-thumb {
4680
- width: 100%; height: 110px;
4715
+ width: 100%;
4716
+ /* Fills whatever space the card has — combined with the card's
4717
+ min-height: 0, this lets the thumb image grow with viewport size
4718
+ and stretch to fill the wizard body. */
4719
+ flex: 1; min-height: 0;
4681
4720
  display: flex; align-items: center; justify-content: center;
4682
4721
  overflow: hidden;
4683
- margin-bottom: 8px;
4722
+ margin-bottom: clamp(4px, 0.4vw, 10px);
4684
4723
  }
4685
4724
  .ps-cpw-card-thumb img {
4686
4725
  max-width: 100%; max-height: 100%;
4687
4726
  object-fit: contain;
4688
4727
  }
4689
4728
  .ps-cpw-card-label {
4690
- font-size: 10px; font-weight: 700;
4729
+ font-size: clamp(9px, 0.65vw, 12px);
4730
+ font-weight: 700;
4691
4731
  letter-spacing: 0.12em; text-transform: uppercase;
4692
4732
  color: var(--ps-text-muted);
4693
4733
  }
@@ -4695,11 +4735,11 @@ const STYLES = `
4695
4735
  color: var(--ps-accent);
4696
4736
  }
4697
4737
 
4698
- /* Footer actions — sticky at the bottom (compact) */
4738
+ /* Footer actions — vw-scaled */
4699
4739
  .ps-cpw-footer {
4700
4740
  display: flex; align-items: center; justify-content: space-between;
4701
- gap: 10px;
4702
- padding: 8px 16px;
4741
+ gap: clamp(8px, 0.7vw, 14px);
4742
+ padding: clamp(6px, 0.55vw, 12px) clamp(12px, 1vw, 22px);
4703
4743
  border-top: 1px solid var(--ps-border-subtle);
4704
4744
  background: var(--ps-bg-primary);
4705
4745
  flex-shrink: 0;
@@ -4707,20 +4747,25 @@ const STYLES = `
4707
4747
  .ps-cpw-back-btn {
4708
4748
  background: none; border: none;
4709
4749
  color: var(--ps-text-secondary);
4710
- font-family: inherit; font-size: 11px; font-weight: 600;
4711
- cursor: pointer; padding: 8px 4px;
4750
+ font-family: inherit;
4751
+ font-size: clamp(10px, 0.7vw, 13px);
4752
+ font-weight: 600;
4753
+ cursor: pointer;
4754
+ padding: clamp(6px, 0.55vw, 12px) clamp(2px, 0.2vw, 6px);
4712
4755
  transition: color 0.15s;
4713
4756
  }
4714
4757
  .ps-cpw-back-btn:hover { color: var(--ps-text-primary); }
4715
4758
  .ps-cpw-next-btn {
4716
4759
  background: var(--ps-accent); color: #FFFFFF;
4717
- border: none; border-radius: 6px;
4718
- padding: 10px 22px;
4719
- font-family: inherit; font-size: 11px; font-weight: 700;
4760
+ border: none; border-radius: clamp(4px, 0.35vw, 8px);
4761
+ padding: clamp(8px, 0.7vw, 14px) clamp(16px, 1.4vw, 28px);
4762
+ font-family: inherit;
4763
+ font-size: clamp(10px, 0.7vw, 13px);
4764
+ font-weight: 700;
4720
4765
  letter-spacing: 0.1em; text-transform: uppercase;
4721
4766
  cursor: pointer;
4722
4767
  transition: opacity 0.15s, transform 0.15s, box-shadow 0.15s;
4723
- box-shadow: 0 4px 12px rgba(33, 84, 239, 0.16);
4768
+ box-shadow: 0 0.25vw 0.8vw rgba(33, 84, 239, 0.16);
4724
4769
  }
4725
4770
  .ps-cpw-next-btn:disabled {
4726
4771
  background: var(--ps-border-color);
@@ -4731,33 +4776,18 @@ const STYLES = `
4731
4776
  .ps-cpw-next-btn:hover { opacity: 0.92; }
4732
4777
  .ps-cpw-next-btn:active { transform: scale(0.98); }
4733
4778
 
4734
- @media (max-width: 768px) {
4735
- .ps-cpw-root { gap: 14px; }
4736
- .ps-cpw-step-head {
4737
- flex-direction: column; gap: 10px;
4738
- padding-bottom: 12px;
4739
- }
4740
- .ps-cpw-progress { min-width: 0; width: 100%; align-items: flex-start; margin-top: 0; }
4741
- .ps-cpw-step-title { font-size: 22px; }
4742
- .ps-cpw-field-grid { grid-template-columns: 1fr; gap: 18px; }
4743
- .ps-cpw-split { grid-template-columns: 1fr; gap: 18px; }
4744
- .ps-cpw-photo-preview { max-width: 220px; }
4745
- .ps-cpw-card-row { gap: 8px; }
4746
- .ps-cpw-card { padding: 10px 6px 8px; }
4747
- .ps-cpw-card-thumb { height: 80px; }
4748
- .ps-cpw-card-label { font-size: 9px; }
4749
- .ps-cpw-footer { flex-direction: column-reverse; gap: 10px; align-items: stretch; }
4750
- .ps-cpw-next-btn { width: 100%; padding: 14px; }
4751
- .ps-cpw-back-btn { text-align: center; }
4752
- .ps-cpw-method-grid { grid-template-columns: 1fr; }
4753
- .ps-cpw-method-card { padding: 22px 18px; }
4754
- .ps-cpw-photo-frame { max-width: 100%; height: 320px; }
4755
- }
4779
+ /* No wizard-specific @media (max-width: 768px) overrides anymore.
4780
+ Every ps-cpw-* rule is clamp/vw-driven, so the layout shrinks
4781
+ gracefully from 320px → 5000px without a hard breakpoint. */
4756
4782
 
4757
4783
  /* ── Progressive (one-question-at-a-time) flow ── */
4758
4784
  .ps-cpw-progressive {
4759
- display: flex; flex-direction: column; gap: 16px;
4760
- padding: 8px 0;
4785
+ display: flex; flex-direction: column;
4786
+ gap: clamp(12px, 1vw, 22px);
4787
+ padding: clamp(6px, 0.5vw, 12px) 0;
4788
+ /* Fills the wizard body so the card row can stretch vertically */
4789
+ flex: 1; min-height: 0;
4790
+ width: 100%; box-sizing: border-box;
4761
4791
  }
4762
4792
  .ps-cpw-fade-in {
4763
4793
  animation: ps-cpw-fade-up 0.35s cubic-bezier(0.16, 1, 0.3, 1);
@@ -4767,34 +4797,34 @@ const STYLES = `
4767
4797
  to { opacity: 1; transform: translateY(0); }
4768
4798
  }
4769
4799
 
4770
- /* ── Method picker (initial step) — vertical stack of compact rows ── */
4800
+ /* ── Method picker (initial step) — cards stretch to fill body ── */
4771
4801
  .ps-cpw-method-picker {
4772
4802
  display: flex; flex-direction: column;
4773
- gap: 10px; padding: 8px 0;
4803
+ gap: clamp(8px, 0.7vw, 14px);
4804
+ padding: clamp(4px, 0.4vw, 10px) 0;
4774
4805
  flex: 1; min-height: 0;
4775
4806
  width: 100%; box-sizing: border-box;
4776
- justify-content: center;
4777
4807
  }
4778
4808
  .ps-cpw-method-intro { display: none; }
4779
- /* Two cards side by side. Each card stacks the illustration on top
4780
- and the text below keeps the cards short and lets the picker fit
4781
- inside the wizard body without changing the modal height. */
4809
+ /* Grid claims the picker's leftover height so the cards inside
4810
+ stretch vertically to fill it. */
4782
4811
  .ps-cpw-method-grid {
4783
4812
  display: grid;
4784
4813
  grid-template-columns: 1fr 1fr;
4785
- gap: 12px;
4814
+ gap: clamp(8px, 0.75vw, 16px);
4786
4815
  width: 100%; max-width: 100%;
4787
4816
  box-sizing: border-box;
4817
+ flex: 1; min-height: 0;
4788
4818
  }
4789
4819
  .ps-cpw-method-card {
4790
4820
  display: flex; flex-direction: column; align-items: stretch;
4791
4821
  gap: 0;
4792
- min-width: 0;
4822
+ min-width: 0; min-height: 0;
4793
4823
  width: 100%; max-width: 100%;
4794
4824
  box-sizing: border-box;
4795
4825
  background: var(--ps-bg-primary);
4796
4826
  border: 1.5px solid var(--ps-border-subtle);
4797
- border-radius: 10px;
4827
+ border-radius: clamp(8px, 0.6vw, 14px);
4798
4828
  overflow: hidden;
4799
4829
  cursor: pointer; font-family: inherit; text-align: left;
4800
4830
  transition: border-color 0.18s, transform 0.18s, box-shadow 0.18s;
@@ -4802,34 +4832,40 @@ const STYLES = `
4802
4832
  .ps-cpw-method-card:hover {
4803
4833
  border-color: var(--ps-accent);
4804
4834
  transform: translateY(-1px);
4805
- box-shadow: 0 6px 18px rgba(33, 84, 239, 0.10);
4835
+ box-shadow: 0 0.4vw 1.2vw rgba(33, 84, 239, 0.10);
4806
4836
  }
4807
- /* Square-ish illustration slot at the top of each card */
4837
+ /* Illustration fills the upper portion of each card — flex 1 instead
4838
+ of a fixed height so the image grows with the available card height
4839
+ instead of leaving empty space. */
4808
4840
  .ps-cpw-method-img {
4809
4841
  width: 100%;
4810
- aspect-ratio: 1 / 1;
4811
- flex-shrink: 0;
4842
+ flex: 1; min-height: 0;
4812
4843
  background: var(--ps-bg-secondary);
4813
4844
  display: flex; align-items: center; justify-content: center;
4814
4845
  border-bottom: 1px solid var(--ps-border-subtle);
4846
+ padding: clamp(6px, 0.6vw, 14px);
4847
+ box-sizing: border-box;
4815
4848
  }
4816
4849
  .ps-cpw-method-img img {
4817
4850
  width: 100%; height: 100%;
4851
+ max-width: 100%; max-height: 100%;
4818
4852
  object-fit: contain;
4819
4853
  display: block;
4820
4854
  }
4821
4855
  .ps-cpw-method-text {
4822
- display: flex; flex-direction: column; gap: 3px;
4823
- padding: 10px 12px 12px;
4856
+ display: flex; flex-direction: column; gap: clamp(2px, 0.15vw, 4px);
4857
+ padding: clamp(6px, 0.55vw, 12px) clamp(8px, 0.7vw, 14px) clamp(8px, 0.7vw, 14px);
4824
4858
  width: 100%; box-sizing: border-box;
4825
4859
  }
4826
4860
  .ps-cpw-method-title {
4827
- font-size: 13px; font-weight: 700;
4861
+ font-size: clamp(11px, 0.78vw, 15px);
4862
+ font-weight: 700;
4828
4863
  color: var(--ps-text-primary);
4829
4864
  letter-spacing: -0.005em;
4830
4865
  }
4831
4866
  .ps-cpw-method-desc {
4832
- font-size: 11px; line-height: 1.4;
4867
+ font-size: clamp(9px, 0.65vw, 12px);
4868
+ line-height: 1.4;
4833
4869
  color: var(--ps-text-muted);
4834
4870
  }
4835
4871
  /* Wizard reuses the SDK basics screen's .ps-bp-inline-* row styles for
@@ -4837,53 +4873,48 @@ const STYLES = `
4837
4873
  them inside the wizard body so all rows fit without scrolling. */
4838
4874
  .ps-cpw-inline-fields {
4839
4875
  width: 100%;
4840
- margin-top: 4px;
4841
- /* Generous breathing room between rows so the inputs don't feel
4842
- cramped together — each row owns its own divider. */
4876
+ margin-top: clamp(2px, 0.2vw, 6px);
4843
4877
  display: flex; flex-direction: column;
4844
- gap: 6px;
4878
+ gap: clamp(4px, 0.4vw, 10px);
4845
4879
  }
4846
4880
  .ps-cpw-inline-fields .ps-bp-inline-row {
4847
- padding: 14px 2px;
4881
+ padding: clamp(10px, 0.9vw, 18px) clamp(1px, 0.1vw, 4px);
4848
4882
  border-bottom: 1px solid var(--ps-border-subtle);
4849
4883
  }
4850
4884
  .ps-cpw-inline-fields .ps-bp-inline-row:last-child { border-bottom: none; }
4851
4885
  .ps-cpw-inline-fields .ps-bp-inline-label {
4852
- flex: 0 0 70px;
4853
- font-size: 10px;
4886
+ flex: 0 0 clamp(56px, 4.5vw, 90px);
4887
+ font-size: clamp(9px, 0.62vw, 12px);
4854
4888
  font-weight: 700;
4855
- color: var(--ps-text-primary); /* black labels */
4889
+ color: var(--ps-text-primary);
4856
4890
  letter-spacing: 0.08em;
4857
4891
  }
4858
4892
  .ps-cpw-inline-fields .ps-bp-inline-input {
4859
- font-size: 14px;
4893
+ font-size: clamp(12px, 0.85vw, 16px);
4860
4894
  padding-bottom: 0;
4861
- border-bottom: none; /* parent row owns the divider */
4895
+ border-bottom: none;
4862
4896
  color: var(--ps-text-primary);
4863
4897
  }
4864
4898
  .ps-cpw-inline-fields .ps-bp-inline-unit {
4865
- font-size: 11px;
4899
+ font-size: clamp(10px, 0.7vw, 13px);
4866
4900
  color: var(--ps-text-muted);
4867
4901
  }
4868
4902
 
4869
- /* ── Image path — single combined screen ──
4870
- Gender pills + name input + photo dropzone (or preview) all on one
4871
- screen with no scrolling. The dropzone/preview takes whatever
4872
- vertical space is left after the inputs. */
4903
+ /* ── Image path — single combined screen, vw-scaled ── */
4873
4904
  .ps-cpw-image-combined {
4874
4905
  display: flex; flex-direction: column; align-items: stretch;
4875
- gap: 10px;
4906
+ gap: clamp(8px, 0.7vw, 14px);
4876
4907
  flex: 1; min-height: 0;
4877
4908
  width: 100%; box-sizing: border-box;
4878
4909
  }
4879
4910
  .ps-cpw-photo-dropzone {
4880
4911
  display: flex; flex-direction: column; align-items: center; justify-content: center;
4881
- gap: 6px;
4912
+ gap: clamp(4px, 0.4vw, 10px);
4882
4913
  flex: 1; min-height: 0;
4883
4914
  width: 100%; box-sizing: border-box;
4884
- padding: 14px;
4915
+ padding: clamp(10px, 0.9vw, 18px);
4885
4916
  border: 2px dashed var(--ps-border-color);
4886
- border-radius: 10px;
4917
+ border-radius: clamp(8px, 0.6vw, 14px);
4887
4918
  background: var(--ps-bg-secondary);
4888
4919
  color: var(--ps-text-muted);
4889
4920
  cursor: pointer; font-family: inherit;
@@ -4892,17 +4923,19 @@ const STYLES = `
4892
4923
  .ps-cpw-photo-dropzone:hover { border-color: var(--ps-accent); background: rgba(33, 84, 239, 0.04); }
4893
4924
  .ps-cpw-photo-dropzone:disabled { opacity: 0.6; cursor: default; }
4894
4925
  .ps-cpw-photo-dropzone-title {
4895
- font-size: 12px; font-weight: 600; color: var(--ps-text-primary);
4926
+ font-size: clamp(11px, 0.78vw, 14px);
4927
+ font-weight: 600; color: var(--ps-text-primary);
4896
4928
  }
4897
4929
  .ps-cpw-photo-dropzone-hint {
4898
- font-size: 10px; color: var(--ps-text-muted);
4930
+ font-size: clamp(9px, 0.62vw, 12px);
4931
+ color: var(--ps-text-muted);
4899
4932
  }
4900
4933
  .ps-cpw-photo-frame {
4901
4934
  position: relative;
4902
4935
  flex: 1; min-height: 0;
4903
4936
  width: 100%;
4904
4937
  background: var(--ps-bg-secondary);
4905
- border-radius: 10px;
4938
+ border-radius: clamp(8px, 0.6vw, 14px);
4906
4939
  overflow: hidden;
4907
4940
  border: 1px solid var(--ps-border-subtle);
4908
4941
  }
@@ -4913,25 +4946,27 @@ const STYLES = `
4913
4946
  }
4914
4947
  .ps-cpw-photo-retake {
4915
4948
  align-self: center;
4916
- padding: 12px 24px;
4949
+ padding: clamp(8px, 0.7vw, 14px) clamp(16px, 1.4vw, 28px);
4917
4950
  border-radius: 999px;
4918
4951
  background: transparent;
4919
4952
  color: var(--ps-accent);
4920
4953
  border: 2px solid var(--ps-accent);
4921
- font-weight: 700; font-size: 12px;
4954
+ font-weight: 700;
4955
+ font-size: clamp(10px, 0.7vw, 13px);
4922
4956
  text-transform: uppercase; letter-spacing: 0.08em;
4923
4957
  cursor: pointer; font-family: inherit;
4924
4958
  transition: background 0.18s;
4925
4959
  }
4926
4960
  .ps-cpw-photo-retake:hover { background: rgba(33, 84, 239, 0.08); }
4927
4961
  .ps-cpw-hint {
4928
- font-size: 12.5px; line-height: 1.6;
4962
+ font-size: clamp(10px, 0.72vw, 13px);
4963
+ line-height: 1.6;
4929
4964
  color: var(--ps-text-muted);
4930
- margin: 8px 0 0;
4931
- padding: 12px 14px;
4965
+ margin: clamp(4px, 0.4vw, 10px) 0 0;
4966
+ padding: clamp(8px, 0.7vw, 14px) clamp(10px, 0.85vw, 16px);
4932
4967
  background: rgba(33, 84, 239, 0.05);
4933
4968
  border-left: 3px solid var(--ps-accent);
4934
- border-radius: 6px;
4969
+ border-radius: clamp(4px, 0.35vw, 8px);
4935
4970
  }
4936
4971
 
4937
4972
  /* ════════════════════════════════════════════════════════════════