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

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-18T16:43:30.229Z
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
  }
@@ -5284,8 +5503,8 @@ dialog#surveyModal button.circle {
5284
5503
  /* Symmetric padding */
5285
5504
  padding: var(--kds-spacing-2);
5286
5505
 
5287
- /* Static border-radius on all corners */
5288
- 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);
5289
5508
 
5290
5509
  /* Override .kds-card-elevated transition — scroll drives the animation, not CSS transitions */
5291
5510
  transition: none;
@@ -5297,10 +5516,8 @@ dialog#surveyModal button.circle {
5297
5516
  /* clip-path clips the card from the bottom to hide the collapsible space.
5298
5517
  This is VISUAL ONLY — no layout change — prevents scroll feedback loop.
5299
5518
  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. */
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. */
5304
5521
  clip-path: inset(
5305
5522
  0 0
5306
5523
  calc(
@@ -5308,7 +5525,7 @@ dialog#surveyModal button.circle {
5308
5525
  + var(--kds-spacing-1) * var(--collapse-progress)
5309
5526
  )
5310
5527
  0
5311
- round var(--kds-radius-card)
5528
+ round 0 0 var(--kds-radius-card) var(--kds-radius-card)
5312
5529
  );
5313
5530
 
5314
5531
  /* Suppress card's own shadow — wrapper handles it */
@@ -5319,7 +5536,8 @@ dialog#surveyModal button.circle {
5319
5536
  .kds-invoice-sticky .kds-brand-inner {
5320
5537
  margin-bottom: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)) + var(--kds-spacing-0-5) * var(--collapse-progress));
5321
5538
  }
5322
- .kds-invoice-sticky .kds-brand-inner svg {
5539
+ .kds-invoice-sticky .kds-brand-inner svg,
5540
+ .kds-invoice-sticky .kds-brand-inner img {
5323
5541
  height: calc(22px - 5px * var(--collapse-progress));
5324
5542
  }
5325
5543
 
@@ -5329,7 +5547,13 @@ dialog#surveyModal button.circle {
5329
5547
  opacity: calc(1 - var(--collapse-progress) * 1.5);
5330
5548
  }
5331
5549
 
5332
- /* 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
+ }
5333
5557
 
5334
5558
  /* Merchant tile: 64×64px → 50×50px, radius 8px → 6px (progressive) */
5335
5559
  .kds-invoice-sticky .kds-invoice-merchant {
@@ -5355,10 +5579,11 @@ dialog#surveyModal button.circle {
5355
5579
  );
5356
5580
  }
5357
5581
 
5358
- /* Code: margin-top 4px → 0 (progressive). Font-size stays 12px. */
5582
+ /* Code: margin-top 8px → 0, font-size 12px → 11px (progressive) */
5359
5583
  .kds-invoice-sticky .kds-invoice-code {
5360
5584
  margin-top: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)));
5361
5585
  margin-bottom: 0;
5586
+ font-size: calc(var(--kds-font-size-xs) - 1px * var(--collapse-progress));
5362
5587
  }
5363
5588
 
5364
5589
  /* Pull all siblings after sticky wrapper up to fill clipped gap.
@@ -5380,32 +5605,40 @@ dialog#surveyModal button.circle {
5380
5605
  }
5381
5606
  }
5382
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
+
5383
5614
  /* -- Invoice Collapsible (kv rows below header) -- */
5384
5615
  .kds-invoice-collapsible {
5385
- margin-top: var(--kds-spacing-1-5);
5616
+ margin-top: var(--kds-spacing-1);
5386
5617
  }
5387
5618
 
5388
- /* -- Invoice Summary (kv + expand toggle side by side) -- */
5619
+ /* -- Invoice Summary -- */
5389
5620
  .kds-invoice-summary {
5390
5621
  display: flex;
5391
5622
  align-items: flex-end;
5392
- gap: var(--kds-spacing-2);
5623
+ gap: var(--kds-spacing-1);
5393
5624
  }
5394
5625
  .kds-invoice-summary .kds-kv {
5395
5626
  flex: 1;
5396
5627
  min-width: 0;
5397
5628
  }
5398
- .kds-invoice-summary .kds-expand-toggle {
5399
- flex-shrink: 0;
5400
- white-space: nowrap;
5401
- }
5402
5629
 
5403
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,
5404
5634
  .kds-invoice-header {
5405
5635
  display: flex;
5406
5636
  align-items: flex-start;
5407
5637
  justify-content: space-between;
5408
5638
  gap: var(--kds-spacing-2);
5639
+ padding: 0;
5640
+ border-radius: 0;
5641
+ align-content: initial;
5409
5642
  }
5410
5643
 
