@primestyleai/tryon 5.8.27 → 5.8.28

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.
@@ -4096,30 +4096,32 @@ const STYLES = `
4096
4096
  overflow-y: auto; -webkit-overflow-scrolling: touch;
4097
4097
  padding: 4px 4px 32px;
4098
4098
  }
4099
- .ps-msp-header { margin-bottom: 18px; }
4099
+ .ps-msp-header { margin-bottom: clamp(10px, 0.85vw, 18px); }
4100
4100
  .ps-msp-title {
4101
- font-size: 26px; font-weight: 700;
4101
+ font-size: clamp(13px, 0.95vw, 18px);
4102
+ font-weight: 700;
4102
4103
  color: var(--ps-text-primary);
4103
- margin: 0 0 6px;
4104
- letter-spacing: -0.01em;
4104
+ margin: 0 0 clamp(2px, 0.2vw, 6px);
4105
+ letter-spacing: -0.005em;
4105
4106
  }
4106
4107
  .ps-msp-subtitle {
4107
- font-size: 13px; color: var(--ps-text-muted);
4108
+ font-size: clamp(10px, 0.7vw, 13px);
4109
+ color: var(--ps-text-muted);
4108
4110
  margin: 0; line-height: 1.5;
4109
4111
  }
4110
4112
 
4111
- /* Card grid */
4113
+ /* Card grid — compact saved profile cards */
4112
4114
  .ps-msp-grid {
4113
4115
  display: grid;
4114
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
4115
- gap: 14px;
4116
- margin-bottom: 28px;
4116
+ grid-template-columns: repeat(auto-fill, minmax(clamp(140px, 11vw, 200px), 1fr));
4117
+ gap: clamp(8px, 0.7vw, 14px);
4118
+ margin-bottom: clamp(14px, 1.2vw, 24px);
4117
4119
  }
4118
4120
  .ps-msp-card {
4119
4121
  background: var(--ps-bg-primary);
4120
4122
  border: 1px solid var(--ps-border-subtle);
4121
- border-radius: 12px;
4122
- padding: 14px;
4123
+ border-radius: clamp(8px, 0.6vw, 14px);
4124
+ padding: clamp(8px, 0.7vw, 14px);
4123
4125
  display: flex; flex-direction: column;
4124
4126
  transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;
4125
4127
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
@@ -4153,18 +4155,18 @@ const STYLES = `
4153
4155
  .ps-msp-avatar { color: var(--ps-accent); border-color: var(--ps-accent); }
4154
4156
  .ps-msp-avatar-tag { background: var(--ps-accent); }
4155
4157
 
4156
- /* Big circular profile avatar — only chrome on the card, no
4157
- rectangular hero. Shows the head crop via object-position 12%. */
4158
+ /* Compact circular profile avatar — vw-scaled. */
4158
4159
  .ps-msp-card-circle {
4159
- width: 110px; height: 110px;
4160
+ width: clamp(56px, 4.5vw, 90px);
4161
+ height: clamp(56px, 4.5vw, 90px);
4160
4162
  border-radius: 50%;
4161
4163
  background: var(--ps-bg-secondary);
4162
- border: 3px solid var(--ps-accent);
4163
- box-shadow: 0 6px 18px rgba(33, 84, 239, 0.18);
4164
+ border: 2px solid var(--ps-accent);
4165
+ box-shadow: 0 0.3vw 0.9vw rgba(33, 84, 239, 0.15);
4164
4166
  overflow: hidden;
4165
4167
  display: flex; align-items: center; justify-content: center;
4166
4168
  color: var(--ps-accent);
4167
- margin: 6px auto 14px;
4169
+ margin: clamp(4px, 0.35vw, 8px) auto clamp(8px, 0.7vw, 14px);
4168
4170
  }
