@khipu/design-system 0.1.0-alpha.55 → 0.2.0-alpha.10

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-04T15:34:36.820Z
14
+ * Generated: 2026-05-18T14:15:54.397Z
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;
@@ -156,9 +147,9 @@
156
147
  --kds-letter-spacing-widest: 1px;
157
148
 
158
149
  /* Button typography */
159
- --kds-typography-button-font-size: 0.9375rem;
150
+ --kds-typography-button-font-size: 0.875rem;
160
151
  --kds-typography-button-font-weight: 500;
161
- --kds-typography-button-line-height: 26px;
152
+ --kds-typography-button-line-height: 1.5;
162
153
  --kds-typography-button-letter-spacing: 0.46px;
163
154
 
164
155
  /* Typography margins */
@@ -208,10 +199,10 @@
208
199
  --kds-spacing-input-padding-y: 16px;
209
200
  --kds-spacing-input-padding-x: 12px;
210
201
  --kds-spacing-input-padding: 16px 12px;
211
- --kds-spacing-button-padding-y: 8px;
212
- --kds-spacing-button-padding-x: 22px;
213
- --kds-spacing-button-padding: 8px 22px;
214
- --kds-spacing-button-min-height: 50px;
202
+ --kds-spacing-button-padding-y: 0;
203
+ --kds-spacing-button-padding-x: 16px;
204
+ --kds-spacing-button-padding: 0 16px;
205
+ --kds-spacing-button-min-height: 44px;
215
206
  --kds-spacing-button-icon-size: 20px;
216
207
  --kds-spacing-sidebar-width: 280px;
217
208
  --kds-spacing-sidebar-width-collapsed: 72px;
@@ -250,7 +241,7 @@
250
241
  --kds-radius-full: 9999px;
251
242
 
252
243
  /* Component-specific radii */
253
- --kds-radius-button: 4px;
244
+ --kds-radius-button: 10px;
254
245
  --kds-radius-input: 4px;
255
246
  --kds-radius-card: 14px;
256
247
  --kds-radius-modal: 20px;
