@loidolt/theme-styles 0.2.0 → 0.4.0

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.
@@ -1,891 +1,8 @@
1
- /* Deep slice: assumes the token custom properties are already loaded.
2
- Import '@loidolt/theme-styles/tokens' (or the whole '@loidolt/theme-styles') first. */
3
- .ldt-button {
4
- min-height: var(--loidolt-size-control);
5
- display: inline-flex;
6
- align-items: center;
7
- justify-content: center;
8
- gap: var(--loidolt-space-2);
9
- border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
10
- border-radius: var(--loidolt-border-radius);
11
- padding: 0.5rem 0.85rem;
12
- color: var(--loidolt-text);
13
- background: transparent;
14
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
15
- letter-spacing: 0.08em;
16
- line-height: 1;
17
- text-decoration: none;
18
- text-transform: uppercase;
19
- white-space: nowrap;
20
- }
21
- .ldt-button:hover:not(:disabled, [aria-disabled='true']) {
22
- color: var(--loidolt-text-inverse);
23
- background: var(--loidolt-surface-inverse);
24
- }
25
- .ldt-button--primary {
26
- color: var(--loidolt-on-accent);
27
- border-color: var(--loidolt-accent);
28
- background: var(--loidolt-accent);
29
- }
30
- .ldt-button--primary:hover:not(:disabled, [aria-disabled='true']) {
31
- color: var(--loidolt-on-accent);
32
- border-color: var(--loidolt-accent-hover);
33
- background: var(--loidolt-accent-hover);
34
- }
35
- .ldt-button--quiet {
36
- color: var(--loidolt-text-muted);
37
- border-color: var(--loidolt-border);
38
- }
39
- .ldt-button--danger {
40
- color: var(--loidolt-on-danger);
41
- border-color: var(--loidolt-danger);
42
- background: var(--loidolt-danger);
43
- }
44
- .ldt-button--ghost,
45
- .ldt-button--text {
46
- border-color: transparent;
47
- background: transparent;
48
- }
49
- .ldt-button--text {
50
- /* 1.5rem is the WCAG 2.2 minimum target size; `auto` left this at ~22px. */
51
- min-height: 1.5rem;
52
- padding: 0.25rem;
53
- color: var(--loidolt-text-muted);
54
- }
55
- .ldt-button--text:hover:not(:disabled, [aria-disabled='true']) {
56
- color: var(--loidolt-text-accent);
57
- background: transparent;
58
- }
59
- .ldt-button--sm {
60
- min-height: var(--loidolt-size-control-sm);
61
- padding: 0.38rem 0.65rem;
62
- font-size: var(--loidolt-font-size-xs);
63
- }
64
- .ldt-button--lg {
65
- min-height: var(--loidolt-size-control-lg);
66
- padding-inline: 1.2rem;
67
- }
68
- .ldt-button:disabled,
69
- .ldt-button[aria-disabled='true'] {
70
- opacity: 0.4;
71
- cursor: not-allowed;
72
- }
73
- .ldt-icon-button {
74
- width: var(--loidolt-size-control);
75
- min-width: var(--loidolt-size-control);
76
- padding: 0;
77
- }
78
- .ldt-icon-button.ldt-button--sm {
79
- width: var(--loidolt-size-control-sm);
80
- min-width: var(--loidolt-size-control-sm);
81
- padding: 0;
82
- }
83
- .ldt-icon-button.ldt-button--lg {
84
- width: var(--loidolt-size-control-lg);
85
- min-width: var(--loidolt-size-control-lg);
86
- padding: 0;
87
- }
88
- .ldt-spinner {
89
- width: 1em;
90
- height: 1em;
91
- border: 2px solid currentColor;
92
- border-right-color: transparent;
93
- border-radius: 50%;
94
- animation: ldt-spin 0.7s linear infinite;
95
- }
96
- @keyframes ldt-spin {
97
- to {
98
- transform: rotate(360deg);
99
- }
100
- }
101
-
102
- .ldt-field {
103
- display: grid;
104
- gap: 0.35rem;
105
- min-width: 0;
106
- }
107
- .ldt-label,
108
- .ldt-field__label,
109
- .ldt-legend {
110
- display: flex;
111
- justify-content: space-between;
112
- color: var(--loidolt-text-muted);
113
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
114
- letter-spacing: var(--loidolt-font-tracking-utility);
115
- text-transform: uppercase;
116
- }
117
- .ldt-field__description {
118
- margin: 0;
119
- color: var(--loidolt-text-muted);
120
- font: var(--loidolt-font-size-xs) / 1.5 var(--loidolt-font-utility);
121
- }
122
- .ldt-field__error {
123
- margin: 0;
124
- /* Status *as text on a surface* — not the fill role, which is tuned for `on-danger` ink. */
125
- color: var(--loidolt-text-danger);
126
- font: var(--loidolt-font-size-xs) / 1.5 var(--loidolt-font-utility);
127
- }
128
- .ldt-input,
129
- .ldt-select,
130
- .ldt-textarea,
131
- .ldt-number-field__input {
132
- width: 100%;
133
- min-height: var(--loidolt-size-control);
134
- border: 0;
135
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-control);
136
- border-radius: 0;
137
- padding: 0.45rem 0.15rem;
138
- color: var(--loidolt-text);
139
- background: transparent;
140
- }
141
- .ldt-input--boxed,
142
- .ldt-select--boxed,
143
- .ldt-textarea--boxed,
144
- .ldt-number-field--boxed {
145
- border: var(--loidolt-border-width) solid var(--loidolt-border-control);
146
- padding-inline: 0.65rem;
147
- background: var(--loidolt-surface-input);
148
- }
149
- /* The focus ring itself comes from the `loidolt.a11y` layer; this only tints the border. */
150
- .ldt-input:focus-visible,
151
- .ldt-select:focus-visible,
152
- .ldt-textarea:focus-visible,
153
- .ldt-number-field__input:focus-visible {
154
- border-color: var(--loidolt-accent);
155
- }
156
- .ldt-input[aria-invalid='true'],
157
- .ldt-select[aria-invalid='true'],
158
- .ldt-textarea[aria-invalid='true'] {
159
- border-color: var(--loidolt-danger);
160
- }
161
- .ldt-textarea {
162
- min-height: 6rem;
163
- resize: vertical;
164
- }
165
- .ldt-choice {
166
- /* The label is the pointer target for the input it wraps, so it carries the 24px minimum. */
167
- min-height: 1.5rem;
168
- display: inline-flex;
169
- align-items: center;
170
- gap: 0.55rem;
171
- color: var(--loidolt-text-muted);
172
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
173
- letter-spacing: 0.06em;
174
- }
175
- .ldt-choice input {
176
- width: 1rem;
177
- height: 1rem;
178
- accent-color: var(--loidolt-accent);
179
- }
180
- .ldt-fieldset {
181
- min-width: 0;
182
- margin: 0;
183
- padding: 0;
184
- border: 0;
185
- }
186
- .ldt-radio-group {
187
- display: flex;
188
- flex-wrap: wrap;
189
- gap: 0.75rem 1rem;
190
- }
191
- .ldt-radio-group--vertical {
192
- flex-direction: column;
193
- }
194
- .ldt-switch {
195
- min-height: 1.5rem;
196
- display: inline-flex;
197
- align-items: center;
198
- gap: 0.65rem;
199
- border: 0;
200
- padding: 0;
201
- background: transparent;
202
- }
203
- .ldt-switch__track {
204
- width: 2.4rem;
205
- height: 1.25rem;
206
- padding: 2px;
207
- border: var(--loidolt-border-width) solid var(--loidolt-border-control);
208
- background: var(--loidolt-surface-alt);
209
- }
210
- .ldt-switch__thumb {
211
- display: block;
212
- width: 0.9rem;
213
- height: 0.9rem;
214
- background: var(--loidolt-text-muted);
215
- transition: transform var(--loidolt-motion-fast) var(--loidolt-motion-easing);
216
- }
217
- .ldt-switch[aria-checked='true'] .ldt-switch__track {
218
- border-color: var(--loidolt-accent);
219
- background: var(--loidolt-accent);
220
- }
221
- .ldt-switch[aria-checked='true'] .ldt-switch__thumb {
222
- background: var(--loidolt-on-accent);
223
- transform: translateX(1.1rem);
224
- }
225
- .ldt-number-field {
226
- display: grid;
227
- grid-template-columns: 2rem minmax(0, 1fr) 2rem;
228
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-control);
229
- }
230
- .ldt-number-field .ldt-number-field__input {
231
- border: 0;
232
- text-align: center;
233
- }
234
- .ldt-number-field__button {
235
- border: 0;
236
- background: transparent;
237
- }
238
- .ldt-number-field__button:hover:not(:disabled, [aria-disabled='true']) {
239
- color: var(--loidolt-text-accent);
240
- background: var(--loidolt-surface-input);
241
- }
242
- .ldt-number-field__button[aria-disabled='true'] {
243
- opacity: 0.4;
244
- cursor: not-allowed;
245
- }
246
-
247
- .ldt-card,
248
- .ldt-panel {
249
- border: var(--loidolt-border-width) solid var(--loidolt-border);
250
- color: var(--loidolt-text);
251
- background: var(--loidolt-surface);
252
- }
253
- .ldt-card__header,
254
- .ldt-card__content,
255
- .ldt-card__footer,
256
- .ldt-panel__header,
257
- .ldt-panel__content,
258
- .ldt-panel__footer {
259
- padding: var(--loidolt-space-4);
260
- }
261
- .ldt-card__header,
262
- .ldt-panel__header {
263
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-soft);
264
- }
265
- .ldt-card__footer,
266
- .ldt-panel__footer {
267
- border-top: var(--loidolt-border-width) solid var(--loidolt-border-soft);
268
- }
269
- .ldt-card__title,
270
- .ldt-panel__title {
271
- margin: 0;
272
- font-size: var(--loidolt-font-size-lg);
273
- }
274
- .ldt-card__description {
275
- margin: 0.35rem 0 0;
276
- color: var(--loidolt-text-muted);
277
- font-family: var(--loidolt-font-utility);
278
- font-size: var(--loidolt-font-size-sm);
279
- }
280
- .ldt-badge {
281
- display: inline-flex;
282
- align-items: center;
283
- min-height: 1.4rem;
284
- padding: 0.15rem 0.45rem;
285
- border: var(--loidolt-border-width) solid var(--loidolt-border);
286
- color: var(--loidolt-text-muted);
287
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
288
- letter-spacing: 0.08em;
289
- text-transform: uppercase;
290
- }
291
- .ldt-badge--accent {
292
- color: var(--loidolt-on-accent);
293
- border-color: var(--loidolt-accent);
294
- background: var(--loidolt-accent);
295
- }
296
- .ldt-badge--success {
297
- color: var(--loidolt-on-success);
298
- border-color: var(--loidolt-success);
299
- background: var(--loidolt-success);
300
- }
301
- .ldt-badge--warning {
302
- color: var(--loidolt-on-warning);
303
- border-color: var(--loidolt-warning);
304
- background: var(--loidolt-warning);
305
- }
306
- .ldt-badge--error {
307
- color: var(--loidolt-on-danger);
308
- border-color: var(--loidolt-danger);
309
- background: var(--loidolt-danger);
310
- }
311
- .ldt-badge--info {
312
- color: var(--loidolt-on-info);
313
- border-color: var(--loidolt-info);
314
- background: var(--loidolt-info);
315
- }
316
- .ldt-separator {
317
- width: 100%;
318
- height: var(--loidolt-border-width);
319
- border: 0;
320
- background: var(--loidolt-border);
321
- }
322
- .ldt-separator--vertical {
323
- width: var(--loidolt-border-width);
324
- height: auto;
325
- min-height: 1em;
326
- align-self: stretch;
327
- }
328
- .ldt-table-wrap {
329
- width: 100%;
330
- overflow-x: auto;
331
- border: var(--loidolt-border-width) solid var(--loidolt-border);
332
- }
333
- .ldt-table {
334
- width: 100%;
335
- border-collapse: collapse;
336
- color: var(--loidolt-text);
337
- background: var(--loidolt-surface);
338
- }
339
- .ldt-table :where(th, td) {
340
- padding: 0.7rem 0.8rem;
341
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-soft);
342
- text-align: left;
343
- }
344
- .ldt-table th {
345
- color: var(--loidolt-text-muted);
346
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
347
- letter-spacing: var(--loidolt-font-tracking-utility);
348
- text-transform: uppercase;
349
- }
350
- .ldt-table tbody tr:last-child td {
351
- border-bottom: 0;
352
- }
353
-
354
- .ldt-alert {
355
- padding: 0.8rem 1rem;
356
- border: var(--loidolt-border-width) solid var(--loidolt-border);
357
- border-left: 3px solid var(--loidolt-info);
358
- color: var(--loidolt-text);
359
- background: var(--loidolt-surface);
360
- }
361
- .ldt-alert--info {
362
- border-left-color: var(--loidolt-info);
363
- }
364
- .ldt-alert--success {
365
- border-left-color: var(--loidolt-success);
366
- }
367
- .ldt-alert--warning {
368
- border-left-color: var(--loidolt-warning);
369
- }
370
- .ldt-alert--error {
371
- border-left-color: var(--loidolt-danger);
372
- }
373
- .ldt-alert__title {
374
- margin: 0 0 0.2rem;
375
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
376
- letter-spacing: 0.06em;
377
- text-transform: uppercase;
378
- }
379
- .ldt-alert__description {
380
- margin: 0;
381
- color: var(--loidolt-text-muted);
382
- }
383
- .ldt-progress {
384
- width: 100%;
385
- height: 0.35rem;
386
- overflow: hidden;
387
- background: var(--loidolt-border-soft);
388
- }
389
- .ldt-progress__bar {
390
- width: 100%;
391
- height: 100%;
392
- background: var(--loidolt-accent);
393
- /*
394
- * Scale rather than animate `width`: a width transition relayouts on every frame, while a
395
- * transform is composited. `--ldt-progress-value` is the 0..1 fraction, set by the component.
396
- */
397
- transform: scaleX(var(--ldt-progress-value, 0));
398
- transform-origin: left center;
399
- transition: transform var(--loidolt-motion-normal) var(--loidolt-motion-easing);
400
- }
401
- .ldt-progress--indeterminate .ldt-progress__bar {
402
- width: 40%;
403
- transform: none;
404
- animation: ldt-progress-slide 1.2s var(--loidolt-motion-easing) infinite;
405
- }
406
- @keyframes ldt-progress-slide {
407
- from {
408
- transform: translateX(-100%);
409
- }
410
- to {
411
- transform: translateX(250%);
412
- }
413
- }
414
- .ldt-skeleton {
415
- min-height: 1rem;
416
- background: linear-gradient(
417
- 90deg,
418
- var(--loidolt-border-soft),
419
- var(--loidolt-surface),
420
- var(--loidolt-border-soft)
421
- );
422
- background-size: 200% 100%;
423
- animation: ldt-shimmer 1.5s linear infinite;
424
- }
425
- @keyframes ldt-shimmer {
426
- to {
427
- background-position: -200% 0;
428
- }
429
- }
430
- .ldt-toast-viewport {
431
- position: fixed;
432
- z-index: var(--loidolt-z-toast);
433
- right: 1rem;
434
- bottom: 1rem;
435
- display: grid;
436
- width: min(24rem, calc(100vw - 2rem));
437
- gap: 0.5rem;
438
- }
439
- .ldt-toast {
440
- display: grid;
441
- grid-template-columns: minmax(0, 1fr) auto;
442
- gap: 0.4rem 1rem;
443
- padding: 0.8rem 1rem;
444
- border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
445
- border-left: 3px solid var(--loidolt-border-strong);
446
- color: var(--loidolt-text);
447
- background: var(--loidolt-surface);
448
- box-shadow: var(--loidolt-shadow-popover);
449
- }
450
- .ldt-toast--info {
451
- border-left-color: var(--loidolt-info);
452
- }
453
- .ldt-toast--success {
454
- border-left-color: var(--loidolt-success);
455
- }
456
- .ldt-toast--warning {
457
- border-left-color: var(--loidolt-warning);
458
- }
459
- .ldt-toast--error {
460
- border-left-color: var(--loidolt-danger);
461
- }
462
- .ldt-toast__title {
463
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
464
- letter-spacing: 0.06em;
465
- text-transform: uppercase;
466
- }
467
- .ldt-toast__description {
468
- grid-column: 1;
469
- margin: 0;
470
- color: var(--loidolt-text-muted);
471
- }
472
- .ldt-toast__dismiss {
473
- grid-area: 1 / 2 / span 2 / auto;
474
- align-self: start;
475
- }
476
-
477
- .ldt-overlay {
478
- position: fixed;
479
- z-index: var(--loidolt-z-overlay);
480
- inset: 0;
481
- background: var(--loidolt-scrim);
482
- }
483
- .ldt-dialog {
484
- position: fixed;
485
- z-index: var(--loidolt-z-dialog);
486
- top: 50%;
487
- left: 50%;
488
- display: grid;
489
- width: min(var(--ldt-dialog-width, 34rem), calc(100vw - 2rem));
490
- max-height: min(48rem, calc(100dvh - 2rem));
491
- overflow: hidden;
492
- border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
493
- color: var(--loidolt-text);
494
- background: var(--loidolt-surface);
495
- box-shadow: var(--loidolt-shadow-modal);
496
- transform: translate(-50%, -50%);
497
- }
498
- .ldt-dialog--sm {
499
- --ldt-dialog-width: 24rem;
500
- }
501
- .ldt-dialog--md {
502
- --ldt-dialog-width: 34rem;
503
- }
504
- .ldt-dialog--lg {
505
- --ldt-dialog-width: 46rem;
506
- }
507
- .ldt-dialog--xl {
508
- --ldt-dialog-width: 60rem;
509
- }
510
- .ldt-dialog__header,
511
- .ldt-dialog__body,
512
- .ldt-dialog__footer {
513
- padding: 1rem 1.25rem;
514
- }
515
- .ldt-dialog__header {
516
- display: flex;
517
- align-items: start;
518
- justify-content: space-between;
519
- gap: 1rem;
520
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
521
- }
522
- .ldt-dialog__body {
523
- overflow-y: auto;
524
- }
525
- .ldt-dialog__footer {
526
- display: flex;
527
- justify-content: flex-end;
528
- gap: 0.5rem;
529
- border-top: var(--loidolt-border-width) solid var(--loidolt-border);
530
- }
531
- .ldt-dialog__title {
532
- margin: 0;
533
- font-size: var(--loidolt-font-size-lg);
534
- }
535
- .ldt-dialog__description {
536
- margin: 0.25rem 0 0;
537
- color: var(--loidolt-text-muted);
538
- }
539
- .ldt-popover,
540
- .ldt-menu {
541
- z-index: var(--loidolt-z-menu);
542
- min-width: 13rem;
543
- max-width: min(22rem, calc(100vw - 2rem));
544
- padding: 0.45rem;
545
- border: var(--loidolt-border-width) solid var(--loidolt-border-strong);
546
- color: var(--loidolt-text);
547
- background: var(--loidolt-surface);
548
- box-shadow: var(--loidolt-shadow-popover);
549
- }
550
- .ldt-menu {
551
- display: grid;
552
- gap: 0.1rem;
553
- }
554
- .ldt-menu__label {
555
- padding: 0.45rem 0.55rem 0.3rem;
556
- color: var(--loidolt-text-accent);
557
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
558
- letter-spacing: 0.09em;
559
- text-transform: uppercase;
560
- }
561
- .ldt-menu__item {
562
- width: 100%;
563
- display: flex;
564
- align-items: center;
565
- justify-content: space-between;
566
- gap: 1rem;
567
- border: 0;
568
- padding: 0.65rem 0.55rem;
569
- color: var(--loidolt-text);
570
- background: transparent;
571
- text-align: left;
572
- text-decoration: none;
573
- }
574
- .ldt-menu__item:hover,
575
- .ldt-menu__item[data-highlighted] {
576
- color: var(--loidolt-text-inverse);
577
- background: var(--loidolt-surface-inverse);
578
- }
579
- .ldt-menu__item[data-disabled],
580
- .ldt-menu__item:disabled {
581
- opacity: 0.4;
582
- cursor: not-allowed;
583
- }
584
- .ldt-menu__separator {
585
- height: var(--loidolt-border-width);
586
- margin: 0.25rem 0;
587
- border: 0;
588
- background: var(--loidolt-border-soft);
589
- }
590
- .ldt-tooltip {
591
- z-index: var(--loidolt-z-tooltip);
592
- max-width: 18rem;
593
- padding: 0.4rem 0.55rem;
594
- color: var(--loidolt-text-inverse);
595
- background: var(--loidolt-surface-inverse);
596
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
597
- box-shadow: var(--loidolt-shadow-popover);
598
- }
599
- /*
600
- * Bits UI stamps `data-orientation` on the root, list, triggers and panels, so the vertical
601
- * layout keys off that rather than needing a second class.
602
- */
603
- .ldt-tabs[data-orientation='vertical'] {
604
- display: grid;
605
- grid-template-columns: auto minmax(0, 1fr);
606
- gap: var(--loidolt-space-4);
607
- }
608
- .ldt-tabs__list {
609
- display: flex;
610
- gap: 2px;
611
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
612
- }
613
- .ldt-tabs__list[data-orientation='vertical'] {
614
- flex-direction: column;
615
- align-items: stretch;
616
- border-bottom: 0;
617
- border-right: var(--loidolt-border-width) solid var(--loidolt-border);
618
- }
619
- .ldt-tabs__trigger {
620
- min-height: var(--loidolt-size-control);
621
- border: 0;
622
- border-bottom: 2px solid transparent;
623
- padding: 0 0.85rem;
624
- color: var(--loidolt-text-muted);
625
- background: transparent;
626
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
627
- letter-spacing: 0.08em;
628
- text-transform: uppercase;
629
- }
630
- .ldt-tabs__trigger[data-orientation='vertical'] {
631
- border-bottom: 0;
632
- border-right: 2px solid transparent;
633
- padding: 0 0.85rem;
634
- text-align: left;
635
- }
636
- .ldt-tabs__trigger[data-state='active'],
637
- .ldt-tabs__trigger[aria-selected='true'] {
638
- color: var(--loidolt-text);
639
- border-color: var(--loidolt-accent);
640
- }
641
- .ldt-tabs__content[data-orientation='vertical'] {
642
- padding-block: 0;
643
- }
644
- .ldt-tabs__content {
645
- padding-block: 1rem;
646
- }
647
-
648
- .ldt-app-shell {
649
- min-height: 100dvh;
650
- display: grid;
651
- grid-template-rows: auto minmax(0, 1fr) auto;
652
- /*
653
- * Without an explicit column the implicit one is content-sized, so anything too wide for the
654
- * viewport — a topbar with many links, a wide table — stretched the entire shell and put the
655
- * page into horizontal scroll. `minmax(0, 1fr)` caps it at the container width.
656
- */
657
- grid-template-columns: minmax(0, 1fr);
658
- color: var(--loidolt-text);
659
- background: var(--loidolt-background);
660
- }
661
- .ldt-app-shell > :where(header, main, footer) {
662
- min-width: 0;
663
- }
664
- .ldt-topbar {
665
- min-width: 0;
666
- min-height: var(--loidolt-size-topbar);
667
- display: flex;
668
- /* Reflow at whatever width runs out of room, rather than only at the compact breakpoint. */
669
- flex-wrap: wrap;
670
- align-items: center;
671
- gap: 1.25rem;
672
- padding: 0 1.35rem;
673
- color: var(--loidolt-text);
674
- background: var(--loidolt-surface);
675
- }
676
- .ldt-brand {
677
- display: inline-flex;
678
- flex: 0 0 auto;
679
- align-items: baseline;
680
- gap: 0.55rem;
681
- color: var(--loidolt-text);
682
- text-decoration: none;
683
- }
684
- .ldt-brand:hover {
685
- text-decoration: none;
686
- }
687
- .ldt-brand__name {
688
- font-size: var(--loidolt-font-size-lg);
689
- font-weight: 500;
690
- letter-spacing: -0.02em;
691
- }
692
- .ldt-brand__meta {
693
- color: var(--loidolt-text-accent);
694
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
695
- letter-spacing: 0.12em;
696
- text-transform: uppercase;
697
- }
698
- .ldt-topbar__nav {
699
- /*
700
- * Flex items refuse to shrink below their content width without `min-width: 0`, so a nav
701
- * with more links than room pushed the whole page into horizontal scroll. Let it shrink,
702
- * and scroll on its own when even the wrapped layout cannot fit the links.
703
- */
704
- min-width: 0;
705
- display: flex;
706
- align-self: stretch;
707
- overflow-x: auto;
708
- scrollbar-width: thin;
709
- }
710
- .ldt-topbar__actions {
711
- min-width: 0;
712
- margin-left: auto;
713
- display: flex;
714
- align-items: center;
715
- gap: 0.4rem;
716
- }
717
- .ldt-nav-menu {
718
- min-height: var(--loidolt-size-control);
719
- display: inline-flex;
720
- align-items: center;
721
- gap: 0.35rem;
722
- border: 0;
723
- border-bottom: 2px solid transparent;
724
- padding: 0 0.75rem;
725
- color: var(--loidolt-text-muted);
726
- background: transparent;
727
- font: var(--loidolt-font-size-sm) var(--loidolt-font-utility);
728
- letter-spacing: 0.08em;
729
- text-transform: uppercase;
730
- }
731
- .ldt-nav-menu:hover:not(:disabled, [aria-disabled='true']) {
732
- color: var(--loidolt-text);
733
- }
734
- .ldt-nav-menu[data-state='open'] {
735
- color: var(--loidolt-text);
736
- }
737
- .ldt-nav-menu--active,
738
- .ldt-nav-menu[aria-current='page'] {
739
- color: var(--loidolt-text);
740
- border-bottom-color: var(--loidolt-accent);
741
- }
742
- .ldt-contextbar {
743
- min-width: 0;
744
- min-height: var(--loidolt-size-contextbar);
745
- display: flex;
746
- align-items: center;
747
- justify-content: space-between;
748
- gap: 1rem;
749
- padding: 0.4rem 1.35rem;
750
- border-block: var(--loidolt-border-width) solid var(--loidolt-border);
751
- color: var(--loidolt-text);
752
- background: var(--loidolt-surface-alt);
753
- }
754
- .ldt-contextbar__location {
755
- min-width: 0;
756
- display: flex;
757
- align-items: baseline;
758
- gap: 0.65rem;
759
- }
760
- .ldt-contextbar__section {
761
- flex: 0 0 auto;
762
- color: var(--loidolt-text-accent);
763
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
764
- letter-spacing: 0.1em;
765
- text-transform: uppercase;
766
- }
767
- .ldt-contextbar__actions {
768
- flex: 0 0 auto;
769
- display: flex;
770
- align-items: center;
771
- gap: var(--ldt-gap, var(--loidolt-space-2));
772
- }
773
- .ldt-contextbar__title,
774
- .ldt-contextbar__detail {
775
- overflow: hidden;
776
- text-overflow: ellipsis;
777
- white-space: nowrap;
778
- }
779
- .ldt-contextbar__detail {
780
- color: var(--loidolt-text-muted);
781
- font: var(--loidolt-font-size-xs) var(--loidolt-font-utility);
782
- }
783
- .ldt-workspace {
784
- min-width: 0;
785
- min-height: 0;
786
- display: grid;
787
- grid-template-columns: minmax(0, 1fr);
788
- }
789
- .ldt-workspace--sidebar {
790
- grid-template-columns: var(--ldt-sidebar-width, var(--loidolt-size-sidebar)) minmax(0, 1fr);
791
- }
792
- .ldt-workspace--inspector {
793
- grid-template-columns: minmax(0, 1fr) var(--ldt-inspector-width, var(--loidolt-size-inspector));
794
- }
795
- .ldt-workspace--sidebar.ldt-workspace--inspector {
796
- grid-template-columns: var(--ldt-sidebar-width, var(--loidolt-size-sidebar)) minmax(0, 1fr) var(
797
- --ldt-inspector-width,
798
- var(--loidolt-size-inspector)
799
- );
800
- }
801
- .ldt-sidebar {
802
- min-width: 0;
803
- overflow-y: auto;
804
- padding: 1.25rem;
805
- border-right: var(--loidolt-border-width) solid var(--loidolt-border);
806
- color: var(--loidolt-text);
807
- background: var(--loidolt-surface);
808
- }
809
- .ldt-sidebar--right {
810
- border-right: 0;
811
- border-left: var(--loidolt-border-width) solid var(--loidolt-border);
812
- }
813
- .ldt-workspace__main {
814
- min-width: 0;
815
- padding: var(--loidolt-space-6);
816
- }
817
- .ldt-page-header {
818
- display: flex;
819
- align-items: end;
820
- justify-content: space-between;
821
- gap: 1rem;
822
- margin-bottom: var(--loidolt-space-6);
823
- padding-bottom: var(--loidolt-space-4);
824
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
825
- }
826
- .ldt-page-header__title {
827
- margin: 0;
828
- font-size: var(--loidolt-font-size-xl);
829
- }
830
- .ldt-page-header__description {
831
- max-width: 48rem;
832
- margin: 0.4rem 0 0;
833
- color: var(--loidolt-text-muted);
834
- }
835
- .ldt-section {
836
- padding-block: var(--loidolt-space-6);
837
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border-soft);
838
- }
839
- .ldt-section__heading {
840
- display: flex;
841
- align-items: baseline;
842
- justify-content: space-between;
843
- gap: 1rem;
844
- margin-bottom: var(--loidolt-space-4);
845
- }
846
- .ldt-section__title {
847
- margin: 0;
848
- font-size: var(--loidolt-font-size-lg);
849
- }
850
-
851
- /* Single breakpoint, mirroring `tokens.breakpoints.compact`. */
852
- @media (max-width: 760px) {
853
- .ldt-topbar {
854
- min-height: auto;
855
- padding-block: 0.75rem;
856
- gap: 0.75rem;
857
- }
858
- .ldt-topbar__actions {
859
- width: 100%;
860
- margin-left: 0;
861
- overflow-x: auto;
862
- }
863
- .ldt-contextbar {
864
- align-items: start;
865
- }
866
- .ldt-contextbar__location {
867
- display: grid;
868
- gap: 0.15rem;
869
- }
870
- .ldt-contextbar__detail {
871
- display: none;
872
- }
873
- .ldt-workspace,
874
- .ldt-workspace--sidebar,
875
- .ldt-workspace--inspector,
876
- .ldt-workspace--sidebar.ldt-workspace--inspector {
877
- display: block;
878
- }
879
- .ldt-sidebar,
880
- .ldt-sidebar--right {
881
- border: 0;
882
- border-bottom: var(--loidolt-border-width) solid var(--loidolt-border);
883
- }
884
- .ldt-workspace__main {
885
- padding: var(--loidolt-space-4);
886
- }
887
- .ldt-page-header {
888
- align-items: start;
889
- flex-direction: column;
890
- }
891
- }
1
+ @import './components/actions.css';
2
+ @import './components/forms.css';
3
+ @import './components/surfaces.css';
4
+ @import './components/data.css';
5
+ @import './components/feedback.css';
6
+ @import './components/overlays.css';
7
+ @import './components/selection.css';
8
+ @import './components/layout.css';