4169
4171
  .ps-msp-card-circle img {
4170
4172
  width: 100%; height: 100%; object-fit: cover;
@@ -4189,42 +4191,47 @@ const STYLES = `
4189
4191
  }
4190
4192
 
4191
4193
  .ps-msp-card-name {
4192
- font-size: 16px; font-weight: 700;
4194
+ font-size: clamp(12px, 0.85vw, 16px);
4195
+ font-weight: 700;
4193
4196
  color: var(--ps-text-primary);
4194
- margin-bottom: 8px;
4197
+ margin-bottom: clamp(4px, 0.4vw, 10px);
4195
4198
  }
4196
4199
  .ps-msp-card-meta {
4197
4200
  display: flex; flex-direction: column;
4198
- gap: 4px;
4199
- margin-bottom: 12px;
4201
+ gap: clamp(2px, 0.2vw, 6px);
4202
+ margin-bottom: clamp(6px, 0.55vw, 14px);
4200
4203
  }
4201
4204
  .ps-msp-meta-row {
4202
4205
  display: flex; align-items: center; justify-content: space-between;
4203
- padding: 4px 0;
4206
+ padding: clamp(2px, 0.2vw, 6px) 0;
4204
4207
  border-bottom: 1px solid var(--ps-border-subtle);
4205
4208
  }
4206
4209
  .ps-msp-meta-row:last-child { border-bottom: none; }
4207
4210
  .ps-msp-meta-label {
4208
- font-size: 9px; font-weight: 600;
4211
+ font-size: clamp(8px, 0.55vw, 11px);
4212
+ font-weight: 600;
4209
4213
  letter-spacing: 0.1em; text-transform: uppercase;
4210
4214
  color: var(--ps-text-muted);
4211
4215
  }
4212
4216
  .ps-msp-meta-value {
4213
- font-size: 12px; font-weight: 600;
4217
+ font-size: clamp(10px, 0.7vw, 13px);
4218
+ font-weight: 600;
4214
4219
  color: var(--ps-text-primary);
4215
4220
  font-feature-settings: "tnum" 1;
4216
4221
  }
4217
4222
 
4218
4223
  .ps-msp-card-actions {
4219
- display: flex; gap: 8px;
4224
+ display: flex; gap: clamp(4px, 0.4vw, 10px);
4220
4225
  margin-top: auto;
4221
4226
  }
4222
4227
  .ps-msp-card-select {
4223
4228
  flex: 1;
4224
4229
  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;
4230
+ border: none; border-radius: clamp(4px, 0.35vw, 8px);
4231
+ padding: clamp(6px, 0.55vw, 12px);
4232
+ font-family: inherit;
4233
+ font-size: clamp(9px, 0.65vw, 12px);
4234
+ font-weight: 700;
4228
4235
  letter-spacing: 0.12em; text-transform: uppercase;
4229
4236
  cursor: pointer;
4230
4237
  transition: opacity 0.15s, transform 0.15s;
@@ -4329,14 +4336,15 @@ const STYLES = `
4329
4336
  }
4330
4337
  .ps-msp-edit-save:hover { opacity: 0.9; }
4331
4338
 
4332
- /* "Create New Profile" empty card */
4339
+ /* "Create New Profile" empty card — same compact size as the saved
4340
+ profile cards (no min-height forcing it taller). */
4333
4341
  .ps-msp-card-create {
4334
4342
  background: var(--ps-bg-secondary);
4335
4343
  border: 2px dashed var(--ps-border-color);
4336
4344
  align-items: center; justify-content: center;
4337
4345
  text-align: center;
4338
4346
  cursor: pointer;
4339
- min-height: 280px;
4347
+ min-height: 0;
4340
4348
  transition: border-color 0.15s, background 0.15s;
4341
4349
  }