@@ -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;
@@ -622,6 +643,7 @@ body.dark {
622
643
  /* Scroll Container Utilities */
623
644
  --kds-scroll-sm-height: 280px;
624
645
  --kds-scroll-md-height: 420px;
646
+
625
647
  --kds-scroll-lg-height: 600px;
626
648
 
627
649
  /* Stage Layout */
@@ -734,7 +756,7 @@ footer {
734
756
  ======================================== */
735
757
  :root {
736
758
  /* Scroll-linked collapse range (mobile sticky invoice) */
737
- --kds-scroll-collapse-end: 150px;
759
+ --kds-scroll-collapse-end: 60px;
738
760
 
739
761
  /* Merchant tile: normal and collapsed sizes (from source prototype) */
740
762
  --kds-merchant-size: 64px;
@@ -756,6 +778,10 @@ footer {
756
778
  * Source: design.khipu.com and Material Design 3 specifications
757
779
  */
758
780
 
781
+ * {
782
+ border-radius: 0;
783
+ }
784
+
759
785
 
760
786
  :has(>main) {
761
787
  background-color: transparent !important;
@@ -799,34 +825,38 @@ a.kds-btn {
799
825
  align-items: center;
800
826
  justify-content: center;
801
827
  gap: 8px;
828
+ text-align: center;
829
+ width: 100%;
802
830
 
803
831
  /* Typography - Using design tokens */
804
832
  font-family: var(--kds-font-family-secondary);
805
- font-weight: var(--kds-font-weight-medium); /* 500, no 600 */
806
- font-size: var(--kds-typography-button-font-size); /* 0.9375rem = 15px */
807
- line-height: var(--kds-typography-button-line-height); /* 26px, no 1 */
833
+ font-weight: var(--kds-font-weight-medium); /* 500 */
834
+ font-size: var(--kds-typography-button-font-size); /* 0.875rem = 14px */
835
+ line-height: var(--kds-typography-button-line-height); /* 1.5 */
808
836
  letter-spacing: var(--kds-typography-button-letter-spacing); /* 0.46px */
809
837
  text-transform: uppercase;
810
838
 
811
839
  /* Spacing - Using design tokens */
812
- padding: var(--kds-spacing-button-padding); /* 8px 22px */
813
- min-height: var(--kds-spacing-button-min-height); /* 50px */
814
- height: auto; /* Remove fixed height, let content + padding define it */
840
+ padding: var(--kds-spacing-button-padding); /* 0 16px */
841
+ height: var(--kds-spacing-button-min-height); /* 44px */
815
842
 
816
843
  /* Border - Using design token */
817
- border-radius: var(--kds-radius-button); /* 4px */
844
+ border-radius: var(--kds-radius-button); /* 10px */
818
845
  border: none;
819
846
 
820
847
  /* Interaction */
821
848
  cursor: pointer;
822
- transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1),
823
- box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1),
824
- border-color 250ms cubic-bezier(0.4, 0, 0.2, 1),
825
- color 250ms cubic-bezier(0.4, 0, 0.2, 1);
849
+ transition: background .15s, box-shadow .15s, transform .05s;
826
850
  box-sizing: border-box;
827
851
  vertical-align: middle;
828
852
  }
829
853
 
854
+ /* Active state - add subtle press effect */
855
+ button.kds-btn:active:not(:disabled),
856
+ a.kds-btn:active:not(:disabled) {
857
+ transform: translateY(1px);
858
+ }
859
+
830
860
  /* Disabled state - colores específicos en lugar de opacity */
831
861
  button.kds-btn:disabled,
832
862
  a.kds-btn:disabled {
@@ -844,18 +874,13 @@ a.kds-btn-primary {
844
874
  background: var(--kds-color-primary-main); /* #8347AD */
845
875
  color: white;
846
876
  border: none;
847
- box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2),
848
- 0px 2px 2px 0px rgba(0, 0, 0, 0.14),
849
- 0px 1px 5px 0px rgba(0, 0, 0, 0.12); /* elevation/2 */
877
+ box-shadow: 0 1px 2px rgba(131, 71, 173, .25);
850
878
  }
851
879
 
852
- /* Hover State - background más oscuro + elevation/4 */
880
+ /* Hover State - background más oscuro */
853
881
  button.kds-btn-primary:hover:not(:disabled),
854
882
  a.kds-btn-primary:hover:not(:disabled) {
855
- background: var(--kds-color-primary-dark); /* #6A3A8C */
856
- box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2),
857
- 0px 4px 5px 0px rgba(0, 0, 0, 0.14),
858
- 0px 1px 10px 0px rgba(0, 0, 0, 0.12); /* elevation/4 */
883
+ background: var(--kds-color-primary-dark); /* #5B3179 */
859
884
  }
860
885
 
861
886
  /* Active/Focus State */
@@ -984,7 +1009,12 @@ a.kds-btn > .kds-icon > i {
984
1009
  min-width: var(--kds-spacing-button-icon-size);
985
1010
  min-height: var(--kds-spacing-button-icon-size);
986
1011
  line-height: 1;
987
- top: 1px;
1012
+ }
1013
+
1014
+ /* Full-width button */
1015
+ button.kds-btn.kds-btn-block,
1016
+ a.kds-btn.kds-btn-block {
1017
+ width: 100%;
988
1018
  }
989
1019
 
990
1020
  /* ========================================
@@ -1008,12 +1038,6 @@ a.kds-btn.kds-btn-md {
1008
1038
 
1009
1039
  /* Default .kds-btn uses --kds-spacing-button-min-height (50px) from base styles */
1010
1040
 
1011
- /* Full-width button */
1012
- button.kds-btn.kds-btn-block,
1013
- a.kds-btn.kds-btn-block {
1014
- width: 100%;
1015
- }
1016
-
1017
1041
  /* ========================================
1018
1042
  Card Components (Material Design 3)
1019
1043
  ======================================== */
@@ -1026,6 +1050,7 @@ a.kds-btn.kds-btn-block {
1026
1050
  padding: var(--kds-spacing-2);
1027
1051
  box-shadow: var(--kds-shadow-card);
1028
1052
  transition: box-shadow 0.3s ease;
1053
+ margin-block-start: 0 !important;
1029
1054
  }
1030
1055
 
1031
1056
  .kds-card-elevated:hover,
@@ -1702,53 +1727,108 @@ a.kds-btn.kds-btn-block {
1702
1727
  }
1703
1728
 
1704
1729
  /* ========================================
1705
- Snackbar Positioning
1730
+ Snackbar Positioning & Styling
1706
1731
  ======================================== */
1707
1732
 
1708
1733
  .snackbar {
1709
1734
  position: fixed;
1710
- bottom: var(--kds-spacing-3);
1711
- left: 50%;
1712
- transform: translateX(-50%);
1713
1735
  z-index: var(--kds-z-index-snackbar);
1714
1736
  min-width: 344px;
1715
1737
  max-width: var(--kds-snackbar-max-width);
1716
1738
  box-shadow: var(--kds-shadow-8);
1739
+ border-radius: var(--kds-radius-md);
1740
+ padding: var(--kds-spacing-1-5) var(--kds-spacing-2);
1741
+ gap: var(--kds-spacing-1);
1742
+ font-family: var(--kds-font-family-primary);
1743
+ font-size: var(--kds-font-size-body2);
1744
+ font-weight: var(--kds-font-weight-medium);
1745
+ line-height: var(--kds-line-height-normal);
1746
+ letter-spacing: var(--kds-letter-spacing-normal);
1747
+ overflow: hidden;
1717
1748
  }
1718
1749
 
1719
1750
  /* Snackbar active state - ensure visibility when toggled via JS */
1720
1751
  .snackbar.active {
1721
1752
  visibility: visible !important;
1722
1753
  opacity: 1 !important;
1723
- transform: translateX(-50%) !important;
1724
1754
  }
1725
1755
 
1726
- /* Snackbar semantic variants - background + text/icon color */
1756
+ /* Snackbar semantic variants
1757
+ All use white text (--kds-color-primary-contrast) on solid semantic backgrounds */
1727
1758
  .snackbar.error {
1728
1759
  background-color: var(--kds-color-error-main) !important;
1729
- color: var(--on-error, var(--kds-color-primary-contrast)) !important;
1760
+ color: var(--kds-color-primary-contrast) !important;
1730
1761
  }
1731
1762
 
1732
1763
  .snackbar.error i {
1733
- color: var(--on-error, var(--kds-color-primary-contrast)) !important;
1764
+ color: var(--kds-color-primary-contrast) !important;
1734
1765
  }
1735
1766
 
1736
1767
  .snackbar.info {
1737
1768
  background-color: var(--kds-color-info-main) !important;
1738
- color: var(--on-info, var(--kds-color-primary-contrast)) !important;
1769
+ color: var(--kds-color-primary-contrast) !important;
1739
1770
  }
1740
1771
 
1741
1772
  .snackbar.info i {
1742
- color: var(--on-info, var(--kds-color-primary-contrast)) !important;
1773
+ color: var(--kds-color-primary-contrast) !important;
1743
1774
  }
1744
1775
 
1745
1776
  .snackbar.success {
1746
1777
  background-color: var(--kds-color-success-main) !important;
1747
- color: var(--on-success, var(--kds-color-primary-contrast)) !important;
1778
+ color: var(--kds-color-primary-contrast) !important;
1748
1779
  }
1749
1780
 
1750
1781
  .snackbar.success i {
1751
- color: var(--on-success, var(--kds-color-primary-contrast)) !important;
1782
+ color: var(--kds-color-primary-contrast) !important;
1783
+ }
1784
+
1785
+ /* Snackbar progress bar — animated timer for auto-dismiss */
1786
+ .snackbar[data-auto-dismiss]::after {
1787
+ content: '';
1788
+ position: absolute;
1789
+ bottom: 0;
1790
+ left: 0;
1791
+ height: 3px;
1792
+ width: 100%;
1793
+ background: rgba(255, 255, 255, 0.35);
1794
+ border-radius: 0 0 var(--kds-radius-md) var(--kds-radius-md);
1795
+ animation: kds-snackbar-timer var(--kds-snackbar-duration, 5s) linear forwards;
1796
+ }
1797
+
1798
+ @keyframes kds-snackbar-timer {
1799
+ from { width: 100%; }
1800
+ to { width: 0; }
1801
+ }
1802
+
1803
+ /* Snackbar close button */
1804
+ .kds-snackbar-close {
1805
+ background: none !important;
1806
+ border: none !important;
1807
+ color: var(--kds-color-primary-contrast) !important;
1808
+ cursor: pointer;
1809
+ padding: var(--kds-spacing-0-5) !important;
1810
+ margin: calc(-1 * var(--kds-spacing-0-5)) !important;
1811
+ margin-left: 0 !important;
1812
+ border-radius: var(--kds-radius-full) !important;
1813
+ display: flex;
1814
+ align-items: center;
1815
+ justify-content: center;
1816
+ flex-shrink: 0;
1817
+ opacity: 0.7;
1818
+ transition: opacity 150ms;
1819
+ min-width: auto !important;
1820
+ width: auto !important;
1821
+ height: auto !important;
1822
+ }
1823
+
1824
+ .kds-snackbar-close:hover {
1825
+ opacity: 1;
1826
+ background: rgba(255, 255, 255, 0.15) !important;
1827
+ }
1828
+
1829
+ .kds-snackbar-close i {
1830
+ font-size: 18px !important;
1831
+ color: var(--kds-color-primary-contrast) !important;
1752
1832
  }
1753
1833
 
1754
1834
  /* ========================================
@@ -2168,12 +2248,16 @@ body.dark {
2168
2248
  Asegurar que el dropdown arrow sea visible
2169
2249
  ========================================== */
2170
2250
 
2171
- /* Select: mantener appearance nativa para mostrar el dropdown arrow */
2251
+ /* Select: reset nativo + arrow custom via SVG (iOS Safari ignora estilos con appearance:auto) */
2172
2252
  .field select {
2173
- /* BeerCSS puede estar ocultando el arrow, aseguramos que sea visible */
2174
- appearance: auto;
2175
- -webkit-appearance: auto;
2176
- -moz-appearance: auto;
2253
+ -webkit-appearance: none;
2254
+ -moz-appearance: none;
2255
+ appearance: none;
2256
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");
2257
+ background-repeat: no-repeat;
2258
+ background-position: right var(--kds-spacing-1) center;
2259
+ background-size: 20px;
2260
+ padding-right: var(--kds-spacing-4) !important;
2177
2261
  }
2178
2262
 
2179
2263
  /* ==========================================
@@ -2721,7 +2805,8 @@ dialog.modal .field.border:focus-within {
2721
2805
  padding: var(--kds-spacing-2);
2722
2806
  }
2723
2807
 
2724
- .snackbar {
2808
+ .snackbar,
2809
+ .snackbar.active {
2725
2810
  min-width: calc(100% - 32px);
2726
2811
  left: 16px;
2727
2812
  right: 16px;
@@ -4032,6 +4117,96 @@ dialog#surveyModal button.circle {
4032
4117
  font-size: var(--kds-font-size-sm);
4033
4118
  }
4034
4119
 
4120
+ /* ── Typography variants ── */
4121
+ .kds-text-display1 {
4122
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4123
+ font-size: var(--kds-font-size-4xl, 36px);
4124
+ font-weight: var(--kds-font-weight-bold, 700);
4125
+ line-height: var(--kds-line-height-tight, 1.2);
4126
+ letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
4127
+ }
4128
+
4129
+ .kds-text-display2 {
4130
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4131
+ font-size: var(--kds-font-size-3xl, 30px);
4132
+ font-weight: var(--kds-font-weight-bold, 700);
4133
+ line-height: var(--kds-line-height-tight, 1.2);
4134
+ letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
4135
+ }
4136
+
4137
+ .kds-text-heading1 {
4138
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4139
+ font-size: var(--kds-font-size-2xl, 24px);
4140
+ font-weight: var(--kds-font-weight-semibold, 600);
4141
+ line-height: var(--kds-line-height-snug, 1.375);
4142
+ }
4143
+
4144
+ .kds-text-heading2 {
4145
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4146
+ font-size: var(--kds-font-size-xl, 20px);
4147
+ font-weight: var(--kds-font-weight-semibold, 600);
4148
+ line-height: var(--kds-line-height-snug, 1.375);
4149
+ }
4150
+
4151
+ .kds-text-heading3 {
4152
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4153
+ font-size: var(--kds-font-size-lg, 18px);
4154
+ font-weight: var(--kds-font-weight-semibold, 600);
4155
+ line-height: var(--kds-line-height-normal, 1.5);
4156
+ }
4157
+
4158
+ .kds-text-body-large {
4159
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4160
+ font-size: var(--kds-font-size-base, 16px);
4161
+ font-weight: var(--kds-font-weight-regular, 400);
4162
+ line-height: var(--kds-line-height-relaxed, 1.66);
4163
+ }
4164
+
4165
+ .kds-text-body {
4166
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4167
+ font-size: var(--kds-font-size-sm, 14px);
4168
+ font-weight: var(--kds-font-weight-regular, 400);
4169
+ line-height: var(--kds-line-height-normal, 1.5);
4170
+ }
4171
+
4172
+ .kds-text-body-small {
4173
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4174
+ font-size: var(--kds-font-size-sm, 12px);
4175
+ font-weight: var(--kds-font-weight-regular, 400);
4176
+ line-height: var(--kds-line-height-normal, 1.5);
4177
+ }
4178
+
4179
+ .kds-text-label {
4180
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4181
+ font-size: var(--kds-font-size-sm, 12px);
4182
+ font-weight: var(--kds-font-weight-semibold, 600);
4183
+ line-height: var(--kds-line-height-normal, 1.5);
4184
+ letter-spacing: var(--kds-letter-spacing-widest, 1px);
4185
+ text-transform: uppercase;
4186
+ }
4187
+
4188
+ .kds-text-label-small {
4189
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4190
+ font-size: var(--kds-font-size-xs, 10px);
4191
+ font-weight: var(--kds-font-weight-semibold, 600);
4192
+ line-height: var(--kds-line-height-normal, 1.5);
4193
+ letter-spacing: var(--kds-letter-spacing-widest, 1px);
4194
+ text-transform: uppercase;
4195
+ }
4196
+
4197
+ .kds-text-link {
4198
+ font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
4199
+ font-size: inherit;
4200
+ font-weight: var(--kds-font-weight-medium, 500);
4201
+ color: var(--kds-color-primary-main, #8347AD);
4202
+ text-decoration: underline;
4203
+ cursor: pointer;
4204
+ }
4205
+
4206
+ .kds-text-link:hover {
4207
+ color: var(--kds-color-primary-dark, #5B3179);
4208
+ }
4209
+
4035
4210
  /* Display utilities */
4036
4211
  .kds-hidden {
4037
4212
  display: none;
@@ -4535,14 +4710,26 @@ dialog#surveyModal button.circle {
4535
4710
 
4536
4711
  .field.locked > input,
4537
4712
  .field.locked > textarea {
4538
- background: var(--kds-color-shell);
4539
- color: var(--kds-color-text-secondary);
4713
+ color: var(--kds-color-text-disabled);
4540
4714
  cursor: default;
4541
- border-color: var(--kds-color-divider);
4715
+ pointer-events: none;
4542
4716
  }
4543
4717
 
4544
4718
  .field.locked > label {
4545
- color: var(--kds-color-text-hint);
4719
+ color: var(--kds-color-text-disabled);
4720
+ }
4721
+
4722
+ /* Locked: suppress all hover/focus visual changes */
4723
+ .field.label.border:not(.fill).locked:hover:not(:focus-within) > label::after,
4724
+ .field.label.border:not(.fill).locked:focus-within > label::after {
4725
+ border-block-start-color: var(--outline);
4726
+ }
4727
+ .field.label.border:not(.fill).locked:hover:not(:focus-within) > :is(input, textarea, select),
4728
+ .field.label.border:not(.fill).locked:focus-within > :is(input, textarea, select) {
4729
+ border-color: var(--outline);
4730
+ }
4731
+ .field.label.locked:hover:not(:focus-within) > label {
4732
+ color: var(--kds-color-text-disabled);
4546
4733
  }
4547
4734
 
4548
4735
  .field.locked > i {
@@ -4783,20 +4970,50 @@ dialog#surveyModal button.circle {
4783
4970
  display: flex;
4784
4971
  align-items: center;
4785
4972
  justify-content: center;
4786
- gap: var(--kds-spacing-1);
4787
- color: var(--kds-color-text-disabled);
4973
+ gap: var(--kds-spacing-0-5);
4974
+ color: var(--kds-color-gray-400);
4788
4975
  font-size: var(--kds-font-size-xs);
4976
+ letter-spacing: var(--kds-letter-spacing-wide);
4789
4977
  padding: var(--kds-spacing-1) 0;
4790
4978
  }
4791
4979
 
4792
- .kds-secure-footer i {
4793
- font-size: var(--kds-font-size-sm);
4980
+ /* Desktop: footer inside card hidden; Mobile: footer outside card hidden */
4981
+ .kds-card-elevated > .kds-secure-footer {
4982
+ display: none;
4794
4983
  }
4795
4984
 
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);
4985
+ @media (max-width: 767px) {
4986
+ .kds-card-elevated > .kds-secure-footer {
4987
+ display: flex;
4988
+ }
4989
+ .kds-screen > .kds-secure-footer {
4990
+ display: none;
4991
+ }
4992
+
4993
+ .kds-screen > form {
4994
+ margin-block-start: 0 !important;
4995
+ }
4996
+ }
4997
+
4998
+ .kds-secure-footer-lock {
4999
+ width: 12px;
5000
+ height: 12px;
5001
+ flex: 0 0 auto;
5002
+ display: block;
5003
+ fill: none;
5004
+ stroke: currentColor;
5005
+ stroke-width: 1.75;
5006
+ stroke-linecap: round;
5007
+ stroke-linejoin: round;
5008
+ }
5009
+
5010
+ .kds-secure-footer .khipu-mark {
5011
+ height: 11px;
5012
+ width: auto;
5013
+ flex: 0 0 auto;
5014
+ display: block;
5015
+ object-fit: contain;
5016
+ overflow: visible;
4800
5017
  }
4801
5018
 
4802
5019
  .kds-secure-footer-code {
@@ -4811,14 +5028,15 @@ dialog#surveyModal button.circle {
4811
5028
  .kds-expand-toggle {
4812
5029
  background: none;
4813
5030
  border: 0;
4814
- padding: var(--kds-spacing-0-5) 0;
5031
+ padding: 0;
4815
5032
  color: var(--kds-color-primary-main);
4816
5033
  font-weight: var(--kds-font-weight-medium);
4817
5034
  font-size: var(--kds-font-size-sm);
5035
+ padding-bottom: var(--kds-spacing-1-25);
4818
5036
  cursor: pointer;
4819
5037
  display: inline-flex;
4820
5038
  align-items: center;
4821
- gap: var(--kds-spacing-0-75);
5039
+ gap: 0;
4822
5040
  }
4823
5041
 
4824
5042
  .kds-expand-toggle:hover {
@@ -4851,7 +5069,7 @@ dialog#surveyModal button.circle {
4851
5069
 
4852
5070
  .kds-expand-panel.open {
4853
5071
  max-height: 800px;
4854
- margin-top: var(--kds-spacing-1);
5072
+ margin-top: 0;
4855
5073
  }
4856
5074
 
4857
5075
  /* ========================================
@@ -5187,6 +5405,7 @@ dialog#surveyModal button.circle {
5187
5405
  background: var(--kds-color-background-muted);
5188
5406
  border-radius: var(--kds-radius-lg);
5189
5407
  padding: var(--kds-spacing-0-25);
5408
+ margin-bottom: var(--kds-spacing-2);
5190
5409
  display: flex;
5191
5410
  position: relative;
5192
5411
  }
@@ -5234,6 +5453,11 @@ dialog#surveyModal button.circle {
5234
5453
  font-weight: var(--kds-font-weight-semibold);
5235
5454
  }
5236
5455
 
5456
+ /* Auto-managed tab panels: hidden attribute must win over any display rule */
5457
+ [data-kds-tab-panel][hidden] {
5458
+ display: none;
5459
+ }
5460
+
5237
5461
 
5238
5462
  /* ========================================
5239
5463
  PAYMENT FLOW — DOMAIN COMPONENTS
@@ -5279,8 +5503,8 @@ dialog#surveyModal button.circle {
5279
5503
  /* Symmetric padding */
5280
5504
  padding: var(--kds-spacing-2);
5281
5505
 
5282
- /* Static border-radius on all corners */
5283
- border-radius: var(--kds-radius-card);
5506
+ /* Bottom-only border-radius top is flush so the brand-inner logo isn't clipped */
5507
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5284
5508
 
5285
5509
  /* Override .kds-card-elevated transition — scroll drives the animation, not CSS transitions */
5286
5510
  transition: none;
@@ -5292,10 +5516,8 @@ dialog#surveyModal button.circle {
5292
5516
  /* clip-path clips the card from the bottom to hide the collapsible space.
5293
5517
  This is VISUAL ONLY — no layout change — prevents scroll feedback loop.
5294
5518
  Safari 13.1+ compatible (inset + round)
5295
- When collapsed (progress=1): bottom corners get border-radius,
5296
- top stays flush with screen edge. */
5297
- /* Bottom inset = collapsible height + half the card padding to tighten
5298
- the gap between "Código" and the visible bottom edge when collapsed. */
5519
+ round uses bottom-only radii (0 top, card-radius bottom) to match
5520
+ border-radius and avoid clipping the brand logo at the top corners. */
5299
5521
  clip-path: inset(
5300
5522
  0 0
5301
5523
  calc(
@@ -5303,7 +5525,7 @@ dialog#surveyModal button.circle {
5303
5525
  + var(--kds-spacing-1) * var(--collapse-progress)
5304
5526
  )
5305
5527
  0
5306
- round var(--kds-radius-card)
5528
+ round 0 0 var(--kds-radius-card) var(--kds-radius-card)
5307
5529
  );
5308
5530
 
5309
5531
  /* Suppress card's own shadow — wrapper handles it */
@@ -5314,7 +5536,8 @@ dialog#surveyModal button.circle {
5314
5536
  .kds-invoice-sticky .kds-brand-inner {
5315
5537
  margin-bottom: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)) + var(--kds-spacing-0-5) * var(--collapse-progress));
5316
5538
  }
5317
- .kds-invoice-sticky .kds-brand-inner svg {
5539
+ .kds-invoice-sticky .kds-brand-inner svg,
5540
+ .kds-invoice-sticky .kds-brand-inner img {
5318
5541
  height: calc(22px - 5px * var(--collapse-progress));
5319
5542
  }
5320
5543
 
@@ -5324,7 +5547,13 @@ dialog#surveyModal button.circle {
5324
5547
  opacity: calc(1 - var(--collapse-progress) * 1.5);
5325
5548
  }
5326
5549
 
5327
- /* Amount: NO font-size change (source keeps 30px always) */
5550
+ /* Amount: 30px 24px (progressive) */
5551
+ .kds-invoice-sticky .kds-invoice-amount {
5552
+ font-size: calc(
5553
+ var(--kds-font-size-3xl) -
5554
+ (var(--kds-font-size-3xl) - var(--kds-font-size-2xl)) * var(--collapse-progress)
5555
+ );
5556
+ }
5328
5557
 
5329
5558
  /* Merchant tile: 64×64px → 50×50px, radius 8px → 6px (progressive) */
5330
5559
  .kds-invoice-sticky .kds-invoice-merchant {
@@ -5350,10 +5579,11 @@ dialog#surveyModal button.circle {
5350
5579
  );
5351
5580
  }
5352
5581
 
5353
- /* Code: margin-top 4px → 0 (progressive). Font-size stays 12px. */
5582
+ /* Code: margin-top 8px → 0, font-size 12px → 11px (progressive) */
5354
5583
  .kds-invoice-sticky .kds-invoice-code {
5355
5584
  margin-top: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)));
5356
5585
  margin-bottom: 0;
5586
+ font-size: calc(var(--kds-font-size-xs) - 1px * var(--collapse-progress));
5357
5587
  }
