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