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

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-25T18:39:44.178Z
14
+ * Generated: 2026-03-27T13:16:02.917Z
15
15
  *
16
16
  * To regenerate:
17
17
  * cd design-system && npm run tokens:generate
@@ -88,6 +88,12 @@
88
88
  --kds-snackbar-error-bg: rgba(211, 47, 47, 0.08);
89
89
  --kds-snackbar-info-bg: rgba(2, 136, 209, 0.08);
90
90
 
91
+ /* Alert backgrounds */
92
+ --kds-alert-info-bg: #EFF6FF;
93
+ --kds-alert-warning-bg: #FFFBEB;
94
+ --kds-alert-success-bg: #ECFDF5;
95
+ --kds-alert-error-bg: #FEF2F2;
96
+
91
97
  /* ==========================================================================
92
98
  TYPOGRAPHY TOKENS
93
99
  ========================================================================== */
@@ -159,6 +165,25 @@
159
165
  --kds-spacing-button-padding: 8px 22px;
160
166
  --kds-spacing-button-min-height: 50px;
161
167
  --kds-spacing-button-icon-size: 20px;
168
+ --kds-spacing-sidebar-width: 280px;
169
+ --kds-spacing-sidebar-width-collapsed: 72px;
170
+ --kds-spacing-sidebar-width-mobile: 100%;
171
+ --kds-spacing-sidebar-header-padding: 16px;
172
+ --kds-spacing-sidebar-nav-item-padding-y: 8px;
173
+ --kds-spacing-sidebar-nav-item-padding-x: 12px;
174
+ --kds-spacing-sidebar-nav-item-margin-x: 12px;
175
+ --kds-spacing-sidebar-nav-item-gap: 12px;
176
+ --kds-spacing-sidebar-submenu-indent: 64px;
177
+ --kds-spacing-sidebar-icon-size: 24px;
178
+ --kds-spacing-sidebar-icon-container-size: 40px;
179
+ --kds-spacing-sidebar-label-padding-x: 24px;
180
+ --kds-spacing-sidebar-label-padding-y: 8px;
181
+ --kds-spacing-sidebar-label-margin-top: 16px;
182
+ --kds-spacing-sidebar-label-font-size: 11px;
183
+ --kds-spacing-sidebar-z-index: 100;
184
+ --kds-spacing-sidebar-z-index-mobile: 1000;
185
+ --kds-spacing-sidebar-transition: 0.2s;
186
+ --kds-spacing-sidebar-collapsable-max-height: 500px;
162
187
  --kds-spacing-section: 32px;
163
188
  --kds-spacing-form-gap: 20px;
164
189
  --kds-spacing-inline-gap: 8px;
@@ -183,6 +208,16 @@
183
208
  --kds-radius-chip: 16px;
184
209
  --kds-radius-iconContainer: 10px;
185
210
 
211
+ /* ==========================================================================
212
+ BORDER TOKENS
213
+ ========================================================================== */
214
+
215
+
216
+ /* Border colors */
217
+ --kds-border-light: #DDDDDD;
218
+ --kds-border-medium: #999999;
219
+ --kds-border-dark: #666666;
220
+
186
221
  /* ==========================================================================
187
222
  SHADOW TOKENS
188
223
  ========================================================================== */
@@ -230,14 +265,117 @@
230
265
  BREAKPOINTS
231
266
  ========================================================================== */
232
267
 
233
- --kds-breakpoint-sm: 600px;
234
- --kds-breakpoint-md: 900px;
235
- --kds-breakpoint-lg: 1200px;
236
- --kds-breakpoint-xl: 1536px;
237
268
 