4342
4350
  .ps-msp-card-create:hover {
@@ -4344,19 +4352,22 @@ const STYLES = `
4344
4352
  background: rgba(33,84,239,0.04);
4345
4353
  }
4346
4354
  .ps-msp-create-icon {
4347
- width: 50px; height: 50px;
4355
+ width: clamp(32px, 2.6vw, 48px);
4356
+ height: clamp(32px, 2.6vw, 48px);
4348
4357
  background: var(--ps-accent); color: #FFFFFF;
4349
- border-radius: 8px;
4358
+ border-radius: clamp(4px, 0.35vw, 8px);
4350
4359
  display: flex; align-items: center; justify-content: center;
4351
- margin-bottom: 12px;
4360
+ margin-bottom: clamp(6px, 0.55vw, 12px);
4352
4361
  }
4353
4362
  .ps-msp-create-title {
4354
- font-size: 15px; font-weight: 700;
4363
+ font-size: clamp(11px, 0.78vw, 14px);
4364
+ font-weight: 700;
4355
4365
  color: var(--ps-text-primary);
4356
- margin-bottom: 4px;
4366
+ margin-bottom: clamp(2px, 0.2vw, 6px);
4357
4367
  }
4358
4368
  .ps-msp-create-sub {
4359
- font-size: 9px; font-weight: 700;
4369
+ font-size: clamp(8px, 0.55vw, 11px);
4370
+ font-weight: 700;
4360
4371
  letter-spacing: 0.14em; text-transform: uppercase;
4361
4372
  color: var(--ps-text-muted);
4362
4373
  }
@@ -4449,17 +4460,21 @@ const STYLES = `
4449
4460
  overflow-x: hidden;
4450
4461
  }
4451
4462
 
4452
- /* Step header — single tiny title + a thin progress bar inline */
4463
+ /* Step header — single tiny title + a thin progress bar inline.
4464
+ All sizing is vw-based with sensible clamps so the wizard scales
4465
+ proportionally from a 320px phone all the way up to a 5000px display
4466
+ without losing its ratios. */
4453
4467
  .ps-cpw-step-head {
4454
4468
  display: flex; align-items: center; justify-content: space-between;
4455
- gap: 12px;
4456
- padding: 6px 16px;
4469
+ gap: clamp(8px, 0.75vw, 16px);
4470
+ padding: clamp(4px, 0.4vw, 10px) clamp(12px, 1vw, 22px);
4457
4471
  border-bottom: 1px solid var(--ps-border-subtle);
4458
4472
  flex-shrink: 0;
4459
4473
  }
4460
4474
  .ps-cpw-eyebrow { display: none; }
4461
4475
  .ps-cpw-step-title {
4462
- font-size: 11px; font-weight: 600;
4476
+ font-size: clamp(10px, 0.7vw, 14px);
4477
+ font-weight: 600;
4463
4478
  color: var(--ps-text-primary);
4464
4479
  letter-spacing: 0.02em;
4465
4480
  margin: 0;
@@ -4468,10 +4483,10 @@ const STYLES = `
4468
4483
  .ps-cpw-progress {
4469
4484
  display: flex; flex-direction: column; align-items: flex-end;
4470
4485
  gap: 0; flex-shrink: 0;
4471
- min-width: 80px;
4486
+ min-width: clamp(60px, 5vw, 100px);
4472
4487
  }
4473
4488
  .ps-cpw-progress-track {
4474
- width: 100%; height: 2px;
4489
+ width: 100%; height: clamp(2px, 0.12vw, 3px);
4475
4490
  background: var(--ps-border-color); border-radius: 2px;
4476
4491
  overflow: hidden;
4477
4492
  }
@@ -4483,21 +4498,19 @@ const STYLES = `
4483
4498
 
4484
4499
  .ps-cpw-body {
4485
4500
  display: flex; flex-direction: column;
4486
- gap: 14px;
4501
+ gap: clamp(10px, 0.85vw, 18px);
4487
4502
  flex: 1; min-height: 0;
4488
4503
  width: 100%; max-width: 100%;
4489
4504
  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
4505
  overflow-y: auto; overflow-x: hidden;
4494
4506
  -webkit-overflow-scrolling: touch;
4495
- padding: 14px 16px;
4507
+ padding: clamp(10px, 0.9vw, 18px) clamp(12px, 1vw, 22px);
4496
4508
  }
4497
4509
 
4498
- /* Step 1 — Identity form (compact) */
4510
+ /* Step 1 — Identity form (compact, vw-scaled) */
4499
4511
  .ps-cpw-identity {
4500
- display: flex; flex-direction: column; gap: 10px;
4512
+ display: flex; flex-direction: column;
4513
+ gap: clamp(8px, 0.7vw, 14px);
4501
4514
  flex: 1; min-height: 0;
4502
4515
  width: 100%; box-sizing: border-box;
4503
4516
  }
@@ -4526,7 +4539,8 @@ const STYLES = `
4526
4539
  .ps-cpw-input[type="number"] { -moz-appearance: textfield; }
4527
4540
 
4528
4541
  .ps-cpw-pill-row {
4529
- display: flex; align-items: center; gap: 8px;
4542
+ display: flex; align-items: center;
4543
+ gap: clamp(6px, 0.5vw, 12px);
4530
4544
  flex-wrap: wrap;
4531
4545
  }
4532
4546
  .ps-cpw-pill-group {
@@ -4534,12 +4548,15 @@ const STYLES = `
4534
4548
  background: var(--ps-bg-secondary);
4535
4549
  border: 1px solid var(--ps-border-color);
4536
4550
  border-radius: 999px;
4537
- padding: 2px;
4551
+ padding: clamp(2px, 0.15vw, 4px);
4538
4552
  }
