@liberation-data/desk 0.4.0 → 0.6.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.
@@ -0,0 +1,974 @@
1
+ /* ── Controls ── */
2
+
3
+ .desk-button {
4
+ position: relative;
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ gap: var(--desk-space-2);
9
+ min-height: var(--desk-control-height);
10
+ padding: 0 var(--desk-space-3);
11
+ border: 1px solid var(--desk-rule);
12
+ border-radius: var(--desk-control-radius);
13
+ background: var(--desk-surface);
14
+ color: var(--desk-ink);
15
+ font-family: var(--desk-font);
16
+ font-size: 13px;
17
+ font-weight: 500;
18
+ white-space: nowrap;
19
+ cursor: pointer;
20
+ transition: background .12s var(--desk-ease), border-color .12s var(--desk-ease);
21
+ }
22
+
23
+ .desk-button[data-size="small"] {
24
+ min-height: var(--desk-control-height-small);
25
+ padding: 0 var(--desk-space-2);
26
+ font-size: 12px;
27
+ }
28
+
29
+ .desk-button[data-icon-only] {
30
+ padding: 0;
31
+ width: var(--desk-control-height);
32
+ }
33
+
34
+ /* A finger needs 44px even when the drawn control is smaller (HIG.md §9). */
35
+ @media (pointer: coarse) {
36
+ .desk-button::after,
37
+ .desk-toggle::after {
38
+ content: "";
39
+ position: absolute;
40
+ top: 50%;
41
+ left: 50%;
42
+ width: max(100%, 44px);
43
+ height: max(100%, 44px);
44
+ transform: translate(-50%, -50%);
45
+ }
46
+ }
47
+
48
+ .desk-button:hover:not(:disabled) {
49
+ border-color: color-mix(in srgb, var(--desk-ink) 28%, var(--desk-rule));
50
+ }
51
+
52
+ .desk-button:active:not(:disabled) {
53
+ background: color-mix(in srgb, var(--desk-ink) 8%, var(--desk-surface));
54
+ }
55
+
56
+ .desk-button[data-intent="default"] {
57
+ border-color: var(--desk-accent);
58
+ background: var(--desk-accent);
59
+ color: var(--desk-on-accent);
60
+ font-weight: 600;
61
+ }
62
+
63
+ .desk-button[data-intent="default"]:hover:not(:disabled) {
64
+ background: color-mix(in srgb, #fff 12%, var(--desk-accent));
65
+ }
66
+
67
+ .desk-button[data-intent="quiet"] {
68
+ border-color: transparent;
69
+ background: none;
70
+ }
71
+
72
+ .desk-button[data-intent="quiet"]:hover:not(:disabled) {
73
+ background: color-mix(in srgb, var(--desk-ink) 8%, transparent);
74
+ }
75
+
76
+ .desk-button[data-intent="destructive"] {
77
+ border-color: color-mix(in srgb, var(--desk-bad) 50%, var(--desk-rule));
78
+ color: var(--desk-bad);
79
+ }
80
+
81
+ .desk-button[data-intent="destructive"]:hover:not(:disabled) {
82
+ background: color-mix(in srgb, var(--desk-bad) 12%, transparent);
83
+ }
84
+
85
+ .desk-button:disabled,
86
+ .desk-segment:disabled,
87
+ .desk-toggle:disabled {
88
+ opacity: .45;
89
+ cursor: not-allowed;
90
+ }
91
+
92
+ .desk-button:focus-visible,
93
+ .desk-segment:focus-visible,
94
+ .desk-toggle:focus-visible,
95
+ .desk-input:focus-visible {
96
+ outline: 2px solid var(--desk-accent);
97
+ outline-offset: 2px;
98
+ }
99
+
100
+ .desk-button-icon,
101
+ .desk-segment-icon {
102
+ display: grid;
103
+ place-items: center;
104
+ width: 15px;
105
+ height: 15px;
106
+ }
107
+
108
+ .desk-button-icon svg,
109
+ .desk-segment-icon svg {
110
+ width: 100%;
111
+ height: 100%;
112
+ }
113
+
114
+ .desk-segmented {
115
+ display: inline-flex;
116
+ gap: 2px;
117
+ padding: 2px;
118
+ border: 1px solid var(--desk-rule);
119
+ border-radius: calc(var(--desk-control-radius) + 2px);
120
+ background: color-mix(in srgb, var(--desk-ink) 5%, transparent);
121
+ }
122
+
123
+ .desk-segment {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ gap: var(--desk-space-1);
127
+ min-height: calc(var(--desk-control-height) - 6px);
128
+ padding: 0 var(--desk-space-3);
129
+ border: 0;
130
+ border-radius: calc(var(--desk-control-radius) - 1px);
131
+ background: none;
132
+ color: var(--desk-muted);
133
+ font-family: var(--desk-font);
134
+ font-size: 12.5px;
135
+ white-space: nowrap;
136
+ cursor: pointer;
137
+ }
138
+
139
+ .desk-segmented[data-size="small"] .desk-segment {
140
+ min-height: calc(var(--desk-control-height-small) - 4px);
141
+ padding: 0 var(--desk-space-2);
142
+ font-size: 11.5px;
143
+ }
144
+
145
+ .desk-segment[aria-checked="true"] {
146
+ background: var(--desk-surface);
147
+ border: 1px solid var(--desk-rule);
148
+ color: var(--desk-ink);
149
+ font-weight: 500;
150
+ }
151
+
152
+ .desk-segment:hover:not(:disabled):not([aria-checked="true"]) {
153
+ color: var(--desk-ink);
154
+ }
155
+
156
+ .desk-toggle {
157
+ position: relative;
158
+ flex: none;
159
+ width: 40px;
160
+ height: 24px;
161
+ padding: 0;
162
+ border: 1px solid var(--desk-rule);
163
+ border-radius: 12px;
164
+ background: color-mix(in srgb, var(--desk-ink) 12%, transparent);
165
+ cursor: pointer;
166
+ transition: background .16s var(--desk-ease), border-color .16s var(--desk-ease);
167
+ }
168
+
169
+ .desk-toggle[aria-checked="true"] {
170
+ border-color: var(--desk-accent);
171
+ background: var(--desk-accent);
172
+ }
173
+
174
+ .desk-toggle-knob {
175
+ position: absolute;
176
+ top: 2px;
177
+ left: 2px;
178
+ width: 18px;
179
+ height: 18px;
180
+ border-radius: 50%;
181
+ background: var(--desk-field-bg);
182
+ box-shadow: 0 1px 2px rgb(0 0 0 / 35%);
183
+ transition: transform .16s var(--desk-ease);
184
+ }
185
+
186
+ .desk-toggle[aria-checked="true"] .desk-toggle-knob {
187
+ transform: translateX(16px);
188
+ background: var(--desk-on-accent);
189
+ }
190
+
191
+ .desk-toggle-row {
192
+ display: flex;
193
+ align-items: center;
194
+ gap: var(--desk-space-3);
195
+ padding: var(--desk-space-2) 0;
196
+ }
197
+
198
+ .desk-toggle-text {
199
+ flex: 1;
200
+ min-width: 0;
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: 2px;
204
+ }
205
+
206
+ .desk-field {
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: var(--desk-space-1);
210
+ }
211
+
212
+ .desk-label {
213
+ font-size: 12px;
214
+ font-weight: 500;
215
+ color: var(--desk-muted);
216
+ }
217
+
218
+ .desk-label[data-hidden] {
219
+ position: absolute;
220
+ width: 1px;
221
+ height: 1px;
222
+ margin: -1px;
223
+ padding: 0;
224
+ overflow: hidden;
225
+ clip-path: inset(50%);
226
+ white-space: nowrap;
227
+ }
228
+
229
+ .desk-input {
230
+ box-sizing: border-box;
231
+ width: 100%;
232
+ min-height: var(--desk-control-height);
233
+ padding: 0 var(--desk-space-3);
234
+ border: 1px solid var(--desk-rule);
235
+ border-radius: var(--desk-control-radius);
236
+ background: var(--desk-field-bg);
237
+ color: var(--desk-ink);
238
+ font-family: var(--desk-font);
239
+ font-size: 13px;
240
+ }
241
+
242
+ .desk-input::placeholder {
243
+ color: var(--desk-muted);
244
+ }
245
+
246
+ .desk-field[data-invalid] .desk-input {
247
+ border-color: var(--desk-bad);
248
+ }
249
+
250
+ .desk-help,
251
+ .desk-error {
252
+ font-size: 11.5px;
253
+ line-height: 1.4;
254
+ }
255
+
256
+ .desk-help {
257
+ color: var(--desk-muted);
258
+ }
259
+
260
+ .desk-error {
261
+ color: var(--desk-bad);
262
+ }
263
+
264
+ @media (prefers-reduced-motion: reduce) {
265
+ .desk-button,
266
+ .desk-toggle,
267
+ .desk-toggle-knob {
268
+ transition: none;
269
+ }
270
+ }
271
+
272
+ /* ── Checkbox and slider ── */
273
+
274
+ .desk-check-row {
275
+ display: flex;
276
+ align-items: flex-start;
277
+ gap: var(--desk-space-2);
278
+ padding: var(--desk-space-1) 0;
279
+ }
280
+
281
+ .desk-checkbox {
282
+ width: 16px;
283
+ height: 16px;
284
+ margin: 2px 0 0;
285
+ accent-color: var(--desk-accent);
286
+ flex: none;
287
+ }
288
+
289
+ .desk-check-text {
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 2px;
293
+ }
294
+
295
+ .desk-check-label {
296
+ font-size: 13px;
297
+ }
298
+
299
+ .desk-checkbox:focus-visible,
300
+ .desk-slider-track:focus-visible {
301
+ outline: 2px solid var(--desk-accent);
302
+ outline-offset: 2px;
303
+ }
304
+
305
+ .desk-choices {
306
+ margin: 0;
307
+ padding: 0;
308
+ border: 0;
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: var(--desk-space-2);
312
+ }
313
+
314
+ .desk-choice {
315
+ display: flex;
316
+ align-items: flex-start;
317
+ gap: var(--desk-space-3);
318
+ padding: var(--desk-space-3);
319
+ border: 1px solid var(--desk-rule);
320
+ border-radius: 12px;
321
+ background: var(--desk-surface);
322
+ cursor: pointer;
323
+ }
324
+
325
+ .desk-choice:hover:not([data-disabled]) {
326
+ border-color: color-mix(in srgb, var(--desk-accent) 50%, var(--desk-rule));
327
+ }
328
+
329
+ .desk-choice[data-chosen] {
330
+ border-color: var(--desk-accent);
331
+ box-shadow: 0 0 0 1px var(--desk-accent);
332
+ }
333
+
334
+ .desk-choice[data-disabled] {
335
+ opacity: .45;
336
+ cursor: not-allowed;
337
+ }
338
+
339
+ .desk-choice:has(:focus-visible) {
340
+ outline: 2px solid var(--desk-accent);
341
+ outline-offset: 2px;
342
+ }
343
+
344
+ .desk-choice-input {
345
+ position: absolute;
346
+ opacity: 0;
347
+ pointer-events: none;
348
+ }
349
+
350
+ .desk-choice-mark {
351
+ flex: none;
352
+ display: grid;
353
+ place-items: center;
354
+ width: 16px;
355
+ height: 16px;
356
+ margin-top: 2px;
357
+ border: 1.5px solid var(--desk-rule);
358
+ border-radius: 50%;
359
+ }
360
+
361
+ .desk-choice[data-chosen] .desk-choice-mark {
362
+ border-color: var(--desk-accent);
363
+ }
364
+
365
+ .desk-choice[data-chosen] .desk-choice-mark::after {
366
+ content: "";
367
+ width: 8px;
368
+ height: 8px;
369
+ border-radius: 50%;
370
+ background: var(--desk-accent);
371
+ }
372
+
373
+ .desk-choice-icon {
374
+ flex: none;
375
+ display: grid;
376
+ place-items: center;
377
+ width: 36px;
378
+ height: 36px;
379
+ border: 1px solid var(--desk-rule);
380
+ border-radius: 10px;
381
+ color: var(--desk-muted);
382
+ }
383
+
384
+ .desk-choice-icon svg {
385
+ width: 18px;
386
+ height: 18px;
387
+ }
388
+
389
+ .desk-choice-text {
390
+ flex: 1;
391
+ min-width: 0;
392
+ display: flex;
393
+ flex-direction: column;
394
+ gap: 2px;
395
+ }
396
+
397
+ .desk-choice-label {
398
+ font-weight: 600;
399
+ }
400
+
401
+ .desk-choice-tag {
402
+ margin-left: var(--desk-space-2);
403
+ font-weight: 400;
404
+ color: var(--desk-muted);
405
+ }
406
+
407
+ .desk-checklist {
408
+ display: flex;
409
+ flex-direction: column;
410
+ gap: var(--desk-space-3);
411
+ }
412
+
413
+ .desk-progress {
414
+ height: 5px;
415
+ border-radius: 3px;
416
+ background: var(--desk-rule);
417
+ overflow: hidden;
418
+ }
419
+
420
+ .desk-progress i {
421
+ display: block;
422
+ height: 100%;
423
+ background: var(--desk-accent);
424
+ transition: width .4s var(--desk-ease);
425
+ }
426
+
427
+ .desk-tasks {
428
+ margin: 0;
429
+ padding: 0;
430
+ list-style: none;
431
+ border: 1px solid var(--desk-rule);
432
+ border-radius: 12px;
433
+ }
434
+
435
+ .desk-task {
436
+ display: flex;
437
+ align-items: center;
438
+ gap: var(--desk-space-3);
439
+ padding: var(--desk-space-2) var(--desk-space-3);
440
+ }
441
+
442
+ .desk-task + .desk-task {
443
+ border-top: 1px solid var(--desk-rule);
444
+ }
445
+
446
+ .desk-task-mark {
447
+ flex: none;
448
+ display: grid;
449
+ place-items: center;
450
+ box-sizing: border-box;
451
+ width: 20px;
452
+ height: 20px;
453
+ border-radius: 50%;
454
+ font-size: 12px;
455
+ border: 1.5px dashed var(--desk-rule);
456
+ }
457
+
458
+ .desk-task[data-state="working"] .desk-task-mark {
459
+ border: 2px solid var(--desk-rule);
460
+ border-top-color: var(--desk-accent);
461
+ animation: desk-spin .8s linear infinite;
462
+ }
463
+
464
+ .desk-task[data-state="done"] .desk-task-mark {
465
+ border: 0;
466
+ background: color-mix(in srgb, var(--desk-ok) 18%, transparent);
467
+ color: var(--desk-ok);
468
+ }
469
+
470
+ .desk-task[data-state="failed"] .desk-task-mark {
471
+ border: 0;
472
+ background: color-mix(in srgb, var(--desk-bad) 18%, transparent);
473
+ color: var(--desk-bad);
474
+ font-weight: 700;
475
+ }
476
+
477
+ @keyframes desk-spin {
478
+ to {
479
+ transform: rotate(360deg);
480
+ }
481
+ }
482
+
483
+ .desk-task-text {
484
+ flex: 1;
485
+ min-width: 0;
486
+ display: flex;
487
+ flex-direction: column;
488
+ }
489
+
490
+ .desk-task-name {
491
+ font-size: 13px;
492
+ font-weight: 600;
493
+ }
494
+
495
+ .desk-task-detail,
496
+ .desk-task-error {
497
+ font-size: 12px;
498
+ color: var(--desk-muted);
499
+ }
500
+
501
+ .desk-task-error {
502
+ color: var(--desk-bad);
503
+ }
504
+
505
+ @media (prefers-reduced-motion: reduce) {
506
+ .desk-task[data-state="working"] .desk-task-mark {
507
+ animation: none;
508
+ }
509
+ }
510
+
511
+ .desk-radiogroup {
512
+ margin: 0;
513
+ padding: 0;
514
+ border: 0;
515
+ display: flex;
516
+ flex-direction: column;
517
+ gap: var(--desk-space-1);
518
+ }
519
+
520
+ .desk-radiogroup legend {
521
+ padding: 0;
522
+ margin-bottom: var(--desk-space-1);
523
+ }
524
+
525
+ .desk-radio {
526
+ width: 16px;
527
+ height: 16px;
528
+ margin: 2px 0 0;
529
+ accent-color: var(--desk-accent);
530
+ flex: none;
531
+ }
532
+
533
+ .desk-radio:focus-visible {
534
+ outline: 2px solid var(--desk-accent);
535
+ outline-offset: 2px;
536
+ }
537
+
538
+ .desk-slider {
539
+ display: flex;
540
+ flex-direction: column;
541
+ gap: var(--desk-space-1);
542
+ }
543
+
544
+ .desk-slider-head {
545
+ display: flex;
546
+ align-items: baseline;
547
+ justify-content: space-between;
548
+ gap: var(--desk-space-2);
549
+ }
550
+
551
+ .desk-slider-value {
552
+ font-size: 12px;
553
+ font-variant-numeric: tabular-nums;
554
+ color: var(--desk-ink);
555
+ }
556
+
557
+ .desk-slider-track {
558
+ width: 100%;
559
+ accent-color: var(--desk-accent);
560
+ }
561
+
562
+ /* ── Pop-up button ── */
563
+
564
+ .desk-popup-anchor {
565
+ position: relative;
566
+ }
567
+
568
+ .desk-popup-button {
569
+ display: flex;
570
+ align-items: center;
571
+ gap: var(--desk-space-2);
572
+ width: 100%;
573
+ min-height: var(--desk-control-height);
574
+ padding: 0 var(--desk-space-2) 0 var(--desk-space-3);
575
+ border: 1px solid var(--desk-rule);
576
+ border-radius: var(--desk-control-radius);
577
+ background: var(--desk-field-bg);
578
+ color: var(--desk-ink);
579
+ font-family: var(--desk-font);
580
+ font-size: 13px;
581
+ text-align: left;
582
+ cursor: pointer;
583
+ }
584
+
585
+ .desk-popup-button[data-size="small"] {
586
+ min-height: var(--desk-control-height-small);
587
+ font-size: 12px;
588
+ }
589
+
590
+ .desk-popup-button:focus-visible {
591
+ outline: 2px solid var(--desk-accent);
592
+ outline-offset: 2px;
593
+ }
594
+
595
+ .desk-popup-button:disabled {
596
+ opacity: .45;
597
+ cursor: not-allowed;
598
+ }
599
+
600
+ .desk-popup-value {
601
+ flex: 1;
602
+ min-width: 0;
603
+ overflow: hidden;
604
+ text-overflow: ellipsis;
605
+ white-space: nowrap;
606
+ }
607
+
608
+ .desk-popup-value[data-placeholder] {
609
+ color: var(--desk-muted);
610
+ }
611
+
612
+ .desk-popup-icon {
613
+ display: grid;
614
+ place-items: center;
615
+ width: 16px;
616
+ height: 16px;
617
+ }
618
+
619
+ .desk-popup-chevron {
620
+ color: var(--desk-muted);
621
+ line-height: 1;
622
+ }
623
+
624
+ .desk-popup-list {
625
+ position: absolute;
626
+ z-index: 1200;
627
+ top: calc(100% + 4px);
628
+ left: 0;
629
+ min-width: 100%;
630
+ max-height: 40vh;
631
+ margin: 0;
632
+ padding: 4px;
633
+ list-style: none;
634
+ overflow-y: auto;
635
+ border: 1px solid var(--desk-rule);
636
+ border-radius: 10px;
637
+ background: var(--desk-surface);
638
+ box-shadow: var(--desk-shadow-floating);
639
+ animation: desk-menu-in .12s var(--desk-ease);
640
+ }
641
+
642
+ .desk-popup-list:focus {
643
+ outline: none;
644
+ }
645
+
646
+ .desk-popup-option {
647
+ display: flex;
648
+ align-items: flex-start;
649
+ gap: var(--desk-space-1);
650
+ padding: var(--desk-space-1) var(--desk-space-2);
651
+ border-radius: 6px;
652
+ font-size: 13px;
653
+ cursor: default;
654
+ }
655
+
656
+ .desk-popup-option[data-active] {
657
+ background: var(--desk-accent);
658
+ color: var(--desk-on-accent);
659
+ }
660
+
661
+ .desk-popup-option[data-active] .desk-help {
662
+ color: rgb(255 255 255 / 80%);
663
+ }
664
+
665
+ .desk-popup-option[aria-disabled] {
666
+ opacity: .5;
667
+ }
668
+
669
+ .desk-popup-check {
670
+ width: 14px;
671
+ flex: none;
672
+ text-align: center;
673
+ }
674
+
675
+ .desk-popup-text {
676
+ display: flex;
677
+ flex-direction: column;
678
+ }
679
+
680
+ /* ── Table ── */
681
+
682
+ .desk-table-wrap {
683
+ overflow: auto;
684
+ }
685
+
686
+ .desk-table {
687
+ width: 100%;
688
+ border-collapse: collapse;
689
+ font-family: var(--desk-font);
690
+ font-size: 13px;
691
+ }
692
+
693
+ .desk-table th {
694
+ position: sticky;
695
+ top: 0;
696
+ z-index: 1;
697
+ padding: var(--desk-space-1) var(--desk-space-2);
698
+ border-bottom: 1px solid var(--desk-rule);
699
+ background: var(--desk-surface);
700
+ font-size: 11px;
701
+ font-weight: 600;
702
+ letter-spacing: .06em;
703
+ text-transform: uppercase;
704
+ color: var(--desk-muted);
705
+ text-align: left;
706
+ white-space: nowrap;
707
+ }
708
+
709
+ .desk-table th[data-align="end"],
710
+ .desk-table td[data-align="end"] {
711
+ text-align: right;
712
+ }
713
+
714
+ .desk-table-sort {
715
+ display: inline-flex;
716
+ align-items: center;
717
+ gap: 4px;
718
+ padding: 0;
719
+ border: 0;
720
+ background: none;
721
+ color: inherit;
722
+ font: inherit;
723
+ letter-spacing: inherit;
724
+ text-transform: inherit;
725
+ cursor: pointer;
726
+ }
727
+
728
+ .desk-table-sort:hover {
729
+ color: var(--desk-ink);
730
+ }
731
+
732
+ .desk-table td {
733
+ padding: var(--desk-space-2);
734
+ border-bottom: 1px solid var(--desk-rule);
735
+ }
736
+
737
+ .desk-table td[data-numeric] {
738
+ font-variant-numeric: tabular-nums;
739
+ }
740
+
741
+ .desk-table tbody tr {
742
+ cursor: default;
743
+ }
744
+
745
+ .desk-table tbody tr:hover {
746
+ background: color-mix(in srgb, var(--desk-ink) 5%, transparent);
747
+ }
748
+
749
+ .desk-table tbody tr[data-selected] {
750
+ background: color-mix(in srgb, var(--desk-accent) 16%, transparent);
751
+ }
752
+
753
+ .desk-table tbody tr:focus-visible {
754
+ outline: 2px solid var(--desk-accent);
755
+ outline-offset: -2px;
756
+ }
757
+
758
+ .desk-table-empty {
759
+ padding: var(--desk-space-6) var(--desk-space-4);
760
+ text-align: center;
761
+ color: var(--desk-muted);
762
+ font-family: var(--desk-font);
763
+ font-size: 13px;
764
+ }
765
+
766
+ /* ── Sidebar ── */
767
+
768
+ .desk-sidebar {
769
+ display: flex;
770
+ flex-direction: column;
771
+ gap: var(--desk-space-3);
772
+ padding: var(--desk-space-2);
773
+ font-family: var(--desk-font);
774
+ overflow-y: auto;
775
+ }
776
+
777
+ .desk-sidebar ul {
778
+ margin: 0;
779
+ padding: 0;
780
+ list-style: none;
781
+ }
782
+
783
+ .desk-sidebar-heading {
784
+ margin: 0 0 var(--desk-space-1);
785
+ padding: 0 var(--desk-space-2);
786
+ font-size: 11px;
787
+ font-weight: 700;
788
+ letter-spacing: .08em;
789
+ text-transform: uppercase;
790
+ color: var(--desk-muted);
791
+ }
792
+
793
+ .desk-sidebar-item {
794
+ display: flex;
795
+ align-items: center;
796
+ gap: var(--desk-space-2);
797
+ width: 100%;
798
+ padding: var(--desk-space-1) var(--desk-space-2);
799
+ border: 0;
800
+ border-radius: 7px;
801
+ background: none;
802
+ color: var(--desk-ink);
803
+ font-family: inherit;
804
+ font-size: 13px;
805
+ text-align: left;
806
+ cursor: pointer;
807
+ }
808
+
809
+ .desk-sidebar-item:hover:not(:disabled) {
810
+ background: color-mix(in srgb, var(--desk-ink) 7%, transparent);
811
+ }
812
+
813
+ .desk-sidebar-item[data-current] {
814
+ background: color-mix(in srgb, var(--desk-accent) 18%, transparent);
815
+ font-weight: 500;
816
+ }
817
+
818
+ .desk-sidebar-item:focus-visible {
819
+ outline: 2px solid var(--desk-accent);
820
+ outline-offset: -2px;
821
+ }
822
+
823
+ .desk-sidebar-item:disabled {
824
+ opacity: .45;
825
+ cursor: not-allowed;
826
+ }
827
+
828
+ .desk-sidebar-icon {
829
+ display: grid;
830
+ place-items: center;
831
+ width: 16px;
832
+ height: 16px;
833
+ flex: none;
834
+ color: var(--desk-muted);
835
+ }
836
+
837
+ .desk-sidebar-item[data-current] .desk-sidebar-icon {
838
+ color: var(--desk-accent);
839
+ }
840
+
841
+ .desk-sidebar-label {
842
+ flex: 1;
843
+ min-width: 0;
844
+ overflow: hidden;
845
+ text-overflow: ellipsis;
846
+ white-space: nowrap;
847
+ }
848
+
849
+ .desk-sidebar-badge {
850
+ flex: none;
851
+ min-width: 18px;
852
+ padding: 0 5px;
853
+ border-radius: 9px;
854
+ background: color-mix(in srgb, var(--desk-ink) 12%, transparent);
855
+ font-size: 11px;
856
+ font-variant-numeric: tabular-nums;
857
+ text-align: center;
858
+ }
859
+
860
+ .desk-sidebar-footer {
861
+ margin-top: auto;
862
+ padding: var(--desk-space-2);
863
+ border-top: 1px solid var(--desk-rule);
864
+ }
865
+
866
+ /* Icon view: a Finder's icons, in rows that follow the window's width. */
867
+ .desk-icon-view {
868
+ list-style: none;
869
+ margin: 0;
870
+ padding: 12px;
871
+ display: grid;
872
+ grid-template-columns: repeat(auto-fill, minmax(104px, 1fr));
873
+ align-content: start;
874
+ gap: 8px;
875
+ }
876
+
877
+ .desk-icon-cell {
878
+ display: grid;
879
+ justify-items: center;
880
+ align-content: start;
881
+ gap: 4px;
882
+ padding: 10px 6px;
883
+ border-radius: 10px;
884
+ text-align: center;
885
+ cursor: default;
886
+ user-select: none;
887
+ outline: none;
888
+ }
889
+
890
+ .desk-icon-cell[aria-disabled="true"] {
891
+ opacity: .45;
892
+ }
893
+
894
+ .desk-icon-cell:focus-visible {
895
+ box-shadow: 0 0 0 2px var(--desk-accent);
896
+ }
897
+
898
+ .desk-icon-glyph {
899
+ position: relative;
900
+ display: grid;
901
+ place-items: center;
902
+ width: 56px;
903
+ height: 56px;
904
+ border-radius: 14px;
905
+ border: 1px solid var(--desk-rule);
906
+ background: var(--desk-dock-icon);
907
+ color: var(--desk-ink);
908
+ }
909
+
910
+ .desk-icon-glyph > svg,
911
+ .desk-icon-glyph > img {
912
+ width: 55%;
913
+ height: 55%;
914
+ object-fit: contain;
915
+ }
916
+
917
+ .desk-icon-badge {
918
+ position: absolute;
919
+ top: -5px;
920
+ right: -5px;
921
+ min-width: 18px;
922
+ padding: 0 5px;
923
+ border-radius: 9px;
924
+ background: var(--desk-accent);
925
+ color: #fff;
926
+ font-size: 11px;
927
+ line-height: 18px;
928
+ }
929
+
930
+ .desk-icon-label {
931
+ max-width: 100%;
932
+ padding: 1px 6px;
933
+ border-radius: 5px;
934
+ font-size: 12.5px;
935
+ line-height: 1.3;
936
+ overflow-wrap: anywhere;
937
+ display: -webkit-box;
938
+ -webkit-line-clamp: 2;
939
+ -webkit-box-orient: vertical;
940
+ overflow: hidden;
941
+ }
942
+
943
+ .desk-icon-subtitle {
944
+ max-width: 100%;
945
+ font-size: 11px;
946
+ color: var(--desk-muted);
947
+ overflow: hidden;
948
+ text-overflow: ellipsis;
949
+ white-space: nowrap;
950
+ }
951
+
952
+ .desk-icon-cell[aria-selected="true"] .desk-icon-glyph {
953
+ background: color-mix(in srgb, var(--desk-accent) 16%, transparent);
954
+ }
955
+
956
+ .desk-icon-cell[aria-selected="true"] .desk-icon-label {
957
+ background: var(--desk-accent);
958
+ color: #fff;
959
+ }
960
+
961
+ .desk-icon-view-empty {
962
+ display: grid;
963
+ place-items: center;
964
+ padding: 32px 16px;
965
+ color: var(--desk-muted);
966
+ text-align: center;
967
+ }
968
+
969
+ .desk-icon-drag {
970
+ display: grid;
971
+ place-items: center;
972
+ width: 40px;
973
+ height: 40px;
974
+ }