@khipu/design-system 0.1.0-alpha.56 → 0.2.0-alpha.3

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.
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
13
13
  * Source: design-system/src/tokens/tokens.json
14
- * Generated: 2026-05-04T19:11:26.827Z
14
+ * Generated: 2026-05-13T19:14:37.483Z
15
15
  *
16
16
  * To regenerate:
17
17
  * cd design-system && npm run tokens:generate
@@ -133,16 +133,7 @@
133
133
  --kds-font-weight-semibold: 600;
134
134
  --kds-font-weight-bold: 700;
135
135
 
136
- /* Font sizes */
137
- --kds-font-size-xs: 0.75rem;
138
- --kds-font-size-sm: 0.875rem;
139
- --kds-font-size-base: 1rem;
140
- --kds-font-size-lg: 1.125rem;
141
- --kds-font-size-xl: 1.25rem;
142
- --kds-font-size-2xl: 1.5rem;
143
- --kds-font-size-3xl: 1.875rem;
144
- --kds-font-size-4xl: 2.25rem;
145
-
136
+ /* Font sizes (base scale xs–4xl: see responsive section below) */
146
137
  /* Line heights */
147
138
  --kds-line-height-tight: 1.2;
148
139
  --kds-line-height-snug: 1.375;
@@ -365,6 +356,16 @@
365
356
  ========================================================================== */
366
357
 
367
358
 
359
+ /* Base font-size scale */
360
+ --kds-font-size-xs: 0.6875rem;
361
+ --kds-font-size-sm: 0.8125rem;
362
+ --kds-font-size-base: 0.875rem;
363
+ --kds-font-size-lg: 1rem;
364
+ --kds-font-size-xl: 1.125rem;
365
+ --kds-font-size-2xl: 1.25rem;
366
+ --kds-font-size-3xl: 1.5rem;
367
+ --kds-font-size-4xl: 1.875rem;
368
+
368
369
  /* Headings */
369
370
  --kds-font-size-h1: 1.75rem;
370
371
  --kds-font-size-h2: 1.5rem;
@@ -401,6 +402,16 @@
401
402
  /* Tablet (600px+) - Typography */