4539
4553
  .ps-cpw-pill {
4540
4554
  background: none; border: none;
4541
- padding: 5px 14px; border-radius: 999px;
4542
- font-family: inherit; font-size: 11px; font-weight: 600;
4555
+ padding: clamp(4px, 0.35vw, 8px) clamp(10px, 0.9vw, 20px);
4556
+ border-radius: 999px;
4557
+ font-family: inherit;
4558
+ font-size: clamp(10px, 0.7vw, 13px);
4559
+ font-weight: 600;
4543
4560
  color: var(--ps-text-secondary); cursor: pointer;
4544
4561
  transition: background 0.15s, color 0.15s;
4545
4562
  }
@@ -4695,11 +4712,11 @@ const STYLES = `
4695
4712
  color: var(--ps-accent);
4696
4713
  }
4697
4714
 
4698
- /* Footer actions — sticky at the bottom (compact) */
4715
+ /* Footer actions — vw-scaled */
4699
4716
  .ps-cpw-footer {
4700
4717
  display: flex; align-items: center; justify-content: space-between;
4701
- gap: 10px;
4702
- padding: 8px 16px;
4718
+ gap: clamp(8px, 0.7vw, 14px);
4719
+ padding: clamp(6px, 0.55vw, 12px) clamp(12px, 1vw, 22px);
4703
4720
  border-top: 1px solid var(--ps-border-subtle);
4704
4721
  background: var(--ps-bg-primary);
4705
4722
  flex-shrink: 0;
@@ -4707,20 +4724,25 @@ const STYLES = `
4707
4724
  .ps-cpw-back-btn {
4708
4725
  background: none; border: none;
4709
4726
  color: var(--ps-text-secondary);
4710
- font-family: inherit; font-size: 11px; font-weight: 600;
4711
- cursor: pointer; padding: 8px 4px;
4727
+ font-family: inherit;
4728
+ font-size: clamp(10px, 0.7vw, 13px);
4729
+ font-weight: 600;
4730
+ cursor: pointer;
4731
+ padding: clamp(6px, 0.55vw, 12px) clamp(2px, 0.2vw, 6px);
4712
4732
  transition: color 0.15s;
4713
4733
  }
4714
4734
  .ps-cpw-back-btn:hover { color: var(--ps-text-primary); }
4715
4735
  .ps-cpw-next-btn {
4716
4736
  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;
4737
+ border: none; border-radius: clamp(4px, 0.35vw, 8px);
4738
+ padding: clamp(8px, 0.7vw, 14px) clamp(16px, 1.4vw, 28px);
4739
+ font-family: inherit;
4740
+ font-size: clamp(10px, 0.7vw, 13px);
4741
+ font-weight: 700;
4720
4742
  letter-spacing: 0.1em; text-transform: uppercase;
4721
4743
  cursor: pointer;
4722
4744
  transition: opacity 0.15s, transform 0.15s, box-shadow 0.15s;
4723
- box-shadow: 0 4px 12px rgba(33, 84, 239, 0.16);
4745
+ box-shadow: 0 0.25vw 0.8vw rgba(33, 84, 239, 0.16);
4724
4746
  }