5358
5588
 
5359
5589
  /* Pull all siblings after sticky wrapper up to fill clipped gap.
@@ -5375,32 +5605,40 @@ dialog#surveyModal button.circle {
5375
5605
  }
5376
5606
  }
5377
5607
 
5608
+ /* Invoice sticky: mobile-first — bottom-only border-radius to prevent clipping the brand logo.
5609
+ Desktop restores full border-radius (see min-width:768px block below). */
5610
+ .kds-card-elevated.kds-invoice-sticky {
5611
+ border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
5612
+ }
5613
+
5378
5614
  /* -- Invoice Collapsible (kv rows below header) -- */
5379
5615
  .kds-invoice-collapsible {
5380
- margin-top: var(--kds-spacing-1-5);
5616
+ margin-top: var(--kds-spacing-1);
5381
5617
  }
5382
5618
 
5383
- /* -- Invoice Summary (kv + expand toggle side by side) -- */
5619
+ /* -- Invoice Summary -- */
5384
5620
  .kds-invoice-summary {
5385
5621
  display: flex;
5386
5622
  align-items: flex-end;
5387
- gap: var(--kds-spacing-2);
5623
+ gap: var(--kds-spacing-1);
5388
5624
  }
5389
5625
  .kds-invoice-summary .kds-kv {
5390
5626
  flex: 1;
5391
5627
  min-width: 0;
5392
5628
  }
