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

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-05T20:41:24.239Z
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 {
@@ -5284,8 +5407,8 @@ dialog#surveyModal button.circle {
5284
5407
  /* Symmetric padding */
5285
5408
  padding: var(--kds-spacing-2);
5286
5409
 
5287
- /* Static border-radius on all corners */
5288
- border-radius: var(--kds-radius-card);
5410
+ /* Bottom-only border-radius top is flush so the brand-inner logo isn't clipped */
5411
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5289
5412
 
5290
5413
  /* Override .kds-card-elevated transition — scroll drives the animation, not CSS transitions */
5291
5414
  transition: none;
@@ -5297,10 +5420,8 @@ dialog#surveyModal button.circle {
5297
5420
  /* clip-path clips the card from the bottom to hide the collapsible space.
5298
5421
  This is VISUAL ONLY — no layout change — prevents scroll feedback loop.
5299
5422
  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. */
5423
+ round uses bottom-only radii (0 top, card-radius bottom) to match
5424
+ border-radius and avoid clipping the brand logo at the top corners. */
5304
5425
  clip-path: inset(
5305
5426
  0 0
5306
5427
  calc(
@@ -5308,7 +5429,7 @@ dialog#surveyModal button.circle {
5308
5429
  + var(--kds-spacing-1) * var(--collapse-progress)
5309
5430
  )
5310
5431
  0
5311
- round var(--kds-radius-card)
5432
+ round 0 0 var(--kds-radius-card) var(--kds-radius-card)
5312
5433
  );
5313
5434
 
5314
5435
  /* Suppress card's own shadow — wrapper handles it */
@@ -5319,7 +5440,8 @@ dialog#surveyModal button.circle {
5319
5440
  .kds-invoice-sticky .kds-brand-inner {
5320
5441
  margin-bottom: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)) + var(--kds-spacing-0-5) * var(--collapse-progress));
5321
5442
  }
5322
- .kds-invoice-sticky .kds-brand-inner svg {
5443
+ .kds-invoice-sticky .kds-brand-inner svg,
5444
+ .kds-invoice-sticky .kds-brand-inner img {
5323
5445
  height: calc(22px - 5px * var(--collapse-progress));
5324
5446
  }
5325
5447
 
@@ -5380,6 +5502,12 @@ dialog#surveyModal button.circle {
5380
5502
  }
5381
5503
  }
5382
5504
 
5505
+ /* Invoice sticky: mobile-first — bottom-only border-radius to prevent clipping the brand logo.
5506
+ Desktop restores full border-radius (see min-width:768px block below). */
5507
+ .kds-card-elevated.kds-invoice-sticky {
5508
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5509
+ }
5510
+
5383
5511
  /* -- Invoice Collapsible (kv rows below header) -- */
5384
5512
  .kds-invoice-collapsible {
5385
5513
  margin-top: var(--kds-spacing-1-5);
@@ -5401,11 +5529,17 @@ dialog#surveyModal button.circle {
5401
5529
  }
5402
5530
 
5403
5531
  /* -- Invoice Header (amount + merchant tile) -- */
5532
+ /* Compound selector overrides BeerCSS `header { padding:0 1rem; display:grid; align-content:center }` */
5533
+ header.kds-invoice-header,
5534
+ div.kds-invoice-header,
5404
5535
  .kds-invoice-header {
5405
5536
  display: flex;
5406
5537
  align-items: flex-start;
5407
5538
  justify-content: space-between;
5408
5539
  gap: var(--kds-spacing-2);
5540
+ padding: 0;
5541
+ border-radius: 0;
5542
+ align-content: initial;
5409
5543
  }
5410
5544
 
5411
5545
  /* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
@@ -5703,7 +5837,6 @@ button.kds-btn-success::after {
5703
5837
  margin-top: var(--kds-spacing-1);
5704
5838
  }
5705
5839
 
5706
-
5707
5840
  /* -- Field group spacing -- */
5708
5841
  .kds-field-group {
5709
5842
  margin-top: var(--kds-spacing-1-75);
@@ -5765,6 +5898,18 @@ button.kds-btn-success::after {
5765
5898
  box-shadow: var(--kds-shadow-card);
5766
5899
  }
5767
5900
 
5901
+ /* Payment flow cards — mobile-first: no vertical padding.
5902
+ Desktop (min-width: 768px) restores padding + full border-radius. */
5903
+ .kds-payment-flow .kds-card-elevated {
5904
+ margin-top: 0;
5905
+ padding-top: 0;
5906
+ padding-bottom: 0;
5907
+ }
5908
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
5909
+ padding-top: var(--kds-spacing-1);
5910
+ padding-bottom: 0;
5911
+ }
5912
+
5768
5913
  /* Payment stage — full-viewport centered wrapper */
5769
5914
  .kds-payment-stage {
5770
5915
  min-height: 100vh;
@@ -5805,13 +5950,26 @@ button.kds-btn-success::after {
5805
5950
 
5806
5951
  }
5807
5952
 
5953
+ /* Desktop: restore card padding and full border-radius on invoice sticky */
5954
+ @media (min-width: 768px) {
5955
+ .kds-payment-flow .kds-card-elevated,
5956
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
5957
+ padding-top: var(--kds-spacing-2);
5958
+ padding-bottom: var(--kds-spacing-2);
5959
+ }
5960
+ .kds-card-elevated.kds-invoice-sticky {
5961
+ border-radius: var(--kds-radius-card);
5962
+ }
5963
+ }
5964
+
5808
5965
  /* Brand logo row (external, outside cards) */
5809
5966
  .kds-brand-row {
5810
5967
  padding: 0 var(--kds-spacing-0-5);
5811
5968
  display: flex;
5812
5969
  align-items: center;
5813
5970
  }
5814
- .kds-brand-row svg {
5971
+ .kds-brand-row svg,
5972
+ .kds-brand-row img {
5815
5973
  height: 22px;
5816
5974
  display: block;
5817
5975
  }
@@ -5821,8 +5979,10 @@ button.kds-btn-success::after {
5821
5979
  display: none;
5822
5980
  align-items: center;
5823
5981
  margin-bottom: var(--kds-spacing-1);
5982
+ border-radius: 0;
5824
5983
  }
5825
- .kds-brand-inner svg {
5984
+ .kds-brand-inner svg,
5985
+ .kds-brand-inner img {
5826
5986
  height: 22px;
5827
5987
  display: block;
5828
5988
  }