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

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-26T19:18:15.487Z
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,10 +265,11 @@
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;
268
+
269
+ /* Breakpoints */
270
+ --kds-breakpoint-mobile: 768px;
271
+ --kds-breakpoint-tablet: 1024px;
272
+ --kds-breakpoint-desktop: 1025px;
237
273
 
238
274
  }
239
275
 
@@ -246,25 +282,17 @@
246
282
  */
247
283
 
248
284
  /* Import core design tokens (auto-generated) */
249
- :root {
285
+ :root,
286
+ body.light,
287
+ body.dark {
250
288
  /* ========================================
251
289
  Map core tokens to BeerCSS-specific names
252
290
  (BeerCSS may use different naming conventions)
291
+ Same selector specificity as BeerCSS to ensure override
253
292
  ======================================== */
254
293
 
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
294
  /* Input border states */
267
- --kds-input-border-hover: rgba(0, 0, 0, 0.42); /* Slightly darker on hover (Material Design spec) */
295
+ --kds-input-border-hover: var(--kds-color-input-hover-border);
268
296
 
269
297
  /* Override BeerCSS native font variable */
270
298
  --font: var(--kds-font-family-primary);
@@ -292,13 +320,19 @@
292
320
  --warning: var(--kds-color-warning-main);
293
321
  --info: var(--kds-color-info-main);
294
322
 
295
- /* Background and surface colors */
323
+ /* Background and surface colors - Override BeerCSS purple defaults */
296
324
  --background: var(--kds-color-background-default);
297
325
  --surface: var(--kds-color-background-paper);
298
- --on-surface: var(--kds-color-text-primary);
299
- --on-surface-variant: var(--kds-color-action-active);
326
+ --surface-dim: var(--kds-color-background-elevated);
327
+ --surface-bright: var(--kds-color-background-paper);
300
328
  --surface-variant: var(--kds-color-background-elevated);
329
+ --surface-container-lowest: var(--kds-color-background-default);
330
+ --surface-container-low: var(--kds-color-background-paper);
301
331
  --surface-container: var(--kds-color-background-default);
332
+ --surface-container-high: var(--kds-color-background-elevated);
333
+ --surface-container-highest: var(--kds-color-background-elevated);
334
+ --on-surface: var(--kds-color-text-primary);
335
+ --on-surface-variant: var(--kds-color-action-active);
302
336
  --outline: var(--kds-color-input-border);
303
337
  --outline-variant: var(--kds-border-light);
304
338
 
@@ -307,36 +341,36 @@
307
341
  ======================================== */
308
342
 
309
343
  /* 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) */
344
+ --kds-upload-zone-bg: var(--kds-color-background-elevated);
345
+ --kds-upload-zone-border: var(--kds-border-light);
346
+ --kds-upload-zone-border-hover: var(--kds-color-info-main);
347
+ --kds-upload-zone-border-drag: var(--kds-color-primary-main);
314
348
  --kds-upload-zone-border-error: var(--kds-color-error-main);
315
349
  --kds-upload-zone-border-success: var(--kds-color-success-main);
316
- --kds-upload-item-bg: #FFFFFF;
317
- --kds-upload-item-border: #E5E7EB; /* gray-200 */
350
+ --kds-upload-item-bg: var(--kds-color-background-paper);
351
+ --kds-upload-item-border: var(--kds-border-light);
318
352
 
319
353
  /* OTP Input */
320
354
  --kds-otp-digit-size: 56px;
321
355
  --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;
356
+ --kds-otp-digit-border: var(--kds-border-light);
357
+ --kds-otp-digit-border-focus: var(--kds-color-info-main);
358
+ --kds-otp-digit-bg: var(--kds-color-background-paper);
359
+ --kds-otp-digit-bg-filled: var(--kds-color-background-elevated);
326
360
 
327
361
  /* Modal Base */
328
- --kds-modal-bg: #FFFFFF;
362
+ --kds-modal-bg: var(--kds-color-background-paper);
329
363
  --kds-modal-padding: var(--kds-spacing-6);
330
364
  --kds-modal-padding-mobile: var(--kds-spacing-4);
331
365
  --kds-modal-border-radius: var(--kds-radius-lg);
332
- --kds-modal-shadow: var(--kds-shadow-elevation-4);
366
+ --kds-modal-shadow: var(--kds-shadow-4);
333
367
  --kds-modal-backdrop: rgba(0, 0, 0, 0.5);
334
368
  --kds-modal-max-width: 600px;
335
369
  --kds-modal-max-width-mobile: 95vw;
336
370
 
337
371
  /* Modal Content Colors */
338
- --kds-modal-title-color: #111827; /* gray-900 */
339
- --kds-modal-text-color: #374151; /* gray-700 */
372
+ --kds-modal-title-color: var(--kds-color-text-primary);
373
+ --kds-modal-text-color: var(--kds-color-text-secondary);
340
374
  --kds-modal-icon-warning: var(--kds-color-warning-main);
341
375
  --kds-modal-icon-error: var(--kds-color-error-main);
342
376
  --kds-modal-icon-success: var(--kds-color-success-main);
@@ -347,22 +381,22 @@
347
381
  --kds-welcome-gradient-end: var(--kds-color-primary-dark); /* Khipu purple dark */
348
382
 
349
383
  /* 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;
384
+ --kds-bank-item-border: var(--kds-border-light);
385
+ --kds-bank-item-border-hover: var(--kds-border-light);
386
+ --kds-bank-item-border-selected: var(--kds-color-info-main);
387
+ --kds-bank-item-bg-selected: var(--kds-alert-info-bg);
388
+ --kds-bank-item-bg-hover: var(--kds-color-background-elevated);
355
389
 
356
390
  /* Signature Pad */
357
- --kds-signature-border: #D1D5DB;
358
- --kds-signature-bg: #FFFFFF;
391
+ --kds-signature-border: var(--kds-border-light);
392
+ --kds-signature-bg: var(--kds-color-background-paper);
359
393
  --kds-signature-line-color: #000000;
360
394
 
361
395
  /* Contract Accordion */
362
- --kds-accordion-border: #E5E7EB;
363
- --kds-accordion-bg: #F9FAFB;
364
- --kds-accordion-bg-open: #FFFFFF;
365
- --kds-accordion-header-bg: #F3F4F6;
396
+ --kds-accordion-border: var(--kds-border-light);
397
+ --kds-accordion-bg: var(--kds-color-background-elevated);
398
+ --kds-accordion-bg-open: var(--kds-color-background-paper);
399
+ --kds-accordion-header-bg: var(--kds-color-background-elevated);
366
400
 
367
401
  /* Onboarding Container */
368
402
  --kds-onboarding-max-width: 800px;
@@ -420,9 +454,10 @@ footer {
420
454
  * Source: design.khipu.com and Material Design 3 specifications
421
455
  */
422
456
 
423
- /* ========================================
424
- Button Overrides (Material Design 3)
425
- ======================================== */
457
+
458
+ :has(>main) {
459
+ background-color: transparent !important;
460
+ }
426
461
 
427
462
  /* ========================================
428
463
  KHIPU BUTTON SYSTEM
@@ -1335,100 +1370,24 @@ nav.primary button {
1335
1370
  }
1336
1371
 
1337
1372
  /* ========================================
1338
- Drawer/Sidenav (Mobile Navigation)
1373
+ Flex Layout System (Body + Container + Sidebar)
1339
1374
  ======================================== */
1340
1375
 
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;
1376
+ /* Body flex-column layout */
1377
+ body.kds-layout {
1355
1378
  display: flex;
1356
1379
  flex-direction: column;
1380
+ min-height: 100vh;
1381
+ margin: 0;
1357
1382
  }
1358
1383
 
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 {
1384
+ /* Layout container (flex-row) - below header */
1385
+ .kds-layout-container {
1397
1386
  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
- }
1387
+ flex-direction: row;
1388
+ flex: 1;
1389
+ overflow: hidden;
1430
1390
  }
1431
-
1432
1391
  /* ========================================
1433
1392
  Footer Customization
1434
1393
  ======================================== */
@@ -3284,4 +3243,333 @@ dialog.modal::backdrop {
3284
3243
  margin-top: var(--kds-spacing-6);
3285
3244
  }
3286
3245
 
3246
+ /* ===========================================================================
3247
+
3248
+ /* ============================================
3249
+ SIDEBAR NAVIGATION (Simple & Sticky)
3250
+ ============================================ */
3251
+
3252
+ /* Page layout - Flexbox horizontal */
3253
+ .kds-page-layout {
3254
+ display: flex;
3255
+ min-height: 100vh;
3256
+ }
3257
+
3258
+ /* Sidebar - Sticky flotante a la izquierda */
3259
+ .kds-sidebar {
3260
+ width: var(--kds-spacing-sidebar-width);
3261
+ background: var(--kds-color-background-paper);
3262
+ border: 1px solid var(--kds-color-divider);
3263
+ border-radius: var(--kds-radius-lg);
3264
+ flex-shrink: 0;
3265
+ position: sticky;
3266
+ top: var(--kds-spacing-4);
3267
+ margin: var(--kds-spacing-4);
3268
+ height: fit-content;
3269
+ overflow-y: auto;
3270
+ box-shadow: var(--kds-shadow-2);
3271
+ }
3272
+
3273
+ /* Sidebar Header */
3274
+ .kds-sidebar-header {
3275
+ display: flex;
3276
+ align-items: center;
3277
+ gap: var(--kds-spacing-3);
3278
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
3279
+ border-bottom: 1px solid var(--kds-color-divider);
3280
+ border-radius: var(--kds-radius-lg) var(--kds-radius-lg) 0 0;
3281
+ cursor: pointer;
3282
+ position: relative; /* ← Para anclar dropdown */
3283
+ transition: background var(--kds-transition-shorter) var(--kds-easing-standard);
3284
+ }
3285
+
3286
+ .kds-sidebar-header:hover {
3287
+ background: var(--kds-color-action-hover);
3288
+ }
3289
+
3290
+ /* Avatar circular */
3291
+ .kds-sidebar-avatar {
3292
+ width: var(--kds-spacing-sidebar-icon-container-size);
3293
+ height: var(--kds-spacing-sidebar-icon-container-size);
3294
+ border-radius: var(--kds-radius-full);
3295
+ background: var(--kds-color-error-main);
3296
+ color: var(--kds-color-background-paper);
3297
+ display: flex;
3298
+ align-items: center;
3299
+ justify-content: center;
3300
+ font-size: var(--kds-font-size-lg);
3301
+ font-weight: var(--kds-font-weight-bold);
3302
+ flex-shrink: 0;
3303
+ }
3304
+
3305
+ /* Header text */
3306
+ .kds-sidebar-header-text {
3307
+ flex: 1;
3308
+ overflow: hidden;
3309
+ }
3310
+
3311
+ .kds-sidebar-title {
3312
+ font-size: var(--kds-font-size-base);
3313
+ font-weight: var(--kds-font-weight-semibold);
3314
+ color: var(--kds-color-text-primary);
3315
+ white-space: nowrap;
3316
+ overflow: hidden;
3317
+ text-overflow: ellipsis;
3318
+ }
3319
+
3320
+ .kds-sidebar-subtitle {
3321
+ font-size: var(--kds-font-size-sm);
3322
+ color: var(--kds-color-text-secondary);
3323
+ white-space: nowrap;
3324
+ overflow: hidden;
3325
+ text-overflow: ellipsis;
3326
+ }
3327
+
3328
+ /* Dropdown icon */
3329
+ .kds-sidebar-dropdown-icon {
3330
+ font-size: var(--kds-spacing-sidebar-icon-size);
3331
+ color: var(--kds-color-text-secondary);
3332
+ flex-shrink: 0;
3333
+ transition: transform var(--kds-transition-shorter) var(--kds-easing-standard);
3334
+ }
3335
+
3336
+ /* Header Dropdown - Flotante */
3337
+ .kds-sidebar-header-dropdown {
3338
+ position: absolute;
3339
+ top: 100%;
3340
+ left: 0;
3341
+ right: 0;
3342
+ z-index: var(--kds-z-index-drawer);
3343
+ opacity: 0;
3344
+ visibility: hidden;
3345
+ pointer-events: none;
3346
+ transform: translateY(calc(var(--kds-spacing-1) * -1));
3347
+ transition: all var(--kds-transition-shorter) var(--kds-easing-standard);
3348
+ }
3349
+
3350
+ .kds-sidebar-header-dropdown.kds-dropdown-open {
3351
+ opacity: 1;
3352
+ visibility: visible;
3353
+ pointer-events: auto;
3354
+ transform: translateY(0);
3355
+ }
3356
+
3357
+ /* Navigation */
3358
+ .kds-sidebar-nav {
3359
+ padding: var(--kds-spacing-2) 0;
3360
+ flex-direction: column;
3361
+ align-items: flex-start;
3362
+ }
3363
+
3364
+ /* Nav item */
3365
+ .kds-sidebar-nav-item {
3366
+ display: flex;
3367
+ align-items: center;
3368
+ gap: var(--kds-spacing-1);
3369
+ padding: var(--kds-spacing-1) var(--kds-spacing-2);
3370
+ color: var(--kds-color-text-primary);
3371
+ text-decoration: none;
3372
+ position: relative;
3373
+ transition: background var(--kds-transition-shorter) var(--kds-easing-standard);
3374
+ width: 100%;
3375
+ justify-content: flex-start;
3376
+ }
3377
+
3378
+ .kds-sidebar-nav-item:hover {
3379
+ background: var(--kds-color-action-hover);
3380
+ }
3381
+
3382
+ /* Nav item icon */
3383
+ .kds-sidebar-nav-item i {
3384
+ font-size: var(--kds-spacing-sidebar-icon-size);
3385
+ color: var(--kds-color-text-secondary);
3386
+ }
3387
+
3388
+ /* Nav item text */
3389
+ .kds-sidebar-nav-item span {
3390
+ font-size: var(--kds-font-size-base);
3391
+ font-weight: var(--kds-font-weight-medium);
3392
+ }
3393
+
3394
+ /* Active state - barra morada a la izquierda */
3395
+ .kds-sidebar-nav-item.active {
3396
+ background: var(--kds-color-primary-hover);
3397
+ }
3398
+
3399
+ .kds-sidebar-nav-item.active::before {
3400
+ content: '';
3401
+ position: absolute;
3402
+ left: 0;
3403
+ top: 0;
3404
+ bottom: 0;
3405
+ width: calc(var(--kds-spacing-1) / 2);
3406
+ background: var(--kds-color-primary-main);
3407
+ }
3408
+
3409
+ .kds-sidebar-nav-item.active i,
3410
+ .kds-sidebar-nav-item.active span {
3411
+ color: var(--kds-color-primary-main);
3412
+ }
3413
+
3414
+ /* Main content */
3415
+ .kds-main-content {
3416
+ flex: 1;
3417
+ padding: var(--kds-spacing-8);
3418
+ overflow-y: auto;
3419
+ }
3420
+
3421
+ /* ============================================
3422
+ MOBILE RESPONSIVE SIDEBAR
3423
+ ============================================ */
3424
+
3425
+ /* Mobile Topbar - oculto en desktop */
3426
+ .kds-mobile-topbar {
3427
+ display: none;
3428
+ }
3429
+
3430
+ /* Barra superior mobile del sidebar - oculta en desktop */
3431
+ .kds-sidebar-mobile-header {
3432
+ display: none;
3433
+ }
3434
+
3435
+ /* Botón cerrar sidebar */
3436
+ .kds-sidebar-close-btn {
3437
+ border: none;
3438
+ background: transparent;
3439
+ border-radius: var(--kds-radius-sm);
3440
+ cursor: pointer;
3441
+ padding: 0;
3442
+ }
3443
+
3444
+ .kds-sidebar-close-btn:hover {
3445
+ background: var(--kds-color-action-hover);
3446
+ }
3447
+
3448
+ .kds-sidebar-close-btn i {
3449
+ font-size: var(--kds-spacing-sidebar-icon-size);
3450
+ color: var(--kds-color-text-primary);
3451
+ }
3452
+
3453
+ /* Botón hamburger */
3454
+ .kds-hamburger-btn {
3455
+ width: var(--kds-spacing-sidebar-icon-container-size);
3456
+ height: var(--kds-spacing-sidebar-icon-container-size);
3457
+ border: none;
3458
+ background: transparent;
3459
+ border-radius: var(--kds-radius-sm);
3460
+ cursor: pointer;
3461
+ transition: background-color var(--kds-transition-shorter) var(--kds-easing-standard);
3462
+ }
3463
+
3464
+ .kds-hamburger-btn:hover {
3465
+ background: var(--kds-color-action-hover);
3466
+ }
3467
+
3468
+ .kds-hamburger-btn i {
3469
+ font-size: var(--kds-spacing-sidebar-icon-size);
3470
+ color: var(--kds-color-text-primary);
3471
+ }
3472
+
3473
+ /* Mobile (≤ 768px) */
3474
+ @media (max-width: 768px) {
3475
+ /* Mostrar topbar */
3476
+ .kds-mobile-topbar {
3477
+ display: flex;
3478
+ align-items: center;
3479
+ gap: var(--kds-spacing-2);
3480
+ position: fixed;
3481
+ top: 0;
3482
+ left: 0;
3483
+ right: 0;
3484
+ height: var(--kds-spacing-7);
3485
+ padding: 0 var(--kds-spacing-2);
3486
+ background: var(--kds-color-background-paper);
3487
+ border-bottom: 1px solid var(--kds-color-divider);
3488
+ z-index: var(--kds-z-index-appbar);
3489
+ font-size: var(--kds-font-size-lg);
3490
+ font-weight: var(--kds-font-weight-semibold);
3491
+ }
3492
+
3493
+ /* Layout con espacio para topbar */
3494
+ .kds-page-layout {
3495
+ padding-top: var(--kds-spacing-7);
3496
+ }
3497
+
3498
+ /* Sidebar = drawer full-width */
3499
+ .kds-sidebar {
3500
+ position: fixed;
3501
+ top: 0;
3502
+ left: 0;
3503
+ bottom: 0;
3504
+ width: 100vw;
3505
+ margin: 0;
3506
+ height: 100%;
3507
+ transform: translateX(-100%);
3508
+ transition: transform var(--kds-transition-standard) var(--kds-easing-ease-out);
3509
+ z-index: var(--kds-z-index-drawer);
3510
+ border-radius: 0;
3511
+ }
3512
+
3513
+ /* Barra superior mobile visible */
3514
+ .kds-sidebar-mobile-header {
3515
+ display: flex;
3516
+ align-items: center;
3517
+ justify-content: space-between;
3518
+ height: var(--kds-spacing-7);
3519
+ padding: 0 var(--kds-spacing-2);
3520
+ background: var(--kds-color-background-paper);
3521
+ border-bottom: 1px solid var(--kds-color-divider);
3522
+ font-size: var(--kds-font-size-lg);
3523
+ font-weight: var(--kds-font-weight-semibold);
3524
+ color: var(--kds-color-text-primary);
3525
+ }
3526
+
3527
+ /* Sidebar abierto */
3528
+ .kds-sidebar-open {
3529
+ transform: translateX(0);
3530
+ }
3531
+
3532
+ /* Main content full-width */
3533
+ .kds-main-content {
3534
+ margin-left: 0;
3535
+ }
3536
+ }
3537
+
3538
+ /* ============================================
3539
+ DEMO PAGE STYLES
3540
+ ============================================ */
3541
+
3542
+ .demo-card {
3543
+ background: var(--kds-color-background-paper);
3544
+ border: 1px solid var(--kds-color-divider);
3545
+ border-radius: var(--kds-radius-lg);
3546
+ padding: var(--kds-spacing-6);
3547
+ margin-bottom: var(--kds-spacing-6);
3548
+ }
3549
+
3550
+ .code-block {
3551
+ background: var(--kds-color-background-elevated);
3552
+ border: 1px solid var(--kds-color-divider);
3553
+ border-radius: var(--kds-radius-md);
3554
+ padding: var(--kds-spacing-4);
3555
+ font-family: var(--kds-font-family-mono);
3556
+ font-size: var(--kds-font-size-sm);
3557
+ line-height: var(--kds-line-height-relaxed);
3558
+ white-space: pre-wrap;
3559
+ word-wrap: break-word;
3560
+ overflow-x: auto;
3561
+ color: var(--kds-color-text-primary);
3562
+ }
3563
+
3564
+ .kds-text-secondary-color {
3565
+ color: var(--kds-color-text-secondary);
3566
+ }
3567
+
3568
+ .kds-main-content > .kds-body-large {
3569
+ margin-bottom: var(--kds-spacing-6);
3570
+ }
3571
+
3572
+ .kds-main-content > .demo-card ul {
3573
+ line-height: var(--kds-line-height-relaxed);
3574
+ }
3287
3575