5393
- .kds-invoice-summary .kds-expand-toggle {
5394
- flex-shrink: 0;
5395
- white-space: nowrap;
5396
- }
5397
5629
 
5398
5630
  /* -- Invoice Header (amount + merchant tile) -- */
5631
+ /* Compound selector overrides BeerCSS `header { padding:0 1rem; display:grid; align-content:center }` */
5632
+ header.kds-invoice-header,
5633
+ div.kds-invoice-header,
5399
5634
  .kds-invoice-header {
5400
5635
  display: flex;
5401
5636
  align-items: flex-start;
5402
5637
  justify-content: space-between;
5403
5638
  gap: var(--kds-spacing-2);
5639
+ padding: 0;
5640
+ border-radius: 0;
5641
+ align-content: initial;
5404
5642
  }
5405
5643
 
5406
5644
  /* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
@@ -5410,11 +5648,11 @@ dialog#surveyModal button.circle {
5410
5648
  }
5411
5649
 
5412
5650
  .kds-invoice-amount {
5413
- font-weight: 700;
5414
- font-size: 30px;
5415
- line-height: 1.25;
5416
- letter-spacing: 0.4px;
5417
- color: var(--kds-color-text-primary);
5651
+ font-weight: var(--kds-font-weight-bold);
5652
+ font-size: var(--kds-font-size-3xl);
5653
+ line-height: var(--kds-line-height-tight);
5654
+ letter-spacing: var(--kds-letter-spacing-wide);
5655
+ color: var(--kds-color-gray-900);
5418
5656
  margin: 0;
5419
5657
  }
5420
5658
 
@@ -5423,10 +5661,21 @@ dialog#surveyModal button.circle {
5423
5661
  }
5424
5662
 
5425
5663
  .kds-invoice-code {
5664
+ font-family: var(--kds-font-family-mono);
5426
5665
  font-size: var(--kds-font-size-xs);
5427
- color: var(--kds-color-text-hint);
5666
+ font-weight: var(--kds-font-weight-regular);
5667
+ letter-spacing: var(--kds-letter-spacing-wider);
5668
+ font-variant-numeric: tabular-nums;
5669
+ color: var(--kds-color-gray-400);
5670
+ text-transform: uppercase;
5428
5671
  margin: 0;
5429
- margin-top: var(--kds-spacing-1);
5672
+ margin-block: unset;
5673
+ margin: var(--kds-spacing-1) 0;
5674
+ }
5675
+
5676
+ .kds-invoice-code-value {
5677
+ text-transform: lowercase;
5678
+ color: var(--kds-text-primary);
5430
5679
  }
5431
5680
 
5432
5681
  .kds-invoice-merchant {
@@ -5456,6 +5705,13 @@ dialog#surveyModal button.circle {
5456
5705
  line-height: 1;
5457
5706
  }
5458
5707
 
5708
+ .kds-invoice-merchant img {
5709
+ width: 100%;
5710
+ height: 100%;
5711
+ object-fit: cover;
5712
+ border-radius: var(--kds-radius-md);
5713
+ }
5714
+
5459
5715
  /* -- Card Title -- */