4725
4747
  .ps-cpw-next-btn:disabled {
4726
4748
  background: var(--ps-border-color);
@@ -4756,8 +4778,9 @@ const STYLES = `
4756
4778
 
4757
4779
  /* ── Progressive (one-question-at-a-time) flow ── */
4758
4780
  .ps-cpw-progressive {
4759
- display: flex; flex-direction: column; gap: 16px;
4760
- padding: 8px 0;
4781
+ display: flex; flex-direction: column;
4782
+ gap: clamp(12px, 1vw, 22px);
4783
+ padding: clamp(6px, 0.5vw, 12px) 0;
4761
4784
  }
4762
4785
  .ps-cpw-fade-in {
4763
4786
  animation: ps-cpw-fade-up 0.35s cubic-bezier(0.16, 1, 0.3, 1);
@@ -4767,22 +4790,20 @@ const STYLES = `
4767
4790
  to { opacity: 1; transform: translateY(0); }
4768
4791
  }
4769
4792
 
4770
- /* ── Method picker (initial step) — vertical stack of compact rows ── */
4793
+ /* ── Method picker (initial step) — vw-scaled compact cards ── */
4771
4794
  .ps-cpw-method-picker {
4772
4795
  display: flex; flex-direction: column;
4773
- gap: 10px; padding: 8px 0;
4796
+ gap: clamp(8px, 0.7vw, 14px);
4797
+ padding: clamp(4px, 0.4vw, 10px) 0;
4774
4798
  flex: 1; min-height: 0;
4775
4799
  width: 100%; box-sizing: border-box;
4776
4800
  justify-content: center;
4777
4801
  }
4778
4802
  .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. */
4782
4803
  .ps-cpw-method-grid {
4783
4804
  display: grid;
4784
4805
  grid-template-columns: 1fr 1fr;
4785
- gap: 12px;
4806
+ gap: clamp(8px, 0.75vw, 16px);
4786
4807
  width: 100%; max-width: 100%;
4787
4808
  box-sizing: border-box;
4788
4809
  }
@@ -4794,7 +4815,7 @@ const STYLES = `
4794
4815
  box-sizing: border-box;
4795
4816
  background: var(--ps-bg-primary);
4796
4817
  border: 1.5px solid var(--ps-border-subtle);
4797
- border-radius: 10px;
4818
+ border-radius: clamp(8px, 0.6vw, 14px);
4798
4819
  overflow: hidden;
4799
4820
  cursor: pointer; font-family: inherit; text-align: left;
4800
4821
  transition: border-color 0.18s, transform 0.18s, box-shadow 0.18s;
@@ -4802,34 +4823,40 @@ const STYLES = `
4802
4823
  .ps-cpw-method-card:hover {
4803
4824
  border-color: var(--ps-accent);
4804
4825
  transform: translateY(-1px);
4805
- box-shadow: 0 6px 18px rgba(33, 84, 239, 0.10);
4826
+ box-shadow: 0 0.4vw 1.2vw rgba(33, 84, 239, 0.10);
4806
4827
  }
4807
- /* Square-ish illustration slot at the top of each card */
4828
+ /* Wide short illustration strip at the top keeps cards compact
4829
+ and scales proportionally with viewport width. */
4808
4830
  .ps-cpw-method-img {
4809
4831
  width: 100%;
4810
- aspect-ratio: 1 / 1;
4832
+ height: clamp(56px, 4.5vw, 100px);
4811
4833
  flex-shrink: 0;
4812
4834
  background: var(--ps-bg-secondary);
4813
4835
  display: flex; align-items: center; justify-content: center;
4814
4836
  border-bottom: 1px solid var(--ps-border-subtle);
4837
+ padding: clamp(4px, 0.4vw, 10px);
4838
+ box-sizing: border-box;
4815
4839
  }