269
+ /* Breakpoints */
270
+ --kds-breakpoint-mobile: 600px;
271
+ --kds-breakpoint-tablet: 840px;
272
+ --kds-breakpoint-desktop: 1280px;
273
+ --kds-breakpoint-legacyMobile: 768px;
274
+ --kds-breakpoint-legacyTablet: 1024px;
275
+
276
+ /* ==========================================================================
277
+ RESPONSIVE SPACING (MOBILE BASE)
278
+ ========================================================================== */
279
+
280
+
281
+ /* Container */
282
+ --kds-container-padding: 16px;
283
+
284
+ /* Cards */
285
+ --kds-card-padding: 16px;
286
+
287
+ /* Sections */
288
+ --kds-section-gap: 24px;
289
+
290
+ /* Elements */
291
+ --kds-element-gap: 12px;
292
+
293
+ /* Margins */
294
+ --kds-section-margin: 16px;
295
+
296
+ /* ==========================================================================
297
+ RESPONSIVE TYPOGRAPHY (MOBILE BASE)
298
+ ========================================================================== */
299
+
300
+
301
+ /* Headings */
302
+ --kds-font-size-h1: 1.75rem;
303
+ --kds-font-size-h2: 1.5rem;
304
+ --kds-font-size-h3: 1.25rem;
305
+ --kds-font-size-h4: 1.125rem;
306
+ --kds-font-size-h5: 1rem;
307
+ --kds-font-size-h6: 1rem;
308
+
309
+ /* Body */
310
+ --kds-font-size-body1: 0.875rem;
311
+ --kds-font-size-body2: 0.8125rem;
312
+
313
+ /* Components */
314
+ --kds-font-size-button: 0.875rem;
315
+ --kds-font-size-caption: 0.6875rem;
316
+
317
+ }
318
+
319
+ /* ============================================================================
320
+ RESPONSIVE TOKENS (Mobile-First)
321
+ ============================================================================ */
322
+
323
+ /* Tablet (600px+) - Spacing */
324
+ @media (min-width: 600px) {
325
+ :root {
326
+ --kds-container-padding: 24px;
327
+ --kds-card-padding: 20px;
328
+ --kds-section-gap: 32px;
329
+ --kds-element-gap: 16px;
330
+ --kds-section-margin: 24px;
331
+ }
332
+ }
333
+
334
+ /* Tablet (600px+) - Typography */
335
+ @media (min-width: 600px) {
336
+ :root {
337
+ --kds-font-size-h1: 2rem;
338
+ --kds-font-size-h2: 1.75rem;
339
+ --kds-font-size-h3: 1.5rem;
340
+ --kds-font-size-h4: 1.25rem;
341
+ --kds-font-size-h5: 1.125rem;
342
+ --kds-font-size-h6: 1rem;
343
+ --kds-font-size-body1: 0.9375rem;
344
+ --kds-font-size-body2: 0.875rem;
345
+ --kds-font-size-button: 0.9375rem;
346
+ --kds-font-size-caption: 0.75rem;
347
+ }
348
+ }
349
+
350
+ /* Desktop (840px+) - Spacing */
351
+ @media (min-width: 840px) {
352
+ :root {
353
+ --kds-container-padding: 32px;
354
+ --kds-card-padding: 24px;
355
+ --kds-section-gap: 48px;
356
+ --kds-element-gap: 24px;
357
+ --kds-section-margin: 32px;
358
+ }
359
+ }
360
+
361
+ /* Desktop (840px+) - Typography */
362
+ @media (min-width: 840px) {
363
+ :root {
364
+ --kds-font-size-h1: 2.5rem;
365
+ --kds-font-size-h2: 2rem;
366
+ --kds-font-size-h3: 1.75rem;
367
+ --kds-font-size-h4: 1.5rem;
368
+ --kds-font-size-h5: 1.25rem;
369
+ --kds-font-size-h6: 1.25rem;
370
+ --kds-font-size-body1: 1rem;
371
+ --kds-font-size-body2: 0.875rem;
372
+ --kds-font-size-button: 0.9375rem;
373
+ --kds-font-size-caption: 0.75rem;
374
+ }
238
375
  }
239
376
 
240
377
 
378
+
241
379
  /* Khipu BeerCSS Variable Mappings */
242
380
  /* Khipu Material Design 3 Brand Tokens for BeerCSS
243
381
  * Imports core tokens from css-variables.css (auto-generated from src/tokens/index.ts)
@@ -246,25 +384,17 @@
246
384
  */
247
385
 
248
386
  /* Import core design tokens (auto-generated) */