5460
5716
  .kds-card-title {
5461
5717
  font-weight: 700;
@@ -5463,22 +5719,22 @@ dialog#surveyModal button.circle {
5463
5719
  line-height: 1.5;
5464
5720
  letter-spacing: -0.31px;
5465
5721
  color: var(--kds-color-text-primary);
5466
- margin: 0 0 var(--kds-spacing-2);
5722
+ margin-bottom: var(--kds-spacing-2) !important;
5467
5723
  }
5468
5724
 
5469
5725
  /* -- Key-Value Grid -- */
5470
5726
  .kds-kv {
5471
5727
  display: grid;
5472
5728
  grid-template-columns: auto 1fr;
5473
- row-gap: var(--kds-spacing-1);
5474
5729
  column-gap: var(--kds-spacing-1-5);
5475
5730
  align-items: baseline;
5476
5731
  }
5477
5732
 
5478
5733
  .kds-kv dt {
5479
5734
  font-size: var(--kds-font-size-xs);
5480
- letter-spacing: 0.2px;
5481
- color: var(--kds-color-text-hint);
5735
+ line-height: var(--kds-line-height-relaxed);
5736
+ letter-spacing: normal;
5737
+ color: var(--kds-color-text-secondary);
5482
5738
  text-transform: uppercase;
5483
5739
  margin: 0;
5484
5740
  }
