@khipu/design-system 0.1.0-alpha.30 → 0.1.0-alpha.31

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-03-27T13:16:02.917Z
14
+ * Generated: 2026-04-01T17:47:56.079Z
15
15
  *
16
16
  * To regenerate:
17
17
  * cd design-system && npm run tokens:generate
@@ -138,6 +138,20 @@
138
138
  --kds-typography-button-line-height: 26px;
139
139
  --kds-typography-button-letter-spacing: 0.46px;
140
140
 
141
+ /* Typography margins */
142
+ --kds-typography-h1-margin-block-start: 0;
143
+ --kds-typography-h1-margin-block-end: 0;
144
+ --kds-typography-h2-margin-block-start: 0;
145
+ --kds-typography-h2-margin-block-end: 0;
146
+ --kds-typography-h3-margin-block-start: 0;
147
+ --kds-typography-h3-margin-block-end: 0;
148
+ --kds-typography-h4-margin-block-start: 0;
149
+ --kds-typography-h4-margin-block-end: 0;
150
+ --kds-typography-h5-margin-block-start: 0;
151
+ --kds-typography-h5-margin-block-end: 0;
152
+ --kds-typography-h6-margin-block-start: 0;
153
+ --kds-typography-h6-margin-block-end: 0;
154
+
141
155
  /* ==========================================================================
142
156
  SPACING TOKENS
143
157
  ========================================================================== */
@@ -175,6 +189,7 @@
175
189
  --kds-spacing-sidebar-nav-item-gap: 12px;
176
190
  --kds-spacing-sidebar-submenu-indent: 64px;
177
191
  --kds-spacing-sidebar-icon-size: 24px;
192
+ --kds-spacing-sidebar-icon-size-md: 32px;
178
193
  --kds-spacing-sidebar-icon-container-size: 40px;
179
194
  --kds-spacing-sidebar-label-padding-x: 24px;
180
195
  --kds-spacing-sidebar-label-padding-y: 8px;
@@ -225,6 +240,7 @@
225
240
  --kds-shadow-1: 0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12);
226
241
  --kds-shadow-2: 0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12);
227
242
  --kds-shadow-4: 0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12);
243
+ --kds-shadow-6: 0px 3px 4px -2px rgba(0,0,0,0.2), 0px 6px 7px 0px rgba(0,0,0,0.14), 0px 2px 12px 1px rgba(0,0,0,0.12);
228
244
  --kds-shadow-8: 0px 5px 5px -3px rgba(0,0,0,0.2), 0px 8px 10px 1px rgba(0,0,0,0.14), 0px 3px 14px 2px rgba(0,0,0,0.12);
229
245
  --kds-shadow-16: 0px 8px 10px -5px rgba(0,0,0,0.2), 0px 16px 24px 2px rgba(0,0,0,0.14), 0px 6px 30px 5px rgba(0,0,0,0.12);
230
246
  --kds-shadow-24: 0px 11px 15px -7px rgba(0,0,0,0.2), 0px 24px 38px 3px rgba(0,0,0,0.14), 0px 9px 46px 8px rgba(0,0,0,0.12);
@@ -374,6 +390,42 @@
374
390
  }
375
391
  }
376
392
 
393
+ /* ============================================================================
394
+ BASE TYPOGRAPHY STYLES
395
+ Reset default browser margins using design tokens
396
+ Higher specificity to override BeerCSS framework
397
+ ============================================================================ */
398
+
399
+ :where(h1) {
400
+ margin-block-start: var(--kds-typography-h1-margin-block-start) !important;
401
+ margin-block-end: var(--kds-typography-h1-margin-block-end) !important;
402
+ }
403
+
404
+ :where(h2) {
405
+ margin-block-start: var(--kds-typography-h2-margin-block-start) !important;
406
+ margin-block-end: var(--kds-typography-h2-margin-block-end) !important;
407
+ }
408
+
409
+ :where(h3) {
410
+ margin-block-start: var(--kds-typography-h3-margin-block-start) !important;
411
+ margin-block-end: var(--kds-typography-h3-margin-block-end) !important;
412
+ }
413
+
414
+ :where(h4) {
415
+ margin-block-start: var(--kds-typography-h4-margin-block-start) !important;
416
+ margin-block-end: var(--kds-typography-h4-margin-block-end) !important;
417
+ }
418
+
419
+ :where(h5) {
420
+ margin-block-start: var(--kds-typography-h5-margin-block-start) !important;
421
+ margin-block-end: var(--kds-typography-h5-margin-block-end) !important;
422
+ }
423
+
424
+ :where(h6) {
425
+ margin-block-start: var(--kds-typography-h6-margin-block-start) !important;
426
+ margin-block-end: var(--kds-typography-h6-margin-block-end) !important;
427
+ }
428
+
377
429
 
378
430
 
379
431
  /* Khipu BeerCSS Variable Mappings */
@@ -462,8 +514,8 @@ body.dark {
462
514
 
463
515
  /* Modal Base */
464
516
  --kds-modal-bg: var(--kds-color-background-paper);
465
- --kds-modal-padding: var(--kds-spacing-6);
466
- --kds-modal-padding-mobile: var(--kds-spacing-4);
517
+ --kds-modal-padding: var(--kds-spacing-4);
518
+ --kds-modal-padding-mobile: var(--kds-spacing-2);
467
519
  --kds-modal-border-radius: var(--kds-radius-lg);
468
520
  --kds-modal-shadow: var(--kds-shadow-4);
469
521
  --kds-modal-backdrop: rgba(0, 0, 0, 0.5);
@@ -504,6 +556,22 @@ body.dark {
504
556
  --kds-onboarding-max-width: 800px;
505
557
  --kds-onboarding-padding: var(--kds-spacing-6);
506
558
  --kds-onboarding-gap: var(--kds-spacing-6);
559
+
560
+ /* Button Size Variants */
561
+ --kds-button-sm-min-height: 36px;
562
+ --kds-button-sm-padding-y: 6px;
563
+ --kds-button-sm-padding-x: 16px;
564
+ --kds-button-sm-padding: 6px 16px;
565
+
566
+ --kds-button-md-min-height: 42px;
567
+ --kds-button-md-padding-y: 8px;
568
+ --kds-button-md-padding-x: 20px;
569
+ --kds-button-md-padding: 8px 20px;
570
+
571
+ /* Scroll Container Utilities */
572
+ --kds-scroll-sm-height: 280px;
573
+ --kds-scroll-md-height: 420px;
574
+ --kds-scroll-lg-height: 600px;
507
575
  }
508
576
 
509
577
  /* ========================================
@@ -561,6 +629,32 @@ footer {
561
629
  background-color: transparent !important;
562
630
  }
563
631
 
632
+ /* ========================================
633
+ TEXT UTILITIES OVERRIDE
634
+ Fix BeerCSS classes that use wrong color tokens
635
+ ======================================== */
636
+
637
+ /* BeerCSS confuses theme colors (primary/secondary/tertiary) with text colors.
638
+ We must use !important to override BeerCSS's !important declarations */
639
+
640
+ /* Primary text - should be almost black, not purple */
641
+ body .primary-text,
642
+ .primary-text.primary-text {
643
+ color: var(--kds-color-text-primary) !important;
644
+ }
645
+
646
+ /* Secondary text - should be gray, not green */
647
+ body .secondary-text,
648
+ .secondary-text.secondary-text {
649
+ color: var(--kds-color-text-secondary) !important;
650
+ }
651
+
652
+ /* Tertiary text - should be disabled/hint color, not tertiary theme color */
653
+ body .tertiary-text,
654
+ .tertiary-text.tertiary-text {
655
+ color: var(--kds-color-text-disabled) !important;
656
+ }
657
+
564
658
  /* ========================================
565
659
  KHIPU BUTTON SYSTEM
566
660
  Custom button components - don't modify BeerCSS classes
@@ -720,7 +814,7 @@ a.kds-btn-text {
720
814
  background: transparent;
721
815
  color: var(--kds-color-primary-main);
722
816
  border: none;
723
- padding: 6px 16px; /* Menor padding para text variant */
817
+ padding: 6px var(--kds-spacing-2); /* Menor padding para text variant */
724
818
  min-height: 32px; /* Menor altura para text variant */
725
819
  box-shadow: none;
726
820
  }
@@ -758,8 +852,30 @@ a.kds-btn > .kds-icon > i {
758
852
  min-width: var(--kds-spacing-button-icon-size);
759
853
  min-height: var(--kds-spacing-button-icon-size);
760
854
  line-height: 1;
855
+ top: 1px;
856
+ }
857
+
858
+ /* ========================================
859
+ Button Size Variants
860
+ ======================================== */
861
+
862
+ /* Small button - for compact contexts (cards with side-by-side actions) */
863
+ button.kds-btn.kds-btn-sm,
864
+ a.kds-btn.kds-btn-sm {
865
+ min-height: var(--kds-button-sm-min-height);
866
+ padding: var(--kds-button-sm-padding);
867
+ font-size: var(--kds-font-size-sm);
868
+ }
869
+
870
+ /* Medium button - balanced size between small and default */
871
+ button.kds-btn.kds-btn-md,
872
+ a.kds-btn.kds-btn-md {
873
+ min-height: var(--kds-button-md-min-height);
874
+ padding: var(--kds-button-md-padding);
761
875
  }
762
876
 
877
+ /* Default .kds-btn uses --kds-spacing-button-min-height (50px) from base styles */
878
+
763
879
  /* ========================================
764
880
  Card Components (Material Design 3)
765
881
  ======================================== */
@@ -767,34 +883,34 @@ a.kds-btn > .kds-icon > i {
767
883
  /* Base elevated card */
768
884
  .kds-card-elevated,
769
885
  .khipu-card-elevated {
770
- background: #FFFFFF;
771
- border-radius: 16px;
772
- padding: 32px;
773
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
886
+ background: var(--kds-color-background-paper);
887
+ border-radius: var(--kds-radius-md);
888
+ padding: var(--kds-spacing-2);
889
+ box-shadow: var(--kds-shadow-card);
774
890
  transition: box-shadow 0.3s ease;
775
891
  }
776
892
 
777
893
  .kds-card-elevated:hover,
778
894
  .khipu-card-elevated:hover {
779
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);
895
+ box-shadow: var(--kds-shadow-6);
780
896
  }
781
897
 
782
898
  /* Main content card (centered, max-width) */
783
899
  .kds-card-main {
784
- background: #FFFFFF;
785
- border-radius: 16px;
786
- padding: 32px;
900
+ background: var(--kds-color-background-paper);
901
+ border-radius: var(--kds-radius-md);
902
+ padding: var(--kds-spacing-2);
787
903
  max-width: 800px;
788
- margin: 24px auto;
789
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
904
+ margin: var(--kds-spacing-3) auto;
905
+ box-shadow: var(--kds-shadow-card);
790
906
  }
791
907
 
792
908
  @media (max-width: 768px) {
793
909
  .kds-card-elevated,
794
910
  .khipu-card-elevated,
795
911
  .kds-card-main {
796
- padding: 24px;
797
- border-radius: 12px;
912
+ padding: var(--kds-spacing-3);
913
+ border-radius: var(--kds-radius-md);
798
914
  }
799
915
  }
800
916
 
@@ -802,16 +918,16 @@ a.kds-btn > .kds-icon > i {
802
918
  .kds-card-elevated,
803
919
  .khipu-card-elevated,
804
920
  .kds-card-main {
805
- padding: 12px;
921
+ padding: var(--kds-spacing-2);
806
922
  }
807
923
  }
808
924
 
809
925
  /* Selection card */