4816
4840
  .ps-cpw-method-img img {
4817
- width: 100%; height: 100%;
4841
+ width: auto; height: 100%;
4842
+ max-width: 100%;
4818
4843
  object-fit: contain;
4819
4844
  display: block;
4820
4845
  }
4821
4846
  .ps-cpw-method-text {
4822
- display: flex; flex-direction: column; gap: 3px;
4823
- padding: 10px 12px 12px;
4847
+ display: flex; flex-direction: column; gap: clamp(2px, 0.15vw, 4px);
4848
+ padding: clamp(6px, 0.55vw, 12px) clamp(8px, 0.7vw, 14px) clamp(8px, 0.7vw, 14px);
4824
4849
  width: 100%; box-sizing: border-box;
4825
4850
  }
4826
4851
  .ps-cpw-method-title {
4827
- font-size: 13px; font-weight: 700;
4852
+ font-size: clamp(11px, 0.78vw, 15px);
4853
+ font-weight: 700;
4828
4854
  color: var(--ps-text-primary);
4829
4855
  letter-spacing: -0.005em;
4830
4856
  }
4831
4857
  .ps-cpw-method-desc {
4832
- font-size: 11px; line-height: 1.4;
4858
+ font-size: clamp(9px, 0.65vw, 12px);
4859
+ line-height: 1.4;
4833
4860
  color: var(--ps-text-muted);
4834
4861
  }
4835
4862
  /* Wizard reuses the SDK basics screen's .ps-bp-inline-* row styles for
@@ -4837,53 +4864,48 @@ const STYLES = `
4837
4864
  them inside the wizard body so all rows fit without scrolling. */
4838
4865
  .ps-cpw-inline-fields {
4839
4866
  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. */
4867
+ margin-top: clamp(2px, 0.2vw, 6px);
4843
4868
  display: flex; flex-direction: column;
4844
- gap: 6px;
4869
+ gap: clamp(4px, 0.4vw, 10px);
4845
4870
  }
4846
4871
  .ps-cpw-inline-fields .ps-bp-inline-row {
4847
- padding: 14px 2px;
4872
+ padding: clamp(10px, 0.9vw, 18px) clamp(1px, 0.1vw, 4px);
4848
4873
  border-bottom: 1px solid var(--ps-border-subtle);
4849
4874
  }
4850
4875
  .ps-cpw-inline-fields .ps-bp-inline-row:last-child { border-bottom: none; }
4851
4876
  .ps-cpw-inline-fields .ps-bp-inline-label {
4852
- flex: 0 0 70px;
4853
- font-size: 10px;
4877
+ flex: 0 0 clamp(56px, 4.5vw, 90px);
4878
+ font-size: clamp(9px, 0.62vw, 12px);
4854
4879
  font-weight: 700;
4855
- color: var(--ps-text-primary); /* black labels */
4880
+ color: var(--ps-text-primary);
4856
4881
  letter-spacing: 0.08em;
4857
4882
  }
4858
4883
  .ps-cpw-inline-fields .ps-bp-inline-input {
4859
- font-size: 14px;
4884
+ font-size: clamp(12px, 0.85vw, 16px);
4860
4885
  padding-bottom: 0;
4861
- border-bottom: none; /* parent row owns the divider */
4886
+ border-bottom: none;
4862
4887
  color: var(--ps-text-primary);
4863
4888
  }
4864
4889
  .ps-cpw-inline-fields .ps-bp-inline-unit {
4865
- font-size: 11px;
4890
+ font-size: clamp(10px, 0.7vw, 13px);
4866
4891
  color: var(--ps-text-muted);
4867
4892
  }
4868
4893
 
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. */
4894
+ /* ── Image path — single combined screen, vw-scaled ── */
4873
4895
  .ps-cpw-image-combined {
4874
4896
  display: flex; flex-direction: column; align-items: stretch;
4875
- gap: 10px;
4897
+ gap: clamp(8px, 0.7vw, 14px);
4876
4898
  flex: 1; min-height: 0;
4877
4899
  width: 100%; box-sizing: border-box;
4878
4900
  }