@@ -5486,8 +5742,14 @@ dialog#surveyModal button.circle {
5486
5742
  .kds-kv dd {
5487
5743
  margin: 0;
5488
5744
  font-size: var(--kds-font-size-sm);
5489
- font-weight: 600;
5490
- color: var(--kds-color-text-primary);
5745
+ line-height: var(--kds-line-height-relaxed);
5746
+ font-weight: var(--kds-font-weight-bold);
5747
+ letter-spacing: normal;
5748
+ color: var(--kds-color-gray-800);
5749
+ min-width: 0;
5750
+ white-space: nowrap;
5751
+ overflow: hidden;
5752
+ text-overflow: ellipsis;
5491
5753
  }
5492
5754
 
5493
5755
  /* -- Dividers -- */
@@ -5509,13 +5771,13 @@ dialog#surveyModal button.circle {
5509
5771
  .kds-detail-list {
5510
5772
  display: flex;
5511
5773
  flex-direction: column;
5512
- gap: var(--kds-spacing-1-75);
5513
- margin: var(--kds-spacing-1-75) 0 0;
5514
- padding: 0;
5774
+ gap: var(--kds-spacing-1-5);
5775
+ margin: 0;
5776
+ padding: 0 0 var(--kds-spacing-2);
5515
5777
  }
5516
5778
 
5517
5779
  .kds-detail-group {
5518
- margin-bottom: var(--kds-spacing-1-75);
5780
+ margin-bottom: var(--kds-spacing-1-5);
5519
5781
  }
5520
5782
 