810
926
  .kds-card-selector {
811
- padding: 24px;
812
- border-radius: 12px;
813
- border: 2px solid #E5E7EB; /* gray-200 */
814
- background: #FFFFFF;
927
+ padding: var(--kds-spacing-3);
928
+ border-radius: var(--kds-radius-md);
929
+ border: 2px solid var(--kds-border-light);
930
+ background: var(--kds-color-background-paper);
815
931
  transition: all 0.3s ease;
816
932
  text-align: left;
817
933
  cursor: pointer;
@@ -853,7 +969,7 @@ a.kds-btn > .kds-icon > i {
853
969
  /* Title */
854
970
  .kds-card-selector-title {
855
971
  font-weight: 600;
856
- color: #111827; /* gray-900 */
972
+ color: var(--kds-color-text-primary);
857
973
  margin-bottom: 8px;
858
974
  font-size: 16px;
859
975
  }
@@ -1025,29 +1141,34 @@ a.kds-btn > .kds-icon > i {
1025
1141
 
1026
1142
  /* Card sections (header, body, footer) */
1027
1143
  .kds-card-header {
1028
- padding-bottom: var(--kds-spacing-3);
1029
- border-bottom: 1px solid var(--kds-border-light);
1030
1144
  margin-bottom: var(--kds-spacing-3);
1031
1145
  }
1032
1146
 
1033
1147
  .kds-card-header h2,
1034
1148
  .kds-card-header h3 {
1035
1149
  margin: 0;
1036
- font-weight: var(--kds-font-weight-bold);
1150
+ font-weight: var(--kds-font-weight-semibold);
1151
+ font-size: var(--kds-font-size-lg);
1152
+ word-break: break-word;
1153
+ }
1154
+
1155
+ .kds-card-header i {
1156
+ margin-bottom: 0;
1157
+ font-size: var(--kds-spacing-sidebar-icon-size-md);
1158
+ height: var(--kds-spacing-sidebar-icon-size-md);
1159
+ width: var(--kds-spacing-sidebar-icon-size-md);
1037
1160
  }
1038
1161
 
1039
1162
  .kds-card-body {
1040
1163
  padding: 0;
1041
- margin-bottom: var(--kds-spacing-3);
1042
1164
  }
1043
1165
 
1044
1166
  .kds-card-footer {
1045
- padding-top: var(--kds-spacing-3);
1046
- border-top: 1px solid var(--kds-border-light);
1047
1167
  margin-top: 0;
1048
1168
  display: flex;
1049
- flex-direction: column;
1169
+ flex-direction: row;
1050
1170
  gap: var(--kds-spacing-2);
1171
+ margin-top: var(--kds-spacing-3);
1051
1172
  }
1052
1173
 
1053
1174
  .kds-card-footer button,
@@ -1073,7 +1194,7 @@ a.kds-btn > .kds-icon > i {
1073
1194
  .khipu-hero {
1074
1195
  background: linear-gradient(135deg, var(--khipu-primary) 0%, var(--khipu-primary-dark) 100%);
1075
1196
  color: white;
1076
- padding: 64px 24px;
1197
+ padding: var(--kds-spacing-8) var(--kds-spacing-3);
1077
1198
  text-align: center;
1078
1199
  border-radius: 0 0 24px 24px;
1079
1200
  margin-bottom: 32px;
@@ -1099,12 +1220,12 @@ a.kds-btn > .kds-icon > i {
1099
1220
  display: grid;
1100
1221
  grid-template-columns: 1fr;
1101
1222
  gap: var(--kds-spacing-4);
1102
- align-items: start;
1223
+ align-items: stretch;
1103
1224
  }
1104
1225
 
1105
1226
  @media (min-width: 768px) {
1106
1227
  .kds-grid-2col {
1107
- grid-template-columns: 1fr 1fr;
1228
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1108
1229
  }
1109
1230
  }
1110
1231
 
@@ -1128,13 +1249,13 @@ a.kds-btn > .kds-icon > i {
1128
1249
 
1129
1250
  @media (min-width: 768px) {
1130
1251
  .kds-grid-3col {
1131
- grid-template-columns: repeat(2, 1fr);
1252
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1132
1253
  }
1133
1254
  }
1134
1255
 
1135
1256
  @media (min-width: 1024px) {
1136
1257
  .kds-grid-3col {
1137
- grid-template-columns: repeat(3, 1fr);
1258
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1138
1259
  }
1139
1260
  }
1140
1261
 
@@ -1146,16 +1267,27 @@ a.kds-btn > .kds-icon > i {
1146
1267
 
1147
1268
  @media (min-width: 768px) {
1148
1269
  .kds-grid-4col {
1149
- grid-template-columns: repeat(2, 1fr);
1270
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1150
1271
  }
1151
1272
  }
1152
1273
 
1153
1274
  @media (min-width: 1024px) {
1154
1275
  .kds-grid-4col {
1155
- grid-template-columns: repeat(4, 1fr);
1276
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1156
1277
  }
1157
1278
  }
1158
1279
 
1280
+ /* Grid cell stretch - ensures all cards in grid have same height */
1281
+ .kds-grid-cell-stretch {
1282
+ display: flex;
1283
+ }
1284
+
1285
+ .kds-grid-cell-stretch > * {
1286
+ flex: 1;
1287
+ display: flex;
1288
+ flex-direction: column;
1289
+ }
1290
+
1159
1291
  /* Flex utilities */
1160
1292
  .kds-flex {
1161
1293
  display: flex;
@@ -1169,6 +1301,10 @@ a.kds-btn > .kds-icon > i {
1169
1301
  flex-direction: row;
1170
1302
  }
1171
1303
 
1304
+ .kds-flex-wrap {
1305
+ flex-wrap: wrap;
1306
+ }
1307
+
1172
1308
  .kds-justify-start {
1173
1309
  justify-content: flex-start;
1174
1310
  }
@@ -1206,6 +1342,30 @@ a.kds-btn > .kds-icon > i {
1206
1342
  .kds-gap-6 { gap: var(--kds-spacing-6); }
1207
1343
  .kds-gap-8 { gap: var(--kds-spacing-8); }
1208
1344
 
1345
+ /* Scroll container utilities */
1346
+ .kds-scroll-container {
1347
+ overflow-y: auto;
1348
+ overflow-x: hidden;
1349
+ }
1350
+
1351
+ .kds-scroll-sm {
1352
+ max-height: var(--kds-scroll-sm-height);
1353
+ overflow-y: auto;
1354
+ overflow-x: hidden;
1355
+ }
1356
+
1357
+ .kds-scroll-md {
1358
+ max-height: var(--kds-scroll-md-height);
1359
+ overflow-y: auto;
1360
+ overflow-x: hidden;
1361
+ }
1362
+
1363
+ .kds-scroll-lg {
1364
+ max-height: var(--kds-scroll-lg-height);
1365
+ overflow-y: auto;
1366
+ overflow-x: hidden;
1367
+ }
1368
+
1209
1369
  /* Spacing utilities - Margin */
1210
1370
  .kds-m-0 { margin: 0; }
1211
1371
  .kds-m-2 { margin: var(--kds-spacing-2); }
@@ -1252,6 +1412,7 @@ a.kds-btn > .kds-icon > i {
1252
1412
  .kds-pt-6 { padding-top: var(--kds-spacing-6); }
1253
1413
  .kds-pt-8 { padding-top: var(--kds-spacing-8); }
1254
1414
 
1415
+ .kds-pb-0 { padding-bottom: var(--kds-spacing-0) !important; }
1255
1416
  .kds-pb-4 { padding-bottom: var(--kds-spacing-4); }
1256
1417
  .kds-pb-6 { padding-bottom: var(--kds-spacing-6); }
1257
1418
  .kds-pb-8 { padding-bottom: var(--kds-spacing-8); }
@@ -1288,9 +1449,8 @@ a.kds-btn > .kds-icon > i {
1288
1449
  align-items: flex-start;
1289
1450
  gap: 0;
1290
1451
  position: relative;
1291
- padding: 24px 0;
1292
- background: #FFFFFF;
1293
- border-bottom: 1px solid #E5E7EB;
1452
+ padding: var(--kds-spacing-3) 0;
1453
+ background: var(--kds-color-background-paper);
1294
1454
  }
1295
1455
 
1296
1456
  /* Progress line connecting steps */
@@ -1301,7 +1461,7 @@ a.kds-btn > .kds-icon > i {
1301
1461
  right: 10%;
1302
1462
  top: 44px;
1303
1463
  height: 2px;
1304
- background: #E5E7EB;
1464
+ background: var(--kds-color-background-elevated);
1305
1465
  z-index: 0;
1306
1466
  }
1307
1467
 
@@ -1322,14 +1482,14 @@ a.kds-btn > .kds-icon > i {
1322
1482
  height: 40px;
1323
1483
  border-radius: 50%;
1324
1484
  margin: 0 auto;
1325
- background: #E5E7EB; /* Pending state - light gray */
1485
+ background: var(--kds-color-background-elevated); /* Pending state - light gray */
1326
1486
  position: relative;
1327
1487
  z-index: 2;
1328
1488
  transition: all 0.3s ease;
1329
1489
  display: flex;
1330
1490
  align-items: center;
1331
1491
  justify-content: center;
1332
- color: #6B7280;
1492
+ color: var(--kds-color-text-secondary);
1333
1493
  font-size: 0; /* Hide number by default */
1334
1494
  font-weight: 600;
1335
1495
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
@@ -1339,7 +1499,7 @@ a.kds-btn > .kds-icon > i {
1339
1499
  .kds-step-label {
1340
1500
  margin-top: 12px;
1341
1501
  font-weight: 400;
1342
- color: #6B7280;
1502
+ color: var(--kds-color-text-secondary);
1343
1503
  line-height: 1.25;
1344
1504
  font-size: 14px;
1345
1505
  transition: color 0.3s ease;
@@ -1354,7 +1514,7 @@ a.kds-btn > .kds-icon > i {
1354
1514
  }
1355
1515
 
1356
1516
  .kds-step.current .kds-step-label {
1357
- color: #111827;
1517
+ color: var(--kds-color-text-primary);
1358
1518
  font-weight: 500;
1359
1519
  }
1360
1520
 
@@ -1365,7 +1525,7 @@ a.kds-btn > .kds-icon > i {
1365
1525
  }
1366
1526
 
1367
1527
  .kds-step.completed .kds-step-label {
1368
- color: #111827;
1528
+ color: var(--kds-color-text-primary);
1369
1529
  }
1370
1530
 
1371
1531
  /* Checkmark for completed steps - Material Symbols icon */
@@ -1384,13 +1544,13 @@ a.kds-btn > .kds-icon > i {
1384
1544
 
1385
1545
  /* Pending step */
1386
1546
  .kds-step .kds-step-indicator {
1387
- background: #E5E7EB;
1547
+ background: var(--kds-color-background-elevated);
1388
1548
  }
1389
1549
 
1390
1550
  /* Responsive - Tablet */
1391
1551
  @media (max-width: 768px) {
1392
1552
  .kds-stepper {
1393
- padding: 24px 0;
1553
+ padding: var(--kds-spacing-3) 0;
1394
1554
  }
1395
1555
 
1396
1556
  .kds-step-indicator {
@@ -1495,8 +1655,8 @@ body.kds-layout {
1495
1655
 
1496
1656
  footer.primary {
1497
1657
  background: var(--surface-container-high, #F5F5F5);
1498
- padding: 32px 24px;
1499
- margin-top: 48px;
1658
+ padding: var(--kds-spacing-4) var(--kds-spacing-3);
1659
+ margin-top: var(--kds-spacing-6);
1500
1660
  }
1501
1661
 
1502
1662
  footer.primary h6 {
@@ -1526,9 +1686,11 @@ footer.primary a:hover {
1526
1686
  .kds-form-label {
1527
1687
  font-size: 14px;
1528
1688
  font-weight: 500;
1529
- color: #111827;
1689
+ color: var(--kds-color-text-primary);
1530
1690
  margin-bottom: 8px;
1531
1691
  display: block;
1692
+ display: flex;
1693
+ gap: 5px;
1532
1694
  }
1533
1695
 
1534
1696
  /* Icon utilities for inline icons */
@@ -1661,12 +1823,6 @@ body.dark {
1661
1823
  appearance: auto;
1662
1824
  -webkit-appearance: auto;
1663
1825
  -moz-appearance: auto;
1664
-
1665
- /* Asegurar que el arrow nativo tenga espacio */
1666
- padding-right: var(--kds-spacing-10); /* 40px */
1667
- background-position: right var(--kds-spacing-4) center; /* 16px desde el borde */
1668
- background-repeat: no-repeat;
1669
- background-size: var(--kds-spacing-5); /* 20px */
1670
1826
  }
1671
1827
 
1672
1828
  /* ==========================================
@@ -1780,44 +1936,64 @@ body.dark {
1780
1936
  }
1781
1937
 
1782
1938
  /* Snackbar Variants */
1783
- .kds-snackbar.success {
1939
+ .kds-snackbar.kds-success {
1784
1940
  background: var(--kds-snackbar-success-bg);
1785
1941
  border: 1px solid var(--kds-color-success-main);
1786
- color: var(--kds-color-success-main);
1942
+ color: var(--kds-color-success-dark);
1943
+ }
1944
+
1945
+ .kds-snackbar.kds-success .kds-snackbar-icon {
1946
+ color: var(--kds-color-success-dark);
1787
1947
  }
1788
1948
 
1789
- .kds-snackbar.success .kds-snackbar-icon {
1790
- color: var(--kds-color-success-main);
1949
+ .kds-snackbar.kds-success .kds-snackbar-action button,
1950
+ .kds-snackbar.kds-success .kds-snackbar-action .kds-btn {
1951
+ color: var(--kds-color-success-dark);
1791
1952
  }
1792
1953
 
1793
- .kds-snackbar.warning {
1954
+ .kds-snackbar.kds-warning {
1794
1955
  background: var(--kds-snackbar-warning-bg);
1795
1956
  border: 1px solid var(--kds-color-warning-main);
1796
- color: var(--kds-color-warning-main);
1957
+ color: var(--kds-color-warning-dark);
1797
1958
  }
1798
1959
 
1799
- .kds-snackbar.warning .kds-snackbar-icon {
1800
- color: var(--kds-color-warning-main);
1960
+ .kds-snackbar.kds-warning .kds-snackbar-icon {
1961
+ color: var(--kds-color-warning-dark);
1801
1962
  }
1802
1963
 
1803
- .kds-snackbar.error {
1964
+ .kds-snackbar.kds-warning .kds-snackbar-action button,
1965
+ .kds-snackbar.kds-warning .kds-snackbar-action .kds-btn {
1966
+ color: var(--kds-color-warning-dark);
1967
+ }
1968
+
1969
+ .kds-snackbar.kds-error {
1804
1970
  background: var(--kds-snackbar-error-bg);
1805
1971
  border: 1px solid var(--kds-color-error-main);
1806
- color: var(--kds-color-error-main);
1972
+ color: var(--kds-color-error-dark);
1973
+ }
1974
+
1975
+ .kds-snackbar.kds-error .kds-snackbar-icon {
1976
+ color: var(--kds-color-error-dark);
1807
1977
  }
1808
1978
 
1809
- .kds-snackbar.error .kds-snackbar-icon {
1810
- color: var(--kds-color-error-main);
1979
+ .kds-snackbar.kds-error .kds-snackbar-action button,
1980
+ .kds-snackbar.kds-error .kds-snackbar-action .kds-btn {
1981
+ color: var(--kds-color-error-dark);
1811
1982
  }
1812
1983
 
1813
- .kds-snackbar.info {
1984
+ .kds-snackbar.kds-info {
1814
1985
  background: var(--kds-snackbar-info-bg);
1815
1986
  border: 1px solid var(--kds-color-info-main);
1816
- color: var(--kds-color-info-main);
1987
+ color: var(--kds-color-info-dark);
1817
1988
  }
1818
1989
 
1819
- .kds-snackbar.info .kds-snackbar-icon {
1820
- color: var(--kds-color-info-main);
1990
+ .kds-snackbar.kds-info .kds-snackbar-icon {
1991
+ color: var(--kds-color-info-dark);
1992
+ }
1993
+
1994
+ .kds-snackbar.kds-info .kds-snackbar-action button,
1995
+ .kds-snackbar.kds-info .kds-snackbar-action .kds-btn {
1996
+ color: var(--kds-color-info-dark);
1821
1997
  }
1822
1998
 
1823
1999
  /* Static variant for showcase/demo purposes */
@@ -1830,6 +2006,12 @@ body.dark {
1830
2006
  animation: none;
1831
2007
  }
1832
2008
 
2009
+ /* Top position variant - for notifications that should appear at top */
2010
+ .kds-snackbar-top {
2011
+ top: var(--kds-spacing-4);
2012
+ bottom: auto;
2013
+ }
2014
+
1833
2015
  /* Mobile responsive */
1834
2016
  @media (max-width: 768px) {
1835
2017
  .kds-snackbar {
@@ -1852,6 +2034,32 @@ body.dark {
1852
2034
  }
1853
2035
  }
1854
2036
 
2037
+ /* ========================================
2038
+ TOOLTIPS - Personaliza Beer CSS .tooltip
2039
+ ======================================== */
2040
+
2041
+ /*
2042
+ * Beer CSS tiene la funcionalidad de .tooltip
2043
+ * Aquí sobrescribimos colores y estilos con tokens de Khipu
2044
+ */
2045
+
2046
+ .tooltip {
2047
+ background-color: var(--kds-color-text-primary);
2048
+ color: var(--kds-color-background-paper);
2049
+ font-family: var(--kds-font-family-primary);
2050
+ font-size: var(--kds-font-size-xs);
2051
+ font-weight: var(--kds-font-weight-medium);
2052
+ border-radius: var(--kds-radius-sm);
2053
+ padding: calc(var(--kds-spacing-1) / 2) var(--kds-spacing-2);
2054
+ box-shadow: var(--kds-shadow-4);
2055
+ }
2056
+
2057
+ /* Tooltip wrapper for inline icons - matches demo pattern */
2058
+ .kds-tooltip-icon {
2059
+ position: relative;
2060
+ display: inline-flex;
2061
+ }
2062
+
1855
2063
  /* ========================================
1856
2064
  Material Symbols Icon Sizing
1857
2065
  ======================================== */
@@ -1890,6 +2098,10 @@ body.dark {
1890
2098
  max-width: 400px;
1891
2099
  }
1892
2100
 
2101
+ .kds-max-w-500 {
2102
+ max-width: 500px;
2103
+ }
2104
+
1893
2105
  .kds-max-w-md {
1894
2106
  max-width: 600px;
1895
2107
  }
@@ -1973,26 +2185,18 @@ label.checkbox,
1973
2185
  label.radio {
1974
2186
  display: flex;
1975
2187
  align-items: center;
1976
- padding: var(--kds-spacing-3) var(--kds-spacing-4);
2188
+ padding: var(--kds-spacing-2) 0;
1977
2189
  border-radius: 8px;
1978
2190
  cursor: pointer;
1979
2191
  transition: background-color 0.2s;
1980
2192
  font-size: 16px;
1981
2193
  line-height: 1.5;
1982
- color: #111827;
1983
- }
1984
-
1985
- label.checkbox:hover,
1986
- label.radio:hover {
1987
- background-color: #F9FAFB;
2194
+ color: var(--kds-color-text-primary);
1988
2195
  }
1989
2196
 
1990
2197
  /* Checkbox/Radio Input */
1991
2198
  label.checkbox input[type="checkbox"],
1992
2199
  label.radio input[type="radio"] {
1993
- width: 20px;
1994
- height: 20px;
1995
- margin-right: var(--kds-spacing-3);
1996
2200
  cursor: pointer;
1997
2201
  flex-shrink: 0;
1998
2202
  }
@@ -2038,8 +2242,8 @@ label.radio:has(input:disabled) {
2038
2242
 
2039
2243
  /* Onboarding Header - Contains stepper and progress */
2040
2244
  .kds-onboarding-header {
2041
- background: #FFFFFF;
2042
- border-bottom: 1px solid #E5E7EB;
2245
+ background: var(--kds-color-background-paper);
2246
+ border-bottom: 1px solid var(--kds-border-light);
2043
2247
  position: sticky;
2044
2248
  top: 0;
2045
2249
  z-index: 100;
@@ -2056,8 +2260,8 @@ label.radio:has(input:disabled) {
2056
2260
  /* Onboarding Footer - Action buttons */
2057
2261
  .kds-onboarding-footer {
2058
2262
  flex-shrink: 0;
2059
- background: #FFFFFF;
2060
- border-top: 1px solid #E5E7EB;
2263
+ background: var(--kds-color-background-paper);
2264
+ border-top: 1px solid var(--kds-border-light);
2061
2265
  padding: var(--kds-spacing-4) var(--kds-spacing-6);
2062
2266
  display: flex;
2063
2267
  justify-content: space-between;
@@ -2099,15 +2303,17 @@ label.radio:has(input:disabled) {
2099
2303
 
2100
2304
  /* Stage Header - Title and subtitle */
2101
2305
  .kds-stage-header {
2102
- text-align: center;
2103
- margin-bottom: var(--kds-spacing-8);
2306
+ display: flex;
2307
+ flex-direction: column;
2308
+ align-items: flex-start;
2309
+ gap: var(--kds-spacing-1);
2310
+ margin-bottom: var(--kds-spacing-2);
2104
2311
  }
2105
2312
 
2106
2313
  /* Stage Content - Main form/content area */
2107
2314
  .kds-stage-content {
2108
2315
  display: flex;
2109
2316
  flex-direction: column;
2110
- gap: var(--kds-onboarding-gap);
2111
2317
  }
2112
2318
 
2113
2319
  /* Stage Actions - Bottom button area (if not using sticky footer) */
@@ -2115,7 +2321,6 @@ label.radio:has(input:disabled) {
2115
2321
  display: flex;
2116
2322
  justify-content: space-between;
2117
2323
  gap: var(--kds-spacing-3);
2118
- margin-top: var(--kds-spacing-8);
2119
2324
  }
2120
2325
 
2121
2326
  @media (max-width: 768px) {
@@ -2130,10 +2335,10 @@ label.radio:has(input:disabled) {
2130
2335
 
2131
2336
  /* Stage Section - Grouping related fields */
2132
2337
  .kds-stage-section {
2133
- background: #FFFFFF;
2338
+ background: var(--kds-color-background-paper);
2134
2339
  border-radius: var(--kds-radius-lg);
2135
2340
  padding: var(--kds-spacing-6);
2136
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2341
+ box-shadow: var(--kds-shadow-card);
2137
2342
  }
2138
2343
 
2139
2344
  .kds-stage-section + .kds-stage-section {
@@ -2143,13 +2348,13 @@ label.radio:has(input:disabled) {
2143
2348
  .kds-stage-section-title {
2144
2349
  font-size: var(--kds-font-size-lg);
2145
2350
  font-weight: var(--kds-font-weight-semibold);
2146
- color: #111827;
2351
+ color: var(--kds-color-text-primary);
2147
2352
  margin-bottom: var(--kds-spacing-4);
2148
2353
  }
2149
2354
 
2150
2355
  .kds-stage-section-description {
2151
2356
  font-size: var(--kds-font-size-sm);
2152
- color: #6B7280;
2357
+ color: var(--kds-color-text-secondary);
2153
2358
  margin-bottom: var(--kds-spacing-4);
2154
2359
  line-height: 1.5;
2155
2360
  }
@@ -2212,7 +2417,7 @@ label.radio:has(input:disabled) {
2212
2417
  .kds-file-upload-text {
2213
2418
  font-size: var(--kds-font-size-base);
2214
2419
  font-weight: var(--kds-font-weight-medium);
2215
- color: #111827;
2420
+ color: var(--kds-color-text-primary);
2216
2421
  margin-bottom: var(--kds-spacing-2);
2217
2422
  }
2218
2423
 
@@ -2229,14 +2434,14 @@ label.radio:has(input:disabled) {
2229
2434
 
2230
2435
  .kds-file-upload-helper {
2231
2436
  font-size: var(--kds-font-size-sm);
2232
- color: #6B7280;
2437
+ color: var(--kds-color-text-secondary);
2233
2438
  display: block;
2234
2439
  margin-top: var(--kds-spacing-1);
2235
2440
  }
2236
2441
 
2237
2442
  .kds-file-upload-hint {
2238
2443
  font-size: var(--kds-font-size-sm);
2239
- color: #6B7280;
2444
+ color: var(--kds-color-text-secondary);
2240
2445
  }
2241
2446
 
2242
2447
  /* Hidden file input */
@@ -2298,7 +2503,7 @@ label.radio:has(input:disabled) {
2298
2503
  .kds-file-upload-item-name {
2299
2504
  font-size: var(--kds-font-size-sm);
2300
2505
  font-weight: var(--kds-font-weight-medium);
2301
- color: #111827;
2506
+ color: var(--kds-color-text-primary);
2302
2507
  white-space: nowrap;
2303
2508
  overflow: hidden;
2304
2509
  text-overflow: ellipsis;
@@ -2306,13 +2511,13 @@ label.radio:has(input:disabled) {
2306
2511
 
2307
2512
  .kds-file-upload-item-meta {
2308
2513
  font-size: var(--kds-font-size-xs);
2309
- color: #6B7280;
2514
+ color: var(--kds-color-text-secondary);
2310
2515
  margin-top: 2px;
2311
2516
  }
2312
2517
 
2313
2518
  .kds-file-upload-item-size {
2314
2519
  font-size: var(--kds-font-size-xs);
2315
- color: #6B7280;
2520
+ color: var(--kds-color-text-secondary);
2316
2521
  margin-top: 2px;
2317
2522
  }
2318
2523
 
@@ -2358,7 +2563,7 @@ label.radio:has(input:disabled) {
2358
2563
  /* Progress bar (for async uploads) */
2359
2564
  .kds-file-upload-progress {
2360
2565
  height: 4px;
2361
- background: #E5E7EB;
2566
+ background: var(--kds-color-background-elevated);
2362
2567
  border-radius: 2px;
2363
2568
  overflow: hidden;
2364
2569
  margin-top: var(--kds-spacing-2);
@@ -2393,7 +2598,7 @@ label.radio:has(input:disabled) {
2393
2598
  background: var(--kds-otp-digit-bg);
2394
2599
  transition: all 0.2s ease;
2395
2600
  outline: none;
2396
- color: #111827;
2601
+ color: var(--kds-color-text-primary);
2397
2602
  }
2398
2603
 
2399
2604
  .kds-otp-digit:focus {
@@ -2445,7 +2650,7 @@ label.radio:has(input:disabled) {
2445
2650
 
2446
2651
  @media (max-width: 480px) {
2447
2652
  .kds-bank-grid {
2448
- grid-template-columns: repeat(3, 1fr);
2653
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2449
2654
  gap: var(--kds-spacing-2);
2450
2655
  }
2451
2656
  }
@@ -2460,7 +2665,7 @@ label.radio:has(input:disabled) {
2460
2665
  padding: var(--kds-spacing-3);
2461
2666
  border: 2px solid var(--kds-bank-item-border);
2462
2667
  border-radius: var(--kds-radius-lg);
2463
- background: #FFFFFF;
2668
+ background: var(--kds-color-background-paper);
2464
2669
  cursor: pointer;
2465
2670
  transition: all 0.3s ease;
2466
2671
  position: relative;
@@ -2491,7 +2696,7 @@ label.radio:has(input:disabled) {
2491
2696
  .kds-bank-item-name {
2492
2697
  font-size: var(--kds-font-size-xs);
2493
2698
  font-weight: var(--kds-font-weight-medium);
2494
- color: #111827;
2699
+ color: var(--kds-color-text-primary);
2495
2700
  text-align: center;
2496
2701
  line-height: 1.3;
2497
2702
  }
@@ -2556,12 +2761,43 @@ dialog.modal {
2556
2761
  padding: var(--kds-modal-padding);
2557
2762
  max-width: var(--kds-modal-max-width);
2558
2763
  box-shadow: var(--kds-modal-shadow);
2764
+ z-index: 1000;
2559
2765
  }
2560
2766
 
2561
2767
  dialog.modal::backdrop {
2562
2768
  background: var(--kds-modal-backdrop);
2563
2769
  }
2564
2770
 
2771
+ /* ========================================
2772
+ MODAL FIELD STYLES
2773
+ Consistent input/select styling for all modals
2774
+ ======================================== */
2775
+
2776
+ dialog.modal .field {
2777
+ margin-bottom: var(--kds-spacing-4);
2778
+ box-sizing: border-box;
2779
+ }
2780
+
2781
+ dialog.modal .field.border {
2782
+ border: var(--kds-border-width-sm) solid var(--kds-color-divider);
2783
+ border-radius: var(--kds-radius-md);
2784
+ background: var(--kds-color-background-paper);
2785
+ padding: 0;
2786
+ }
2787
+
2788
+ dialog.modal .field.border select,
2789
+ dialog.modal .field.border input {
2790
+ font-size: var(--kds-font-size-md);
2791
+ box-sizing: border-box;
2792
+ }
2793
+
2794
+ /* Focus state - use outline to prevent width change */
2795
+ dialog.modal .field.border:focus-within {
2796
+ outline: var(--kds-border-width-md) solid var(--kds-color-primary-main);
2797
+ outline-offset: 0;
2798
+ border-color: var(--kds-color-primary-main);
2799
+ }
2800
+
2565
2801
  /* ========================================
2566
2802
  KYC BLOCKING MODAL
2567
2803
  Warning modal for high-risk sectors
@@ -2798,7 +3034,7 @@ dialog.modal::backdrop {
2798
3034
  background: var(--kds-accordion-header-bg);
2799
3035
  cursor: pointer;
2800
3036
  font-weight: var(--kds-font-weight-semibold);
2801
- color: #111827;
3037
+ color: var(--kds-color-text-primary);
2802
3038
  list-style: none;
2803
3039
  display: flex;
2804
3040
  justify-content: space-between;
@@ -2811,7 +3047,7 @@ dialog.modal::backdrop {
2811
3047
  }
2812
3048
 
2813
3049
  .kds-contract-accordion summary:hover {
2814
- background: #E5E7EB;
3050
+ background: var(--kds-color-background-elevated);
2815
3051
  }
2816
3052
 
2817
3053
  .kds-contract-accordion summary::after {
@@ -2889,7 +3125,7 @@ dialog.modal::backdrop {
2889
3125
 
2890
3126
  .kds-signature-clear {
2891
3127
  background: transparent !important;
2892
- color: #6B7280 !important;
3128
+ color: var(--kds-color-text-secondary) !important;
2893
3129
  border: 1px solid #D1D5DB !important;
2894
3130
  }
2895
3131
 
@@ -2962,7 +3198,7 @@ dialog.modal::backdrop {
2962
3198
 
2963
3199
  .kds-summary-card {
2964
3200
  background: white;
2965
- border: 1px solid #E5E7EB;
3201
+ border: 1px solid var(--kds-border-light);
2966
3202
  border-radius: var(--kds-radius-lg);
2967
3203
  padding: var(--kds-spacing-5);
2968
3204
  margin-bottom: var(--kds-spacing-4);
@@ -2983,7 +3219,7 @@ dialog.modal::backdrop {
2983
3219
  gap: var(--kds-spacing-2);
2984
3220
  font-size: var(--kds-font-size-lg);
2985
3221
  font-weight: var(--kds-font-weight-semibold);
2986
- color: #111827;
3222
+ color: var(--kds-color-text-primary);
2987
3223
  }
2988
3224
 
2989
3225
  .kds-summary-card-edit {
@@ -3011,13 +3247,13 @@ dialog.modal::backdrop {
3011
3247
  flex: 0 0 140px;
3012
3248
  font-size: var(--kds-font-size-sm);
3013
3249
  font-weight: var(--kds-font-weight-medium);
3014
- color: #6B7280;
3250
+ color: var(--kds-color-text-secondary);
3015
3251
  }
3016
3252
 
3017
3253
  .kds-summary-value {
3018
3254
  flex: 1;
3019
3255
  font-size: var(--kds-font-size-sm);
3020
- color: #111827;
3256
+ color: var(--kds-color-text-primary);
3021
3257
  }
3022
3258
 
3023
3259
  .kds-summary-value.badge {
@@ -3077,20 +3313,20 @@ dialog.modal::backdrop {
3077
3313
  .kds-success-title {
3078
3314
  font-size: var(--kds-font-size-3xl);
3079
3315
  font-weight: var(--kds-font-weight-bold);
3080
- color: #111827;
3316
+ color: var(--kds-color-text-primary);
3081
3317
  margin-bottom: var(--kds-spacing-3);
3082
3318
  }
3083
3319
 
3084
3320
  .kds-success-subtitle {
3085
3321
  font-size: var(--kds-font-size-lg);
3086
- color: #6B7280;
3322
+ color: var(--kds-color-text-secondary);
3087
3323
  margin-bottom: var(--kds-spacing-8);
3088
3324
  max-width: 600px;
3089
3325
  }
3090
3326
 
3091
3327
  .kds-next-steps {
3092
3328
  background: white;
3093
- border: 1px solid #E5E7EB;
3329
+ border: 1px solid var(--kds-border-light);
3094
3330
  border-radius: var(--kds-radius-xl);
3095
3331
  padding: var(--kds-spacing-6);
3096
3332
  max-width: 700px;
@@ -3102,7 +3338,7 @@ dialog.modal::backdrop {
3102
3338
  .kds-next-steps-title {
3103
3339
  font-size: var(--kds-font-size-xl);
3104
3340
  font-weight: var(--kds-font-weight-semibold);
3105
- color: #111827;
3341
+ color: var(--kds-color-text-primary);
3106
3342
  margin-bottom: var(--kds-spacing-4);
3107
3343
  display: flex;
3108
3344
  align-items: center;
@@ -3141,13 +3377,13 @@ dialog.modal::backdrop {
3141
3377
  .kds-step-title {
3142
3378
  font-size: var(--kds-font-size-base);
3143
3379
  font-weight: var(--kds-font-weight-semibold);
3144
- color: #111827;
3380
+ color: var(--kds-color-text-primary);
3145
3381
  margin-bottom: 4px;
3146
3382
  }
3147
3383
 
3148
3384
  .kds-step-description {
3149
3385
  font-size: var(--kds-font-size-sm);
3150
- color: #6B7280;
3386
+ color: var(--kds-color-text-secondary);
3151
3387
  line-height: 1.5;
3152
3388
  }
3153
3389
 
@@ -3191,7 +3427,7 @@ dialog.modal::backdrop {
3191
3427
  }
3192
3428
 
3193
3429
  .khipu-card-elevated {
3194
- padding: 16px;
3430
+ padding: var(--kds-spacing-2);
3195
3431
  }
3196
3432
 
3197
3433
  .snackbar {
@@ -3208,10 +3444,74 @@ dialog.modal::backdrop {
3208
3444
 
3209
3445
  /* Container utilities */
3210
3446
  .kds-container-center {
3447
+ width: 100%;
3448
+ max-width: 1400px;
3211
3449
  margin-left: auto;
3212
3450
  margin-right: auto;
3213
3451
  }
3214
3452
 
3453
+ /* Nav should have no padding - only background color */
3454
+ nav {
3455
+ padding-left: 0 !important;
3456
+ padding-right: 0 !important;
3457
+ }
3458
+
3459
+ /* When inside nav, inherit flex behavior and override BeerCSS margin: 0 */
3460
+ nav > .kds-container-center {
3461
+ display: flex;
3462
+ align-items: center;
3463
+ gap: var(--kds-spacing-4);
3464
+ margin-left: auto !important;
3465
+ margin-right: auto !important;
3466
+ padding-left: var(--kds-spacing-4);
3467
+ padding-right: var(--kds-spacing-4);
3468
+ padding-top: var(--kds-spacing-2);
3469
+ padding-bottom: var(--kds-spacing-2);
3470
+ }
3471
+
3472
+ footer,
3473
+ footer.primary {
3474
+ padding-left: 0 !important;
3475
+ padding-right: 0 !important;
3476
+ }
3477
+
3478
+ /* Footer nav columns - vertical links */
3479
+ footer nav.kds-footer-nav {
3480
+ display: flex;
3481
+ flex-direction: column;
3482
+ gap: var(--kds-spacing-1);
3483
+ }
3484
+
3485
+ footer nav.kds-footer-nav a {
3486
+ font-size: var(--kds-font-size-sm);
3487
+ padding: 0;
3488
+ justify-content: flex-start;
3489
+ }
3490
+
3491
+ /* When inside footer, add padding to align with main content */
3492
+ footer > .kds-container-center {
3493
+ padding-left: var(--kds-spacing-4);
3494
+ padding-right: var(--kds-spacing-4);
3495
+ padding-top: var(--kds-spacing-8);
3496
+ padding-bottom: var(--kds-spacing-8);
3497
+ }
3498
+
3499
+ @media (min-width: 768px) {
3500
+ nav > .kds-container-center {
3501
+ padding-left: var(--kds-spacing-6);
3502
+ padding-right: var(--kds-spacing-6);
3503
+ padding-top: var(--kds-spacing-2);
3504
+ padding-bottom: var(--kds-spacing-2);
3505
+ }
3506
+
3507
+ footer > .kds-container-center {
3508
+ padding-left: var(--kds-spacing-6);
3509
+ padding-right: var(--kds-spacing-6);
3510
+ padding-top: var(--kds-spacing-10);
3511
+ padding-bottom: var(--kds-spacing-10);
3512
+ }
3513
+ }
3514
+
3215
3515
  .max-w-500 {
3216
3516
  max-width: 500px;
3217
3517
  }
@@ -3286,12 +3586,6 @@ dialog.modal::backdrop {
3286
3586
  .kds-stage-section-description {
3287
3587
  margin-bottom: var(--kds-spacing-4);
3288
3588
  }
3289
-
3290
- /* Stage header */
3291
- .kds-stage-header {
3292
- margin-bottom: var(--kds-spacing-8);
3293
- }
3294
-
3295
3589
  .kds-stage-title {
3296
3590
  margin-bottom: var(--kds-spacing-2);
3297
3591
  }
@@ -3328,32 +3622,150 @@ dialog.modal::backdrop {
3328
3622
  margin-bottom: 0; /* Grid gap handles spacing */
3329
3623
  }
3330
3624
 
3331
- /* Alerts have margin */
3625
+ /* ========================================
3626
+ ALERTS - Información contextual
3627
+ ======================================== */
3628
+
3629
+ /* Base alert structure */
3332
3630
  .kds-alert {
3333
- margin-bottom: var(--kds-spacing-6);
3631
+ display: flex;
3632
+ align-items: center;
3633
+ gap: var(--kds-spacing-1);
3634
+ padding: var(--kds-spacing-2);
3635
+ border-radius: var(--kds-radius-md);
3636
+ border: 1px solid;
3637
+ font-family: var(--kds-font-family-primary);
3638
+ min-width: 0;
3639
+ flex: 1 1 100%;
3640
+ }
3641
+
3642
+ @media (min-width: 768px) {
3643
+ .kds-alert {
3644
+ padding: var(--kds-spacing-2);
3645
+ flex: 1 1 auto;
3646
+ }
3334
3647
  }
3335
3648
 
3336
3649
  .kds-alert:last-child {
3337
3650
  margin-bottom: 0;
3338
3651
  }
3339
3652
 
3340
-
3341
- /* Modal actions (buttons at bottom) */
3342
- .modal .kds-kyc-modal-content + div,
3343
- .modal .kds-alert + div {
3344
- margin-top: var(--kds-spacing-6);
3653
+ /* Icon styling */
3654
+ .kds-alert-icon {
3655
+ flex-shrink: 0;
3656
+ font-size: var(--kds-spacing-button-icon-size);
3657
+ min-width: var(--kds-spacing-button-icon-size);
3658
+ min-height: var(--kds-spacing-button-icon-size);
3345
3659
  }
3346
3660
 
3347
- /* ===========================================================================
3661
+ /* Content container */
3662
+ .kds-alert-content {
3663
+ flex: 1;
3664
+ min-width: 0;
3665
+ }
3348
3666
 
3349
- /* ============================================
3350
- SIDEBAR NAVIGATION (Simple & Sticky)
3667
+ /* Title (bold) */
3668
+ .kds-alert-title {
3669
+ font-size: var(--kds-font-size-sm);
3670
+ font-weight: var(--kds-font-weight-semibold);
3671
+ line-height: var(--kds-line-height-normal);
3672
+ margin-bottom: calc(var(--kds-spacing-1) / 2);
3673
+ word-break: normal;
3674
+ overflow-wrap: break-word;
3675
+ }
3676
+
3677
+ /* Description (regular) */
3678
+ .kds-alert-description {
3679
+ font-size: var(--kds-font-size-sm);
3680
+ font-weight: var(--kds-font-weight-regular);
3681
+ line-height: var(--kds-line-height-relaxed);
3682
+ word-break: normal;
3683
+ overflow-wrap: break-word;
3684
+ }
3685
+
3686
+ /* Alert Variants */
3687
+ .kds-alert.kds-info {
3688
+ background: var(--kds-alert-info-bg);
3689
+ border-color: var(--kds-color-info-main);
3690
+ color: var(--kds-color-info-dark);
3691
+ }
3692
+
3693
+ .kds-alert.kds-info .kds-alert-icon {
3694
+ color: var(--kds-color-info-dark);
3695
+ }
3696
+
3697
+ .kds-alert.kds-success {
3698
+ background: var(--kds-alert-success-bg);
3699
+ border-color: var(--kds-color-success-main);
3700
+ color: var(--kds-color-success-dark);
3701
+ }
3702
+
3703
+ .kds-alert.kds-success .kds-alert-icon {
3704
+ color: var(--kds-color-success-dark);
3705
+ }
3706
+
3707
+ .kds-alert.kds-warning {
3708
+ background: var(--kds-alert-warning-bg);
3709
+ border-color: var(--kds-color-warning-main);
3710
+ color: var(--kds-color-warning-dark);
3711
+ }
3712
+
3713
+ .kds-alert.kds-warning .kds-alert-icon {
3714
+ color: var(--kds-color-warning-dark);
3715
+ }
3716
+
3717
+ .kds-alert.kds-error {
3718
+ background: var(--kds-alert-error-bg);
3719
+ border-color: var(--kds-color-error-main);
3720
+ color: var(--kds-color-error-dark);
3721
+ }
3722
+
3723
+ .kds-alert.kds-error .kds-alert-icon {
3724
+ color: var(--kds-color-error-dark);
3725
+ }
3726
+
3727
+ /* Lists inside alerts */
3728
+ .kds-alert ul {
3729
+ padding-left: var(--kds-spacing-2);
3730
+ margin-top: var(--kds-spacing-1);
3731
+ margin-bottom: 0;
3732
+ }
3733
+
3734
+ /* Links inside alerts */
3735
+ .kds-alert a {
3736
+ text-decoration: underline;
3737
+ }
3738
+
3739
+ .kds-alert a:hover {
3740
+ text-decoration: none;
3741
+ }
3742
+
3743
+
3744
+ /* Modal actions (buttons at bottom) */
3745
+ .modal .kds-kyc-modal-content + div,
3746
+ .modal .kds-alert + div {
3747
+ margin-top: var(--kds-spacing-6);
3748
+ }
3749
+
3750
+ /* ===========================================================================
3751
+
3752
+ /* ============================================
3753
+ SIDEBAR NAVIGATION (Simple & Sticky)
3351
3754
  ============================================ */
3352
3755
 
3353
3756
  /* Page layout - Flexbox horizontal */
3354
3757
  .kds-page-layout {
3355
3758
  display: flex;
3356
3759
  min-height: 100vh;
3760
+ padding-left: var(--kds-spacing-4);
3761
+ padding-right: var(--kds-spacing-4);
3762
+ }
3763
+
3764
+ @media (min-width: 768px) {
3765
+ .kds-page-layout {
3766
+ padding-left: var(--kds-spacing-6);
3767
+ padding-right: var(--kds-spacing-6);
3768
+ }
3357
3769
  }
3358
3770
 
3359
3771
  /* Sidebar - Sticky flotante a la izquierda */
@@ -3366,8 +3778,8 @@ dialog.modal::backdrop {
3366
3778
  position: sticky;
3367
3779
  top: var(--kds-spacing-4);
3368
3780
  margin: var(--kds-spacing-4);
3781
+ margin-left: 0;
3369
3782
  height: fit-content;
3370
- overflow-y: auto;
3371
3783
  box-shadow: var(--kds-shadow-2);
3372
3784
  }
3373
3785
 
@@ -3515,15 +3927,13 @@ dialog.modal::backdrop {
3515
3927
  /* Main content */
3516
3928
  .kds-main-content {
3517
3929
  flex: 1;
3518
- padding: var(--kds-spacing-8);
3930
+ min-width: 0;
3519
3931
  overflow-y: auto;
3520
- }
3521
-
3522
- @media (max-width: 768px) {
3523
-
3524
- .kds-main-content {
3525
- padding: var(--kds-spacing-4)
3526
- }
3932
+ display: flex;
3933
+ flex-direction: column;
3934
+ overflow-x: hidden;
3935
+ padding-top: var(--kds-spacing-4);
3936
+ padding-bottom: var(--kds-spacing-4);
3527
3937
  }
3528
3938
 
3529
3939
  /* ============================================
@@ -3558,14 +3968,16 @@ dialog.modal::backdrop {
3558
3968
  color: var(--kds-color-text-primary);
3559
3969
  }
3560
3970
 
3561
- /* Botón hamburger */
3971
+ /* Botón hamburger - oculto en desktop, visible en mobile */
3562
3972
  .kds-hamburger-btn {
3973
+ display: none;
3563
3974
  width: var(--kds-spacing-sidebar-icon-container-size);
3564
3975
  height: var(--kds-spacing-sidebar-icon-container-size);
3565
3976
  border: none;
3566
3977
  background: transparent;
3567
3978
  border-radius: var(--kds-radius-sm);
3568
3979
  cursor: pointer;
3980
+ padding: 0;
3569
3981
  transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard);
3570
3982
  }
3571
3983
 
@@ -3580,6 +3992,13 @@ dialog.modal::backdrop {
3580
3992
 
3581
3993
  /* Mobile (≤ 768px) */
3582
3994
  @media (max-width: 768px) {
3995
+ /* Mostrar hamburger button en nav */
3996
+ .kds-hamburger-btn {
3997
+ display: flex;
3998
+ align-items: center;
3999
+ justify-content: center;
4000
+ }
4001
+
3583
4002
  /* Mostrar topbar */
3584
4003
  .kds-mobile-topbar {
3585
4004
  display: flex;
@@ -3663,6 +4082,12 @@ dialog.modal::backdrop {
3663
4082
  margin-bottom: 0;
3664
4083
  }
3665
4084
 
4085
+ /* List without bullets */
4086
+ .kds-list-unstyled {
4087
+ list-style: none;
4088
+ padding-left: 0;
4089
+ }
4090
+
3666
4091
  /* Code block for displaying code snippets */
3667
4092
  .kds-code-block {
3668
4093
  background: var(--kds-color-background-elevated);
@@ -3713,3 +4138,931 @@ dialog.modal::backdrop {
3713
4138
  line-height: var(--kds-line-height-relaxed);
3714
4139
  }
3715
4140
 
4141
+ /* ========================================
4142
+ GALLERY / SHOWCASE COMPONENTS
4143
+ Componentes para páginas de demostración
4144
+ ======================================== */
4145
+
4146
+ /* Gallery Hero Section */
4147
+ .gallery-hero {
4148
+ background: linear-gradient(135deg, #8347AD 0%, #9333EA 100%);
4149
+ color: white;
4150
+ padding: var(--kds-spacing-12) var(--kds-spacing-6);
4151
+ text-align: center;
4152
+ }
4153
+
4154
+ .gallery-hero h1 {
4155
+ font-size: var(--kds-font-size-4xl);
4156
+ font-weight: var(--kds-font-weight-bold);
4157
+ margin: 0 0 var(--kds-spacing-4);
4158
+ line-height: 1.2;
4159
+ }
4160
+
4161
+ .gallery-hero p {
4162
+ font-size: var(--kds-font-size-lg);
4163
+ margin: 0 0 var(--kds-spacing-8);
4164
+ opacity: 0.95;
4165
+ max-width: 600px;
4166
+ margin-left: auto;
4167
+ margin-right: auto;
4168
+ }
4169
+
4170
+ .gallery-hero-actions {
4171
+ display: flex;
4172
+ gap: var(--kds-spacing-4);
4173
+ justify-content: center;
4174
+ flex-wrap: wrap;
4175
+ }
4176
+
4177
+ /* Gallery Container */
4178
+ .gallery-container {
4179
+ padding: var(--kds-spacing-12) var(--kds-spacing-6);
4180
+ }
4181
+
4182
+ .gallery-header {
4183
+ text-align: center;
4184
+ margin-bottom: var(--kds-spacing-10);
4185
+ }
4186
+
4187
+ .gallery-header h2 {
4188
+ font-size: var(--kds-font-size-3xl);
4189
+ font-weight: var(--kds-font-weight-bold);
4190
+ color: var(--kds-color-text-primary);
4191
+ margin: 0 0 var(--kds-spacing-4);
4192
+ }
4193
+
4194
+ .gallery-header p {
4195
+ font-size: var(--kds-font-size-lg);
4196
+ color: var(--kds-color-text-secondary);
4197
+ margin: 0;
4198
+ }
4199
+
4200
+ /* Gallery Grid */
4201
+ .gallery-grid {
4202
+ display: grid;
4203
+ grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
4204
+ gap: var(--kds-spacing-8);
4205
+ margin-bottom: var(--kds-spacing-12);
4206
+ }
4207
+
4208
+ @media (max-width: 768px) {
4209
+ .gallery-grid {
4210
+ grid-template-columns: 1fr;
4211
+ }
4212
+ }
4213
+
4214
+ /* Page Card */
4215
+ .page-card {
4216
+ background: var(--kds-color-background-paper);
4217
+ border-radius: var(--kds-radius-lg);
4218
+ overflow: hidden;
4219
+ box-shadow: var(--kds-shadow-2);
4220
+ transition: all var(--kds-transition-standard) var(--kds-easing-standard);
4221
+ text-decoration: none;
4222
+ color: inherit;
4223
+ display: flex;
4224
+ flex-direction: column;
4225
+ height: 100%;
4226
+ }
4227
+
4228
+ .page-card:hover {
4229
+ transform: translateY(-4px);
4230
+ box-shadow: var(--kds-shadow-8);
4231
+ }
4232
+
4233
+ .page-card-preview {
4234
+ background: linear-gradient(135deg, #F3E8FF 0%, #E9D5FF 100%);
4235
+ height: 200px;
4236
+ display: flex;
4237
+ align-items: center;
4238
+ justify-content: center;
4239
+ position: relative;
4240
+ overflow: hidden;
4241
+ }
4242
+
4243
+ .page-card-preview::before {
4244
+ content: '';
4245
+ position: absolute;
4246
+ top: -50%;
4247
+ left: -50%;
4248
+ width: 200%;
4249
+ height: 200%;
4250
+ background: radial-gradient(circle, rgba(131, 71, 173, 0.1) 0%, transparent 70%);
4251
+ animation: pulse 3s ease-in-out infinite;
4252
+ }
4253
+
4254
+ @keyframes pulse {
4255
+ 0%, 100% { transform: scale(1); opacity: 0.5; }
4256
+ 50% { transform: scale(1.1); opacity: 0.8; }
4257
+ }
4258
+
4259
+ .page-card-preview i {
4260
+ font-size: 80px;
4261
+ min-width: 80px;
4262
+ min-height: 80px;
4263
+ color: var(--kds-color-primary-main);
4264
+ position: relative;
4265
+ z-index: 1;
4266
+ }
4267
+
4268
+ .page-card-content {
4269
+ padding: var(--kds-spacing-6);
4270
+ flex: 1;
4271
+ display: flex;
4272
+ flex-direction: column;
4273
+ }
4274
+
4275
+ .page-card-step {
4276
+ font-size: var(--kds-font-size-xs);
4277
+ font-weight: var(--kds-font-weight-semibold);
4278
+ text-transform: uppercase;
4279
+ letter-spacing: 0.5px;
4280
+ color: var(--kds-color-primary-main);
4281
+ margin-bottom: var(--kds-spacing-2);
4282
+ }
4283
+
4284
+ .page-card-title {
4285
+ font-size: var(--kds-font-size-2xl);
4286
+ font-weight: var(--kds-font-weight-bold);
4287
+ color: var(--kds-color-text-primary);
4288
+ margin: 0 0 var(--kds-spacing-3);
4289
+ }
4290
+
4291
+ .page-card-description {
4292
+ font-size: var(--kds-font-size-md);
4293
+ color: var(--kds-color-text-secondary);
4294
+ line-height: var(--kds-line-height-relaxed);
4295
+ margin: 0 0 var(--kds-spacing-5);
4296
+ flex: 1;
4297
+ }
4298
+
4299
+ .page-card-components {
4300
+ display: flex;
4301
+ flex-wrap: wrap;
4302
+ gap: var(--kds-spacing-2);
4303
+ margin-bottom: var(--kds-spacing-5);
4304
+ }
4305
+
4306
+ .component-tag {
4307
+ font-size: var(--kds-font-size-xs);
4308
+ padding: calc(var(--kds-spacing-1) / 2) var(--kds-spacing-3);
4309
+ background: var(--kds-color-background-default);
4310
+ color: var(--kds-color-text-secondary);
4311
+ border-radius: var(--kds-radius-full);
4312
+ font-weight: var(--kds-font-weight-medium);
4313
+ }
4314
+
4315
+ .page-card-link {
4316
+ display: flex;
4317
+ align-items: center;
4318
+ justify-content: space-between;
4319
+ font-size: var(--kds-font-size-md);
4320
+ font-weight: var(--kds-font-weight-semibold);
4321
+ color: var(--kds-color-primary-main);
4322
+ text-decoration: none;
4323
+ padding-top: var(--kds-spacing-4);
4324
+ border-top: 1px solid var(--kds-color-divider);
4325
+ }
4326
+
4327
+ .page-card-link:hover {
4328
+ color: var(--kds-color-primary-dark);
4329
+ }
4330
+
4331
+ .page-card-link i {
4332
+ font-size: var(--kds-font-size-xl);
4333
+ transition: transform var(--kds-transition-shorter) var(--kds-easing-standard);
4334
+ }
4335
+
4336
+ .page-card:hover .page-card-link i {
4337
+ transform: translateX(4px);
4338
+ }
4339
+
4340
+ /* Component Showcase CTA */
4341
+ .showcase-cta {
4342
+ background: linear-gradient(135deg, #3B82F6 0%, #2563EB 100%);
4343
+ border-radius: var(--kds-radius-lg);
4344
+ padding: var(--kds-spacing-10) var(--kds-spacing-8);
4345
+ text-align: center;
4346
+ color: white;
4347
+ margin-top: var(--kds-spacing-12);
4348
+ }
4349
+
4350
+ .showcase-cta h2 {
4351
+ font-size: var(--kds-font-size-3xl);
4352
+ font-weight: var(--kds-font-weight-bold);
4353
+ margin: 0 0 var(--kds-spacing-4);
4354
+ }
4355
+
4356
+ .showcase-cta p {
4357
+ font-size: var(--kds-font-size-lg);
4358
+ margin: 0 0 var(--kds-spacing-8);
4359
+ opacity: 0.95;
4360
+ }
4361
+
4362
+ /* Gallery Footer */
4363
+ .gallery-footer {
4364
+ background: var(--kds-color-background-paper);
4365
+ border-top: 1px solid var(--kds-color-divider);
4366
+ padding: var(--kds-spacing-10) var(--kds-spacing-6);
4367
+ text-align: center;
4368
+ margin-top: var(--kds-spacing-12);
4369
+ }
4370
+
4371
+ .gallery-footer p {
4372
+ color: var(--kds-color-text-secondary);
4373
+ margin: 0 0 var(--kds-spacing-2);
4374
+ }
4375
+
4376
+ .gallery-footer a {
4377
+ color: var(--kds-color-primary-main);
4378
+ text-decoration: none;
4379
+ font-weight: var(--kds-font-weight-semibold);
4380
+ }
4381
+
4382
+ .gallery-footer a:hover {
4383
+ text-decoration: underline;
4384
+ }
4385
+
4386
+ /* Utility: Remove top padding */
4387
+ .kds-pt-0 {
4388
+ padding-top: 0 !important;
4389
+ }
4390
+
4391
+ /* Highlighted page card (para destacar items especiales) */
4392
+ .page-card-highlighted {
4393
+ border: 2px solid var(--kds-color-primary-main);
4394
+ }
4395
+
4396
+ .page-card-preview-alt {
4397
+ background: linear-gradient(135deg, rgba(131, 71, 173, 0.1) 0%, rgba(147, 51, 234, 0.15) 100%);
4398
+ }
4399
+
4400
+ /* ========================================
4401
+ SURVEY MODAL
4402
+ Modal personalizado para encuesta de bienvenida
4403
+ ======================================== */
4404
+
4405
+ /* Modal container */
4406
+ dialog#surveyModal {
4407
+ background: var(--kds-color-background-paper);
4408
+ border-radius: var(--kds-radius-lg);
4409
+ padding: var(--kds-spacing-5);
4410
+ max-width: 400px;
4411
+ width: 100%;
4412
+ box-shadow: var(--kds-shadow-16);
4413
+ box-sizing: border-box;
4414
+ border: none;
4415
+ }
4416
+
4417
+ dialog#surveyModal::backdrop {
4418
+ background: rgba(0, 0, 0, 0.5);
4419
+ }
4420
+
4421
+ /* Form styling */
4422
+ dialog#surveyModal form {
4423
+ margin: 0;
4424
+ padding: 0;
4425
+ }
4426
+
4427
+ /* Clean input styling - remove BeerCSS underlines */
4428
+ dialog#surveyModal .field {
4429
+ margin-bottom: var(--kds-spacing-4);
4430
+ box-sizing: border-box;
4431
+ }
4432
+
4433
+ dialog#surveyModal .field.border {
4434
+ border: 1px solid var(--kds-color-divider);
4435
+ border-radius: var(--kds-radius-md);
4436
+ background: var(--kds-color-background-paper);
4437
+ padding: 0;
4438
+ }
4439
+
4440
+ dialog#surveyModal .field.border select,
4441
+ dialog#surveyModal .field.border input {
4442
+ border: none;
4443
+ border-bottom: none;
4444
+ padding: var(--kds-spacing-3) var(--kds-spacing-4);
4445
+ background: transparent;
4446
+ color: var(--kds-color-text-primary);
4447
+ font-size: var(--kds-font-size-md);
4448
+ }
4449
+
4450
+ dialog#surveyModal .field.border:focus-within {
4451
+ outline: 2px solid var(--kds-color-primary-main);
4452
+ outline-offset: 0;
4453
+ border-color: var(--kds-color-primary-main);
4454
+ }
4455
+
4456
+ dialog#surveyModal .field label {
4457
+ position: static;
4458
+ display: block;
4459
+ margin-bottom: var(--kds-spacing-2);
4460
+ font-size: var(--kds-font-size-sm);
4461
+ font-weight: var(--kds-font-weight-medium);
4462
+ color: var(--kds-color-text-primary);
4463
+ background: transparent;
4464
+ padding: 0;
4465
+ }
4466
+
4467
+ dialog#surveyModal .field.border {
4468
+ position: relative;
4469
+ }
4470
+
4471
+ /* Button styling */
4472
+ dialog#surveyModal button.primary {
4473
+ width: 100%;
4474
+ max-width: 100%;
4475
+ padding: var(--kds-spacing-3) var(--kds-spacing-5);
4476
+ font-size: var(--kds-font-size-md);
4477
+ font-weight: var(--kds-font-weight-semibold);
4478
+ border-radius: var(--kds-radius-md);
4479
+ transition: all var(--kds-transition-short) var(--kds-easing-standard);
4480
+ height: auto;
4481
+ min-height: auto;
4482
+ line-height: 1.5;
4483
+ box-sizing: border-box;
4484
+ margin: 0;
4485
+ border: none;
4486
+ }
4487
+
4488
+ dialog#surveyModal button.primary:disabled {
4489
+ background: var(--kds-color-action-disabled-bg);
4490
+ color: var(--kds-color-action-disabled);
4491
+ cursor: not-allowed;
4492
+ }
4493
+
4494
+ dialog#surveyModal button.primary:not(:disabled):hover {
4495
+ background: var(--kds-color-primary-dark);
4496
+ }
4497
+
4498
+ /* Close button - hidden */
4499
+ dialog#surveyModal button.circle {
4500
+ display: none;
4501
+ }
4502
+
4503
+ /* Help text */
4504
+ #surveyHelpText {
4505
+ margin-top: var(--kds-spacing-2);
4506
+ text-align: center;
4507
+ font-size: var(--kds-font-size-xs);
4508
+ color: var(--kds-color-text-secondary);
4509
+ }
4510
+
4511
+ /* ========================================
4512
+ SHOWCASE / DEMO COMPONENTS
4513
+ Componentes para páginas de demostración y showcase
4514
+ ======================================== */
4515
+
4516
+ /* Showcase Header */
4517
+ .showcase-header {
4518
+ background: linear-gradient(135deg, #8347AD 0%, #6A2B93 100%);
4519
+ color: white;
4520
+ padding: var(--kds-spacing-12) var(--kds-spacing-6);
4521
+ text-align: center;
4522
+ }
4523
+
4524
+ .showcase-content {
4525
+ padding: var(--kds-spacing-8) var(--kds-spacing-6);
4526
+ }
4527
+
4528
+ /* Component Grid (para showcase de componentes) */
4529
+ .component-grid {
4530
+ display: grid;
4531
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
4532
+ gap: var(--kds-spacing-6);
4533
+ margin-top: var(--kds-spacing-8);
4534
+ }
4535
+
4536
+ /* Demo Header */
4537
+ .demo-header {
4538
+ background: var(--kds-color-primary-main);
4539
+ color: white;
4540
+ padding: var(--kds-spacing-8) var(--kds-spacing-6);
4541
+ text-align: center;
4542
+ }
4543
+
4544
+ /* Demo Navigation Grid */
4545
+ .demo-nav-grid {
4546
+ display: grid;
4547
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
4548
+ gap: var(--kds-spacing-4);
4549
+ padding: var(--kds-spacing-8);
4550
+ }
4551
+
4552
+ /* Demo Stage Card */
4553
+ .demo-stage-card {
4554
+ background: var(--kds-color-background-paper);
4555
+ border-radius: var(--kds-radius-lg);
4556
+ padding: var(--kds-spacing-6);
4557
+ box-shadow: var(--kds-shadow-1);
4558
+ transition: all var(--kds-transition-standard) var(--kds-easing-standard);
4559
+ text-decoration: none;
4560
+ color: inherit;
4561
+ display: flex;
4562
+ flex-direction: column;
4563
+ gap: var(--kds-spacing-3);
4564
+ }
4565
+
4566
+ .demo-stage-card:hover {
4567
+ box-shadow: var(--kds-shadow-4);
4568
+ transform: translateY(-2px);
4569
+ }
4570
+
4571
+ .demo-stage-number,
4572
+ .demo-stage-icon {
4573
+ width: 48px;
4574
+ height: 48px;
4575
+ background: rgba(131, 71, 173, 0.1);
4576
+ color: var(--kds-color-primary-main);
4577
+ border-radius: var(--kds-radius-md);
4578
+ display: flex;
4579
+ align-items: center;
4580
+ justify-content: center;
4581
+ font-size: var(--kds-font-size-2xl);
4582
+ font-weight: var(--kds-font-weight-bold);
4583
+ }
4584
+
4585
+ .demo-stage-number {
4586
+ font-size: var(--kds-font-size-xl);
4587
+ }
4588
+
4589
+ .demo-stage-icon {
4590
+ width: 64px;
4591
+ height: 64px;
4592
+ }
4593
+
4594
+ .demo-stage-icon i {
4595
+ width: auto;
4596
+ height: auto;
4597
+ font-size: var(--kds-font-size-2xl);
4598
+ }
4599
+
4600
+ .demo-stage-title {
4601
+ font-size: var(--kds-font-size-lg);
4602
+ font-weight: var(--kds-font-weight-semibold);
4603
+ color: var(--kds-color-text-primary);
4604
+ }
4605
+
4606
+ .demo-stage-description {
4607
+ font-size: var(--kds-font-size-sm);
4608
+ color: var(--kds-color-text-secondary);
4609
+ line-height: var(--kds-line-height-relaxed);
4610
+ }
4611
+
4612
+ /* ========================================
4613
+ SUMMARY CARD (Validation page)
4614
+ ======================================== */
4615
+
4616
+ .kds-summary-card {
4617
+ background: var(--kds-color-background-paper);
4618
+ border: 1px solid var(--kds-color-divider);
4619
+ border-radius: var(--kds-radius-lg);
4620
+ padding: var(--kds-spacing-5);
4621
+ margin-bottom: var(--kds-spacing-4);
4622
+ }
4623
+
4624
+ .kds-summary-card-header {
4625
+ display: flex;
4626
+ justify-content: space-between;
4627
+ align-items: center;
4628
+ margin-bottom: var(--kds-spacing-4);
4629
+ padding-bottom: var(--kds-spacing-3);
4630
+ border-bottom: 1px solid var(--kds-color-divider);
4631
+ }
4632
+
4633
+ .kds-summary-card-title {
4634
+ font-size: var(--kds-font-size-lg);
4635
+ font-weight: var(--kds-font-weight-semibold);
4636
+ color: var(--kds-color-text-primary);
4637
+ }
4638
+
4639
+ .kds-summary-card-row {
4640
+ display: flex;
4641
+ justify-content: space-between;
4642
+ padding: var(--kds-spacing-2) 0;
4643
+ }
4644
+
4645
+ .kds-summary-card-label {
4646
+ font-size: var(--kds-font-size-sm);
4647
+ color: var(--kds-color-text-secondary);
4648
+ }
4649
+
4650
+ .kds-summary-card-value {
4651
+ font-size: var(--kds-font-size-sm);
4652
+ font-weight: var(--kds-font-weight-medium);
4653
+ color: var(--kds-color-text-primary);
4654
+ }
4655
+
4656
+ /* ========================================
4657
+ CONTRACT CONTENT (Contract page)
4658
+ ======================================== */
4659
+
4660
+ .kds-contract-content {
4661
+ background: var(--kds-color-background-paper);
4662
+ border: 1px solid var(--kds-color-divider);
4663
+ border-radius: var(--kds-radius-lg);
4664
+ padding: var(--kds-spacing-6);
4665
+ max-height: 400px;
4666
+ overflow-y: auto;
4667
+ }
4668
+
4669
+ .kds-contract-content details {
4670
+ margin-bottom: var(--kds-spacing-4);
4671
+ }
4672
+
4673
+ .kds-contract-content summary {
4674
+ cursor: pointer;
4675
+ font-weight: var(--kds-font-weight-semibold);
4676
+ font-size: var(--kds-font-size-md);
4677
+ color: var(--kds-color-text-primary);
4678
+ padding: var(--kds-spacing-3);
4679
+ border-radius: var(--kds-radius-md);
4680
+ transition: background var(--kds-transition-shorter) var(--kds-easing-standard);
4681
+ }
4682
+
4683
+ .kds-contract-content summary:hover {
4684
+ background: var(--kds-color-action-hover);
4685
+ }
4686
+
4687
+ .kds-contract-content details[open] summary {
4688
+ margin-bottom: var(--kds-spacing-3);
4689
+ }
4690
+
4691
+ .kds-contract-content p {
4692
+ margin: var(--kds-spacing-2) 0;
4693
+ line-height: var(--kds-line-height-relaxed);
4694
+ color: var(--kds-color-text-secondary);
4695
+ }
4696
+
4697
+ /* ========================================
4698
+ BANK GRID (Bank connection page)
4699
+ ======================================== */
4700
+
4701
+ .kds-bank-grid {
4702
+ display: grid;
4703
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
4704
+ gap: var(--kds-spacing-4);
4705
+ margin-bottom: var(--kds-spacing-6);
4706
+ }
4707
+
4708
+ .kds-bank-item {
4709
+ aspect-ratio: 1;
4710
+ border: 2px solid var(--kds-color-divider);
4711
+ border-radius: var(--kds-radius-lg);
4712
+ padding: var(--kds-spacing-4);
4713
+ display: flex;
4714
+ flex-direction: column;
4715
+ align-items: center;
4716
+ justify-content: center;
4717
+ cursor: pointer;
4718
+ transition: all var(--kds-transition-short) var(--kds-easing-standard);
4719
+ background: var(--kds-color-background-paper);
4720
+ }
4721
+
4722
+ .kds-bank-item:hover {
4723
+ border-color: var(--kds-color-primary-main);
4724
+ box-shadow: var(--kds-shadow-2);
4725
+ }
4726
+
4727
+ .kds-bank-item.selected {
4728
+ border-color: var(--kds-color-primary-main);
4729
+ background: rgba(131, 71, 173, 0.05);
4730
+ }
4731
+
4732
+ .kds-bank-item img {
4733
+ max-width: 80%;
4734
+ max-height: 60%;
4735
+ object-fit: contain;
4736
+ margin-bottom: var(--kds-spacing-2);
4737
+ }
4738
+
4739
+ .kds-bank-item-name {
4740
+ font-size: var(--kds-font-size-xs);
4741
+ font-weight: var(--kds-font-weight-medium);
4742
+ color: var(--kds-color-text-primary);
4743
+ text-align: center;
4744
+ }
4745
+
4746
+ @media (max-width: 768px) {
4747
+ .kds-bank-grid {
4748
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
4749
+ gap: var(--kds-spacing-3);
4750
+ }
4751
+ }
4752
+
4753
+ /* ========================================
4754
+ UTILITY CLASSES
4755
+ Clases utilitarias para evitar estilos inline
4756
+ ======================================== */
4757
+
4758
+ /* Icon utilities - alineación con texto */
4759
+ .kds-icon-inline {
4760
+ vertical-align: middle;
4761
+ margin-right: var(--kds-spacing-2);
4762
+ }
4763
+
4764
+ /* Text utilities */
4765
+ .kds-text-center {
4766
+ text-align: center;
4767
+ }
4768
+
4769
+ .kds-text-underline {
4770
+ text-decoration: underline;
4771
+ }
4772
+
4773
+ .kds-text-no-decoration {
4774
+ text-decoration: none;
4775
+ }
4776
+
4777
+ /* Spacing utilities */
4778
+ .kds-mt-2 { margin-top: var(--kds-spacing-2); }
4779
+ .kds-mt-3 { margin-top: var(--kds-spacing-3); }
4780
+ .kds-mt-4 { margin-top: var(--kds-spacing-4); }
4781
+ .kds-mt-6 { margin-top: var(--kds-spacing-6); }
4782
+ .kds-mt-8 { margin-top: var(--kds-spacing-8); }
4783
+
4784
+ .kds-mb-2 { margin-bottom: var(--kds-spacing-2); }
4785
+ .kds-mb-3 { margin-bottom: var(--kds-spacing-3); }
4786
+ .kds-mb-4 { margin-bottom: var(--kds-spacing-4); }
4787
+ .kds-mb-6 { margin-bottom: var(--kds-spacing-6); }
4788
+ .kds-mb-8 { margin-bottom: var(--kds-spacing-8); }
4789
+
4790
+ /* Display utilities */
4791
+ .kds-hidden {
4792
+ display: none;
4793
+ }
4794
+
4795
+ .kds-w-full {
4796
+ width: 100%;
4797
+ }
4798
+
4799
+ /* Icon sizes */
4800
+ .kds-icon-sm { font-size: 18px; }
4801
+ .kds-icon-md { font-size: 32px; }
4802
+ .kds-icon-lg { font-size: 48px; }
4803
+ .kds-icon-xl { font-size: 64px; }
4804
+ .kds-icon-xxl { font-size: 80px; }
4805
+
4806
+ /* Position utilities */
4807
+ .kds-absolute-top-right {
4808
+ position: absolute;
4809
+ top: var(--kds-spacing-4);
4810
+ right: var(--kds-spacing-4);
4811
+ }
4812
+
4813
+ /* Color utilities (solo para casos específicos de demo) */
4814
+ .kds-text-warning {
4815
+ color: #92400E;
4816
+ }
4817
+
4818
+ .kds-list-warning {
4819
+ margin: 0;
4820
+ padding-left: var(--kds-spacing-5);
4821
+ color: #78350F;
4822
+ }
4823
+
4824
+ /* ========================================
4825
+ LAYOUT FLEXBOX UTILITIES
4826
+ Utilities for flexbox layouts
4827
+ ======================================== */
4828
+
4829
+ .kds-flex {
4830
+ display: flex;
4831
+ }
4832
+
4833
+ .kds-flex-row {
4834
+ display: flex;
4835
+ flex-direction: row;
4836
+ }
4837
+
4838
+ .kds-flex-col {
4839
+ display: flex;
4840
+ flex-direction: column;
4841
+ }
4842
+
4843
+ .kds-items-start {
4844
+ align-items: flex-start;
4845
+ }
4846
+
4847
+ .kds-items-center {
4848
+ align-items: center;
4849
+ }
4850
+
4851
+ .kds-items-end {
4852
+ align-items: flex-end;
4853
+ }
4854
+
4855
+ .kds-justify-start {
4856
+ justify-content: flex-start;
4857
+ }
4858
+
4859
+ .kds-justify-center {
4860
+ justify-content: center;
4861
+ }
4862
+
4863
+ .kds-justify-between {
4864
+ justify-content: space-between;
4865
+ }
4866
+
4867
+ .kds-justify-end {
4868
+ justify-content: flex-end;
4869
+ }
4870
+
4871
+ .kds-flex-1 {
4872
+ flex: 1;
4873
+ }
4874
+
4875
+ .kds-flex-shrink-0 {
4876
+ flex-shrink: 0;
4877
+ }
4878
+
4879
+ /* Gap utilities */
4880
+ .kds-gap-1 { gap: var(--kds-spacing-1); }
4881
+ .kds-gap-2 { gap: var(--kds-spacing-2); }
4882
+ .kds-gap-3 { gap: var(--kds-spacing-3); }
4883
+ .kds-gap-4 { gap: var(--kds-spacing-4); }
4884
+ .kds-gap-5 { gap: var(--kds-spacing-5); }
4885
+ .kds-gap-6 { gap: var(--kds-spacing-6); }
4886
+ .kds-gap-8 { gap: var(--kds-spacing-8); }
4887
+
4888
+ /* ========================================
4889
+ OPACITY UTILITIES
4890
+ ======================================== */
4891
+
4892
+ .kds-opacity-60 {
4893
+ opacity: 0.6;
4894
+ }
4895
+
4896
+ .kds-opacity-80 {
4897
+ opacity: 0.8;
4898
+ }
4899
+
4900
+ .kds-opacity-90 {
4901
+ opacity: 0.9;
4902
+ }
4903
+
4904
+ /* ========================================
4905
+ BADGE COMPONENT
4906
+ Small chips/badges for labels and status
4907
+ ======================================== */
4908
+
4909
+ .kds-badge {
4910
+ display: inline-block;
4911
+ padding: 2px 8px;
4912
+ border-radius: var(--kds-radius-sm);
4913
+ font-size: var(--kds-font-size-xs);
4914
+ font-weight: var(--kds-font-weight-medium);
4915
+ line-height: 1.5;
4916
+ }
4917
+
4918
+ .kds-badge.success {
4919
+ background-color: var(--kds-color-success-container);
4920
+ color: var(--kds-color-success-dark);
4921
+ }
4922
+
4923
+ .kds-badge.error {
4924
+ background-color: var(--kds-color-error-container);
4925
+ color: var(--kds-color-error-dark);
4926
+ }
4927
+
4928
+ .kds-badge.warning {
4929
+ background-color: var(--kds-color-warning-container);
4930
+ color: var(--kds-color-warning-dark);
4931
+ }
4932
+
4933
+ .kds-badge.info {
4934
+ background-color: var(--kds-color-info-container);
4935
+ color: var(--kds-color-info-dark);
4936
+ }
4937
+
4938
+ .kds-badge.primary {
4939
+ background-color: var(--kds-color-primary-container);
4940
+ color: var(--kds-color-primary-dark);
4941
+ }
4942
+
4943
+ /* ========================================
4944
+ DIVIDER WITH TEXT
4945
+ Separator with optional text
4946
+ ======================================== */
4947
+
4948
+ .kds-divider-text {
4949
+ text-align: center;
4950
+ margin: var(--kds-spacing-6) 0;
4951
+ color: var(--kds-color-text-secondary);
4952
+ position: relative;
4953
+ font-size: var(--kds-font-size-sm);
4954
+ }
4955
+
4956
+ .kds-divider-text span {
4957
+ background: var(--kds-color-background-default);
4958
+ padding: 0 var(--kds-spacing-2);
4959
+ position: relative;
4960
+ z-index: 1;
4961
+ }
4962
+
4963
+ .kds-divider-text::before {
4964
+ content: '';
4965
+ position: absolute;
4966
+ top: 50%;
4967
+ left: 0;
4968
+ right: 0;
4969
+ height: 1px;
4970
+ background: var(--kds-color-divider);
4971
+ }
4972
+
4973
+ /* ========================================
4974
+ CARD ICON CONTENT PATTERN
4975
+ Card with icon on left and content on right
4976
+ ======================================== */
4977
+
4978
+ .kds-card-icon-content {
4979
+ display: flex;
4980
+ align-items: flex-start;
4981
+ gap: var(--kds-spacing-4);
4982
+ }
4983
+
4984
+ .kds-card-icon-content-text {
4985
+ flex: 1;
4986
+ min-width: 0;
4987
+ }
4988
+
4989
+ /* ========================================
4990
+ CARD COMPONENT UTILITIES
4991
+ Padding variants for cards
4992
+ ======================================== */
4993
+
4994
+ .kds-card-elevated.kds-p-0 { padding: 0; }
4995
+ .kds-card-elevated.kds-p-2 { padding: var(--kds-spacing-2); }
4996
+ .kds-card-elevated.kds-p-3 { padding: var(--kds-spacing-3); }
4997
+ .kds-card-elevated.kds-p-4 { padding: var(--kds-spacing-4); }
4998
+ .kds-card-elevated.kds-p-5 { padding: var(--kds-spacing-5); }
4999
+ .kds-card-elevated.kds-p-6 { padding: var(--kds-spacing-6); }
5000
+ .kds-card-elevated.kds-p-8 { padding: var(--kds-spacing-8); }
5001
+
5002
+ /* ========================================
5003
+ SNACKBAR UTILITIES
5004
+ Position variants for snackbar/toast messages
5005
+ ======================================== */
5006
+
5007
+ /* Snackbar positioned at top (above modals) */
5008
+ .snackbar.kds-snackbar-top {
5009
+ top: var(--kds-spacing-4);
5010
+ bottom: auto;
5011
+ z-index: 1400; /* Above modals (1300) */
5012
+ }
5013
+
5014
+ /* ========================================
5015
+ DIRECTIONAL SPACING UTILITIES
5016
+ Margin and padding for individual sides
5017
+ ======================================== */
5018
+
5019
+ /* Margin Left */
5020
+ .kds-ml-0 { margin-left: 0; }
5021
+ .kds-ml-1 { margin-left: var(--kds-spacing-1); }
5022
+ .kds-ml-2 { margin-left: var(--kds-spacing-2); }
5023
+ .kds-ml-3 { margin-left: var(--kds-spacing-3); }
5024
+ .kds-ml-4 { margin-left: var(--kds-spacing-4); }
5025
+ .kds-ml-5 { margin-left: var(--kds-spacing-5); }
5026
+ .kds-ml-6 { margin-left: var(--kds-spacing-6); }
5027
+ .kds-ml-8 { margin-left: var(--kds-spacing-8); }
5028
+
5029
+ /* Margin Right */
5030
+ .kds-mr-0 { margin-right: 0; }
5031
+ .kds-mr-1 { margin-right: var(--kds-spacing-1); }
5032
+ .kds-mr-2 { margin-right: var(--kds-spacing-2); }
5033
+ .kds-mr-3 { margin-right: var(--kds-spacing-3); }
5034
+ .kds-mr-4 { margin-right: var(--kds-spacing-4); }
5035
+ .kds-mr-5 { margin-right: var(--kds-spacing-5); }
5036
+ .kds-mr-6 { margin-right: var(--kds-spacing-6); }
5037
+ .kds-mr-8 { margin-right: var(--kds-spacing-8); }
5038
+
5039
+ /* Padding Left */
5040
+ .kds-pl-0 { padding-left: 0; }
5041
+ .kds-pl-1 { padding-left: var(--kds-spacing-1); }
5042
+ .kds-pl-2 { padding-left: var(--kds-spacing-2); }
5043
+ .kds-pl-3 { padding-left: var(--kds-spacing-3); }
5044
+ .kds-pl-4 { padding-left: var(--kds-spacing-4); }
5045
+ .kds-pl-5 { padding-left: var(--kds-spacing-5); }
5046
+ .kds-pl-6 { padding-left: var(--kds-spacing-6); }
5047
+ .kds-pl-8 { padding-left: var(--kds-spacing-8); }
5048
+
5049
+ /* Padding Right */
5050
+ .kds-pr-0 { padding-right: 0; }
5051
+ .kds-pr-1 { padding-right: var(--kds-spacing-1); }
5052
+ .kds-pr-2 { padding-right: var(--kds-spacing-2); }
5053
+ .kds-pr-3 { padding-right: var(--kds-spacing-3); }
5054
+ .kds-pr-4 { padding-right: var(--kds-spacing-4); }
5055
+ .kds-pr-5 { padding-right: var(--kds-spacing-5); }
5056
+ .kds-pr-6 { padding-right: var(--kds-spacing-6); }
5057
+ .kds-pr-8 { padding-right: var(--kds-spacing-8); }
5058
+
5059
+ /* Colors */
5060
+ .kds-error-text {
5061
+ color: var(--kds-color-error-main) !important;
5062
+ }
5063
+
5064
+ /* Z-index */
5065
+
5066
+ .z-1000 {
5067
+ z-index: 1000;
5068
+ }