5411
5644
  /* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
@@ -5415,11 +5648,11 @@ dialog#surveyModal button.circle {
5415
5648
  }
5416
5649
 
5417
5650
  .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);
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);
5423
5656
  margin: 0;
5424
5657
  }
5425
5658
 
@@ -5428,10 +5661,21 @@ dialog#surveyModal button.circle {
5428
5661
  }
5429
5662
 
5430
5663
  .kds-invoice-code {
5664
+ font-family: var(--kds-font-family-mono);
5431
5665
  font-size: var(--kds-font-size-xs);
5432
- 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;
5433
5671
  margin: 0;
5434
- 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);
5435
5679
  }
5436
5680
 
5437
5681
  .kds-invoice-merchant {
@@ -5461,6 +5705,13 @@ dialog#surveyModal button.circle {
5461
5705
  line-height: 1;
5462
5706
  }
5463
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
+
5464
5715
  /* -- Card Title -- */
5465
5716
  .kds-card-title {
5466
5717
  font-weight: 700;
@@ -5468,22 +5719,22 @@ dialog#surveyModal button.circle {
5468
5719
  line-height: 1.5;
5469
5720
  letter-spacing: -0.31px;
5470
5721
  color: var(--kds-color-text-primary);
5471
- margin: 0 0 var(--kds-spacing-2);
5722
+ margin-bottom: var(--kds-spacing-2) !important;
5472
5723
  }
5473
5724
 
5474
5725
  /* -- Key-Value Grid -- */
5475
5726
  .kds-kv {
5476
5727
  display: grid;
5477
5728
  grid-template-columns: auto 1fr;
5478
- row-gap: var(--kds-spacing-1);
5479
5729
  column-gap: var(--kds-spacing-1-5);
5480
5730
  align-items: baseline;
5481
5731
  }
5482
5732
 
5483
5733
  .kds-kv dt {
5484
5734
  font-size: var(--kds-font-size-xs);
5485
- letter-spacing: 0.2px;
5486
- 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);
5487
5738
  text-transform: uppercase;
5488
5739
  margin: 0;
5489
5740
  }
@@ -5491,8 +5742,14 @@ dialog#surveyModal button.circle {
5491
5742
  .kds-kv dd {
5492
5743
  margin: 0;
5493
5744
  font-size: var(--kds-font-size-sm);
5494
- font-weight: 600;
5495
- 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;
5496
5753
  }
5497
5754
 
5498
5755
  /* -- Dividers -- */
@@ -5514,13 +5771,13 @@ dialog#surveyModal button.circle {
5514
5771
  .kds-detail-list {
5515
5772
  display: flex;
5516
5773
  flex-direction: column;
5517
- gap: var(--kds-spacing-1-75);
5518
- margin: var(--kds-spacing-1-75) 0 0;
5519
- padding: 0;
5774
+ gap: var(--kds-spacing-1-5);
5775
+ margin: 0;
5776
+ padding: 0 0 var(--kds-spacing-2);
5520
5777
  }
5521
5778
 
5522
5779
  .kds-detail-group {
5523
- margin-bottom: var(--kds-spacing-1-75);
5780
+ margin-bottom: var(--kds-spacing-1-5);
5524
5781
  }
5525
5782
 