4879
4901
  .ps-cpw-photo-dropzone {
4880
4902
  display: flex; flex-direction: column; align-items: center; justify-content: center;
4881
- gap: 6px;
4903
+ gap: clamp(4px, 0.4vw, 10px);
4882
4904
  flex: 1; min-height: 0;
4883
4905
  width: 100%; box-sizing: border-box;
4884
- padding: 14px;
4906
+ padding: clamp(10px, 0.9vw, 18px);
4885
4907
  border: 2px dashed var(--ps-border-color);
4886
- border-radius: 10px;
4908
+ border-radius: clamp(8px, 0.6vw, 14px);
4887
4909
  background: var(--ps-bg-secondary);
4888
4910
  color: var(--ps-text-muted);
4889
4911
  cursor: pointer; font-family: inherit;
@@ -4892,17 +4914,19 @@ const STYLES = `
4892
4914
  .ps-cpw-photo-dropzone:hover { border-color: var(--ps-accent); background: rgba(33, 84, 239, 0.04); }
4893
4915
  .ps-cpw-photo-dropzone:disabled { opacity: 0.6; cursor: default; }
4894
4916
  .ps-cpw-photo-dropzone-title {
4895
- font-size: 12px; font-weight: 600; color: var(--ps-text-primary);
4917
+ font-size: clamp(11px, 0.78vw, 14px);
4918
+ font-weight: 600; color: var(--ps-text-primary);
4896
4919
  }
4897
4920
  .ps-cpw-photo-dropzone-hint {
4898
- font-size: 10px; color: var(--ps-text-muted);
4921
+ font-size: clamp(9px, 0.62vw, 12px);
4922
+ color: var(--ps-text-muted);
4899
4923
  }
4900
4924
  .ps-cpw-photo-frame {
4901
4925
  position: relative;
4902
4926
  flex: 1; min-height: 0;
4903
4927
  width: 100%;
4904
4928
  background: var(--ps-bg-secondary);
4905
- border-radius: 10px;
4929
+ border-radius: clamp(8px, 0.6vw, 14px);
4906
4930
  overflow: hidden;
4907
4931
  border: 1px solid var(--ps-border-subtle);
4908
4932
  }
@@ -4913,25 +4937,27 @@ const STYLES = `
4913
4937
  }
4914
4938
  .ps-cpw-photo-retake {
4915
4939
  align-self: center;
4916
- padding: 12px 24px;
4940
+ padding: clamp(8px, 0.7vw, 14px) clamp(16px, 1.4vw, 28px);
4917
4941
  border-radius: 999px;
4918
4942
  background: transparent;
4919
4943
  color: var(--ps-accent);
4920
4944
  border: 2px solid var(--ps-accent);
4921
- font-weight: 700; font-size: 12px;
4945
+ font-weight: 700;
4946
+ font-size: clamp(10px, 0.7vw, 13px);
4922
4947
  text-transform: uppercase; letter-spacing: 0.08em;
4923
4948
  cursor: pointer; font-family: inherit;
4924
4949
  transition: background 0.18s;
4925
4950
  }
4926
4951
  .ps-cpw-photo-retake:hover { background: rgba(33, 84, 239, 0.08); }
4927
4952
  .ps-cpw-hint {
4928
- font-size: 12.5px; line-height: 1.6;
4953
+ font-size: clamp(10px, 0.72vw, 13px);
4954
+ line-height: 1.6;
4929
4955
  color: var(--ps-text-muted);
4930
- margin: 8px 0 0;
4931
- padding: 12px 14px;
4956
+ margin: clamp(4px, 0.4vw, 10px) 0 0;
4957
+ padding: clamp(8px, 0.7vw, 14px) clamp(10px, 0.85vw, 16px);
4932
4958
  background: rgba(33, 84, 239, 0.05);
4933
4959
  border-left: 3px solid var(--ps-accent);
4934
- border-radius: 6px;
4960
+ border-radius: clamp(4px, 0.35vw, 8px);
4935
4961
  }
4936
4962
 
4937
4963
  /* ════════════════════════════════════════════════════════════════