@livenetworks/ashlar 2.1.11 → 2.1.13

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.
Files changed (76) hide show
  1. package/README.md +25 -2
  2. package/components/COMPONENTS.md +82 -78
  3. package/components/ln-accordion/ln-accordion.js +1 -1
  4. package/components/ln-ajax/ln-ajax.js +1 -1
  5. package/components/ln-api-connector/ln-api-connector.js +1 -1
  6. package/components/ln-api-queue/ln-api-queue.js +1 -1
  7. package/components/ln-autosave/ln-autosave.js +1 -1
  8. package/components/ln-chart/ln-chart.js +1 -1
  9. package/components/ln-circular-progress/ln-circular-progress.js +1 -1
  10. package/components/ln-confirm/ln-confirm.js +1 -1
  11. package/components/ln-core/README.md +25 -69
  12. package/components/ln-core/events.js +5 -2
  13. package/components/ln-core/index.js +1 -1
  14. package/components/ln-core/lifecycle.js +25 -44
  15. package/components/ln-core/reactive.js +0 -59
  16. package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -1
  17. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  18. package/components/ln-data-store/ln-data-store.js +1 -1
  19. package/components/ln-date/ln-date.js +1 -1
  20. package/components/ln-debug/ln-debug.js +1 -1
  21. package/components/ln-debug/ln-debug.schema.json +28 -28
  22. package/components/ln-debug/src/debug-verifier.js +24 -30
  23. package/components/ln-debug/src/ln-debug.js +3 -11
  24. package/components/ln-dropdown/ln-dropdown.js +1 -1
  25. package/components/ln-editor/ln-editor.js +1 -1
  26. package/components/ln-external-links/ln-external-links.js +1 -1
  27. package/components/ln-filter/ln-filter.js +1 -1
  28. package/components/ln-filter/src/ln-filter.js +3 -1
  29. package/components/ln-form/ln-form.js +1 -1
  30. package/components/ln-icon/ln-icon.js +1 -1
  31. package/components/ln-include/ln-include.js +1 -1
  32. package/components/ln-key/ln-key.js +1 -1
  33. package/components/ln-link/ln-link.js +1 -1
  34. package/components/ln-list/ln-list.js +1 -1
  35. package/components/ln-modal/ln-modal.js +1 -1
  36. package/components/ln-nav/ln-nav.js +1 -1
  37. package/components/ln-number/ln-number.js +1 -1
  38. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  39. package/components/ln-options/ln-options.js +1 -1
  40. package/components/ln-persist/ln-persist.js +1 -1
  41. package/components/ln-picklist/ln-picklist.js +1 -1
  42. package/components/ln-popover/ln-popover.js +1 -1
  43. package/components/ln-progress/ln-progress.js +1 -1
  44. package/components/ln-router/ln-router.js +1 -1
  45. package/components/ln-scroll/ln-scroll.js +1 -1
  46. package/components/ln-search/ln-search.js +1 -1
  47. package/components/ln-slug/ln-slug.js +1 -1
  48. package/components/ln-sort/ln-sort.js +1 -1
  49. package/components/ln-sortable/ln-sortable.js +1 -1
  50. package/components/ln-stat/ln-stat.js +1 -1
  51. package/components/ln-table/ln-table.js +1 -1
  52. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  53. package/components/ln-tabs/ln-tabs.js +1 -1
  54. package/components/ln-time/ln-time.js +1 -1
  55. package/components/ln-toast/ln-toast.js +1 -1
  56. package/components/ln-toggle/ln-toggle.js +1 -1
  57. package/components/ln-tooltip/ln-tooltip.js +1 -1
  58. package/components/ln-translations/ln-translations.js +1 -1
  59. package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -1
  60. package/components/ln-upload/ln-upload.js +1 -1
  61. package/components/ln-validate/ln-validate.js +1 -1
  62. package/components/ln-websocket-connector/ln-websocket-connector.js +1 -1
  63. package/package.json +95 -85
  64. package/theme/README.md +73 -0
  65. package/theme/components/_table.scss +1 -2
  66. package/theme/config/_density.scss +104 -191
  67. package/theme/config/mixins/_avatar.scss +2 -2
  68. package/theme/config/mixins/_card.scss +2 -5
  69. package/theme/config/mixins/_form.scss +26 -39
  70. package/theme/config/mixins/_nav.scss +4 -4
  71. package/theme/config/mixins/_spacing.scss +4 -4
  72. package/theme/config/mixins/_table.scss +9 -33
  73. package/theme/tailwind/components.css +1661 -0
  74. package/theme/tailwind/entry.css +3 -0
  75. package/theme/tailwind/theme.css +23 -0
  76. package/web-types.json +1 -1