5521
5783
  .kds-detail-group:last-child {
@@ -5524,16 +5786,15 @@ dialog#surveyModal button.circle {
5524
5786
 
5525
5787
  .kds-detail-group dt {
5526
5788
  font-size: var(--kds-font-size-xs);
5527
- letter-spacing: 0.2px;
5789
+ letter-spacing: var(--kds-letter-spacing-wide);
5528
5790
  color: var(--kds-color-text-hint);
5529
5791
  text-transform: uppercase;
5530
- margin: 0 0 var(--kds-spacing-0-5);
5531
5792
  }
5532
5793
 
5533
5794
  .kds-detail-group dd {
5534
5795
  margin: 0;
5535
5796
  font-size: var(--kds-font-size-sm);
5536
- line-height: 1.45;
5797
+ line-height: var(--kds-line-height-normal);
5537
5798
  color: var(--kds-color-text-primary);
5538
5799
  }
5539
5800
 
@@ -5695,7 +5956,11 @@ button.kds-btn-success::after {
5695
5956
  display: flex;
5696
5957
  flex-direction: column;
5697
5958
  gap: var(--kds-spacing-1);
5698
- margin-top: var(--kds-spacing-1);
5959
+ margin-bottom: var(--kds-spacing-1);
5960
+ }
5961
+
5962
+ .kds-bank-list:last-child {
5963
+ margin-bottom: 0;
5699
5964
  }
5700
5965
 
5701
5966
  /* -- Field group spacing -- */
@@ -5749,6 +6014,134 @@ button.kds-btn-success::after {
5749
6014
  margin-top: var(--kds-spacing-2-5);
5750
6015
  }
5751
6016
 
6017
+ /* -- PSP Banner -- */
6018
+ .kds-psp-banner {
6019
+ padding: var(--kds-spacing-0-5) var(--kds-spacing-1-25);
6020
+ font-size: var(--kds-font-size-sm);
6021
+ border-radius: var(--kds-radius-sm);
6022
+ margin-top: var(--kds-spacing-1-5);
6023
+ }
6024
+
6025
+ /* -- Bill Description -- */
6026
+ .kds-bill-description-body {
6027
+ font-family: inherit;
6028
+ white-space: pre-wrap;
6029
+ overflow-wrap: anywhere;
6030
+ margin: 0;
6031
+ padding: 0;
6032
+ background: transparent;
6033
+ color: var(--kds-color-text-secondary);
6034
+ font-size: var(--kds-font-size-sm);
6035
+ line-height: var(--kds-line-height-normal);
6036
+ }
6037
+
6038
+ .kds-bill-description-picture {
6039
+ width: 120px;
6040
+ height: 120px;
6041
+ object-fit: contain;
6042
+ background: var(--kds-color-background-paper);
6043
+ padding: var(--kds-spacing-1-25);
6044
+ border-radius: var(--kds-radius-md);
6045
+ margin-top: var(--kds-spacing-1);
6046
+ display: block;
6047
+ box-sizing: content-box;
6048
+ }
6049
+
6050
+ /* -- Share Card (mustContinue) -- */
6051
+ .kds-share-card {
6052
+ margin-top: var(--kds-spacing-2);
6053
+ padding: var(--kds-spacing-2);
6054
+ border: var(--kds-border-width-sm) solid var(--kds-color-gray-200);
6055
+ border-radius: var(--kds-radius-lg);
6056
+ background: var(--kds-color-background-paper);
6057
+ }
6058
+
6059
+ .kds-share-eyebrow {
6060
+ font-size: var(--kds-font-size-caption);
6061
+ letter-spacing: var(--kds-letter-spacing-wide);
6062
+ color: var(--kds-color-gray-500);
6063
+ text-transform: uppercase;
6064
+ font-weight: var(--kds-font-weight-bold);
6065
+ margin: 0 0 var(--kds-spacing-0-75);
6066
+ }
6067
+
6068
+ .kds-share-copy {
6069
+ font-size: var(--kds-font-size-body1);
6070
+ line-height: var(--kds-line-height-normal);
6071
+ color: var(--kds-color-gray-800);
6072
+ margin: 0 0 var(--kds-spacing-1-5);
6073
+ }
6074
+
6075
+ .kds-share-divider {
6076
+ height: 0;
6077
+ border: 0;
6078
+ border-top: var(--kds-border-width-sm) dashed var(--kds-color-gray-200);
6079
+ margin: var(--kds-spacing-1-5) 0;
6080
+ }
6081
+
6082
+ .kds-share-link {
6083
+ display: block;
6084
+ font-size: var(--kds-font-size-sm);
6085
+ color: var(--kds-color-primary-main);
6086
+ text-decoration: none;
6087
+ word-break: break-all;
6088
+ margin: 0 0 var(--kds-spacing-1-5);
6089
+ }
6090
+
6091
+ .kds-share-link:hover {
6092
+ text-decoration: underline;
6093
+ }
6094
+
6095
+ .kds-share-action {
6096
+ display: flex;
6097
+ align-items: center;
6098
+ justify-content: center;
6099
+ gap: var(--kds-spacing-0-75);
6100
+ background: none;
6101
+ border: 0;
6102
+ padding: var(--kds-spacing-0-75) var(--kds-spacing-1-25);
6103
+ cursor: pointer;
6104
+ color: var(--kds-color-text-primary);
6105
+ font-size: var(--kds-font-size-sm);
6106
+ font-family: inherit;
6107
+ border-radius: var(--kds-radius-sm);
6108
+ margin: 0 auto;
6109
+ }
6110
+
6111
+ .kds-share-action:hover {
6112
+ background: var(--kds-color-primary-hover);
6113
+ color: var(--kds-color-primary-main);
6114
+ }
6115
+
6116
+ .kds-share-action .material-symbols-outlined {
6117
+ font-size: var(--kds-font-size-2xl);
6118
+ }
6119
+
6120
+ /* -- Participants List (mustContinue) -- */
6121
+ .kds-participants {
6122
+ margin: 0 0 var(--kds-spacing-2);
6123
+ padding: var(--kds-spacing-1-5) var(--kds-spacing-1-75);
6124
+ background: var(--kds-alert-success-bg);
6125
+ border-radius: var(--kds-radius-md);
6126
+ }
6127
+
6128
+ .kds-participants-label {
6129
+ font-size: var(--kds-font-size-xs);
6130
+ font-weight: var(--kds-font-weight-bold);
6131
+ color: var(--kds-alert-success-text);
6132
+ margin: 0 0 var(--kds-spacing-0-75);
6133
+ text-transform: uppercase;
6134
+ letter-spacing: var(--kds-letter-spacing-wide);
6135
+ }
6136
+
6137
+ .kds-participants-list {
6138
+ margin: 0;
6139
+ padding-left: var(--kds-spacing-2);
6140
+ color: var(--kds-alert-success-text);
6141
+ font-size: var(--kds-font-size-sm);
6142
+ line-height: var(--kds-line-height-relaxed);
6143
+ }
6144
+
5752
6145
  /* ================================================================
5753
6146
  PAYMENT FLOW LAYOUT
5754
6147
  Stage, flow container, brand row, screen transitions
@@ -5759,6 +6152,26 @@ button.kds-btn-success::after {
5759
6152
  box-shadow: var(--kds-shadow-card);
5760
6153
  }
5761
6154
 
6155
+ /* Payment flow cards — mobile-first: no vertical padding.
6156
+ Desktop (min-width: 768px) restores padding + full border-radius. */
6157
+ .kds-payment-flow .kds-card-elevated {
6158
+ margin-top: 0;
6159
+ padding-top: 0;
6160
+ padding-bottom: 0;
6161
+ }
6162
+
6163
+ /* Reset BeerCSS sibling margin on form/section inside payment cards.
6164
+ BeerCSS sets `:not(.grid,nav,.row) > … + form/section { margin-block-start:1rem }`
6165
+ which adds unwanted spacing inside cards that contain forms. */
6166
+ .kds-payment-flow .kds-card-elevated > form,
6167
+ .kds-payment-flow .kds-card-elevated > section {
6168
+ margin-block-start: 0;
6169
+ }
6170
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6171
+ padding-top: var(--kds-spacing-1);
6172
+ padding-bottom: 0;
6173
+ }
6174
+
5762
6175
  /* Payment stage — full-viewport centered wrapper */