402
403
  @media (min-width: 600px) {
403
404
  :root {
405
+
406
+ /* Base font-size scale */
407
+ --kds-font-size-xs: 0.75rem;
408
+ --kds-font-size-sm: 0.875rem;
409
+ --kds-font-size-base: 1rem;
410
+ --kds-font-size-lg: 1.125rem;
411
+ --kds-font-size-xl: 1.25rem;
412
+ --kds-font-size-2xl: 1.5rem;
413
+ --kds-font-size-3xl: 1.875rem;
414
+ --kds-font-size-4xl: 2.25rem;
404
415
  --kds-font-size-h1: 2rem;
405
416
  --kds-font-size-h2: 1.75rem;
406
417
  --kds-font-size-h3: 1.5rem;
@@ -428,6 +439,16 @@
428
439
  /* Desktop (840px+) - Typography */
429
440
  @media (min-width: 840px) {
430
441
  :root {
442
+
443
+ /* Base font-size scale */
444
+ --kds-font-size-xs: 0.75rem;
445
+ --kds-font-size-sm: 0.875rem;
446
+ --kds-font-size-base: 1rem;
447
+ --kds-font-size-lg: 1.125rem;
448
+ --kds-font-size-xl: 1.25rem;
449
+ --kds-font-size-2xl: 1.5rem;
450
+ --kds-font-size-3xl: 1.875rem;
451
+ --kds-font-size-4xl: 2.25rem;
431
452
  --kds-font-size-h1: 2.5rem;
432
453
  --kds-font-size-h2: 2rem;
433
454
  --kds-font-size-h3: 1.75rem;
@@ -799,6 +820,7 @@ a.kds-btn {
799
820
  align-items: center;
800
821
  justify-content: center;
801
822
  gap: 8px;
823
+ text-align: center;
802
824
 
803
825
  /* Typography - Using design tokens */
804
826
  font-family: var(--kds-font-family-secondary);
@@ -984,7 +1006,12 @@ a.kds-btn > .kds-icon > i {
984
1006
  min-width: var(--kds-spacing-button-icon-size);
985
1007
  min-height: var(--kds-spacing-button-icon-size);
986
1008
  line-height: 1;
987
- top: 1px;
1009
+ }
1010
+
1011
+ /* Full-width button */
1012
+ button.kds-btn.kds-btn-block,
1013
+ a.kds-btn.kds-btn-block {
1014
+ width: 100%;
988
1015
  }
989
1016
 
990
1017
  /* ========================================
@@ -1008,12 +1035,6 @@ a.kds-btn.kds-btn-md {
1008
1035
 
1009
1036
  /* Default .kds-btn uses --kds-spacing-button-min-height (50px) from base styles */
1010
1037
 
1011
- /* Full-width button */
1012
- button.kds-btn.kds-btn-block,
1013
- a.kds-btn.kds-btn-block {
1014
- width: 100%;
1015
- }
1016
-
1017
1038
  /* ========================================
1018
1039
  Card Components (Material Design 3)
1019
1040
  ======================================== */
@@ -4032,6 +4053,96 @@ dialog#surveyModal button.circle {
4032
4053
  font-size: var(--kds-font-size-sm);
4033
4054
  }
4034
4055
 
4056
+ /* ── Typography variants ── */
4057
+ .kds-text-display1 {
4058
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4059
+ font-size: var(--kds-font-size-4xl, 36px);
4060
+ font-weight: var(--kds-font-weight-bold, 700);
4061
+ line-height: var(--kds-line-height-tight, 1.2);
4062
+ letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
4063
+ }
4064
+
4065
+ .kds-text-display2 {
4066
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4067
+ font-size: var(--kds-font-size-3xl, 30px);
4068
+ font-weight: var(--kds-font-weight-bold, 700);
4069
+ line-height: var(--kds-line-height-tight, 1.2);
4070
+ letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
4071
+ }
4072
+
4073
+ .kds-text-heading1 {
4074
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4075
+ font-size: var(--kds-font-size-2xl, 24px);
4076
+ font-weight: var(--kds-font-weight-semibold, 600);
4077
+ line-height: var(--kds-line-height-snug, 1.375);
4078
+ }
4079
+
4080
+ .kds-text-heading2 {
4081
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4082
+ font-size: var(--kds-font-size-xl, 20px);
4083
+ font-weight: var(--kds-font-weight-semibold, 600);
4084
+ line-height: var(--kds-line-height-snug, 1.375);
4085
+ }
4086
+
4087
+ .kds-text-heading3 {
4088
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4089
+ font-size: var(--kds-font-size-lg, 18px);
4090
+ font-weight: var(--kds-font-weight-semibold, 600);
4091
+ line-height: var(--kds-line-height-normal, 1.5);
4092
+ }
4093
+
4094
+ .kds-text-body-large {
4095
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4096
+ font-size: var(--kds-font-size-base, 16px);
4097
+ font-weight: var(--kds-font-weight-regular, 400);
4098
+ line-height: var(--kds-line-height-relaxed, 1.66);
4099
+ }
4100
+
4101
+ .kds-text-body {
4102
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4103
+ font-size: var(--kds-font-size-sm, 14px);
4104
+ font-weight: var(--kds-font-weight-regular, 400);
4105
+ line-height: var(--kds-line-height-normal, 1.5);
4106
+ }
4107
+
4108
+ .kds-text-body-small {
4109
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4110
+ font-size: var(--kds-font-size-sm, 12px);
4111
+ font-weight: var(--kds-font-weight-regular, 400);
4112
+ line-height: var(--kds-line-height-normal, 1.5);
4113
+ }
4114
+
4115
+ .kds-text-label {
4116
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4117
+ font-size: var(--kds-font-size-sm, 12px);
4118
+ font-weight: var(--kds-font-weight-semibold, 600);
4119
+ line-height: var(--kds-line-height-normal, 1.5);
4120
+ letter-spacing: var(--kds-letter-spacing-widest, 1px);
4121
+ text-transform: uppercase;
4122
+ }
4123
+
4124
+ .kds-text-label-small {
4125
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4126
+ font-size: var(--kds-font-size-xs, 10px);
4127
+ font-weight: var(--kds-font-weight-semibold, 600);
4128
+ line-height: var(--kds-line-height-normal, 1.5);
4129
+ letter-spacing: var(--kds-letter-spacing-widest, 1px);
4130
+ text-transform: uppercase;
4131
+ }
4132
+
4133
+ .kds-text-link {
4134
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4135
+ font-size: inherit;
4136
+ font-weight: var(--kds-font-weight-medium, 500);
4137
+ color: var(--kds-color-primary-main, #8347AD);
4138
+ text-decoration: underline;
4139
+ cursor: pointer;
4140
+ }
4141
+
4142
+ .kds-text-link:hover {
4143
+ color: var(--kds-color-primary-dark, #5B3179);
4144
+ }
4145
+
4035
4146
  /* Display utilities */
4036
4147
  .kds-hidden {
4037
4148
  display: none;
@@ -4535,14 +4646,26 @@ dialog#surveyModal button.circle {
4535
4646
 
4536
4647
  .field.locked > input,
4537
4648
  .field.locked > textarea {
4538
- background: var(--kds-color-shell);
4539
- color: var(--kds-color-text-secondary);
4649
+ color: var(--kds-color-text-disabled);
4540
4650
  cursor: default;
4541
- border-color: var(--kds-color-divider);
4651
+ pointer-events: none;
4542
4652
  }
4543
4653
 
4544
4654
  .field.locked > label {
4545
- color: var(--kds-color-text-hint);
4655
+ color: var(--kds-color-text-disabled);
4656
+ }
4657
+
4658
+ /* Locked: suppress all hover/focus visual changes */
4659
+ .field.label.border:not(.fill).locked:hover:not(:focus-within) > label::after,
4660
+ .field.label.border:not(.fill).locked:focus-within > label::after {
4661
+ border-block-start-color: var(--outline);
4662
+ }
4663
+ .field.label.border:not(.fill).locked:hover:not(:focus-within) > :is(input, textarea, select),
4664
+ .field.label.border:not(.fill).locked:focus-within > :is(input, textarea, select) {
4665
+ border-color: var(--outline);
4666
+ }
4667
+ .field.label.locked:hover:not(:focus-within) > label {
4668
+ color: var(--kds-color-text-disabled);
4546
4669
  }
4547
4670
 
4548
4671
  .field.locked > i {
@@ -4784,19 +4907,45 @@ dialog#surveyModal button.circle {
4784
4907
  align-items: center;
4785
4908
  justify-content: center;
4786
4909
  gap: var(--kds-spacing-1);
4787
- color: var(--kds-color-text-disabled);
4910
+ color: var(--kds-color-gray-400);
4788
4911
  font-size: var(--kds-font-size-xs);
4912
+ letter-spacing: var(--kds-letter-spacing-wide);
4789
4913
  padding: var(--kds-spacing-1) 0;
4790
4914
  }
4791
4915
 
4792
- .kds-secure-footer i {
4793
- font-size: var(--kds-font-size-sm);
4916
+ /* Desktop: footer inside card hidden; Mobile: footer outside card hidden */
4917
+ .kds-card-elevated > .kds-secure-footer {
4918
+ display: none;
4794
4919
  }
4795
4920
 
4796
- /* Inside a card: push to bottom with auto margin, subtle top spacing */
4797
- .kds-secure-footer.inside {
4798
- margin-top: auto;
4799
- padding-top: var(--kds-spacing-3);
4921
+ @media (max-width: 767px) {
4922
+ .kds-card-elevated > .kds-secure-footer {
4923
+ display: flex;
4924
+ }
4925
+ .kds-screen > .kds-secure-footer {
4926
+ display: none;
4927
+ }
4928
+ }
4929
+
4930
+ .kds-secure-footer-lock {
4931
+ width: 12px;
4932
+ height: 12px;
4933
+ flex: 0 0 auto;
4934
+ display: block;
4935
+ fill: none;
4936
+ stroke: currentColor;
4937
+ stroke-width: 1.75;
4938
+ stroke-linecap: round;
4939
+ stroke-linejoin: round;
4940
+ }
4941
+
4942
+ .kds-secure-footer .khipu-mark {
4943
+ height: 11px;
4944
+ width: auto;
4945
+ flex: 0 0 auto;
4946
+ display: block;
4947
+ object-fit: contain;
4948
+ overflow: visible;
4800
4949
  }
4801
4950
 
4802
4951
  .kds-secure-footer-code {
@@ -4811,7 +4960,7 @@ dialog#surveyModal button.circle {
4811
4960
  .kds-expand-toggle {
4812
4961
  background: none;
4813
4962
  border: 0;
4814
- padding: var(--kds-spacing-0-5) 0;
4963
+ padding: 0;
4815
4964
  color: var(--kds-color-primary-main);
4816
4965
  font-weight: var(--kds-font-weight-medium);
4817
4966
  font-size: var(--kds-font-size-sm);
@@ -4851,7 +5000,7 @@ dialog#surveyModal button.circle {
4851
5000
 
4852
5001
  .kds-expand-panel.open {
4853
5002
  max-height: 800px;
4854
- margin-top: var(--kds-spacing-1);
5003
+ margin-top: 0;
4855
5004
  }
4856
5005
 
4857
5006
  /* ========================================
@@ -5284,8 +5433,8 @@ dialog#surveyModal button.circle {
5284
5433
  /* Symmetric padding */
5285
5434
  padding: var(--kds-spacing-2);
5286
5435
 
5287
- /* Static border-radius on all corners */
5288
- border-radius: var(--kds-radius-card);
5436
+ /* Bottom-only border-radius top is flush so the brand-inner logo isn't clipped */
5437
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5289
5438
 
5290
5439
  /* Override .kds-card-elevated transition — scroll drives the animation, not CSS transitions */
5291
5440
  transition: none;
@@ -5297,10 +5446,8 @@ dialog#surveyModal button.circle {
5297
5446
  /* clip-path clips the card from the bottom to hide the collapsible space.
5298
5447
  This is VISUAL ONLY — no layout change — prevents scroll feedback loop.
5299
5448
  Safari 13.1+ compatible (inset + round)
5300
- When collapsed (progress=1): bottom corners get border-radius,
5301
- top stays flush with screen edge. */
5302
- /* Bottom inset = collapsible height + half the card padding to tighten
5303
- the gap between "Código" and the visible bottom edge when collapsed. */
5449
+ round uses bottom-only radii (0 top, card-radius bottom) to match
5450
+ border-radius and avoid clipping the brand logo at the top corners. */
5304
5451
  clip-path: inset(
5305
5452
  0 0
5306
5453
  calc(
@@ -5308,7 +5455,7 @@ dialog#surveyModal button.circle {
5308
5455
  + var(--kds-spacing-1) * var(--collapse-progress)
5309
5456
  )
5310
5457
  0
5311
- round var(--kds-radius-card)
5458
+ round 0 0 var(--kds-radius-card) var(--kds-radius-card)
5312
5459
  );
5313
5460
 
5314
5461
  /* Suppress card's own shadow — wrapper handles it */
@@ -5319,7 +5466,8 @@ dialog#surveyModal button.circle {
5319
5466
  .kds-invoice-sticky .kds-brand-inner {
5320
5467
  margin-bottom: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)) + var(--kds-spacing-0-5) * var(--collapse-progress));
5321
5468
  }
5322
- .kds-invoice-sticky .kds-brand-inner svg {
5469
+ .kds-invoice-sticky .kds-brand-inner svg,
5470
+ .kds-invoice-sticky .kds-brand-inner img {
5323
5471
  height: calc(22px - 5px * var(--collapse-progress));
5324
5472
  }
5325
5473
 
@@ -5329,7 +5477,13 @@ dialog#surveyModal button.circle {
5329
5477
  opacity: calc(1 - var(--collapse-progress) * 1.5);
5330
5478
  }
5331
5479
 
5332
- /* Amount: NO font-size change (source keeps 30px always) */
5480
+ /* Amount: 30px 24px (progressive) */
5481
+ .kds-invoice-sticky .kds-invoice-amount {
5482
+ font-size: calc(
5483
+ var(--kds-font-size-3xl) -
5484
+ (var(--kds-font-size-3xl) - var(--kds-font-size-2xl)) * var(--collapse-progress)
5485
+ );
5486
+ }
5333
5487
 
5334
5488
  /* Merchant tile: 64×64px → 50×50px, radius 8px → 6px (progressive) */
5335
5489
  .kds-invoice-sticky .kds-invoice-merchant {
@@ -5355,10 +5509,11 @@ dialog#surveyModal button.circle {
5355
5509
  );
5356
5510
  }
5357
5511
 
5358
- /* Code: margin-top 4px → 0 (progressive). Font-size stays 12px. */
5512
+ /* Code: margin-top 8px → 0, font-size 12px → 11px (progressive) */
5359
5513
  .kds-invoice-sticky .kds-invoice-code {
5360
5514
  margin-top: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)));
5361
5515
  margin-bottom: 0;
5516
+ font-size: calc(var(--kds-font-size-xs) - 1px * var(--collapse-progress));
5362
5517
  }
5363
5518
 
5364
5519
  /* Pull all siblings after sticky wrapper up to fill clipped gap.
@@ -5380,32 +5535,40 @@ dialog#surveyModal button.circle {
5380
5535
  }
5381
5536
  }
5382
5537
 
5538
+ /* Invoice sticky: mobile-first — bottom-only border-radius to prevent clipping the brand logo.
5539
+ Desktop restores full border-radius (see min-width:768px block below). */
5540
+ .kds-card-elevated.kds-invoice-sticky {
5541
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5542
+ }
5543
+
5383
5544
  /* -- Invoice Collapsible (kv rows below header) -- */
5384
5545
  .kds-invoice-collapsible {
5385
- margin-top: var(--kds-spacing-1-5);
5546
+ margin-top: var(--kds-spacing-1);
5386
5547
  }
5387
5548
 
5388
- /* -- Invoice Summary (kv + expand toggle side by side) -- */
5549
+ /* -- Invoice Summary -- */
5389
5550
  .kds-invoice-summary {
5390
5551
  display: flex;
5391
5552
  align-items: flex-end;
5392
- gap: var(--kds-spacing-2);
5553
+ gap: var(--kds-spacing-1);
5393
5554
  }
5394
5555
  .kds-invoice-summary .kds-kv {
5395
5556
  flex: 1;
5396
5557
  min-width: 0;
5397
5558
  }
5398
- .kds-invoice-summary .kds-expand-toggle {
5399
- flex-shrink: 0;
5400
- white-space: nowrap;
5401
- }
5402
5559
 
5403
5560
  /* -- Invoice Header (amount + merchant tile) -- */
5561
+ /* Compound selector overrides BeerCSS `header { padding:0 1rem; display:grid; align-content:center }` */
5562
+ header.kds-invoice-header,
5563
+ div.kds-invoice-header,
5404
5564
  .kds-invoice-header {
5405
5565
  display: flex;
5406
5566
  align-items: flex-start;
5407
5567
  justify-content: space-between;
5408
5568
  gap: var(--kds-spacing-2);
5569
+ padding: 0;
5570
+ border-radius: 0;
5571
+ align-content: initial;
5409
5572
  }
5410
5573
 
5411
5574
  /* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
@@ -5415,11 +5578,11 @@ dialog#surveyModal button.circle {
5415
5578
  }
5416
5579
 
5417
5580
  .kds-invoice-amount {
5418
- font-weight: 700;
5419
- font-size: 30px;
5420
- line-height: 1.25;
5421
- letter-spacing: 0.4px;
5422
- color: var(--kds-color-text-primary);
5581
+ font-weight: var(--kds-font-weight-bold);
5582
+ font-size: var(--kds-font-size-3xl);
5583
+ line-height: var(--kds-line-height-tight);
5584
+ letter-spacing: var(--kds-letter-spacing-wide);
5585
+ color: var(--kds-color-gray-900);
5423
5586
  margin: 0;
5424
5587
  }
5425
5588
 
@@ -5428,12 +5591,21 @@ dialog#surveyModal button.circle {
5428
5591
  }
5429
5592
 
5430
5593
  .kds-invoice-code {
5594
+ font-family: var(--kds-font-family-mono);
5431
5595
  font-size: var(--kds-font-size-xs);
5432
- color: var(--kds-color-text-hint);
5596
+ font-weight: var(--kds-font-weight-regular);
5597
+ letter-spacing: var(--kds-letter-spacing-wider);
5598
+ font-variant-numeric: tabular-nums;
5599
+ color: var(--kds-color-gray-400);
5600
+ text-transform: uppercase;
5433
5601
  margin: 0;
5434
5602
  margin-top: var(--kds-spacing-1);
5435
5603
  }
5436
5604
 
5605
+ .kds-invoice-code::first-letter {
5606
+ text-transform: uppercase;
5607
+ }
5608
+
5437
5609
  .kds-invoice-merchant {
5438
5610
  width: 64px;
5439
5611
  height: 64px;
@@ -5461,6 +5633,13 @@ dialog#surveyModal button.circle {
5461
5633
  line-height: 1;
5462
5634
  }
5463
5635
 
5636
+ .kds-invoice-merchant img {
5637
+ width: 100%;
5638
+ height: 100%;
5639
+ object-fit: cover;
5640
+ border-radius: var(--kds-radius-md);
5641
+ }
5642
+
5464
5643
  /* -- Card Title -- */
5465
5644
  .kds-card-title {
5466
5645
  font-weight: 700;
@@ -5482,17 +5661,21 @@ dialog#surveyModal button.circle {
5482
5661
 
5483
5662
  .kds-kv dt {
5484
5663
  font-size: var(--kds-font-size-xs);
5485
- letter-spacing: 0.2px;
5486
- color: var(--kds-color-text-hint);
5664
+ line-height: var(--kds-line-height-relaxed);
5665
+ letter-spacing: normal;
5666
+ color: var(--kds-color-text-secondary);
5487
5667
  text-transform: uppercase;
5488
5668
  margin: 0;
5489
5669
  }
5490
5670
 
5491
5671
  .kds-kv dd {
5492
5672
  margin: 0;
5493
- font-size: var(--kds-font-size-sm);
5494
- font-weight: 600;
5495
- color: var(--kds-color-text-primary);
5673
+ font-size: var(--kds-font-size-xs);
5674
+ line-height: var(--kds-line-height-relaxed);
5675
+ font-weight: var(--kds-font-weight-bold);
5676
+ letter-spacing: normal;
5677
+ color: var(--kds-color-gray-800);
5678
+ min-width: 0;
5496
5679
  }
5497
5680
 
5498
5681
  /* -- Dividers -- */
@@ -5514,13 +5697,13 @@ dialog#surveyModal button.circle {
5514
5697
  .kds-detail-list {
5515
5698
  display: flex;
5516
5699
  flex-direction: column;
5517
- gap: var(--kds-spacing-1-75);
5518
- margin: var(--kds-spacing-1-75) 0 0;
5519
- padding: 0;
5700
+ gap: var(--kds-spacing-1-5);
5701
+ margin: 0;
5702
+ padding: 0 0 var(--kds-spacing-1);
5520
5703
  }
5521
5704
 
5522
5705
  .kds-detail-group {
5523
- margin-bottom: var(--kds-spacing-1-75);
5706
+ margin-bottom: var(--kds-spacing-1-5);
5524
5707
  }
5525
5708
 
5526
5709
  .kds-detail-group:last-child {
@@ -5529,7 +5712,7 @@ dialog#surveyModal button.circle {
5529
5712
 
5530
5713
  .kds-detail-group dt {
5531
5714
  font-size: var(--kds-font-size-xs);
5532
- letter-spacing: 0.2px;
5715
+ letter-spacing: var(--kds-letter-spacing-wide);
5533
5716
  color: var(--kds-color-text-hint);
5534
5717
  text-transform: uppercase;
5535
5718
  margin: 0 0 var(--kds-spacing-0-5);
@@ -5538,7 +5721,7 @@ dialog#surveyModal button.circle {
5538
5721
  .kds-detail-group dd {
5539
5722
  margin: 0;
5540
5723
  font-size: var(--kds-font-size-sm);
5541
- line-height: 1.45;
5724
+ line-height: var(--kds-line-height-normal);
5542
5725
  color: var(--kds-color-text-primary);
5543
5726
  }
5544
5727
 
@@ -5703,7 +5886,6 @@ button.kds-btn-success::after {
5703
5886
  margin-top: var(--kds-spacing-1);
5704
5887
  }
5705
5888
 
5706
-
5707
5889
  /* -- Field group spacing -- */
5708
5890
  .kds-field-group {
5709
5891
  margin-top: var(--kds-spacing-1-75);
@@ -5755,6 +5937,134 @@ button.kds-btn-success::after {
5755
5937
  margin-top: var(--kds-spacing-2-5);
5756
5938
  }
5757
5939
 
5940
+ /* -- PSP Banner -- */
5941
+ .kds-psp-banner {
5942
+ padding: var(--kds-spacing-0-5) var(--kds-spacing-1-25);
5943
+ font-size: var(--kds-font-size-sm);
5944
+ border-radius: var(--kds-radius-sm);
5945
+ margin-top: var(--kds-spacing-1-5);
5946
+ }
5947
+
5948
+ /* -- Bill Description -- */
5949
+ .kds-bill-description-body {
5950
+ font-family: inherit;
5951
+ white-space: pre-wrap;
5952
+ overflow-wrap: anywhere;
5953
+ margin: 0;
5954
+ padding: 0;
5955
+ background: transparent;
5956
+ color: var(--kds-color-text-secondary);
5957
+ font-size: var(--kds-font-size-sm);
5958
+ line-height: var(--kds-line-height-normal);
5959
+ }
5960
+
5961
+ .kds-bill-description-picture {
5962
+ width: 120px;
5963
+ height: 120px;
5964
+ object-fit: contain;
5965
+ background: var(--kds-color-background-paper);
5966
+ padding: var(--kds-spacing-1-25);
5967
+ border-radius: var(--kds-radius-md);
5968
+ margin-top: var(--kds-spacing-1);
5969
+ display: block;
5970
+ box-sizing: content-box;
5971
+ }
5972
+
5973
+ /* -- Share Card (mustContinue) -- */
5974
+ .kds-share-card {
5975
+ margin-top: var(--kds-spacing-2);
5976
+ padding: var(--kds-spacing-2);
5977
+ border: var(--kds-border-width-sm) solid var(--kds-color-gray-200);
5978
+ border-radius: var(--kds-radius-lg);
5979
+ background: var(--kds-color-background-paper);
5980
+ }
5981
+
5982
+ .kds-share-eyebrow {
5983
+ font-size: var(--kds-font-size-caption);
5984
+ letter-spacing: var(--kds-letter-spacing-wide);
5985
+ color: var(--kds-color-gray-500);
5986
+ text-transform: uppercase;
5987
+ font-weight: var(--kds-font-weight-bold);
5988
+ margin: 0 0 var(--kds-spacing-0-75);
5989
+ }
5990
+
5991
+ .kds-share-copy {
5992
+ font-size: var(--kds-font-size-body1);
5993
+ line-height: var(--kds-line-height-normal);
5994
+ color: var(--kds-color-gray-800);
5995
+ margin: 0 0 var(--kds-spacing-1-5);
5996
+ }
5997
+
5998
+ .kds-share-divider {
5999
+ height: 0;
6000
+ border: 0;
6001
+ border-top: var(--kds-border-width-sm) dashed var(--kds-color-gray-200);
6002
+ margin: var(--kds-spacing-1-5) 0;
6003
+ }
6004
+
6005
+ .kds-share-link {
6006
+ display: block;
6007
+ font-size: var(--kds-font-size-sm);
6008
+ color: var(--kds-color-primary-main);
6009
+ text-decoration: none;
6010
+ word-break: break-all;
6011
+ margin: 0 0 var(--kds-spacing-1-5);
6012
+ }
6013
+
6014
+ .kds-share-link:hover {
6015
+ text-decoration: underline;
6016
+ }
6017
+
6018
+ .kds-share-action {
6019
+ display: flex;
6020
+ align-items: center;
6021
+ justify-content: center;
6022
+ gap: var(--kds-spacing-0-75);
6023
+ background: none;
6024
+ border: 0;
6025
+ padding: var(--kds-spacing-0-75) var(--kds-spacing-1-25);
6026
+ cursor: pointer;
6027
+ color: var(--kds-color-text-primary);
6028
+ font-size: var(--kds-font-size-sm);
6029
+ font-family: inherit;
6030
+ border-radius: var(--kds-radius-sm);
6031
+ margin: 0 auto;
6032
+ }
6033
+
6034
+ .kds-share-action:hover {
6035
+ background: var(--kds-color-primary-hover);
6036
+ color: var(--kds-color-primary-main);
6037
+ }
6038
+
6039
+ .kds-share-action .material-symbols-outlined {
6040
+ font-size: var(--kds-font-size-2xl);
6041
+ }
6042
+
6043
+ /* -- Participants List (mustContinue) -- */
6044
+ .kds-participants {
6045
+ margin: 0 0 var(--kds-spacing-2);
6046
+ padding: var(--kds-spacing-1-5) var(--kds-spacing-1-75);
6047
+ background: var(--kds-alert-success-bg);
6048
+ border-radius: var(--kds-radius-md);
6049
+ }
6050
+
6051
+ .kds-participants-label {
6052
+ font-size: var(--kds-font-size-xs);
6053
+ font-weight: var(--kds-font-weight-bold);
6054
+ color: var(--kds-alert-success-text);
6055
+ margin: 0 0 var(--kds-spacing-0-75);
6056
+ text-transform: uppercase;
6057
+ letter-spacing: var(--kds-letter-spacing-wide);
6058
+ }
6059
+
6060
+ .kds-participants-list {
6061
+ margin: 0;
6062
+ padding-left: var(--kds-spacing-2);
6063
+ color: var(--kds-alert-success-text);
6064
+ font-size: var(--kds-font-size-sm);
6065
+ line-height: var(--kds-line-height-relaxed);
6066
+ }
6067
+
5758
6068
  /* ================================================================
5759
6069
  PAYMENT FLOW LAYOUT
5760
6070
  Stage, flow container, brand row, screen transitions
@@ -5765,6 +6075,18 @@ button.kds-btn-success::after {
5765
6075
  box-shadow: var(--kds-shadow-card);
5766
6076
  }
5767
6077
 
6078
+ /* Payment flow cards — mobile-first: no vertical padding.
6079
+ Desktop (min-width: 768px) restores padding + full border-radius. */
6080
+ .kds-payment-flow .kds-card-elevated {
6081
+ margin-top: 0;
6082
+ padding-top: 0;
6083
+ padding-bottom: 0;
6084
+ }
6085
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6086
+ padding-top: var(--kds-spacing-1);
6087
+ padding-bottom: 0;
6088
+ }
6089
+
5768
6090
  /* Payment stage — full-viewport centered wrapper */
5769
6091
  .kds-payment-stage {
5770
6092
  min-height: 100vh;
@@ -5785,6 +6107,7 @@ button.kds-btn-success::after {
5785
6107
  /* Mobile: Cards full-width with rounded corners */
5786
6108
  @media (max-width: 767px) {
5787
6109
  .kds-payment-stage {
6110
+ padding-top: 0;
5788
6111
  padding-left: 0;
5789
6112
  padding-right: 0;
5790
6113
  }
@@ -5794,7 +6117,7 @@ button.kds-btn-success::after {
5794
6117
  padding: 0;
5795
6118
  }
5796
6119
 
5797
- /* Cards: rounded corners, full width within padded stage */
6120
+ /* Cards: rounded corners, full width, explicit vertical padding */
5798
6121
  .kds-card-elevated,
5799
6122
  .khipu-card-elevated {
5800
6123
  margin-left: 0;
@@ -5803,6 +6126,30 @@ button.kds-btn-success::after {
5803
6126
  width: 100%;
5804
6127
  }
5805
6128
 
6129
+ .kds-payment-flow .kds-card-elevated {
6130
+ padding-top: var(--kds-spacing-2);
6131
+ padding-bottom: var(--kds-spacing-2);
6132
+ }
6133
+
6134
+ /* Invoice sticky card: progressive padding-top (expanded 20px → collapsed 8px).
6135
+ Overrides base rule at same specificity; source order wins here. */
6136
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6137
+ padding-top: var(--kds-spacing-1-5);
6138
+ }
6139
+
6140
+
6141
+ }
6142
+
6143
+ /* Desktop: restore card padding and full border-radius on invoice sticky */
6144
+ @media (min-width: 768px) {
6145
+ .kds-payment-flow .kds-card-elevated,
6146
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6147
+ padding-top: var(--kds-spacing-2);
6148
+ padding-bottom: var(--kds-spacing-2);
6149
+ }
6150
+ .kds-card-elevated.kds-invoice-sticky {
6151
+ border-radius: var(--kds-radius-card);
6152
+ }
5806
6153
  }
5807
6154
 
5808
6155
  /* Brand logo row (external, outside cards) */
@@ -5811,7 +6158,8 @@ button.kds-btn-success::after {
5811
6158
  display: flex;
5812
6159
  align-items: center;
5813
6160
  }
5814
- .kds-brand-row svg {
6161
+ .kds-brand-row svg,
6162
+ .kds-brand-row img {
5815
6163
  height: 22px;
5816
6164
  display: block;
5817
6165
  }
@@ -5821,8 +6169,10 @@ button.kds-btn-success::after {
5821
6169
  display: none;
5822
6170
  align-items: center;
5823
6171
  margin-bottom: var(--kds-spacing-1);
6172
+ border-radius: 0;
5824
6173
  }
5825
- .kds-brand-inner svg {
6174
+ .kds-brand-inner svg,
6175
+ .kds-brand-inner img {
5826
6176
  height: 22px;
5827
6177
  display: block;
5828
6178
  }
@@ -5835,6 +6185,7 @@ button.kds-btn-success::after {
5835
6185
  .kds-brand-inner {
5836
6186
  display: flex;
5837
6187
  }
6188
+
5838
6189
  }
5839
6190
 
5840
6191
  /* Screen transitions (multi-step flows) */
@@ -5848,8 +6199,8 @@ button.kds-btn-success::after {
5848
6199
  gap: var(--kds-spacing-3);
5849
6200
  }
5850
6201
  @keyframes kds-fadein {
5851
- from { opacity: 0; transform: translateY(var(--kds-spacing-0-5)); }
5852
- to { opacity: 1; transform: none; }
6202
+ from { opacity: 0; }
6203
+ to { opacity: 1; }
5853
6204
  }
5854
6205
 
5855
6206
  /* ================================================================