@@ -0,0 +1,1661 @@
1
+ /* ==========================================================================
2
+ ln-ashlar Tailwind v4 Component Layer
3
+ ==========================================================================
4
+ Clean, modern Tailwind UI style definitions for Ashlar components.
5
+ Styled with pure Tailwind aesthetics (Inter / Slate / Indigo).
6
+ ========================================================================== */
7
+
8
+ /* --------------------------------------------------------------------------
9
+ 0. Base Typography, Resets & Icons
10
+ -------------------------------------------------------------------------- */
11
+ body {
12
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
13
+ background-color: #f8fafc; /* slate-50 */
14
+ color: #0f172a; /* slate-900 */
15
+ line-height: 1.5;
16
+ -webkit-font-smoothing: antialiased;
17
+ }
18
+
19
+ [data-mode="dark"] body,
20
+ body.dark {
21
+ background-color: #020617; /* slate-950 */
22
+ color: #f8fafc; /* slate-50 */
23
+ }
24
+
25
+ code, kbd, samp, pre {
26
+ font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
27
+ }
28
+
29
+ code {
30
+ font-size: 0.8125rem;
31
+ background-color: #f1f5f9;
32
+ color: #4f46e5;
33
+ padding: 0.125rem 0.375rem;
34
+ border-radius: 0.25rem;
35
+ border: 1px solid #e2e8f0;
36
+ }
37
+
38
+ [data-mode="dark"] code {
39
+ background-color: #1e293b;
40
+ color: #818cf8;
41
+ border-color: #334155;
42
+ }
43
+
44
+ .ln-icon {
45
+ width: 1.25rem;
46
+ height: 1.25rem;
47
+ display: inline-block;
48
+ vertical-align: middle;
49
+ stroke: currentColor;
50
+ fill: none;
51
+ stroke-width: 2;
52
+ stroke-linecap: round;
53
+ stroke-linejoin: round;
54
+ flex-shrink: 0;
55
+ }
56
+
57
+ svg.ln-icon.ln-icon--sm, .ln-icon--sm, .icon-sm {
58
+ width: 1rem;
59
+ height: 1rem;
60
+ }
61
+
62
+ svg.ln-icon.ln-icon--lg, .ln-icon--lg, .icon-lg {
63
+ width: 1.5rem;
64
+ height: 1.5rem;
65
+ }
66
+
67
+ svg.ln-icon.ln-icon--xl, .ln-icon--xl, .icon-xl {
68
+ width: 4rem;
69
+ height: 4rem;
70
+ }
71
+
72
+ svg.ln-icon.ln-icon--2xl, .ln-icon--2xl, .icon-2xl {
73
+ width: 5rem;
74
+ height: 5rem;
75
+ }
76
+
77
+ /* --------------------------------------------------------------------------
78
+ 1. App Shell, Header, Sidebar & Footer
79
+ -------------------------------------------------------------------------- */
80
+ html:has(.app-wrapper),
81
+ body:has(.app-wrapper) {
82
+ height: 100%;
83
+ overflow: hidden;
84
+ }
85
+
86
+ .app-wrapper {
87
+ display: flex;
88
+ flex-direction: column;
89
+ height: 100dvh;
90
+ overflow: hidden;
91
+ background-color: #f8fafc;
92
+ }
93
+
94
+ [data-mode="dark"] .app-wrapper {
95
+ background-color: #020617;
96
+ }
97
+
98
+ .app-header {
99
+ position: fixed;
100
+ top: 0;
101
+ left: 0;
102
+ right: 0;
103
+ height: 3.5rem;
104
+ z-index: 40;
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: space-between;
108
+ padding: 0 1.25rem;
109
+ background-color: rgba(255, 255, 255, 0.88);
110
+ backdrop-filter: blur(8px);
111
+ border-bottom: 1px solid #e2e8f0; /* slate-200 */
112
+ }
113
+
114
+ [data-mode="dark"] .app-header {
115
+ background-color: rgba(15, 23, 42, 0.88); /* slate-900 */
116
+ border-bottom-color: #1e293b; /* slate-800 */
117
+ }
118
+
119
+ .app-header .header-left {
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 0.75rem;
123
+ }
124
+
125
+ .app-header .header-left h1 {
126
+ font-size: 1.125rem;
127
+ font-weight: 700;
128
+ color: #0f172a;
129
+ margin: 0;
130
+ letter-spacing: -0.02em;
131
+ }
132
+
133
+ [data-mode="dark"] .app-header .header-left h1 {
134
+ color: #f8fafc;
135
+ }
136
+
137
+ .app-header .header-right {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 0.75rem;
141
+ }
142
+
143
+ .app-header .header-actions {
144
+ display: flex;
145
+ align-items: center;
146
+ gap: 0.5rem;
147
+ position: relative;
148
+ }
149
+
150
+ /* Main inner viewport */
151
+ .app-main {
152
+ display: flex;
153
+ flex-direction: column;
154
+ flex: 1 1 0%;
155
+ margin-top: 3.5rem;
156
+ height: calc(100dvh - 3.5rem);
157
+ overflow: hidden;
158
+ transition: padding 0.2s ease;
159
+ }
160
+
161
+ @media (min-width: 768px) {
162
+ .app-main:has(.app-sidebar[data-ln-toggle="open"]) {
163
+ padding-left: 16rem;
164
+ }
165
+ }
166
+
167
+ .app-main > section {
168
+ flex: 1 1 0%;
169
+ min-height: 0;
170
+ overflow-y: auto;
171
+ padding: 1.5rem;
172
+ width: 100%;
173
+ }
174
+
175
+ .app-content-wrapper {
176
+ max-width: 1200px;
177
+ margin: 0 auto;
178
+ display: flex;
179
+ flex-direction: column;
180
+ gap: 1.5rem;
181
+ }
182
+
183
+ .app-footer {
184
+ height: 2.5rem;
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: space-between;
188
+ padding: 0 1.5rem;
189
+ border-top: 1px solid #e2e8f0;
190
+ background-color: #ffffff;
191
+ font-size: 0.75rem;
192
+ color: #64748b;
193
+ flex-shrink: 0;
194
+ }
195
+
196
+ [data-mode="dark"] .app-footer {
197
+ background-color: #0f172a;
198
+ border-top-color: #1e293b;
199
+ color: #94a3b8;
200
+ }
201
+
202
+ /* Sidebar */
203
+ .app-sidebar, aside.app-sidebar {
204
+ position: fixed;
205
+ top: 3.5rem;
206
+ left: 0;
207
+ bottom: 0;
208
+ width: 16rem;
209
+ z-index: 30;
210
+ display: flex;
211
+ flex-direction: column;
212
+ background-color: #ffffff;
213
+ border-right: 1px solid #e2e8f0;
214
+ padding: 1rem;
215
+ gap: 1rem;
216
+ overflow-y: auto;
217
+ transition: transform 0.2s ease;
218
+ }
219
+
220
+ [data-mode="dark"] .app-sidebar,
221
+ [data-mode="dark"] aside.app-sidebar {
222
+ background-color: #0f172a; /* slate-900 */
223
+ border-right-color: #1e293b;
224
+ }
225
+
226
+ @media (max-width: 767px) {
227
+ .app-sidebar[data-ln-toggle="close"],
228
+ aside.app-sidebar[data-ln-toggle="close"] {
229
+ transform: translateX(-100%);
230
+ }
231
+ .app-sidebar[data-ln-toggle="open"],
232
+ aside.app-sidebar[data-ln-toggle="open"] {
233
+ transform: translateX(0);
234
+ }
235
+ }
236
+
237
+ .app-sidebar header {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: 0.75rem;
241
+ padding-bottom: 0.75rem;
242
+ border-bottom: 1px solid #e2e8f0;
243
+ }
244
+
245
+ [data-mode="dark"] .app-sidebar header {
246
+ border-bottom-color: #1e293b;
247
+ }
248
+
249
+ .app-sidebar header .app-name {
250
+ font-size: 0.875rem;
251
+ font-weight: 700;
252
+ color: #0f172a;
253
+ letter-spacing: -0.02em;
254
+ }
255
+
256
+ [data-mode="dark"] .app-sidebar header .app-name {
257
+ color: #f8fafc;
258
+ }
259
+
260
+ .app-sidebar header .logo {
261
+ height: 2rem;
262
+ width: auto;
263
+ align-self: flex-start;
264
+ }
265
+
266
+ .logo-dark { display: block; }
267
+ .logo-light { display: none; }
268
+ [data-mode="dark"] .logo-dark { display: none; }
269
+ [data-mode="dark"] .logo-light { display: block; }
270
+
271
+ .app-sidebar header search,
272
+ .app-sidebar header label.search {
273
+ display: flex;
274
+ align-items: center;
275
+ gap: 0.5rem;
276
+ padding: 0.375rem 0.625rem;
277
+ background-color: #f1f5f9; /* slate-100 */
278
+ border: 1px solid #e2e8f0;
279
+ border-radius: 0.5rem;
280
+ color: #64748b;
281
+ }
282
+
283
+ [data-mode="dark"] .app-sidebar header search,
284
+ [data-mode="dark"] .app-sidebar header label.search {
285
+ background-color: #1e293b;
286
+ border-color: #334155;
287
+ color: #94a3b8;
288
+ }
289
+
290
+ .app-sidebar header search input {
291
+ border: none;
292
+ background: transparent;
293
+ font-size: 0.8125rem;
294
+ outline: none;
295
+ width: 100%;
296
+ color: inherit;
297
+ }
298
+
299
+ .app-sidebar footer {
300
+ margin-top: auto;
301
+ padding-top: 0.75rem;
302
+ border-top: 1px solid #e2e8f0;
303
+ font-size: 0.75rem;
304
+ color: #94a3b8;
305
+ }
306
+
307
+ [data-mode="dark"] .app-sidebar footer {
308
+ border-top-color: #1e293b;
309
+ color: #64748b;
310
+ }
311
+
312
+ /* --------------------------------------------------------------------------
313
+ 2. Navigation Menu
314
+ -------------------------------------------------------------------------- */
315
+ nav.nav .nav-section {
316
+ font-size: 0.6875rem;
317
+ text-transform: uppercase;
318
+ letter-spacing: 0.05em;
319
+ font-weight: 700;
320
+ color: #94a3b8;
321
+ margin: 1.25rem 0 0.5rem 0.75rem;
322
+ }
323
+
324
+ [data-mode="dark"] nav.nav .nav-section {
325
+ color: #64748b;
326
+ }
327
+
328
+ nav.nav ul,
329
+ .app-sidebar nav ul {
330
+ list-style: none;
331
+ padding: 0;
332
+ margin: 0;
333
+ display: flex;
334
+ flex-direction: column;
335
+ gap: 0.125rem;
336
+ }
337
+
338
+ nav.nav a,
339
+ .app-sidebar nav a {
340
+ display: flex;
341
+ align-items: center;
342
+ gap: 0.625rem;
343
+ padding: 0.4375rem 0.75rem;
344
+ border-radius: 0.5rem;
345
+ font-size: 0.8125rem;
346
+ font-weight: 500;
347
+ color: #475569; /* slate-600 */
348
+ text-decoration: none;
349
+ transition: all 0.15s ease;
350
+ }
351
+
352
+ [data-mode="dark"] nav.nav a,
353
+ [data-mode="dark"] .app-sidebar nav a {
354
+ color: #94a3b8; /* slate-400 */
355
+ }
356
+
357
+ nav.nav a:hover,
358
+ .app-sidebar nav a:hover {
359
+ background-color: #f1f5f9;
360
+ color: #0f172a;
361
+ }
362
+
363
+ [data-mode="dark"] nav.nav a:hover,
364
+ [data-mode="dark"] .app-sidebar nav a:hover {
365
+ background-color: #1e293b;
366
+ color: #f8fafc;
367
+ }
368
+
369
+ nav.nav a[aria-current="page"],
370
+ nav.nav a.active,
371
+ .app-sidebar nav a[aria-current="page"],
372
+ .app-sidebar nav a.active {
373
+ background-color: #eef2ff; /* indigo-50 */
374
+ color: #4f46e5; /* indigo-600 */
375
+ font-weight: 600;
376
+ }
377
+
378
+ [data-mode="dark"] nav.nav a[aria-current="page"],
379
+ [data-mode="dark"] nav.nav a.active,
380
+ [data-mode="dark"] .app-sidebar nav a[aria-current="page"],
381
+ [data-mode="dark"] .app-sidebar nav a.active {
382
+ background-color: rgba(79, 70, 229, 0.15);
383
+ color: #818cf8; /* indigo-400 */
384
+ }
385
+
386
+ /* --------------------------------------------------------------------------
387
+ 3. Buttons & Interactive Controls
388
+ -------------------------------------------------------------------------- */
389
+ .btn, button.btn, button[type="button"], button[type="submit"] {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ gap: 0.5rem;
394
+ padding: 0.5rem 0.875rem;
395
+ font-size: 0.875rem;
396
+ font-weight: 500;
397
+ border-radius: 0.5rem;
398
+ border: 1px solid #cbd5e1; /* slate-300 */
399
+ background-color: #ffffff;
400
+ color: #334155; /* slate-700 */
401
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
402
+ cursor: pointer;
403
+ user-select: none;
404
+ transition: all 0.15s ease;
405
+ }
406
+
407
+ [data-mode="dark"] .btn,
408
+ [data-mode="dark"] button.btn,
409
+ [data-mode="dark"] button[type="button"],
410
+ [data-mode="dark"] button[type="submit"] {
411
+ background-color: #1e293b;
412
+ border-color: #334155;
413
+ color: #e2e8f0;
414
+ }
415
+
416
+ .btn:hover, button.btn:hover, button[type="button"]:hover, button[type="submit"]:hover {
417
+ background-color: #f8fafc;
418
+ border-color: #94a3b8;
419
+ color: #0f172a;
420
+ }
421
+
422
+ [data-mode="dark"] .btn:hover,
423
+ [data-mode="dark"] button.btn:hover,
424
+ [data-mode="dark"] button[type="button"]:hover,
425
+ [data-mode="dark"] button[type="submit"]:hover {
426
+ background-color: #334155;
427
+ color: #ffffff;
428
+ }
429
+
430
+ .btn:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
431
+ outline: 2px solid #4f46e5;
432
+ outline-offset: 2px;
433
+ }
434
+
435
+ /* Primary Button */
436
+ .btn-primary, button.btn-primary, button.btn.btn-primary {
437
+ background-color: #4f46e5; /* indigo-600 */
438
+ color: #ffffff;
439
+ border-color: #4f46e5;
440
+ }
441
+ .btn-primary:hover, button.btn-primary:hover {
442
+ background-color: #4338ca; /* indigo-700 */
443
+ border-color: #4338ca;
444
+ color: #ffffff;
445
+ }
446
+
447
+ /* Secondary Button */
448
+ .btn-secondary, button.btn-secondary {
449
+ background-color: #f1f5f9;
450
+ color: #334155;
451
+ border-color: #e2e8f0;
452
+ }
453
+ .btn-secondary:hover, button.btn-secondary:hover {
454
+ background-color: #e2e8f0;
455
+ color: #0f172a;
456
+ }
457
+
458
+ /* Danger Button */
459
+ .btn-danger, button.btn-danger, .btn-error, button.btn-error {
460
+ background-color: #ef4444; /* red-500 */
461
+ color: #ffffff;
462
+ border-color: #ef4444;
463
+ }
464
+ .btn-danger:hover, button.btn-danger:hover {
465
+ background-color: #dc2626; /* red-600 */
466
+ border-color: #dc2626;
467
+ color: #ffffff;
468
+ }
469
+
470
+ /* --------------------------------------------------------------------------
471
+ 4. Badges & Chips
472
+ -------------------------------------------------------------------------- */
473
+ .badge, span.badge, .chip, span.chip {
474
+ display: inline-flex;
475
+ align-items: center;
476
+ gap: 0.375rem;
477
+ padding: 0.125rem 0.625rem;
478
+ font-size: 0.75rem;
479
+ font-weight: 600;
480
+ border-radius: 9999px;
481
+ border: 1px solid #e2e8f0;
482
+ background-color: #f1f5f9;
483
+ color: #475569;
484
+ }
485
+
486
+ [data-mode="dark"] .badge,
487
+ [data-mode="dark"] span.badge,
488
+ [data-mode="dark"] .chip,
489
+ [data-mode="dark"] span.chip {
490
+ background-color: #1e293b;
491
+ border-color: #334155;
492
+ color: #94a3b8;
493
+ }
494
+
495
+ .badge.success, span.badge.success {
496
+ background-color: #ecfdf5; /* emerald-50 */
497
+ border-color: #a7f3d0;
498
+ color: #059669; /* emerald-600 */
499
+ }
500
+ [data-mode="dark"] .badge.success {
501
+ background-color: rgba(5, 150, 105, 0.15);
502
+ border-color: rgba(5, 150, 105, 0.3);
503
+ color: #34d399;
504
+ }
505
+
506
+ .badge.error, span.badge.error, .badge.danger {
507
+ background-color: #fef2f2; /* red-50 */
508
+ border-color: #fecaca;
509
+ color: #dc2626; /* red-600 */
510
+ }
511
+ [data-mode="dark"] .badge.error {
512
+ background-color: rgba(220, 38, 38, 0.15);
513
+ border-color: rgba(220, 38, 38, 0.3);
514
+ color: #f87171;
515
+ }
516
+
517
+ .badge.warning, span.badge.warning {
518
+ background-color: #fffbeb; /* amber-50 */
519
+ border-color: #fde68a;
520
+ color: #d97706; /* amber-600 */
521
+ }
522
+ [data-mode="dark"] .badge.warning {
523
+ background-color: rgba(217, 119, 6, 0.15);
524
+ border-color: rgba(217, 119, 6, 0.3);
525
+ color: #fbbf24;
526
+ }
527
+
528
+ .badge.info, span.badge.info {
529
+ background-color: #eff6ff; /* blue-50 */
530
+ border-color: #bfdbfe;
531
+ color: #2563eb; /* blue-600 */
532
+ }
533
+ [data-mode="dark"] .badge.info {
534
+ background-color: rgba(37, 99, 235, 0.15);
535
+ border-color: rgba(37, 99, 235, 0.3);
536
+ color: #60a5fa;
537
+ }
538
+
539
+ /* --------------------------------------------------------------------------
540
+ 5. Cards & Section Cards
541
+ -------------------------------------------------------------------------- */
542
+ .section-card, .card {
543
+ background-color: #ffffff;
544
+ border: 1px solid #e2e8f0;
545
+ border-radius: 0.75rem;
546
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05);
547
+ margin-bottom: 1.5rem;
548
+ overflow: hidden;
549
+ }
550
+
551
+ [data-mode="dark"] .section-card,
552
+ [data-mode="dark"] .card {
553
+ background-color: #0f172a;
554
+ border-color: #1e293b;
555
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.3);
556
+ }
557
+
558
+ .section-card > header,
559
+ .card > header {
560
+ display: flex;
561
+ align-items: center;
562
+ justify-content: space-between;
563
+ padding: 1rem 1.25rem;
564
+ border-bottom: 1px solid #f1f5f9;
565
+ font-weight: 600;
566
+ font-size: 0.9375rem;
567
+ color: #0f172a;
568
+ }
569
+
570
+ [data-mode="dark"] .section-card > header,
571
+ [data-mode="dark"] .card > header {
572
+ border-bottom-color: #1e293b;
573
+ color: #f8fafc;
574
+ }
575
+
576
+ .section-card > header h2,
577
+ .section-card > header h3,
578
+ .card > header h2,
579
+ .card > header h3 {
580
+ margin: 0;
581
+ font-size: 1rem;
582
+ font-weight: 600;
583
+ }
584
+
585
+ .section-card > header .btn-demo-code {
586
+ display: inline-flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ width: 1.875rem;
590
+ height: 1.875rem;
591
+ border-radius: 0.375rem;
592
+ border: 1px solid #e2e8f0;
593
+ background: transparent;
594
+ color: #64748b;
595
+ padding: 0;
596
+ cursor: pointer;
597
+ transition: all 0.15s ease;
598
+ }
599
+
600
+ [data-mode="dark"] .section-card > header .btn-demo-code {
601
+ border-color: #334155;
602
+ color: #94a3b8;
603
+ }
604
+
605
+ .section-card > header .btn-demo-code:hover {
606
+ background-color: #f1f5f9;
607
+ color: #0f172a;
608
+ border-color: #cbd5e1;
609
+ }
610
+
611
+ [data-mode="dark"] .section-card > header .btn-demo-code:hover {
612
+ background-color: #1e293b;
613
+ color: #ffffff;
614
+ }
615
+
616
+ .section-card > header .btn-demo-code[aria-expanded="true"] {
617
+ color: #4f46e5;
618
+ border-color: #a5b4fc;
619
+ background-color: #eef2ff;
620
+ }
621
+
622
+ .section-card > main,
623
+ .card > main,
624
+ .card-body {
625
+ padding: 1.25rem;
626
+ }
627
+
628
+ .section-card > footer,
629
+ .card > footer {
630
+ display: flex;
631
+ align-items: center;
632
+ justify-content: flex-end;
633
+ padding: 0.875rem 1.25rem;
634
+ background-color: #f8fafc;
635
+ border-top: 1px solid #f1f5f9;
636
+ }
637
+
638
+ [data-mode="dark"] .section-card > footer,
639
+ [data-mode="dark"] .card > footer {
640
+ background-color: #0b1120;
641
+ border-top-color: #1e293b;
642
+ }
643
+
644
+ .demo-note {
645
+ font-size: 0.75rem;
646
+ color: #64748b;
647
+ margin-top: 0.5rem;
648
+ }
649
+
650
+ /* --------------------------------------------------------------------------
651
+ 5. Toggles & Collapsibles ([data-ln-toggle])
652
+ -------------------------------------------------------------------------- */
653
+ .collapsible {
654
+ display: grid;
655
+ grid-template-rows: 0fr;
656
+ transition: grid-template-rows 0.25s ease-out;
657
+ overflow: hidden;
658
+ }
659
+
660
+ .collapsible.open,
661
+ .collapsible[data-ln-toggle="open"] {
662
+ grid-template-rows: 1fr;
663
+ }
664
+
665
+ .collapsible > .collapsible-body,
666
+ .collapsible > article {
667
+ min-height: 0;
668
+ overflow: hidden;
669
+ }
670
+
671
+ /* Any toggle panel that is not open, not a collapsible animation, and not an aside sidebar is hidden */
672
+ [data-ln-toggle]:not([data-ln-toggle="open"]):not(.collapsible):not(aside) {
673
+ display: none !important;
674
+ }
675
+
676
+ /* Demo Grid Containers & Cards Showcase */
677
+ [id^="demo-"][id$="-cards"],
678
+ [id^="demo-accent-"],
679
+ #demo-tinted,
680
+ #demo-stacked,
681
+ #demo-secondary,
682
+ #demo-full-cards,
683
+ #demo-card-fields > main > div,
684
+ .demo-grid-2 {
685
+ display: grid;
686
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
687
+ gap: 1rem;
688
+ margin-top: 0.5rem;
689
+ }
690
+
691
+ [id^="demo-"] > article {
692
+ background-color: #ffffff;
693
+ border: 1px solid #e2e8f0;
694
+ border-radius: 0.75rem;
695
+ padding: 1.25rem;
696
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
697
+ }
698
+
699
+ [data-mode="dark"] [id^="demo-"] > article {
700
+ background-color: #0f172a;
701
+ border-color: #1e293b;
702
+ }
703
+
704
+ [id^="demo-"] > article h3,
705
+ [id^="demo-"] > article h4 {
706
+ margin: 0 0 0.375rem 0;
707
+ font-size: 0.9375rem;
708
+ font-weight: 600;
709
+ }
710
+
711
+ [id^="demo-"] > article p {
712
+ margin: 0;
713
+ font-size: 0.8125rem;
714
+ color: #64748b;
715
+ }
716
+
717
+ [data-mode="dark"] [id^="demo-"] > article p {
718
+ color: #94a3b8;
719
+ }
720
+
721
+ /* Accent Borders */
722
+ #demo-accent-top article {
723
+ border-top: 4px solid #4f46e5;
724
+ }
725
+ #demo-accent-top article.success { border-top-color: #10b981; }
726
+ #demo-accent-top article.error { border-top-color: #ef4444; }
727
+ #demo-accent-top article.warning { border-top-color: #f59e0b; }
728
+
729
+ #demo-accent-left article {
730
+ border-left: 4px solid #4f46e5;
731
+ }
732
+ #demo-accent-left article.success { border-left-color: #10b981; }
733
+ #demo-accent-left article.error { border-left-color: #ef4444; }
734
+ #demo-accent-left article.warning { border-left-color: #f59e0b; }
735
+
736
+ #demo-accent-bottom article {
737
+ border-bottom: 4px solid #4f46e5;
738
+ }
739
+ #demo-accent-bottom article.success { border-bottom-color: #10b981; }
740
+ #demo-accent-bottom article.error { border-bottom-color: #ef4444; }
741
+ #demo-accent-bottom article.warning { border-bottom-color: #f59e0b; }
742
+
743
+ /* --------------------------------------------------------------------------
744
+ 6. Dashboard #stats & Progress Bars
745
+ -------------------------------------------------------------------------- */
746
+ #stats ul {
747
+ display: grid;
748
+ grid-template-columns: repeat(1, minmax(0, 1fr));
749
+ gap: 1rem;
750
+ list-style: none;
751
+ padding: 0;
752
+ margin: 0 0 1.5rem 0;
753
+ }
754
+
755
+ @media (min-width: 640px) {
756
+ #stats ul {
757
+ grid-template-columns: repeat(2, minmax(0, 1fr));
758
+ }
759
+ }
760
+
761
+ @media (min-width: 1024px) {
762
+ #stats ul {
763
+ grid-template-columns: repeat(4, minmax(0, 1fr));
764
+ }
765
+ }
766
+
767
+ #stats li {
768
+ background-color: #ffffff;
769
+ border: 1px solid #e2e8f0;
770
+ border-radius: 0.75rem;
771
+ padding: 1.25rem;
772
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05);
773
+ }
774
+
775
+ [data-mode="dark"] #stats li {
776
+ background-color: #0f172a;
777
+ border-color: #1e293b;
778
+ }
779
+
780
+ #stats h3 {
781
+ font-size: 0.8125rem;
782
+ color: #64748b;
783
+ font-weight: 500;
784
+ margin: 0 0 0.25rem 0;
785
+ }
786
+
787
+ [data-mode="dark"] #stats h3 {
788
+ color: #94a3b8;
789
+ }
790
+
791
+ #stats strong {
792
+ font-size: 1.5rem;
793
+ font-weight: 700;
794
+ display: block;
795
+ color: #0f172a;
796
+ }
797
+
798
+ [data-mode="dark"] #stats strong {
799
+ color: #f8fafc;
800
+ }
801
+
802
+ .progress {
803
+ height: 0.375rem;
804
+ background-color: #f1f5f9;
805
+ border-radius: 9999px;
806
+ overflow: hidden;
807
+ margin-top: 0.625rem;
808
+ }
809
+
810
+ [data-mode="dark"] .progress {
811
+ background-color: #1e293b;
812
+ }
813
+
814
+ [data-ln-progress] {
815
+ height: 100%;
816
+ border-radius: 9999px;
817
+ background-color: #4f46e5;
818
+ transition: width 0.3s ease;
819
+ }
820
+
821
+ [data-ln-progress].success { background-color: #10b981; }
822
+ [data-ln-progress].warning { background-color: #f59e0b; }
823
+ [data-ln-progress].error { background-color: #ef4444; }
824
+
825
+ /* --------------------------------------------------------------------------
826
+ 7. Tables ([data-ln-table])
827
+ -------------------------------------------------------------------------- */
828
+ table, [data-ln-table] {
829
+ width: 100%;
830
+ border-collapse: collapse;
831
+ font-size: 0.875rem;
832
+ text-align: left;
833
+ }
834
+
835
+ table thead, [data-ln-table] thead {
836
+ background-color: #f8fafc;
837
+ border-bottom: 1px solid #e2e8f0;
838
+ }
839
+
840
+ [data-mode="dark"] table thead,
841
+ [data-mode="dark"] [data-ln-table] thead {
842
+ background-color: #1e293b;
843
+ border-bottom-color: #334155;
844
+ }
845
+
846
+ table th, [data-ln-table] th {
847
+ padding: 0.75rem 1rem;
848
+ font-size: 0.75rem;
849
+ font-weight: 600;
850
+ text-transform: uppercase;
851
+ letter-spacing: 0.05em;
852
+ color: #64748b;
853
+ }
854
+
855
+ [data-mode="dark"] table th,
856
+ [data-mode="dark"] [data-ln-table] th {
857
+ color: #94a3b8;
858
+ }
859
+
860
+ table td, [data-ln-table] td {
861
+ padding: 0.875rem 1rem;
862
+ border-bottom: 1px solid #f1f5f9;
863
+ color: #334155;
864
+ }
865
+
866
+ [data-mode="dark"] table td,
867
+ [data-mode="dark"] [data-ln-table] td {
868
+ border-bottom-color: #1e293b;
869
+ color: #cbd5e1;
870
+ }
871
+
872
+ table tbody tr:hover td,
873
+ [data-ln-table] tbody tr:hover td {
874
+ background-color: rgba(248, 250, 252, 0.75);
875
+ }
876
+
877
+ [data-mode="dark"] table tbody tr:hover td,
878
+ [data-mode="dark"] [data-ln-table] tbody tr:hover td {
879
+ background-color: rgba(30, 41, 59, 0.5);
880
+ }
881
+
882
+ .ln-table__toolbar,
883
+ [data-ln-table] > header {
884
+ display: flex;
885
+ align-items: center;
886
+ justify-content: space-between;
887
+ gap: 0.75rem;
888
+ padding: 0.75rem 1rem;
889
+ border-bottom: 1px solid #e2e8f0;
890
+ }
891
+
892
+ [data-mode="dark"] .ln-table__toolbar,
893
+ [data-mode="dark"] [data-ln-table] > header {
894
+ border-bottom-color: #334155;
895
+ }
896
+
897
+ .ln-table__toolbar :is(label, search),
898
+ [data-ln-table] > header :is(label, search) {
899
+ display: inline-flex;
900
+ align-items: center;
901
+ gap: 0.5rem;
902
+ position: relative;
903
+ width: auto;
904
+ }
905
+
906
+ .ln-table__toolbar :is(label, search) > input,
907
+ .ln-table__toolbar input[type="search"],
908
+ [data-ln-table] > header :is(label, search) > input {
909
+ display: inline-block;
910
+ width: 10rem;
911
+ max-width: 16rem;
912
+ }
913
+
914
+ /* --------------------------------------------------------------------------
915
+ 8. Forms & Inputs ([data-ln-form])
916
+ -------------------------------------------------------------------------- */
917
+ #demo-form-grid,
918
+ #demo-auto-submit,
919
+ #demo-input-states,
920
+ #demo-select-textarea,
921
+ #demo-focus-ring,
922
+ #demo-focus-border-thicken,
923
+ #demo-focus-combination,
924
+ #demo-focus-background-shift,
925
+ #demo-focus-accent-line,
926
+ #demo-focus-inset-shadow,
927
+ [id^="demo-focus-"],
928
+ .form-grid {
929
+ display: grid;
930
+ grid-template-columns: repeat(6, minmax(0, 1fr));
931
+ gap: 1rem;
932
+ }
933
+
934
+ #demo-form-grid .form-element,
935
+ #demo-auto-submit .form-element,
936
+ #demo-input-states .form-element,
937
+ #demo-select-textarea .form-element,
938
+ [id^="demo-focus-"] .form-element,
939
+ .form-grid .form-element {
940
+ grid-column: span 3;
941
+ }
942
+
943
+ #demo-form-grid .form-element:nth-child(8),
944
+ #demo-form-grid .form-element:nth-child(10),
945
+ #demo-form-grid > fieldset,
946
+ #demo-form-grid .form-actions,
947
+ [id^="demo-focus-"] .form-actions,
948
+ .form-grid > fieldset,
949
+ .form-grid .form-actions {
950
+ grid-column: span 6;
951
+ }
952
+
953
+ @media (max-width: 640px) {
954
+ #demo-form-grid,
955
+ #demo-auto-submit,
956
+ #demo-input-states,
957
+ #demo-select-textarea,
958
+ [id^="demo-focus-"],
959
+ .form-grid {
960
+ grid-template-columns: 1fr;
961
+ }
962
+ #demo-form-grid .form-element,
963
+ #demo-auto-submit .form-element,
964
+ #demo-input-states .form-element,
965
+ #demo-select-textarea .form-element,
966
+ [id^="demo-focus-"] .form-element,
967
+ .form-grid .form-element {
968
+ grid-column: span 1;
969
+ }
970
+ }
971
+
972
+ input[type="text"],
973
+ input[type="search"],
974
+ input[type="email"],
975
+ input[type="password"],
976
+ input[type="number"],
977
+ input[type="tel"],
978
+ input[type="url"],
979
+ select,
980
+ textarea {
981
+ display: block;
982
+ width: 100%;
983
+ padding: 0.5rem 0.75rem;
984
+ font-size: 0.875rem;
985
+ border-radius: 0.5rem;
986
+ border: 1px solid #cbd5e1;
987
+ background-color: #ffffff;
988
+ color: #0f172a;
989
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
990
+ transition: all 0.15s ease;
991
+ }
992
+
993
+ [data-mode="dark"] input[type="text"],
994
+ [data-mode="dark"] input[type="search"],
995
+ [data-mode="dark"] input[type="email"],
996
+ [data-mode="dark"] input[type="password"],
997
+ [data-mode="dark"] input[type="number"],
998
+ [data-mode="dark"] select,
999
+ [data-mode="dark"] textarea {
1000
+ background-color: #0f172a;
1001
+ border-color: #334155;
1002
+ color: #f8fafc;
1003
+ }
1004
+
1005
+ input:focus, select:focus, textarea:focus {
1006
+ outline: none;
1007
+ border-color: #4f46e5;
1008
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
1009
+ }
1010
+
1011
+ label {
1012
+ display: block;
1013
+ font-size: 0.8125rem;
1014
+ font-weight: 500;
1015
+ color: #334155;
1016
+ margin-bottom: 0.375rem;
1017
+ }
1018
+
1019
+ [data-mode="dark"] label {
1020
+ color: #cbd5e1;
1021
+ }
1022
+
1023
+ /* --------------------------------------------------------------------------
1024
+ 9. Tabs Component ([data-ln-tabs])
1025
+ -------------------------------------------------------------------------- */
1026
+ [data-ln-tabs] nav ul {
1027
+ display: flex;
1028
+ border-bottom: 1px solid #e2e8f0;
1029
+ gap: 0.5rem;
1030
+ margin-bottom: 1rem;
1031
+ list-style: none;
1032
+ padding: 0;
1033
+ }
1034
+
1035
+ [data-mode="dark"] [data-ln-tabs] nav ul {
1036
+ border-bottom-color: #1e293b;
1037
+ }
1038
+
1039
+ [data-ln-tabs] nav a[data-ln-tab] {
1040
+ display: inline-flex;
1041
+ align-items: center;
1042
+ padding: 0.625rem 1rem;
1043
+ font-size: 0.875rem;
1044
+ font-weight: 500;
1045
+ color: #64748b;
1046
+ text-decoration: none;
1047
+ border-bottom: 2px solid transparent;
1048
+ margin-bottom: -1px;
1049
+ transition: all 0.15s ease;
1050
+ }
1051
+
1052
+ [data-ln-tabs] nav a[data-ln-tab]:hover {
1053
+ color: #0f172a;
1054
+ }
1055
+
1056
+ [data-mode="dark"] [data-ln-tabs] nav a[data-ln-tab]:hover {
1057
+ color: #f8fafc;
1058
+ }
1059
+
1060
+ [data-ln-tabs] nav a[data-ln-tab][aria-selected="true"] {
1061
+ color: #4f46e5;
1062
+ border-bottom-color: #4f46e5;
1063
+ font-weight: 600;
1064
+ }
1065
+
1066
+ [data-mode="dark"] [data-ln-tabs] nav a[data-ln-tab][aria-selected="true"] {
1067
+ color: #818cf8;
1068
+ border-bottom-color: #818cf8;
1069
+ }
1070
+
1071
+ /* --------------------------------------------------------------------------
1072
+ 10. Modals ([data-ln-modal])
1073
+ -------------------------------------------------------------------------- */
1074
+ [data-ln-modal]::backdrop {
1075
+ background-color: rgba(2, 6, 23, 0.5); /* slate-950/50 */
1076
+ backdrop-filter: blur(4px);
1077
+ }
1078
+
1079
+ [data-ln-modal] > form,
1080
+ [data-ln-modal] > .modal-container,
1081
+ [data-ln-modal] > article,
1082
+ [data-ln-modal] > section {
1083
+ background-color: #ffffff;
1084
+ border-radius: 1rem;
1085
+ border: 1px solid #e2e8f0;
1086
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
1087
+ max-width: 32rem;
1088
+ width: 90vw;
1089
+ max-height: 90vh;
1090
+ overflow: hidden;
1091
+ display: flex;
1092
+ flex-direction: column;
1093
+ }
1094
+
1095
+ [data-mode="dark"] [data-ln-modal] > form,
1096
+ [data-mode="dark"] [data-ln-modal] > .modal-container,
1097
+ [data-mode="dark"] [data-ln-modal] > article,
1098
+ [data-mode="dark"] [data-ln-modal] > section {
1099
+ background-color: #0f172a;
1100
+ border-color: #1e293b;
1101
+ color: #f8fafc;
1102
+ }
1103
+
1104
+ [data-ln-modal] header {
1105
+ display: flex;
1106
+ align-items: center;
1107
+ justify-content: space-between;
1108
+ padding: 1.125rem 1.25rem;
1109
+ border-bottom: 1px solid #f1f5f9;
1110
+ }
1111
+
1112
+ [data-mode="dark"] [data-ln-modal] header {
1113
+ border-bottom-color: #1e293b;
1114
+ }
1115
+
1116
+ [data-ln-modal] header h3 {
1117
+ margin: 0;
1118
+ font-size: 1.0625rem;
1119
+ font-weight: 600;
1120
+ color: #0f172a;
1121
+ }
1122
+
1123
+ [data-mode="dark"] [data-ln-modal] header h3 {
1124
+ color: #f8fafc;
1125
+ }
1126
+
1127
+ [data-ln-modal] header button[data-ln-modal-close] {
1128
+ border: none;
1129
+ background: transparent;
1130
+ color: #94a3b8;
1131
+ cursor: pointer;
1132
+ padding: 0.25rem;
1133
+ border-radius: 0.375rem;
1134
+ display: flex;
1135
+ align-items: center;
1136
+ justify-content: center;
1137
+ transition: all 0.15s ease;
1138
+ }
1139
+
1140
+ [data-ln-modal] header button[data-ln-modal-close]:hover {
1141
+ color: #0f172a;
1142
+ background-color: #f1f5f9;
1143
+ }
1144
+
1145
+ [data-mode="dark"] [data-ln-modal] header button[data-ln-modal-close]:hover {
1146
+ color: #ffffff;
1147
+ background-color: #1e293b;
1148
+ }
1149
+
1150
+ [data-ln-modal] main {
1151
+ padding: 1.25rem;
1152
+ overflow-y: auto;
1153
+ font-size: 0.875rem;
1154
+ color: #475569;
1155
+ line-height: 1.6;
1156
+ }
1157
+
1158
+ [data-mode="dark"] [data-ln-modal] main {
1159
+ color: #cbd5e1;
1160
+ }
1161
+
1162
+ [data-ln-modal] footer {
1163
+ display: flex;
1164
+ align-items: center;
1165
+ justify-content: flex-end;
1166
+ gap: 0.5rem;
1167
+ padding: 0.875rem 1.25rem;
1168
+ border-top: 1px solid #f1f5f9;
1169
+ background-color: #f8fafc;
1170
+ }
1171
+
1172
+ [data-mode="dark"] [data-ln-modal] footer {
1173
+ border-top-color: #1e293b;
1174
+ background-color: #0b1120;
1175
+ }
1176
+
1177
+ /* --------------------------------------------------------------------------
1178
+ 11. Toasts ([data-ln-toast])
1179
+ -------------------------------------------------------------------------- */
1180
+ ul[data-ln-toast] {
1181
+ position: fixed;
1182
+ bottom: 1.5rem;
1183
+ right: 1.5rem;
1184
+ z-index: 50;
1185
+ display: flex;
1186
+ flex-direction: column;
1187
+ gap: 0.5rem;
1188
+ list-style: none;
1189
+ padding: 0;
1190
+ margin: 0;
1191
+ pointer-events: none;
1192
+ }
1193
+
1194
+ ul[data-ln-toast] li[data-ln-toast-item],
1195
+ [data-ln-toast] > li {
1196
+ display: flex;
1197
+ align-items: stretch;
1198
+ min-width: 320px;
1199
+ max-width: 450px;
1200
+ gap: 0.75rem;
1201
+ padding: 0.875rem 1.25rem;
1202
+ background-color: #ffffff;
1203
+ border: 1px solid #e2e8f0;
1204
+ border-radius: 0.75rem;
1205
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
1206
+ font-size: 0.875rem;
1207
+ pointer-events: auto;
1208
+ animation: toast-slide-in 0.2s ease-out;
1209
+ }
1210
+
1211
+ [data-ln-toast] .content {
1212
+ flex: 1;
1213
+ display: flex;
1214
+ flex-direction: column;
1215
+ min-width: 0;
1216
+ }
1217
+
1218
+ [data-ln-toast] .content header {
1219
+ display: flex;
1220
+ align-items: center;
1221
+ justify-content: space-between;
1222
+ width: 100%;
1223
+ }
1224
+
1225
+ [data-mode="dark"] ul[data-ln-toast] li[data-ln-toast-item],
1226
+ [data-mode="dark"] [data-ln-toast] > li {
1227
+ background-color: #0f172a;
1228
+ border-color: #1e293b;
1229
+ color: #f8fafc;
1230
+ }
1231
+
1232
+ /* Demo Sidebar Toggle */
1233
+ .demo-toggle-sidebar {
1234
+ display: flex;
1235
+ gap: 1rem;
1236
+ min-height: 12rem;
1237
+ border: 1px solid #e2e8f0;
1238
+ border-radius: 0.5rem;
1239
+ overflow: hidden;
1240
+ }
1241
+
1242
+ .demo-toggle-sidebar aside {
1243
+ position: relative;
1244
+ padding: 1rem;
1245
+ background-color: #f8fafc;
1246
+ width: 12rem;
1247
+ border-right: 1px solid #e2e8f0;
1248
+ transition: all 0.2s ease;
1249
+ }
1250
+
1251
+ [data-mode="dark"] .demo-toggle-sidebar aside {
1252
+ background-color: #0b1120;
1253
+ border-right-color: #1e293b;
1254
+ }
1255
+
1256
+ .demo-toggle-sidebar aside:not(.open) {
1257
+ margin-left: -12rem;
1258
+ }
1259
+
1260
+ @keyframes toast-slide-in {
1261
+ from { transform: translateY(1rem); opacity: 0; }
1262
+ to { transform: translateY(0); opacity: 1; }
1263
+ }
1264
+
1265
+ /* --------------------------------------------------------------------------
1266
+ 12. Popovers, Pickers & Dropdowns
1267
+ -------------------------------------------------------------------------- */
1268
+ [data-ln-popover], [data-ln-dropdown] {
1269
+ background-color: #ffffff;
1270
+ border: 1px solid #e2e8f0;
1271
+ border-radius: 0.75rem;
1272
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
1273
+ padding: 0.5rem;
1274
+ z-index: 50;
1275
+ }
1276
+
1277
+ [data-mode="dark"] [data-ln-popover],
1278
+ [data-mode="dark"] [data-ln-dropdown] {
1279
+ background-color: #0f172a;
1280
+ border-color: #1e293b;
1281
+ }
1282
+
1283
+ [data-ln-popover] ul, [data-ln-dropdown] ul {
1284
+ list-style: none;
1285
+ padding: 0;
1286
+ margin: 0;
1287
+ display: flex;
1288
+ flex-direction: column;
1289
+ gap: 0.125rem;
1290
+ }
1291
+
1292
+ [data-ln-popover] button, [data-ln-dropdown] button {
1293
+ width: 100%;
1294
+ justify-content: flex-start;
1295
+ padding: 0.375rem 0.625rem;
1296
+ font-size: 0.8125rem;
1297
+ border: none;
1298
+ background: transparent;
1299
+ box-shadow: none;
1300
+ border-radius: 0.375rem;
1301
+ color: inherit;
1302
+ }
1303
+
1304
+ [data-ln-popover] button:hover, [data-ln-dropdown] button:hover {
1305
+ background-color: #f1f5f9;
1306
+ }
1307
+
1308
+ [data-mode="dark"] [data-ln-popover] button:hover,
1309
+ [data-mode="dark"] [data-ln-dropdown] button:hover {
1310
+ background-color: #1e293b;
1311
+ }
1312
+
1313
+ /* --------------------------------------------------------------------------
1314
+ 13. Code Inspector Collapsible Panel
1315
+ -------------------------------------------------------------------------- */
1316
+ .demo-code-container {
1317
+ border-top: 1px solid #e2e8f0;
1318
+ background-color: #f8fafc;
1319
+ }
1320
+
1321
+ [data-mode="dark"] .demo-code-container {
1322
+ border-top-color: #1e293b;
1323
+ background-color: #0b1120;
1324
+ }
1325
+
1326
+ .demo-code-header {
1327
+ display: flex;
1328
+ align-items: center;
1329
+ justify-content: space-between;
1330
+ padding: 0.5rem 1rem;
1331
+ border-bottom: 1px solid #e2e8f0;
1332
+ font-size: 0.75rem;
1333
+ }
1334
+
1335
+ [data-mode="dark"] .demo-code-header {
1336
+ border-bottom-color: #1e293b;
1337
+ }
1338
+
1339
+ .demo-code-title {
1340
+ font-weight: 600;
1341
+ color: #64748b;
1342
+ text-transform: uppercase;
1343
+ letter-spacing: 0.05em;
1344
+ }
1345
+
1346
+ .btn-copy-code {
1347
+ display: inline-flex;
1348
+ align-items: center;
1349
+ gap: 0.375rem;
1350
+ padding: 0.25rem 0.5rem;
1351
+ font-size: 0.75rem;
1352
+ border-radius: 0.375rem;
1353
+ border: 1px solid #cbd5e1;
1354
+ background-color: #ffffff;
1355
+ color: #475569;
1356
+ cursor: pointer;
1357
+ }
1358
+
1359
+ [data-mode="dark"] .btn-copy-code {
1360
+ background-color: #1e293b;
1361
+ border-color: #334155;
1362
+ color: #cbd5e1;
1363
+ }
1364
+
1365
+ .demo-code-body pre {
1366
+ margin: 0;
1367
+ padding: 1rem;
1368
+ font-size: 0.75rem;
1369
+ line-height: 1.6;
1370
+ overflow-x: auto;
1371
+ }
1372
+
1373
+ /* --------------------------------------------------------------------------
1374
+ 14. Empty State ([data-ln-empty-state])
1375
+ -------------------------------------------------------------------------- */
1376
+ [data-ln-empty-state] {
1377
+ display: flex;
1378
+ flex-direction: column;
1379
+ align-items: center;
1380
+ justify-content: center;
1381
+ gap: 1rem;
1382
+ padding: 2rem;
1383
+ text-align: center;
1384
+ max-width: 28rem;
1385
+ margin-inline: auto;
1386
+ }
1387
+
1388
+ [data-ln-empty-state] svg.ln-icon,
1389
+ [data-ln-empty-state] svg.ln-icon--xl {
1390
+ width: 4rem;
1391
+ height: 4rem;
1392
+ color: #64748b;
1393
+ }
1394
+
1395
+ [data-mode="dark"] [data-ln-empty-state] svg.ln-icon,
1396
+ [data-mode="dark"] [data-ln-empty-state] svg.ln-icon--xl {
1397
+ color: #94a3b8;
1398
+ }
1399
+
1400
+ [data-ln-empty-state] h3 {
1401
+ margin: 0;
1402
+ font-size: 1.125rem;
1403
+ font-weight: 600;
1404
+ color: #0f172a;
1405
+ }
1406
+
1407
+ [data-mode="dark"] [data-ln-empty-state] h3 {
1408
+ color: #f8fafc;
1409
+ }
1410
+
1411
+ [data-ln-empty-state] p {
1412
+ margin: 0;
1413
+ font-size: 0.875rem;
1414
+ color: #64748b;
1415
+ }
1416
+
1417
+ [data-mode="dark"] [data-ln-empty-state] p {
1418
+ color: #94a3b8;
1419
+ }
1420
+
1421
+ [data-ln-empty-state] button,
1422
+ [data-ln-empty-state] a {
1423
+ margin-top: 0.5rem;
1424
+ }
1425
+
1426
+ #demo-empty-variants {
1427
+ display: grid;
1428
+ grid-template-columns: 1fr;
1429
+ gap: 1.5rem;
1430
+ }
1431
+
1432
+ @media (min-width: 768px) {
1433
+ #demo-empty-variants {
1434
+ grid-template-columns: repeat(2, 1fr);
1435
+ }
1436
+ }
1437
+
1438
+ /* --------------------------------------------------------------------------
1439
+ 15. Prose (.prose)
1440
+ -------------------------------------------------------------------------- */
1441
+ .prose {
1442
+ max-width: 65ch;
1443
+ }
1444
+
1445
+ /* --------------------------------------------------------------------------
1446
+ 16. Layout Grids & Scoped Wrappers
1447
+ -------------------------------------------------------------------------- */
1448
+ .grid-2 {
1449
+ display: grid;
1450
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1451
+ gap: 1.5rem;
1452
+ }
1453
+
1454
+ @media (min-width: 768px) {
1455
+ .grid-2 {
1456
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1457
+ }
1458
+ }
1459
+
1460
+ .grid-4 {
1461
+ display: grid;
1462
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1463
+ gap: 1.5rem;
1464
+ }
1465
+
1466
+ @media (min-width: 768px) {
1467
+ .grid-4 {
1468
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1469
+ }
1470
+ }
1471
+
1472
+ @media (min-width: 1024px) {
1473
+ .grid-4 {
1474
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1475
+ }
1476
+ }
1477
+
1478
+ #demo-input-components {
1479
+ display: grid;
1480
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1481
+ gap: 1.5rem;
1482
+ }
1483
+
1484
+ @media (min-width: 768px) {
1485
+ #demo-input-components {
1486
+ grid-template-columns: repeat(2, 1fr);
1487
+ }
1488
+ }
1489
+
1490
+ [data-ln-picklist] {
1491
+ display: grid;
1492
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1493
+ gap: 1rem;
1494
+ }
1495
+
1496
+ @media (min-width: 768px) {
1497
+ [data-ln-picklist] {
1498
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1499
+ }
1500
+ }
1501
+
1502
+ .ph-wrap--narrow {
1503
+ max-width: 600px;
1504
+ }
1505
+
1506
+ .demo-number-cards,
1507
+ .demo-date-cards {
1508
+ display: flex;
1509
+ flex-wrap: wrap;
1510
+ gap: 1rem;
1511
+ margin-top: 0.5rem;
1512
+ }
1513
+
1514
+ .demo-number-cards .card,
1515
+ .demo-date-cards .card {
1516
+ flex: 1 1 14rem;
1517
+ }
1518
+
1519
+ /* --------------------------------------------------------------------------
1520
+ 17. Circular Progress ([data-ln-circular-progress])
1521
+ -------------------------------------------------------------------------- */
1522
+ [data-ln-circular-progress] {
1523
+ position: relative;
1524
+ display: inline-flex;
1525
+ align-items: center;
1526
+ justify-content: center;
1527
+ width: 4rem;
1528
+ height: 4rem;
1529
+ }
1530
+
1531
+ [data-ln-circular-progress] svg {
1532
+ width: 100%;
1533
+ height: 100%;
1534
+ }
1535
+
1536
+ [data-ln-circular-progress].sm {
1537
+ width: 2.5rem;
1538
+ height: 2.5rem;
1539
+ }
1540
+
1541
+ [data-ln-circular-progress].lg {
1542
+ width: 6rem;
1543
+ height: 6rem;
1544
+ }
1545
+
1546
+ [data-ln-circular-progress].xl {
1547
+ width: 8rem;
1548
+ height: 8rem;
1549
+ }
1550
+
1551
+ [data-ln-circular-progress] .ln-circular-progress__track {
1552
+ stroke: #e2e8f0;
1553
+ }
1554
+
1555
+ [data-mode="dark"] [data-ln-circular-progress] .ln-circular-progress__track {
1556
+ stroke: #334155;
1557
+ }
1558
+
1559
+ [data-ln-circular-progress] .ln-circular-progress__fill {
1560
+ stroke: #4f46e5;
1561
+ transition: stroke-dashoffset 0.2s ease;
1562
+ }
1563
+
1564
+ [data-ln-circular-progress].success .ln-circular-progress__fill {
1565
+ stroke: #10b981;
1566
+ }
1567
+
1568
+ [data-ln-circular-progress].warning .ln-circular-progress__fill {
1569
+ stroke: #f59e0b;
1570
+ }
1571
+
1572
+ [data-ln-circular-progress].error .ln-circular-progress__fill {
1573
+ stroke: #ef4444;
1574
+ }
1575
+
1576
+ [data-ln-circular-progress] .ln-circular-progress__label {
1577
+ position: absolute;
1578
+ font-size: 0.75rem;
1579
+ font-weight: 600;
1580
+ color: #0f172a;
1581
+ }
1582
+
1583
+ [data-mode="dark"] [data-ln-circular-progress] .ln-circular-progress__label {
1584
+ color: #f8fafc;
1585
+ }
1586
+
1587
+ [data-ln-circular-progress].sm .ln-circular-progress__label {
1588
+ font-size: 0.625rem;
1589
+ line-height: 0.75rem;
1590
+ }
1591
+
1592
+ [data-ln-circular-progress].lg .ln-circular-progress__label {
1593
+ font-size: 1rem;
1594
+ }
1595
+
1596
+ [data-ln-circular-progress].xl .ln-circular-progress__label {
1597
+ font-size: 1.25rem;
1598
+ }
1599
+
1600
+ /* --------------------------------------------------------------------------
1601
+ 18. List & Virtual Scroll Container (#hybrid-list)
1602
+ -------------------------------------------------------------------------- */
1603
+ #hybrid-list {
1604
+ height: 400px;
1605
+ overflow-y: auto;
1606
+ border: 1px solid #cbd5e1;
1607
+ padding: 1rem;
1608
+ background: #f8fafc;
1609
+ list-style: none;
1610
+ border-radius: 0.5rem;
1611
+ margin-block: 1rem;
1612
+ display: grid;
1613
+ grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
1614
+ gap: 1rem;
1615
+ align-content: start;
1616
+ }
1617
+
1618
+ [data-mode="dark"] #hybrid-list {
1619
+ border-color: #334155;
1620
+ background: #0b1120;
1621
+ }
1622
+
1623
+ #hybrid-list > li {
1624
+ display: flex;
1625
+ flex-direction: column;
1626
+ gap: 0.25rem;
1627
+ padding: 1rem;
1628
+ overflow: hidden;
1629
+ height: 9rem;
1630
+ margin-block: 0;
1631
+ background: #ffffff;
1632
+ border: 1px solid #e2e8f0;
1633
+ border-radius: 0.375rem;
1634
+ }
1635
+
1636
+ [data-mode="dark"] #hybrid-list > li {
1637
+ background: #0f172a;
1638
+ border-color: #334155;
1639
+ }
1640
+
1641
+ #hybrid-list > li > header.card-tile-top {
1642
+ display: flex;
1643
+ align-items: center;
1644
+ justify-content: space-between;
1645
+ gap: 0.5rem;
1646
+ }
1647
+
1648
+ #hybrid-list > li > footer.card-tile-actions {
1649
+ display: flex;
1650
+ margin-top: auto;
1651
+ justify-content: flex-end;
1652
+ }
1653
+
1654
+ #hybrid-list .ln-list__spacer {
1655
+ padding: 0;
1656
+ border: none;
1657
+ margin: 0;
1658
+ background: none;
1659
+ box-shadow: none;
1660
+ height: auto;
1661
+ }