5763
6176
  .kds-payment-stage {
5764
6177
  min-height: 100vh;
@@ -5779,6 +6192,7 @@ button.kds-btn-success::after {
5779
6192
  /* Mobile: Cards full-width with rounded corners */
5780
6193
  @media (max-width: 767px) {
5781
6194
  .kds-payment-stage {
6195
+ padding-top: 0;
5782
6196
  padding-left: 0;
5783
6197
  padding-right: 0;
5784
6198
  }
@@ -5788,7 +6202,7 @@ button.kds-btn-success::after {
5788
6202
  padding: 0;
5789
6203
  }
5790
6204
 
5791
- /* Cards: rounded corners, full width within padded stage */
6205
+ /* Cards: rounded corners, full width, explicit vertical padding */
5792
6206
  .kds-card-elevated,
5793
6207
  .khipu-card-elevated {
5794
6208
  margin-left: 0;
@@ -5797,6 +6211,30 @@ button.kds-btn-success::after {
5797
6211
  width: 100%;
5798
6212
  }
5799
6213
 
6214
+ .kds-payment-flow .kds-card-elevated {
6215
+ padding-top: var(--kds-spacing-2);
6216
+ padding-bottom: var(--kds-spacing-2);
6217
+ }
6218
+
6219
+ /* Invoice sticky card: progressive padding-top (expanded 20px → collapsed 8px).
6220
+ Overrides base rule at same specificity; source order wins here. */
6221
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6222
+ padding-top: var(--kds-spacing-1-5);
6223
+ }
6224
+
6225
+
6226
+ }
6227
+
6228
+ /* Desktop: restore card padding and full border-radius on invoice sticky */
6229
+ @media (min-width: 768px) {
6230
+ .kds-payment-flow .kds-card-elevated,
6231
+ .kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
6232
+ padding-top: var(--kds-spacing-2);
6233
+ padding-bottom: var(--kds-spacing-2);
6234
+ }
6235
+ .kds-card-elevated.kds-invoice-sticky {
6236
+ border-radius: var(--kds-radius-card);
6237
+ }
5800
6238
  }
5801
6239
 
5802
6240
  /* Brand logo row (external, outside cards) */
@@ -5805,7 +6243,8 @@ button.kds-btn-success::after {
5805
6243
  display: flex;
5806
6244
  align-items: center;
5807
6245
  }
5808
- .kds-brand-row svg {
6246
+ .kds-brand-row svg,
6247
+ .kds-brand-row img {
5809
6248
  height: 22px;
5810
6249
  display: block;
5811
6250
  }
@@ -5815,9 +6254,12 @@ button.kds-btn-success::after {
5815
6254
  display: none;
5816
6255
  align-items: center;
5817
6256
  margin-bottom: var(--kds-spacing-1);
6257
+ border-radius: 0;
5818
6258
  }
5819
- .kds-brand-inner svg {
5820
- height: 22px;
6259
+ .kds-brand-inner svg,
6260
+ .kds-brand-inner img {
6261
+ width: calc(50px - 16px * var(--collapse-progress, 0));
6262
+ height: auto;
5821
6263
  display: block;
5822
6264
  }
5823
6265
 
@@ -5829,6 +6271,7 @@ button.kds-btn-success::after {
5829
6271
  .kds-brand-inner {
5830
6272
  display: flex;
5831
6273
  }
6274
+
5832
6275
  }
5833
6276
 
5834
6277
  /* Screen transitions (multi-step flows) */
@@ -5842,8 +6285,8 @@ button.kds-btn-success::after {
5842
6285
  gap: var(--kds-spacing-3);
5843
6286
  }
5844
6287
  @keyframes kds-fadein {
5845
- from { opacity: 0; transform: translateY(var(--kds-spacing-0-5)); }
5846
- to { opacity: 1; transform: none; }
6288
+ from { opacity: 0; }
6289
+ to { opacity: 1; }
5847
6290
  }
5848
6291
 
5849
6292
  /* ================================================================
@@ -6035,7 +6478,7 @@ button.kds-btn-success::after {
6035
6478
  inset: 0;
6036
6479
  background: var(--kds-modal-backdrop);
6037
6480
  display: none;
6038
- align-items: center;
6481
+ align-items: flex-start;
6039
6482
  justify-content: center;
6040
6483
  z-index: var(--kds-z-index-modal, 50);
6041
6484
  animation: kds-fade 0.2s ease both;
@@ -6063,7 +6506,7 @@ button.kds-btn-success::after {
6063
6506
  display: flex;
6064
6507
  align-items: center;
6065
6508
  justify-content: space-between;
6066
- padding: var(--kds-spacing-2) var(--kds-spacing-2) var(--kds-spacing-1);
6509
+ padding: var(--kds-spacing-1) var(--kds-spacing-2) var(--kds-spacing-1);
6067
6510
  }
6068
6511
 
6069
6512
  .kds-bank-modal-header h3 {