5526
5783
  .kds-detail-group:last-child {
@@ -5529,16 +5786,15 @@ dialog#surveyModal button.circle {
5529
5786
 
5530
5787
  .kds-detail-group dt {
5531
5788
  font-size: var(--kds-font-size-xs);
5532
- letter-spacing: 0.2px;
5789
+ letter-spacing: var(--kds-letter-spacing-wide);
5533
5790
  color: var(--kds-color-text-hint);
5534
5791
  text-transform: uppercase;
5535
- margin: 0 0 var(--kds-spacing-0-5);
5536
5792
  }
5537
5793
 
5538
5794
  .kds-detail-group dd {
5539
5795
  margin: 0;
5540
5796
  font-size: var(--kds-font-size-sm);
5541
- line-height: 1.45;
5797
+ line-height: var(--kds-line-height-normal);
5542
5798
  color: var(--kds-color-text-primary);
5543
5799
  }
5544
5800
 
@@ -5700,9 +5956,12 @@ button.kds-btn-success::after {
5700
5956
  display: flex;
5701
5957
  flex-direction: column;
5702
5958
  gap: var(--kds-spacing-1);
5703
- margin-top: var(--kds-spacing-1);
5959
+ margin-bottom: var(--kds-spacing-1);
5704
5960
  }
5705
5961
 
5962
+ .kds-bank-list:last-child {
5963
+ margin-bottom: 0;
5964
+ }
5706
5965
 
5707
5966
  /* -- Field group spacing -- */
5708
5967
  .kds-field-group {
@@ -5755,6 +6014,134 @@ button.kds-btn-success::after {
5755
6014
  margin-top: var(--kds-spacing-2-5);
5756
6015
  }
5757
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
+
5758
6145
  /* ================================================================
5759
6146
  PAYMENT FLOW LAYOUT
5760
6147
  Stage, flow container, brand row, screen transitions
@@ -5765,6 +6152,26 @@ button.kds-btn-success::after {
5765
6152
  box-shadow: var(--kds-shadow-card);
5766
6153
  }
5767
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
+
5768
6175
  /* Payment stage — full-viewport centered wrapper */
5769
6176
  .kds-payment-stage {
5770
6177
  min-height: 100vh;
@@ -5785,6 +6192,7 @@ button.kds-btn-success::after {
5785
6192
  /* Mobile: Cards full-width with rounded corners */
5786
6193
  @media (max-width: 767px) {
5787
6194
  .kds-payment-stage {
6195
+ padding-top: 0;
5788
6196
  padding-left: 0;
5789
6197
  padding-right: 0;
5790
6198
  }
@@ -5794,7 +6202,7 @@ button.kds-btn-success::after {
5794
6202
  padding: 0;
5795
6203
  }
5796
6204
 
5797
- /* Cards: rounded corners, full width within padded stage */
6205
+ /* Cards: rounded corners, full width, explicit vertical padding */
5798
6206
  .kds-card-elevated,
5799
6207
  .khipu-card-elevated {
5800
6208
  margin-left: 0;
@@ -5803,6 +6211,30 @@ button.kds-btn-success::after {
5803
6211
  width: 100%;
5804
6212
  }
5805
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
+ }
5806
6238
  }
5807
6239
 
5808
6240
  /* Brand logo row (external, outside cards) */
@@ -5811,7 +6243,8 @@ button.kds-btn-success::after {
5811
6243
  display: flex;
5812
6244
  align-items: center;
5813
6245
  }
5814
- .kds-brand-row svg {
6246
+ .kds-brand-row svg,
6247
+ .kds-brand-row img {
5815
6248
  height: 22px;
5816
6249
  display: block;
5817
6250
  }
@@ -5821,9 +6254,12 @@ button.kds-btn-success::after {
5821
6254
  display: none;
5822
6255
  align-items: center;
5823
6256
  margin-bottom: var(--kds-spacing-1);
6257
+ border-radius: 0;
5824
6258
  }
5825
- .kds-brand-inner svg {
5826
- height: 22px;
6259
+ .kds-brand-inner svg,
6260
+ .kds-brand-inner img {
6261
+ width: calc(50px - 16px * var(--collapse-progress, 0));
6262
+ height: auto;
5827
6263
  display: block;
5828
6264
  }
5829
6265
 
@@ -5835,6 +6271,7 @@ button.kds-btn-success::after {
5835
6271
  .kds-brand-inner {
5836
6272
  display: flex;
5837
6273
  }
6274
+
5838
6275
  }
5839
6276
 
5840
6277
  /* Screen transitions (multi-step flows) */
@@ -5848,8 +6285,8 @@ button.kds-btn-success::after {
5848
6285
  gap: var(--kds-spacing-3);
5849
6286
  }
5850
6287
  @keyframes kds-fadein {
5851
- from { opacity: 0; transform: translateY(var(--kds-spacing-0-5)); }
5852
- to { opacity: 1; transform: none; }
6288
+ from { opacity: 0; }
6289
+ to { opacity: 1; }
5853
6290
  }
5854
6291
 
5855
6292
  /* ================================================================
@@ -6041,7 +6478,7 @@ button.kds-btn-success::after {
6041
6478
  inset: 0;
6042
6479
  background: var(--kds-modal-backdrop);
6043
6480
  display: none;
6044
- align-items: center;
6481
+ align-items: flex-start;
6045
6482
  justify-content: center;
6046
6483
  z-index: var(--kds-z-index-modal, 50);
6047
6484
  animation: kds-fade 0.2s ease both;
@@ -6069,7 +6506,7 @@ button.kds-btn-success::after {
6069
6506
  display: flex;
6070
6507
  align-items: center;
6071
6508
  justify-content: space-between;
6072
- 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);
6073
6510
  }
6074
6511
 
6075
6512
  .kds-bank-modal-header h3 {
@@ -6455,6 +6892,14 @@ a.kds-copy-all-btn.copied:hover {
6455
6892
  min-height: unset;
6456
6893
  }
6457
6894
 
6895
+ /* Severity variants — default stays warning (backward-compatible) */
6896
+ .kds-section-note.kds-info { color: var(--kds-color-info-dark); }
6897
+ .kds-section-note.kds-info > i { color: var(--kds-color-info-dark); }
6898
+ .kds-section-note.kds-success { color: var(--kds-color-success-dark); }
6899
+ .kds-section-note.kds-success > i { color: var(--kds-color-success-dark); }
6900
+ .kds-section-note.kds-error { color: var(--kds-color-error-dark); }
6901
+ .kds-section-note.kds-error > i { color: var(--kds-color-error-dark); }
6902
+
6458
6903
  /* ========================================
6459
6904
  INFO TOOLTIP (.kds-info-tip)
6460
6905
  Inline info button with hover/click tooltip bubble.