249
- :root {
387
+ :root,
388
+ body.light,
389
+ body.dark {
250
390
  /* ========================================
251
391
  Map core tokens to BeerCSS-specific names
252
392
  (BeerCSS may use different naming conventions)
393
+ Same selector specificity as BeerCSS to ensure override
253
394
  ======================================== */
254
395
 
255
- /* Alert backgrounds (using info color with transparency) */
256
- --kds-alert-info-bg: #EFF6FF;
257
- --kds-alert-warning-bg: #FFFBEB;
258
- --kds-alert-success-bg: #ECFDF5;
259
- --kds-alert-error-bg: #FEF2F2;
260
-
261
- /* Border colors (not in core tokens) */
262
- --kds-border-light: #DDD;
263
- --kds-border-medium: #999;
264
- --kds-border-dark: #666;
265
-
266
396
  /* Input border states */
267
- --kds-input-border-hover: rgba(0, 0, 0, 0.42); /* Slightly darker on hover (Material Design spec) */
397
+ --kds-input-border-hover: var(--kds-color-input-hover-border);
268
398
 
269
399
  /* Override BeerCSS native font variable */
270
400
  --font: var(--kds-font-family-primary);
@@ -292,13 +422,19 @@
292
422
  --warning: var(--kds-color-warning-main);
293
423
  --info: var(--kds-color-info-main);
294
424
 
295
- /* Background and surface colors */
425
+ /* Background and surface colors - Override BeerCSS purple defaults */
296
426
  --background: var(--kds-color-background-default);
297
427
  --surface: var(--kds-color-background-paper);
298
- --on-surface: var(--kds-color-text-primary);
299
- --on-surface-variant: var(--kds-color-action-active);
428
+ --surface-dim: var(--kds-color-background-elevated);
429
+ --surface-bright: var(--kds-color-background-paper);
300
430
  --surface-variant: var(--kds-color-background-elevated);
431
+ --surface-container-lowest: var(--kds-color-background-default);
432
+ --surface-container-low: var(--kds-color-background-paper);
301
433
  --surface-container: var(--kds-color-background-default);
434
+ --surface-container-high: var(--kds-color-background-elevated);
435
+ --surface-container-highest: var(--kds-color-background-elevated);
436
+ --on-surface: var(--kds-color-text-primary);
437
+ --on-surface-variant: var(--kds-color-action-active);
302
438
  --outline: var(--kds-color-input-border);
303
439
  --outline-variant: var(--kds-border-light);
304
440
 
@@ -307,36 +443,36 @@
307
443
  ======================================== */
308
444
 
309
445
  /* File Upload States */
310
- --kds-upload-zone-bg: #F9FAFB; /* gray-50 */
311
- --kds-upload-zone-border: #D1D5DB; /* gray-300 */
312
- --kds-upload-zone-border-hover: #3B82F6; /* blue-500 */
313
- --kds-upload-zone-border-drag: #8347AD; /* primary-500 (purple) */
446
+ --kds-upload-zone-bg: var(--kds-color-background-elevated);
447
+ --kds-upload-zone-border: var(--kds-border-light);
448
+ --kds-upload-zone-border-hover: var(--kds-color-info-main);
449
+ --kds-upload-zone-border-drag: var(--kds-color-primary-main);
314
450
  --kds-upload-zone-border-error: var(--kds-color-error-main);
315
451
  --kds-upload-zone-border-success: var(--kds-color-success-main);
316
- --kds-upload-item-bg: #FFFFFF;
317
- --kds-upload-item-border: #E5E7EB; /* gray-200 */
452
+ --kds-upload-item-bg: var(--kds-color-background-paper);
453
+ --kds-upload-item-border: var(--kds-border-light);
318
454
 
319
455
  /* OTP Input */
320
456
  --kds-otp-digit-size: 56px;
321
457
  --kds-otp-digit-height: 64px;
322
- --kds-otp-digit-border: #D1D5DB;
323
- --kds-otp-digit-border-focus: #3B82F6;
324
- --kds-otp-digit-bg: #FFFFFF;
325
- --kds-otp-digit-bg-filled: #F9FAFB;
458
+ --kds-otp-digit-border: var(--kds-border-light);
459
+ --kds-otp-digit-border-focus: var(--kds-color-info-main);
460
+ --kds-otp-digit-bg: var(--kds-color-background-paper);
461
+ --kds-otp-digit-bg-filled: var(--kds-color-background-elevated);
326
462
 
327
463
  /* Modal Base */
328
- --kds-modal-bg: #FFFFFF;
464
+ --kds-modal-bg: var(--kds-color-background-paper);
329
465
  --kds-modal-padding: var(--kds-spacing-6);
330
466
  --kds-modal-padding-mobile: var(--kds-spacing-4);
331
467
  --kds-modal-border-radius: var(--kds-radius-lg);
332
- --kds-modal-shadow: var(--kds-shadow-elevation-4);
468
+ --kds-modal-shadow: var(--kds-shadow-4);
333
469
  --kds-modal-backdrop: rgba(0, 0, 0, 0.5);
334
470
  --kds-modal-max-width: 600px;
335
471
  --kds-modal-max-width-mobile: 95vw;
336
472
 
337
473
  /* Modal Content Colors */
338
- --kds-modal-title-color: #111827; /* gray-900 */
339
- --kds-modal-text-color: #374151; /* gray-700 */
474
+ --kds-modal-title-color: var(--kds-color-text-primary);
475
+ --kds-modal-text-color: var(--kds-color-text-secondary);
340
476
  --kds-modal-icon-warning: var(--kds-color-warning-main);
341
477
  --kds-modal-icon-error: var(--kds-color-error-main);
342
478
  --kds-modal-icon-success: var(--kds-color-success-main);
@@ -347,22 +483,22 @@
347
483
  --kds-welcome-gradient-end: var(--kds-color-primary-dark); /* Khipu purple dark */
348
484
 
349
485
  /* Bank Selector */
350
- --kds-bank-item-border: #E5E7EB;
351
- --kds-bank-item-border-hover: #D1D5DB;
352
- --kds-bank-item-border-selected: #3B82F6;
353
- --kds-bank-item-bg-selected: #EFF6FF; /* blue-50 */
354
- --kds-bank-item-bg-hover: #F9FAFB;
486
+ --kds-bank-item-border: var(--kds-border-light);
487
+ --kds-bank-item-border-hover: var(--kds-border-light);
488
+ --kds-bank-item-border-selected: var(--kds-color-info-main);
489
+ --kds-bank-item-bg-selected: var(--kds-alert-info-bg);
490
+ --kds-bank-item-bg-hover: var(--kds-color-background-elevated);
355
491
 
356
492
  /* Signature Pad */
357
- --kds-signature-border: #D1D5DB;
358
- --kds-signature-bg: #FFFFFF;
493
+ --kds-signature-border: var(--kds-border-light);
494
+ --kds-signature-bg: var(--kds-color-background-paper);
359
495
  --kds-signature-line-color: #000000;
360
496
 
361
497
  /* Contract Accordion */
362
- --kds-accordion-border: #E5E7EB;
363
- --kds-accordion-bg: #F9FAFB;
364
- --kds-accordion-bg-open: #FFFFFF;
365
- --kds-accordion-header-bg: #F3F4F6;
498
+ --kds-accordion-border: var(--kds-border-light);
499
+ --kds-accordion-bg: var(--kds-color-background-elevated);
500
+ --kds-accordion-bg-open: var(--kds-color-background-paper);
501
+ --kds-accordion-header-bg: var(--kds-color-background-elevated);
366
502
 
367
503
  /* Onboarding Container */
368
504
  --kds-onboarding-max-width: 800px;
@@ -420,9 +556,10 @@ footer {
420
556
  * Source: design.khipu.com and Material Design 3 specifications
421
557
  */
422
558
 
423
- /* ========================================
424
- Button Overrides (Material Design 3)
425
- ======================================== */
559
+
560
+ :has(>main) {
561
+ background-color: transparent !important;
562
+ }
426
563
 
427
564
  /* ========================================
428
565
  KHIPU BUTTON SYSTEM
@@ -665,8 +802,7 @@ a.kds-btn > .kds-icon > i {
665
802
  .kds-card-elevated,
666
803
  .khipu-card-elevated,
667
804
  .kds-card-main {
668
- padding: 20px;
669
- margin: 16px;
805
+ padding: 12px;
670
806
  }
671
807
  }
672
808
 
@@ -1335,100 +1471,24 @@ nav.primary button {
1335
1471
  }
1336
1472
 
1337
1473
  /* ========================================
1338
- Drawer/Sidenav (Mobile Navigation)
1474
+ Flex Layout System (Body + Container + Sidebar)
1339
1475
  ======================================== */
1340
1476
 
1341
- /* Left drawer hidden by default */
1342
- nav.drawer.left {
1343
- position: fixed;
1344
- top: 0;
1345
- left: 0;
1346
- bottom: 0;
1347
- width: 280px;
1348
- max-width: 80vw;
1349
- background: var(--surface-container, #FFFFFF);
1350
- box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);
1351
- transform: translateX(-100%);
1352
- transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1353
- z-index: 1100;
1354
- overflow-y: auto;
1477
+ /* Body flex-column layout */
1478
+ body.kds-layout {
1355
1479
  display: flex;
1356
1480
  flex-direction: column;
1481
+ min-height: 100vh;
1482
+ margin: 0;
1357
1483
  }
1358
1484
 
1359
- /* Show drawer when active */
1360
- nav.drawer.left.active {
1361
- transform: translateX(0);
1362
- }
1363
-
1364
- /* Drawer overlay */
1365
- nav.drawer.left::before {
1366
- content: '';
1367
- position: fixed;
1368
- top: 0;
1369
- left: 0;
1370
- right: 0;
1371
- bottom: 0;
1372
- background: rgba(0, 0, 0, 0.5);
1373
- opacity: 0;
1374
- visibility: hidden;
1375
- transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1),
1376
- visibility 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1377
- z-index: -1;
1378
- pointer-events: none;
1379
- }
1380
-
1381
- /* Show overlay when drawer is active */
1382
- nav.drawer.left.active::before {
1383
- opacity: 1;
1384
- visibility: visible;
1385
- pointer-events: auto;
1386
- }
1387
-
1388
- /* Drawer header styling */
1389
- nav.drawer header {
1390
- padding: 16px;
1391
- background: var(--primary-container, rgba(131, 71, 173, 0.1));
1392
- border-bottom: 1px solid var(--outline-variant, rgba(0, 0, 0, 0.12));
1393
- }
1394
-
1395
- /* Drawer links */
1396
- nav.drawer a {
1485
+ /* Layout container (flex-row) - below header */
1486
+ .kds-layout-container {
1397
1487
  display: flex;
1398
- align-items: center;
1399
- padding: 12px 16px;
1400
- color: var(--on-surface, rgba(0, 0, 0, 0.87));
1401
- text-decoration: none;
1402
- transition: background 0.2s ease;
1403
- gap: 16px;
1404
- }
1405
-
1406
- nav.drawer a:hover {
1407
- background: var(--surface-variant, rgba(0, 0, 0, 0.04));
1408
- }
1409
-
1410
- nav.drawer a i {
1411
- font-size: 24px;
1412
- color: var(--on-surface-variant, rgba(0, 0, 0, 0.60));
1413
- }
1414
-
1415
- nav.drawer .divider {
1416
- height: 1px;
1417
- background: var(--outline-variant, rgba(0, 0, 0, 0.12));
1418
- margin: 8px 0;
1419
- }
1420
-
1421
- /* Hide menu toggle button on desktop */
1422
- @media (min-width: 769px) {
1423
- #menu-toggle {
1424
- display: none;
1425
- }
1426
-
1427
- nav.drawer.left {
1428
- display: none;
1429
- }
1488
+ flex-direction: row;
1489
+ flex: 1;
1490
+ overflow: hidden;
1430
1491
  }
1431
-
1432
1492
  /* ========================================
1433
1493
  Footer Customization
1434
1494
  ======================================== */
@@ -3284,4 +3344,372 @@ dialog.modal::backdrop {
3284
3344
  margin-top: var(--kds-spacing-6);
3285
3345
  }
3286
3346
 
3347
+ /* ===========================================================================
3348
+
3349
+ /* ============================================
3350
+ SIDEBAR NAVIGATION (Simple & Sticky)
3351
+ ============================================ */
3352
+
3353
+ /* Page layout - Flexbox horizontal */
3354
+ .kds-page-layout {
3355
+ display: flex;
3356
+ min-height: 100vh;
3357
+ }
3358
+
3359
+ /* Sidebar - Sticky flotante a la izquierda */
3360
+ .kds-sidebar {
3361
+ width: var(--kds-spacing-sidebar-width);
3362
+ background: var(--kds-color-background-paper);
3363
+ border: 1px solid var(--kds-color-divider);
3364
+ border-radius: var(--kds-radius-lg);
3365
+ flex-shrink: 0;
3366
+ position: sticky;
3367
+ top: var(--kds-spacing-4);
3368
+ margin: var(--kds-spacing-4);
3369
+ height: fit-content;
3370
+ overflow-y: auto;
3371
+ box-shadow: var(--kds-shadow-2);
3372
+ }
3373
+
3374
+ /* Sidebar Header */
3375
+ .kds-sidebar-header {
3376
+ display: flex;
3377
+ align-items: center;
3378
+ gap: var(--kds-spacing-3);
3379
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
3380
+ border-bottom: 1px solid var(--kds-color-divider);
3381
+ border-radius: var(--kds-radius-lg) var(--kds-radius-lg) 0 0;
3382
+ cursor: pointer;
3383
+ position: relative; /* ← Para anclar dropdown */
3384
+ transition: background var(--kds-transition-shorter) var(--kds-easing-standard);
3385
+ }
3386
+
3387
+ .kds-sidebar-header:hover {
3388
+ background: var(--kds-color-action-hover);
3389
+ }
3390
+
3391
+ /* Avatar circular */
3392
+ .kds-sidebar-avatar {
3393
+ width: var(--kds-spacing-sidebar-icon-container-size);
3394
+ height: var(--kds-spacing-sidebar-icon-container-size);
3395
+ border-radius: var(--kds-radius-full);
3396
+ background: var(--kds-color-error-main);
3397
+ color: var(--kds-color-background-paper);
3398
+ display: flex;
3399
+ align-items: center;
3400
+ justify-content: center;
3401
+ font-size: var(--kds-font-size-lg);
3402
+ font-weight: var(--kds-font-weight-bold);
3403
+ flex-shrink: 0;
3404
+ }
3405
+
3406
+ /* Header text */
3407
+ .kds-sidebar-header-text {
3408
+ flex: 1;
3409
+ overflow: hidden;
3410
+ }
3411
+
3412
+ .kds-sidebar-title {
3413
+ font-size: var(--kds-font-size-base);
3414
+ font-weight: var(--kds-font-weight-semibold);
3415
+ color: var(--kds-color-text-primary);
3416
+ white-space: nowrap;
3417
+ overflow: hidden;
3418
+ text-overflow: ellipsis;
3419
+ }
3420
+
3421
+ .kds-sidebar-subtitle {
3422
+ font-size: var(--kds-font-size-sm);
3423
+ color: var(--kds-color-text-secondary);
3424
+ white-space: nowrap;
3425
+ overflow: hidden;
3426
+ text-overflow: ellipsis;
3427
+ }
3428
+
3429
+ /* Dropdown icon */
3430
+ .kds-sidebar-dropdown-icon {
3431
+ font-size: var(--kds-spacing-sidebar-icon-size);
3432
+ color: var(--kds-color-text-secondary);
3433
+ flex-shrink: 0;
3434
+ transition: transform var(--kds-transition-shorter) var(--kds-easing-standard);
3435
+ }
3436
+
3437
+ /* Header Dropdown - Flotante */
3438
+ .kds-sidebar-header-dropdown {
3439
+ position: absolute;
3440
+ top: 100%;
3441
+ left: 0;
3442
+ right: 0;
3443
+ z-index: var(--kds-z-index-drawer);
3444
+ opacity: 0;
3445
+ visibility: hidden;
3446
+ pointer-events: none;
3447
+ transform: translateY(calc(var(--kds-spacing-1) * -1));
3448
+ transition: all var(--kds-transition-shorter) var(--kds-easing-standard);
3449
+ }
3450
+
3451
+ .kds-sidebar-header-dropdown.kds-dropdown-open {
3452
+ opacity: 1;
3453
+ visibility: visible;
3454
+ pointer-events: auto;
3455
+ transform: translateY(0);
3456
+ }
3457
+
3458
+ /* Navigation */
3459
+ .kds-sidebar-nav {
3460
+ padding: var(--kds-spacing-2) 0;
3461
+ flex-direction: column;
3462
+ align-items: flex-start;
3463
+ }
3464
+
3465
+ /* Nav item */
3466
+ .kds-sidebar-nav-item {
3467
+ display: flex;
3468
+ align-items: center;
3469
+ gap: var(--kds-spacing-1);
3470
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
3471
+ color: var(--kds-color-text-primary);
3472
+ text-decoration: none;
3473
+ position: relative;
3474
+ transition: background var(--kds-transition-shorter) var(--kds-easing-standard);
3475
+ width: 100%;
3476
+ justify-content: flex-start;
3477
+ }
3478
+
3479
+ .kds-sidebar-nav-item:hover {
3480
+ background: var(--kds-color-action-hover);
3481
+ }
3482
+
3483
+ /* Nav item icon */
3484
+ .kds-sidebar-nav-item i {
3485
+ font-size: var(--kds-spacing-sidebar-icon-size);
3486
+ color: var(--kds-color-text-secondary);
3487
+ }
3488
+
3489
+ /* Nav item text */
3490
+ .kds-sidebar-nav-item span {
3491
+ font-size: var(--kds-font-size-base);
3492
+ font-weight: var(--kds-font-weight-medium);
3493
+ }
3494
+
3495
+ /* Active state - barra morada a la izquierda */
3496
+ .kds-sidebar-nav-item.active {
3497
+ background: var(--kds-color-primary-hover);
3498
+ }
3499
+
3500
+ .kds-sidebar-nav-item.active::before {
3501
+ content: '';
3502
+ position: absolute;
3503
+ left: 0;
3504
+ top: 0;
3505
+ bottom: 0;
3506
+ width: calc(var(--kds-spacing-1) / 2);
3507
+ background: var(--kds-color-primary-main);
3508
+ }
3509
+
3510
+ .kds-sidebar-nav-item.active i,
3511
+ .kds-sidebar-nav-item.active span {
3512
+ color: var(--kds-color-primary-main);
3513
+ }
3514
+
3515
+ /* Main content */
3516
+ .kds-main-content {
3517
+ flex: 1;
3518
+ padding: var(--kds-spacing-8);
3519
+ overflow-y: auto;
3520
+ }
3521
+
3522
+ @media (max-width: 768px) {
3523
+
3524
+ .kds-main-content {
3525
+ padding: var(--kds-spacing-4)
3526
+ }
3527
+ }
3528
+
3529
+ /* ============================================
3530
+ MOBILE RESPONSIVE SIDEBAR
3531
+ ============================================ */
3532
+
3533
+ /* Mobile Topbar - oculto en desktop */
3534
+ .kds-mobile-topbar {
3535
+ display: none;
3536
+ }
3537
+
3538
+ /* Barra superior mobile del sidebar - oculta en desktop */
3539
+ .kds-sidebar-mobile-header {
3540
+ display: none;
3541
+ }
3542
+
3543
+ /* Botón cerrar sidebar */
3544
+ .kds-sidebar-close-btn {
3545
+ border: none;
3546
+ background: transparent;
3547
+ border-radius: var(--kds-radius-sm);
3548
+ cursor: pointer;
3549
+ padding: 0;
3550
+ }
3551
+
3552
+ .kds-sidebar-close-btn:hover {
3553
+ background: var(--kds-color-action-hover);
3554
+ }
3555
+
3556
+ .kds-sidebar-close-btn i {
3557
+ font-size: var(--kds-spacing-sidebar-icon-size);
3558
+ color: var(--kds-color-text-primary);
3559
+ }
3560
+
3561
+ /* Botón hamburger */
3562
+ .kds-hamburger-btn {
3563
+ width: var(--kds-spacing-sidebar-icon-container-size);
3564
+ height: var(--kds-spacing-sidebar-icon-container-size);
3565
+ border: none;
3566
+ background: transparent;
3567
+ border-radius: var(--kds-radius-sm);
3568
+ cursor: pointer;
3569
+ transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard);
3570
+ }
3571
+
3572
+ .kds-hamburger-btn:hover {
3573
+ background: var(--kds-color-action-hover);
3574
+ }
3575
+
3576
+ .kds-hamburger-btn i {
3577
+ font-size: var(--kds-spacing-sidebar-icon-size);
3578
+ color: var(--kds-color-text-primary);
3579
+ }
3580
+
3581
+ /* Mobile (≤ 768px) */
3582
+ @media (max-width: 768px) {
3583
+ /* Mostrar topbar */
3584
+ .kds-mobile-topbar {
3585
+ display: flex;
3586
+ align-items: center;
3587
+ gap: var(--kds-spacing-2);
3588
+ position: fixed;
3589
+ top: 0;
3590
+ left: 0;
3591
+ right: 0;
3592
+ height: var(--kds-spacing-7);
3593
+ padding: 0 var(--kds-spacing-2);
3594
+ background: var(--kds-color-background-paper);
3595
+ border-bottom: 1px solid var(--kds-color-divider);
3596
+ z-index: var(--kds-z-index-appbar);
3597
+ font-size: var(--kds-font-size-lg);
3598
+ font-weight: var(--kds-font-weight-semibold);
3599
+ }
3600
+
3601
+ /* Layout con espacio para topbar */
3602
+ .kds-page-layout {
3603
+ padding-top: var(--kds-spacing-7);
3604
+ }
3605
+
3606
+ /* Sidebar = drawer full-width */
3607
+ .kds-sidebar {
3608
+ position: fixed;
3609
+ top: 0;
3610
+ left: 0;
3611
+ bottom: 0;
3612
+ width: 100vw;
3613
+ margin: 0;
3614
+ height: 100%;
3615
+ transform: translateX(-100%);
3616
+ transition: transform var(--kds-transition-standard) var(--kds-easing-ease-out);
3617
+ z-index: var(--kds-z-index-drawer);
3618
+ border-radius: 0;
3619
+ }
3620
+
3621
+ /* Barra superior mobile visible */
3622
+ .kds-sidebar-mobile-header {
3623
+ display: flex;
3624
+ align-items: center;
3625
+ justify-content: space-between;
3626
+ height: var(--kds-spacing-7);
3627
+ padding: 0 var(--kds-spacing-2);
3628
+ background: var(--kds-color-background-paper);
3629
+ border-bottom: 1px solid var(--kds-color-divider);
3630
+ font-size: var(--kds-font-size-lg);
3631
+ font-weight: var(--kds-font-weight-semibold);
3632
+ color: var(--kds-color-text-primary);
3633
+ }
3634
+
3635
+ /* Sidebar abierto */
3636
+ .kds-sidebar-open {
3637
+ transform: translateX(0);
3638
+ }
3639
+
3640
+ /* Main content full-width */
3641
+ .kds-main-content {
3642
+ margin-left: 0;
3643
+ }
3644
+ }
3645
+
3646
+ /* ============================================
3647
+ LIST UTILITIES
3648
+ ============================================ */
3649
+
3650
+ /* Standard list with compact spacing */
3651
+ .kds-list {
3652
+ margin: 0;
3653
+ padding-left: var(--kds-spacing-2);
3654
+ list-style-position: outside;
3655
+ line-height: var(--kds-line-height-relaxed);
3656
+ }
3657
+
3658
+ .kds-list > li {
3659
+ margin-bottom: var(--kds-spacing-2);
3660
+ }
3661
+
3662
+ .kds-list > li:last-child {
3663
+ margin-bottom: 0;
3664
+ }
3665
+
3666
+ /* Code block for displaying code snippets */
3667
+ .kds-code-block {
3668
+ background: var(--kds-color-background-elevated);
3669
+ padding: var(--kds-spacing-4);
3670
+ border-radius: var(--kds-radius-md);
3671
+ overflow-x: auto;
3672
+ font-family: 'Courier New', monospace;
3673
+ font-size: var(--kds-font-size-sm);
3674
+ line-height: var(--kds-line-height-relaxed);
3675
+ color: var(--kds-color-text-primary);
3676
+ }
3677
+
3678
+ /* ============================================
3679
+ DEMO PAGE STYLES (DEPRECATED - Use kds-card-* instead)
3680
+ ============================================ */
3681
+
3682
+ .demo-card {
3683
+ background: var(--kds-color-background-paper);
3684
+ border: 1px solid var(--kds-color-divider);
3685
+ border-radius: var(--kds-radius-lg);
3686
+ padding: var(--kds-spacing-6);
3687
+ margin-bottom: var(--kds-spacing-6);
3688
+ }
3689
+
3690
+ .code-block {
3691
+ background: var(--kds-color-background-elevated);
3692
+ border: 1px solid var(--kds-color-divider);
3693
+ border-radius: var(--kds-radius-md);
3694
+ padding: var(--kds-spacing-4);
3695
+ font-family: var(--kds-font-family-mono);
3696
+ font-size: var(--kds-font-size-sm);
3697
+ line-height: var(--kds-line-height-relaxed);
3698
+ white-space: pre-wrap;
3699
+ word-wrap: break-word;
3700
+ overflow-x: auto;
3701
+ color: var(--kds-color-text-primary);
3702
+ }
3703
+
3704
+ .kds-text-secondary-color {
3705
+ color: var(--kds-color-text-secondary);
3706
+ }
3707
+
3708
+ .kds-main-content > .kds-body-large {
3709
+ margin-bottom: var(--kds-spacing-6);
3710
+ }
3711
+
3712
+ .kds-main-content > .demo-card ul {
3713
+ line-height: var(--kds-line-height-relaxed);
3714
+ }
3287
3715