@patchbayhq/ui 0.1.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,1476 @@
1
+ :root {
2
+ --control-bg: transparent;
3
+ --control-active-bg: transparent;
4
+ --control-border: transparent;
5
+ --focus-border: #505050;
6
+ --slider-color: #282828;
7
+ --modulation-color: #6dd7ff;
8
+ --indicator-color: #a5a5a5;
9
+ --indicator-active-color: #000000;
10
+ --indicator-border-color: #505050;
11
+ --text-color: #000000;
12
+ --muted-text-color: #aaa493;
13
+ --panel-color: #282824;
14
+ --gridline-color: rgba(255, 255, 255, 0.08);
15
+ --control-radius: 2px;
16
+ --control-font:
17
+ "Avenir Next", Inter, ui-sans-serif, system-ui, -apple-system,
18
+ BlinkMacSystemFont, "Segoe UI", sans-serif;
19
+ }
20
+
21
+ .field {
22
+ display: inline-grid;
23
+ gap: 7px;
24
+ color: var(--text-color);
25
+ font-family: var(--control-font);
26
+ font-size: 12px;
27
+ line-height: 1.2;
28
+ }
29
+
30
+ .field__label {
31
+ color: var(--muted-text-color);
32
+ text-align: center;
33
+ }
34
+
35
+ .slider {
36
+ --slider-length: 95px;
37
+ --slider-thickness: 39px;
38
+ --slider-rail-thickness: 2px;
39
+ --slider-thumb-size: 9px;
40
+ --slider-mod-size: 5px;
41
+ position: relative;
42
+ display: inline-block;
43
+ inline-size: var(--slider-thickness);
44
+ block-size: var(--slider-length);
45
+ background: var(--control-bg);
46
+ border: 1px solid var(--control-border);
47
+ border-radius: var(--control-radius);
48
+ box-shadow: none;
49
+ contain: layout paint;
50
+ touch-action: none;
51
+ }
52
+
53
+ .slider[data-orientation="horizontal"] {
54
+ inline-size: var(--slider-length);
55
+ block-size: var(--slider-thickness);
56
+ min-inline-size: 50px;
57
+ }
58
+
59
+ .slider[data-focused="true"] {
60
+ border-color: var(--focus-border);
61
+ box-shadow: 0 0 0 1px var(--focus-border);
62
+ }
63
+
64
+ .slider input[type="range"] {
65
+ position: absolute;
66
+ inset: 0;
67
+ z-index: 5;
68
+ inline-size: 100%;
69
+ block-size: 100%;
70
+ margin: 0;
71
+ cursor: ns-resize;
72
+ opacity: 0;
73
+ pointer-events: none;
74
+ }
75
+
76
+ .slider[data-orientation="horizontal"] input[type="range"] {
77
+ cursor: ew-resize;
78
+ }
79
+
80
+ .slider__fill,
81
+ .slider__modulation,
82
+ .slider__thumb {
83
+ pointer-events: none;
84
+ position: absolute;
85
+ z-index: 1;
86
+ display: block;
87
+ }
88
+
89
+ .slider__fill {
90
+ inset-block-start: 6px;
91
+ inset-block-end: 6px;
92
+ inset-inline-start: 50%;
93
+ inline-size: var(--slider-rail-thickness);
94
+ background: var(--slider-color);
95
+ border-radius: 1px;
96
+ }
97
+
98
+ .slider[data-orientation="horizontal"] .slider__fill {
99
+ inset-inline-start: 6px;
100
+ inset-inline-end: 6px;
101
+ inset-block-start: calc(50% - var(--slider-rail-thickness) / 2);
102
+ inset-block-end: auto;
103
+ block-size: var(--slider-rail-thickness);
104
+ inline-size: auto;
105
+ }
106
+
107
+ .slider__modulation {
108
+ inset-inline-start: calc(50% + 9px);
109
+ inline-size: var(--slider-mod-size);
110
+ block-size: var(--slider-mod-size);
111
+ translate: -50% -50%;
112
+ display: none;
113
+ background: transparent;
114
+ }
115
+
116
+ .slider[data-orientation="horizontal"] .slider__modulation {
117
+ inset-block-start: calc(50% + 7px);
118
+ translate: -50% -50%;
119
+ }
120
+
121
+ .slider__thumb {
122
+ inset-inline-start: calc(50% + 2px);
123
+ inline-size: var(--slider-thumb-size);
124
+ block-size: var(--slider-thumb-size);
125
+ translate: 0 -50%;
126
+ filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.7));
127
+ }
128
+
129
+ .slider__thumb::before {
130
+ content: "";
131
+ position: absolute;
132
+ inset: 0;
133
+ background: var(--indicator-color);
134
+ clip-path: polygon(0 50%, 100% 0, 100% 100%);
135
+ }
136
+
137
+ .slider__thumb::after {
138
+ content: "";
139
+ position: absolute;
140
+ inset: 1px;
141
+ background: transparent;
142
+ border: 1px solid var(--indicator-border-color);
143
+ clip-path: polygon(0 50%, 100% 0, 100% 100%);
144
+ }
145
+
146
+ .slider[data-focused="true"] .slider__thumb::before {
147
+ background: var(--indicator-active-color);
148
+ }
149
+
150
+ .slider[data-orientation="horizontal"] .slider__thumb {
151
+ inset-block-start: calc(50% + 1px);
152
+ translate: -50% 0;
153
+ }
154
+
155
+ .slider[data-orientation="horizontal"] .slider__thumb::before {
156
+ clip-path: polygon(50% 0, 0 100%, 100% 100%);
157
+ }
158
+
159
+ .slider[data-orientation="horizontal"] .slider__thumb::after {
160
+ clip-path: polygon(50% 0, 0 100%, 100% 100%);
161
+ }
162
+
163
+ .slider[data-disabled="true"],
164
+ .slider:has(input:disabled) {
165
+ opacity: 0.5;
166
+ }
167
+
168
+ .demo-group {
169
+ display: flex;
170
+ flex-wrap: wrap;
171
+ align-items: center;
172
+ gap: 28px;
173
+ }
174
+
175
+ .demo-group--sliders {
176
+ min-block-size: 168px;
177
+ }
178
+
179
+ .field--wide {
180
+ align-self: end;
181
+ }
182
+
183
+ .dial {
184
+ --dial-size: 32px;
185
+ --dial-value: 0.5;
186
+ position: relative;
187
+ display: inline-grid;
188
+ place-items: center;
189
+ inline-size: var(--dial-size);
190
+ block-size: var(--dial-size);
191
+ background: transparent;
192
+ border-radius: 50%;
193
+ cursor: ns-resize;
194
+ touch-action: none;
195
+ }
196
+
197
+ .dial[data-drag-axis="horizontal"] {
198
+ cursor: ew-resize;
199
+ }
200
+
201
+ .dial::before {
202
+ content: "";
203
+ position: absolute;
204
+ inset: 2px;
205
+ background: conic-gradient(
206
+ from 225deg,
207
+ #9ebce2 0 calc(var(--dial-value) * 270deg),
208
+ #8a8a8a 0 calc(var(--dial-value) * 270deg + 10deg),
209
+ transparent 0
210
+ );
211
+ border: 0;
212
+ border-radius: inherit;
213
+ box-shadow: none;
214
+ mask: radial-gradient(
215
+ circle,
216
+ transparent 0 58%,
217
+ #000 61% 67%,
218
+ transparent 70%
219
+ );
220
+ -webkit-mask: radial-gradient(
221
+ circle,
222
+ transparent 0 58%,
223
+ #000 61% 67%,
224
+ transparent 70%
225
+ );
226
+ }
227
+
228
+ .dial::after {
229
+ content: "";
230
+ position: absolute;
231
+ inset-inline-start: calc(50% - 1px);
232
+ inset-block-start: calc(50% - 9px);
233
+ inline-size: 2px;
234
+ block-size: 9px;
235
+ background: #c6c6c6;
236
+ border-radius: 1px;
237
+ transform: rotate(calc(-135deg + var(--dial-value) * 270deg));
238
+ transform-origin: 50% 100%;
239
+ }
240
+
241
+ .dial input {
242
+ position: absolute;
243
+ inset: 0;
244
+ margin: 0;
245
+ cursor: pointer;
246
+ opacity: 0;
247
+ pointer-events: none;
248
+ }
249
+
250
+ .button,
251
+ .toggle span {
252
+ display: inline-block;
253
+ inline-size: 22px;
254
+ block-size: 22px;
255
+ padding: 0;
256
+ background: #242424;
257
+ border: 1px solid #525252;
258
+ border-radius: 2px;
259
+ box-shadow:
260
+ inset 0 1px 0 rgba(255, 255, 255, 0.12),
261
+ inset 0 -1px 0 rgba(0, 0, 0, 0.45);
262
+ }
263
+
264
+ .toggle[data-appearance="primary"] input:checked + span {
265
+ background: var(--modulation-color);
266
+ border-color: #101010;
267
+ }
268
+
269
+ .button[data-appearance="primary"] {
270
+ background: #242424;
271
+ border-color: var(--modulation-color);
272
+ box-shadow:
273
+ inset 0 1px 0 rgba(255, 255, 255, 0.14),
274
+ inset 0 -1px 0 rgba(0, 0, 0, 0.48);
275
+ }
276
+
277
+ .button[data-appearance="subtle"],
278
+ .toggle[data-appearance="subtle"] span {
279
+ background: #1d1d1d;
280
+ border-color: #3d3d3d;
281
+ }
282
+
283
+ .button[data-appearance="danger"],
284
+ .toggle[data-appearance="danger"] input:checked + span {
285
+ background: #d95d5d;
286
+ border-color: #180909;
287
+ }
288
+
289
+ .button {
290
+ cursor: pointer;
291
+ }
292
+
293
+ .button.is-active,
294
+ .button:active {
295
+ background: #6dd7ff;
296
+ border-color: #101010;
297
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.28);
298
+ }
299
+
300
+ .toggle {
301
+ position: relative;
302
+ display: inline-grid;
303
+ place-items: center;
304
+ inline-size: 24px;
305
+ block-size: 24px;
306
+ }
307
+
308
+ .toggle input {
309
+ position: absolute;
310
+ inset: 0;
311
+ margin: 0;
312
+ cursor: pointer;
313
+ opacity: 0;
314
+ }
315
+
316
+ .toggle input:checked + span {
317
+ background: #f0b51d;
318
+ border-color: #1a1a1a;
319
+ }
320
+
321
+ .text-button {
322
+ display: inline-flex;
323
+ align-items: center;
324
+ justify-content: center;
325
+ gap: 6px;
326
+ min-inline-size: 104px;
327
+ min-block-size: 21px;
328
+ padding: 0 10px;
329
+ color: #f1f1f1;
330
+ background: #303030;
331
+ border: 1px solid #111111;
332
+ border-radius: 2px;
333
+ box-shadow:
334
+ inset 0 1px 0 rgba(255, 255, 255, 0.11),
335
+ inset 0 -1px 0 rgba(0, 0, 0, 0.42);
336
+ cursor: pointer;
337
+ font-family: var(--control-font);
338
+ font-size: 12px;
339
+ }
340
+
341
+ .text-button[data-appearance="primary"] {
342
+ color: #eafdff;
343
+ background: #242424;
344
+ border-color: var(--modulation-color);
345
+ }
346
+
347
+ .text-button[data-appearance="subtle"] {
348
+ color: var(--muted-text-color);
349
+ background: #242424;
350
+ border-color: #333333;
351
+ }
352
+
353
+ .text-button[data-appearance="danger"] {
354
+ color: #fff2ef;
355
+ background: #783431;
356
+ border-color: #1a0908;
357
+ }
358
+
359
+ .text-button:active {
360
+ color: #ffffff;
361
+ background: #242424;
362
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.75);
363
+ }
364
+
365
+ .text-button[data-appearance="primary"][aria-pressed="true"],
366
+ .text-button[data-appearance="primary"]:active {
367
+ color: #06120b;
368
+ background: var(--modulation-color);
369
+ border-color: #101010;
370
+ }
371
+
372
+ .text-button:disabled {
373
+ cursor: not-allowed;
374
+ opacity: 0.48;
375
+ }
376
+
377
+ .text-button__icon {
378
+ display: inline-grid;
379
+ place-items: center;
380
+ min-inline-size: 1em;
381
+ line-height: 1;
382
+ }
383
+
384
+ .text-button__picture {
385
+ inline-size: 15px;
386
+ block-size: 15px;
387
+ flex: 0 0 auto;
388
+ object-fit: cover;
389
+ border-radius: 2px;
390
+ }
391
+
392
+ .text-button__label {
393
+ min-inline-size: 0;
394
+ overflow: hidden;
395
+ text-overflow: ellipsis;
396
+ }
397
+
398
+ .label {
399
+ min-inline-size: 150px;
400
+ margin: 0;
401
+ padding: 2px 4px;
402
+ color: #d0d0d0;
403
+ font-family: var(--control-font);
404
+ font-size: 12px;
405
+ line-height: 1.2;
406
+ }
407
+
408
+ .tabs {
409
+ display: inline-flex;
410
+ align-items: stretch;
411
+ overflow: hidden;
412
+ border: 1px solid #151515;
413
+ border-radius: 2px;
414
+ font-family: var(--control-font);
415
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
416
+ }
417
+
418
+ .tab {
419
+ min-inline-size: 58px;
420
+ min-block-size: 20px;
421
+ padding: 0 9px;
422
+ color: #f1f1f1;
423
+ background: #303030;
424
+ border: 0;
425
+ border-inline-end: 1px solid #151515;
426
+ cursor: pointer;
427
+ font: inherit;
428
+ font-size: 12px;
429
+ }
430
+
431
+ .tab:last-child {
432
+ border-inline-end: 0;
433
+ }
434
+
435
+ .tab.is-active {
436
+ color: #000000;
437
+ background: #f0b51d;
438
+ }
439
+
440
+ .menu {
441
+ position: relative;
442
+ display: inline-grid;
443
+ inline-size: max-content;
444
+ min-inline-size: 132px;
445
+ font-family: var(--control-font);
446
+ font-size: 12px;
447
+ }
448
+
449
+ .menu__button,
450
+ .number-box {
451
+ min-block-size: 21px;
452
+ color: #f1f1f1;
453
+ background: #303030;
454
+ border: 1px solid #151515;
455
+ border-radius: 2px;
456
+ font-family: var(--control-font);
457
+ font-size: 12px;
458
+ box-shadow:
459
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
460
+ inset 0 -1px 0 rgba(0, 0, 0, 0.45);
461
+ }
462
+
463
+ .menu__button {
464
+ display: inline-flex;
465
+ align-items: center;
466
+ justify-content: space-between;
467
+ gap: 12px;
468
+ min-inline-size: 132px;
469
+ padding: 0 22px 0 6px;
470
+ cursor: pointer;
471
+ }
472
+
473
+ .menu__button:disabled {
474
+ cursor: not-allowed;
475
+ opacity: 0.52;
476
+ }
477
+
478
+ .menu__chevron {
479
+ position: absolute;
480
+ inset-block-start: 50%;
481
+ inset-inline-end: 6px;
482
+ inline-size: 0;
483
+ block-size: 0;
484
+ border-inline: 3px solid transparent;
485
+ border-block-start: 5px solid #eeeeee;
486
+ translate: 0 -30%;
487
+ pointer-events: none;
488
+ }
489
+
490
+ .menu__value {
491
+ min-inline-size: 0;
492
+ overflow: hidden;
493
+ text-overflow: ellipsis;
494
+ white-space: nowrap;
495
+ }
496
+
497
+ .menu__list {
498
+ position: absolute;
499
+ z-index: 30;
500
+ inset-block-start: calc(100% + 3px);
501
+ inset-inline: 0;
502
+ display: grid;
503
+ min-inline-size: 100%;
504
+ max-block-size: 172px;
505
+ overflow: auto;
506
+ padding: 3px;
507
+ background: #20211d;
508
+ border: 1px solid #111111;
509
+ border-radius: 2px;
510
+ box-shadow:
511
+ inset 0 1px 0 rgba(255, 255, 255, 0.06),
512
+ 0 10px 24px rgba(0, 0, 0, 0.32);
513
+ }
514
+
515
+ .menu__option {
516
+ min-block-size: 22px;
517
+ padding: 0 8px;
518
+ color: #f1f1f1;
519
+ text-align: start;
520
+ background: transparent;
521
+ border: 0;
522
+ border-radius: 1px;
523
+ cursor: pointer;
524
+ font: inherit;
525
+ }
526
+
527
+ .menu__option.is-active,
528
+ .menu__option:hover,
529
+ .menu__option:focus-visible {
530
+ color: #06120b;
531
+ background: var(--modulation-color);
532
+ outline: none;
533
+ }
534
+
535
+ .menu__option.is-selected::after {
536
+ content: "";
537
+ float: inline-end;
538
+ inline-size: 5px;
539
+ block-size: 5px;
540
+ margin-block-start: 7px;
541
+ background: currentColor;
542
+ border-radius: 50%;
543
+ }
544
+
545
+ .menu__option:disabled {
546
+ cursor: not-allowed;
547
+ opacity: 0.42;
548
+ }
549
+
550
+ .number-box {
551
+ inline-size: 82px;
552
+ padding: 0 6px;
553
+ }
554
+
555
+ .arrows {
556
+ display: inline-flex;
557
+ align-items: stretch;
558
+ overflow: hidden;
559
+ border: 1px solid #4d4d4d;
560
+ border-radius: 2px;
561
+ }
562
+
563
+ .arrows button {
564
+ position: relative;
565
+ inline-size: 28px;
566
+ block-size: 18px;
567
+ padding: 0;
568
+ background: #a8a8a8;
569
+ border: 0;
570
+ border-inline-end: 1px solid #4d4d4d;
571
+ cursor: pointer;
572
+ }
573
+
574
+ .arrows button:last-child {
575
+ border-inline-end: 0;
576
+ }
577
+
578
+ .arrows button::before {
579
+ content: "";
580
+ position: absolute;
581
+ inset-block-start: 50%;
582
+ inset-inline-start: 50%;
583
+ inline-size: 0;
584
+ block-size: 0;
585
+ border-block: 4px solid transparent;
586
+ border-inline-end: 6px solid #1c1c1c;
587
+ translate: -58% -50%;
588
+ }
589
+
590
+ .arrows button:last-child::before {
591
+ border-inline-start: 6px solid #1c1c1c;
592
+ border-inline-end: 0;
593
+ translate: -42% -50%;
594
+ }
595
+
596
+ .drop {
597
+ position: relative;
598
+ display: inline-grid;
599
+ place-items: center;
600
+ inline-size: 180px;
601
+ block-size: 72px;
602
+ background: #333333;
603
+ border: 1px solid #5b5b5b;
604
+ border-radius: 2px;
605
+ cursor: pointer;
606
+ }
607
+
608
+ .drop input {
609
+ position: absolute;
610
+ inset: 0;
611
+ margin: 0;
612
+ cursor: pointer;
613
+ opacity: 0;
614
+ }
615
+
616
+ .drop span {
617
+ inline-size: 54px;
618
+ block-size: 36px;
619
+ border: 2px solid #a5a5a5;
620
+ border-block-start-width: 8px;
621
+ border-radius: 1px;
622
+ opacity: 0.75;
623
+ }
624
+
625
+ .line-set {
626
+ display: inline-flex;
627
+ align-items: center;
628
+ gap: 28px;
629
+ }
630
+
631
+ .line {
632
+ display: block;
633
+ inline-size: 170px;
634
+ block-size: 7px;
635
+ background: #a5a5a5;
636
+ border: 1px solid #1d1d1d;
637
+ }
638
+
639
+ .line--vertical {
640
+ inline-size: 7px;
641
+ block-size: 88px;
642
+ }
643
+
644
+ .grid {
645
+ position: relative;
646
+ display: grid;
647
+ grid-template-columns: repeat(var(--grid-columns, 16), 1fr);
648
+ grid-template-rows: 74px 14px;
649
+ gap: 3px 0;
650
+ inline-size: 172px;
651
+ block-size: 96px;
652
+ padding: 2px 0 1px;
653
+ background: #333333;
654
+ border: 0;
655
+ border-radius: 1px;
656
+ box-sizing: border-box;
657
+ }
658
+
659
+ .grid::before {
660
+ content: "";
661
+ position: absolute;
662
+ inset-block-start: 2px;
663
+ inset-inline: 0;
664
+ block-size: 74px;
665
+ background:
666
+ linear-gradient(
667
+ to right,
668
+ rgba(0, 0, 0, 0.24) 0 25%,
669
+ transparent 25% 50%,
670
+ rgba(0, 0, 0, 0.2) 50% 75%,
671
+ transparent 75% 100%
672
+ ),
673
+ repeating-linear-gradient(
674
+ to right,
675
+ rgba(10, 10, 10, 0.95) 0 1px,
676
+ transparent 1px calc(100% / var(--grid-columns, 16))
677
+ ),
678
+ repeating-linear-gradient(
679
+ to bottom,
680
+ rgba(255, 255, 255, 0.05) 0 1px,
681
+ transparent 1px 5px
682
+ ),
683
+ linear-gradient(#292929, #202020);
684
+ border: 1px solid #151515;
685
+ box-shadow:
686
+ inset 0 1px 0 rgba(255, 255, 255, 0.05),
687
+ inset 0 -1px 0 rgba(0, 0, 0, 0.55);
688
+ pointer-events: none;
689
+ }
690
+
691
+ .grid::after {
692
+ content: "";
693
+ position: absolute;
694
+ inset-block-start: 2px;
695
+ inset-inline: 0;
696
+ block-size: 74px;
697
+ background: repeating-linear-gradient(
698
+ to right,
699
+ transparent 0 calc(25% - 2px),
700
+ rgba(0, 0, 0, 0.86) calc(25% - 2px) 25%
701
+ );
702
+ border-inline: 1px solid #0c0c0c;
703
+ pointer-events: none;
704
+ }
705
+
706
+ .grid button,
707
+ .grid__cell,
708
+ .grid__direction {
709
+ position: relative;
710
+ z-index: 1;
711
+ min-inline-size: 0;
712
+ min-block-size: 0;
713
+ inline-size: auto;
714
+ block-size: auto;
715
+ padding: 0;
716
+ appearance: none;
717
+ background: transparent;
718
+ border: 0;
719
+ border-radius: 0;
720
+ cursor: crosshair;
721
+ }
722
+
723
+ .grid button:nth-child(-n + 16),
724
+ .grid__cell {
725
+ --grid-marker-y: 50%;
726
+ }
727
+
728
+ .grid button:nth-child(-n + 16).is-active::before,
729
+ .grid__cell.is-active::before {
730
+ content: "";
731
+ position: absolute;
732
+ inset-block-start: var(--grid-marker-y);
733
+ inset-inline: 2px;
734
+ block-size: 2px;
735
+ background: #aebaff;
736
+ border-radius: 1px;
737
+ box-shadow:
738
+ 0 0 0 1px rgba(10, 10, 10, 0.22),
739
+ 0 0 4px rgba(116, 158, 255, 0.35);
740
+ transform: translateY(-50%) rotate(-4deg);
741
+ }
742
+
743
+ .grid button:nth-child(n + 17),
744
+ .grid__direction {
745
+ align-self: end;
746
+ block-size: 13px;
747
+ margin-inline: 1px;
748
+ background: linear-gradient(#5f5f5f, #383838);
749
+ border: 1px solid #171717;
750
+ border-radius: 1px;
751
+ box-shadow:
752
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
753
+ inset 0 -1px 0 rgba(0, 0, 0, 0.55);
754
+ cursor: pointer;
755
+ }
756
+
757
+ .grid button:nth-child(n + 17)::before,
758
+ .grid__direction::before {
759
+ content: "";
760
+ position: absolute;
761
+ inset-block-start: 50%;
762
+ inset-inline-start: 50%;
763
+ inline-size: 0;
764
+ block-size: 0;
765
+ border-block: 4px solid transparent;
766
+ border-inline-end: 0 solid transparent;
767
+ border-inline-start: 6px solid #d8d8d8;
768
+ filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.65));
769
+ transform: translate(-38%, -50%);
770
+ }
771
+
772
+ .grid .grid__direction[data-grid-direction="left"] {
773
+ background: linear-gradient(#6a6a6a, #414141);
774
+ }
775
+
776
+ .grid .grid__direction[data-grid-direction="left"]::before {
777
+ border-inline-start: 0 solid transparent;
778
+ border-inline-end: 6px solid #d8d8d8;
779
+ transform: translate(-62%, -50%);
780
+ }
781
+
782
+ .grid .grid__direction[data-grid-direction="off"] {
783
+ background: linear-gradient(#484848, #2d2d2d);
784
+ }
785
+
786
+ .grid .grid__direction[data-grid-direction="off"]::before,
787
+ .grid .grid__direction[data-grid-direction="off"]::after {
788
+ content: "";
789
+ position: absolute;
790
+ inset-block-start: 50%;
791
+ inset-inline-start: 50%;
792
+ inline-size: 8px;
793
+ block-size: 2px;
794
+ background: #d8d8d8;
795
+ border: 0;
796
+ border-radius: 1px;
797
+ filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.65));
798
+ transform: translate(-50%, -50%) rotate(45deg);
799
+ }
800
+
801
+ .grid .grid__direction[data-grid-direction="off"]::after {
802
+ transform: translate(-50%, -50%) rotate(-45deg);
803
+ }
804
+
805
+ .grid button:nth-child(n + 17).is-active,
806
+ .grid button:nth-child(n + 17):active,
807
+ .grid__direction:active {
808
+ background: linear-gradient(#7a7a7a, #494949);
809
+ border-color: #0f2330;
810
+ }
811
+
812
+ .grid button:focus-visible,
813
+ .grid__cell:focus-visible,
814
+ .grid__direction:focus-visible {
815
+ outline: 1px solid #aebaff;
816
+ outline-offset: -1px;
817
+ }
818
+
819
+ .step-sequencer {
820
+ --step-sequencer-label-inline-size: 50px;
821
+ --step-sequencer-key-inline-size: 38px;
822
+ --step-sequencer-cell-inline-size: 14px;
823
+ --step-sequencer-cell-block-size: 12px;
824
+ --step-sequencer-loop-block-size: 16px;
825
+ --step-sequencer-roll-inline-size: calc(var(--step-sequencer-cell-inline-size) * 16);
826
+ --step-sequencer-roll-block-size: calc(var(--step-sequencer-cell-block-size) * 8);
827
+ position: relative;
828
+ display: grid;
829
+ grid-template-columns:
830
+ var(--step-sequencer-label-inline-size) var(--step-sequencer-key-inline-size)
831
+ var(--step-sequencer-roll-inline-size);
832
+ grid-template-rows: var(--step-sequencer-loop-block-size) var(
833
+ --step-sequencer-roll-block-size
834
+ );
835
+ inline-size: calc(
836
+ var(--step-sequencer-label-inline-size) + var(--step-sequencer-key-inline-size) +
837
+ var(--step-sequencer-roll-inline-size)
838
+ );
839
+ block-size: calc(
840
+ var(--step-sequencer-loop-block-size) + var(--step-sequencer-roll-block-size)
841
+ );
842
+ overflow: hidden;
843
+ background: #3b3b3b;
844
+ border: 1px solid #101010;
845
+ border-radius: 2px;
846
+ }
847
+
848
+ .step-sequencer__loop-ruler {
849
+ grid-column: 3;
850
+ grid-row: 1;
851
+ z-index: 2;
852
+ display: grid;
853
+ grid-template-columns: repeat(16, var(--step-sequencer-cell-inline-size));
854
+ align-items: stretch;
855
+ inline-size: var(--step-sequencer-roll-inline-size);
856
+ block-size: var(--step-sequencer-loop-block-size);
857
+ box-sizing: border-box;
858
+ pointer-events: auto;
859
+ }
860
+
861
+ .step-sequencer__loop-track {
862
+ grid-column: 1 / -1;
863
+ grid-row: 1;
864
+ background: linear-gradient(#444, #282828);
865
+ border: 1px solid #101010;
866
+ box-sizing: border-box;
867
+ }
868
+
869
+ .step-sequencer__loop-range {
870
+ position: relative;
871
+ grid-row: 1;
872
+ z-index: 1;
873
+ display: grid;
874
+ grid-template-columns: minmax(10px, 1fr) minmax(10px, 1fr);
875
+ align-items: center;
876
+ min-inline-size: 14px;
877
+ background: linear-gradient(#4c4c4c, #313131);
878
+ border: 1px solid #101010;
879
+ box-sizing: border-box;
880
+ color: #e8e8e8;
881
+ font-family: var(--control-font);
882
+ font-size: 10px;
883
+ line-height: 1;
884
+ }
885
+
886
+ .step-sequencer__loop-handle {
887
+ align-self: stretch;
888
+ display: inline-flex;
889
+ align-items: center;
890
+ gap: 2px;
891
+ min-inline-size: 0;
892
+ min-block-size: 0;
893
+ padding: 1px 3px 0;
894
+ color: inherit;
895
+ background: transparent;
896
+ border: 0;
897
+ font: inherit;
898
+ line-height: inherit;
899
+ cursor: ew-resize;
900
+ touch-action: none;
901
+ }
902
+
903
+ .step-sequencer__loop-handle.is-start {
904
+ justify-self: start;
905
+ text-align: start;
906
+ }
907
+
908
+ .step-sequencer__loop-handle.is-end {
909
+ justify-self: end;
910
+ text-align: end;
911
+ }
912
+
913
+ .step-sequencer__loop-arrow {
914
+ display: inline-block;
915
+ inline-size: 0;
916
+ block-size: 0;
917
+ opacity: 0.9;
918
+ }
919
+
920
+ .step-sequencer__loop-arrow.is-right {
921
+ border-block: 3px solid transparent;
922
+ border-inline-start: 4px solid currentColor;
923
+ }
924
+
925
+ .step-sequencer__loop-arrow.is-left {
926
+ border-block: 3px solid transparent;
927
+ border-inline-end: 4px solid currentColor;
928
+ }
929
+
930
+ .step-sequencer__loop-handle:focus-visible {
931
+ outline: 1px solid #aebaff;
932
+ outline-offset: -1px;
933
+ }
934
+
935
+ .step-sequencer__labels {
936
+ grid-column: 1;
937
+ grid-row: 1 / 3;
938
+ display: flex;
939
+ align-items: flex-end;
940
+ justify-content: flex-start;
941
+ padding: 0 5px 5px;
942
+ color: #ece7d8;
943
+ background: #3b3b3b;
944
+ font-family: var(--control-font);
945
+ font-size: 11px;
946
+ line-height: 1;
947
+ }
948
+
949
+ .step-sequencer__keys {
950
+ grid-column: 2;
951
+ grid-row: 2;
952
+ display: grid;
953
+ grid-template-rows: repeat(9, 1fr);
954
+ background: #ffffff;
955
+ border-inline: 1px solid #101010;
956
+ }
957
+
958
+ .step-sequencer__keys span {
959
+ position: relative;
960
+ display: block;
961
+ inline-size: 100%;
962
+ background: #ffffff;
963
+ border-block-end: 1px solid #101010;
964
+ box-sizing: border-box;
965
+ cursor: pointer;
966
+ }
967
+
968
+ .step-sequencer__keys span.is-black {
969
+ background: #101010;
970
+ border-block-end-color: #ffffff;
971
+ }
972
+
973
+ .step-sequencer__keys span:hover,
974
+ .step-sequencer__keys span:focus-visible {
975
+ outline: 2px solid rgba(49, 135, 255, 0.5);
976
+ outline-offset: -2px;
977
+ }
978
+
979
+ .step-sequencer__keys span[aria-pressed="true"] {
980
+ background: #f3b334;
981
+ }
982
+
983
+ .step-sequencer__keys span.is-black[aria-pressed="true"] {
984
+ background: #d48f1f;
985
+ border-block-end-color: #101010;
986
+ }
987
+
988
+ .step-sequencer__roll {
989
+ grid-column: 3;
990
+ grid-row: 2;
991
+ display: grid;
992
+ grid-template-columns: repeat(16, var(--step-sequencer-cell-inline-size));
993
+ grid-template-rows: repeat(8, var(--step-sequencer-cell-block-size));
994
+ inline-size: var(--step-sequencer-roll-inline-size);
995
+ block-size: var(--step-sequencer-roll-block-size);
996
+ background:
997
+ repeating-linear-gradient(
998
+ to right,
999
+ rgba(15, 95, 130, 0.18) 0 1px,
1000
+ transparent 1px var(--step-sequencer-cell-inline-size)
1001
+ ),
1002
+ repeating-linear-gradient(
1003
+ to bottom,
1004
+ rgba(0, 0, 0, 0.16) 0 1px,
1005
+ transparent 1px var(--step-sequencer-cell-block-size)
1006
+ ),
1007
+ #eee7dc;
1008
+ }
1009
+
1010
+ .step-sequencer__roll button {
1011
+ position: relative;
1012
+ min-inline-size: 0;
1013
+ min-block-size: 0;
1014
+ padding: 0;
1015
+ background: transparent;
1016
+ border: 0;
1017
+ cursor: pointer;
1018
+ }
1019
+
1020
+ .step-sequencer__roll button[data-step-bar-start="true"] {
1021
+ background: rgba(34, 159, 227, 0.08);
1022
+ }
1023
+
1024
+ .step-sequencer__note {
1025
+ position: absolute;
1026
+ inset: 3px 2px;
1027
+ border-radius: 1px;
1028
+ pointer-events: none;
1029
+ }
1030
+
1031
+ .step-sequencer__note.is-orange {
1032
+ background: #f3b334;
1033
+ box-shadow:
1034
+ inset 0 1px rgba(255, 255, 255, 0.35),
1035
+ 0 0 0 1px rgba(55, 41, 12, 0.45);
1036
+ }
1037
+
1038
+ .step-sequencer__note.is-blue {
1039
+ background: #229fe3;
1040
+ box-shadow:
1041
+ inset 0 1px rgba(255, 255, 255, 0.4),
1042
+ 0 0 0 1px rgba(8, 56, 81, 0.45);
1043
+ }
1044
+
1045
+ .envelope {
1046
+ inline-size: 210px;
1047
+ block-size: 96px;
1048
+ background: #181818;
1049
+ border: 1px solid #4d4d4d;
1050
+ border-radius: 2px;
1051
+ }
1052
+
1053
+ .envelope svg {
1054
+ display: block;
1055
+ inline-size: 100%;
1056
+ block-size: 100%;
1057
+ touch-action: none;
1058
+ }
1059
+
1060
+ .envelope__grid {
1061
+ fill: none;
1062
+ stroke: rgba(255, 255, 255, 0.1);
1063
+ stroke-width: 1;
1064
+ }
1065
+
1066
+ .envelope__curve {
1067
+ fill: none;
1068
+ stroke: #6dd7ff;
1069
+ stroke-linecap: round;
1070
+ stroke-linejoin: round;
1071
+ stroke-width: 2;
1072
+ }
1073
+
1074
+ .envelope circle {
1075
+ fill: #a94444;
1076
+ stroke: #f1c26a;
1077
+ stroke-width: 1;
1078
+ cursor: grab;
1079
+ }
1080
+
1081
+ .envelope rect {
1082
+ fill: transparent;
1083
+ stroke: #e7b44e;
1084
+ stroke-width: 2;
1085
+ cursor: grab;
1086
+ }
1087
+
1088
+ .scope {
1089
+ display: block;
1090
+ inline-size: 184px;
1091
+ block-size: 98px;
1092
+ background: #161616;
1093
+ border: 1px solid #4d4d4d;
1094
+ border-radius: 2px;
1095
+ }
1096
+
1097
+ .meter {
1098
+ display: inline-grid;
1099
+ place-items: center;
1100
+ inline-size: 44px;
1101
+ block-size: 132px;
1102
+ background: transparent;
1103
+ }
1104
+
1105
+ .meter__bar {
1106
+ position: relative;
1107
+ display: block;
1108
+ inline-size: 44px;
1109
+ block-size: 132px;
1110
+ overflow: hidden;
1111
+ background: #101010;
1112
+ box-shadow:
1113
+ inset 1px 0 #050505,
1114
+ inset -1px 0 #2b2b2b,
1115
+ inset 0 1px #2b2b2b;
1116
+ }
1117
+
1118
+ .meter__bar::before {
1119
+ content: "";
1120
+ position: absolute;
1121
+ inset-inline: 3px;
1122
+ inset-block-end: 0;
1123
+ block-size: calc(100% * var(--meter-value, 0));
1124
+ background: linear-gradient(
1125
+ to top,
1126
+ #45b95c 0 72%,
1127
+ #d7c947 72% 90%,
1128
+ #d45145 90%
1129
+ );
1130
+ }
1131
+
1132
+ .meter__bar::after {
1133
+ content: "";
1134
+ position: absolute;
1135
+ inset-block-start: 10px;
1136
+ inset-inline: 0;
1137
+ block-size: 1px;
1138
+ background: #333333;
1139
+ }
1140
+
1141
+ .gain {
1142
+ --gain-value: 0.75;
1143
+ --gain-signal: 0;
1144
+ position: relative;
1145
+ display: inline-grid;
1146
+ place-items: center;
1147
+ inline-size: 54px;
1148
+ block-size: 148px;
1149
+ background: transparent;
1150
+ }
1151
+
1152
+ .gain::before {
1153
+ content: "";
1154
+ position: absolute;
1155
+ inset-block-start: 0;
1156
+ inset-block-end: 16px;
1157
+ inset-inline-start: 12px;
1158
+ inline-size: 12px;
1159
+ background: #101010;
1160
+ box-shadow:
1161
+ inset 1px 0 #050505,
1162
+ inset -1px 0 #2b2b2b,
1163
+ inset 0 1px #2b2b2b;
1164
+ }
1165
+
1166
+ .gain[data-thumb-side="left"]::before {
1167
+ inset-inline-start: auto;
1168
+ inset-inline-end: 0;
1169
+ }
1170
+
1171
+ .gain input {
1172
+ position: absolute;
1173
+ inset-block-start: 0;
1174
+ inset-block-end: 16px;
1175
+ inset-inline: 0;
1176
+ inline-size: 100%;
1177
+ margin: 0;
1178
+ cursor: ns-resize;
1179
+ opacity: 0;
1180
+ }
1181
+
1182
+ .gain__signal {
1183
+ position: absolute;
1184
+ inset-inline-start: 15px;
1185
+ inset-block-end: 16px;
1186
+ inline-size: 6px;
1187
+ block-size: calc((100% - 16px) * var(--gain-signal, 0));
1188
+ background: linear-gradient(
1189
+ to top,
1190
+ #45b95c 0 72%,
1191
+ #d7c947 72% 90%,
1192
+ #d45145 90%
1193
+ );
1194
+ opacity: 0.9;
1195
+ pointer-events: none;
1196
+ }
1197
+
1198
+ .gain[data-thumb-side="left"] .gain__signal {
1199
+ inset-inline-start: auto;
1200
+ inset-inline-end: 3px;
1201
+ }
1202
+
1203
+ .gain__thumb {
1204
+ position: absolute;
1205
+ inset-block-end: calc(16px + (100% - 24px) * var(--gain-value, 0.75));
1206
+ inset-inline-start: 25px;
1207
+ inline-size: 0;
1208
+ block-size: 0;
1209
+ border-block: 4px solid transparent;
1210
+ border-inline-end: 7px solid #a5a5a5;
1211
+ pointer-events: none;
1212
+ }
1213
+
1214
+ .gain[data-thumb-side="left"] .gain__thumb {
1215
+ inset-inline-start: auto;
1216
+ inset-inline-end: 17px;
1217
+ border-inline-start: 7px solid #a5a5a5;
1218
+ border-inline-end: 0;
1219
+ }
1220
+
1221
+ .gain.gain--flush::before,
1222
+ .gain.gain--flush input {
1223
+ inset-block-end: 0;
1224
+ }
1225
+
1226
+ .gain.gain--flush .gain__signal {
1227
+ inset-block-end: 0;
1228
+ block-size: calc(100% * var(--gain-signal, 0));
1229
+ }
1230
+
1231
+ .gain.gain--flush .gain__thumb {
1232
+ inset-block-end: calc((100% - 8px) * var(--gain-value, 0.75));
1233
+ }
1234
+
1235
+ .gain__readout {
1236
+ position: absolute;
1237
+ inset-inline: 0;
1238
+ inset-block-end: 0;
1239
+ color: #c8c8c8;
1240
+ font-family: var(--control-font);
1241
+ font-size: 9px;
1242
+ line-height: 12px;
1243
+ text-align: center;
1244
+ white-space: nowrap;
1245
+ pointer-events: none;
1246
+ }
1247
+
1248
+ .color-swatches {
1249
+ display: grid;
1250
+ grid-template-columns: repeat(3, 34px);
1251
+ gap: 8px;
1252
+ padding: 10px;
1253
+ background: #1d1d1d;
1254
+ border: 1px solid #4d4d4d;
1255
+ border-radius: 2px;
1256
+ }
1257
+
1258
+ .color-swatches input {
1259
+ inline-size: 34px;
1260
+ block-size: 28px;
1261
+ padding: 0;
1262
+ overflow: hidden;
1263
+ background: transparent;
1264
+ border: 1px solid #555555;
1265
+ border-radius: 2px;
1266
+ cursor: pointer;
1267
+ }
1268
+
1269
+ .panel {
1270
+ display: grid;
1271
+ gap: 12px;
1272
+ min-inline-size: 0;
1273
+ padding: 14px;
1274
+ color: var(--text-color);
1275
+ background:
1276
+ linear-gradient(rgba(255, 255, 255, 0.035), transparent 34px),
1277
+ var(--panel-color);
1278
+ border: 1px solid rgba(0, 0, 0, 0.62);
1279
+ border-radius: min(8px, calc(var(--control-radius) + 4px));
1280
+ box-shadow:
1281
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
1282
+ 0 12px 28px rgba(0, 0, 0, 0.22);
1283
+ box-sizing: border-box;
1284
+ font-family: var(--control-font);
1285
+ }
1286
+
1287
+ .panel--compact {
1288
+ gap: 8px;
1289
+ padding: 10px;
1290
+ }
1291
+
1292
+ .panel-header {
1293
+ display: flex;
1294
+ align-items: start;
1295
+ justify-content: space-between;
1296
+ gap: 14px;
1297
+ min-inline-size: 0;
1298
+ }
1299
+
1300
+ .panel-header__main {
1301
+ display: grid;
1302
+ gap: 2px;
1303
+ min-inline-size: 0;
1304
+ }
1305
+
1306
+ .panel-header__eyebrow {
1307
+ color: var(--muted-text-color);
1308
+ font-size: 10px;
1309
+ line-height: 1.1;
1310
+ text-transform: uppercase;
1311
+ }
1312
+
1313
+ .panel-header__title,
1314
+ .panel-section__title {
1315
+ margin: 0;
1316
+ color: var(--text-color);
1317
+ font-size: 13px;
1318
+ font-weight: 650;
1319
+ line-height: 1.2;
1320
+ }
1321
+
1322
+ .panel-header__subtitle {
1323
+ margin: 0;
1324
+ color: var(--muted-text-color);
1325
+ font-size: 11px;
1326
+ line-height: 1.25;
1327
+ }
1328
+
1329
+ .panel-header__actions,
1330
+ .panel-section__actions {
1331
+ display: flex;
1332
+ flex-wrap: wrap;
1333
+ align-items: center;
1334
+ justify-content: end;
1335
+ gap: 6px;
1336
+ min-inline-size: 0;
1337
+ }
1338
+
1339
+ .panel-section {
1340
+ display: grid;
1341
+ gap: 9px;
1342
+ min-inline-size: 0;
1343
+ }
1344
+
1345
+ .panel-section__header {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ justify-content: space-between;
1349
+ gap: 10px;
1350
+ min-inline-size: 0;
1351
+ }
1352
+
1353
+ .panel-section__body {
1354
+ display: grid;
1355
+ gap: 10px;
1356
+ min-inline-size: 0;
1357
+ }
1358
+
1359
+ .status-indicator {
1360
+ display: inline-flex;
1361
+ align-items: center;
1362
+ gap: 6px;
1363
+ min-block-size: 18px;
1364
+ max-inline-size: 100%;
1365
+ color: var(--muted-text-color);
1366
+ font-family: var(--control-font);
1367
+ font-size: 11px;
1368
+ line-height: 1;
1369
+ white-space: nowrap;
1370
+ }
1371
+
1372
+ .status-indicator__dot {
1373
+ display: inline-block;
1374
+ inline-size: 7px;
1375
+ block-size: 7px;
1376
+ flex: 0 0 auto;
1377
+ background: #777777;
1378
+ border-radius: 50%;
1379
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.55);
1380
+ }
1381
+
1382
+ .status-indicator__label {
1383
+ overflow: hidden;
1384
+ text-overflow: ellipsis;
1385
+ }
1386
+
1387
+ .status-indicator__value {
1388
+ color: var(--text-color);
1389
+ font-size: 11px;
1390
+ font-weight: 650;
1391
+ }
1392
+
1393
+ .status-indicator[data-tone="active"] .status-indicator__dot {
1394
+ background: #62d887;
1395
+ box-shadow:
1396
+ 0 0 0 1px rgba(0, 0, 0, 0.55),
1397
+ 0 0 8px rgba(98, 216, 135, 0.45);
1398
+ }
1399
+
1400
+ .status-indicator[data-tone="warning"] .status-indicator__dot {
1401
+ background: #f0b51d;
1402
+ }
1403
+
1404
+ .status-indicator[data-tone="danger"] .status-indicator__dot {
1405
+ background: #e05d54;
1406
+ }
1407
+
1408
+ .status-indicator[data-pulse="true"] .status-indicator__dot {
1409
+ animation: status-indicator-pulse 1.4s ease-in-out infinite;
1410
+ }
1411
+
1412
+ @keyframes status-indicator-pulse {
1413
+ 0%,
1414
+ 100% {
1415
+ opacity: 0.58;
1416
+ }
1417
+
1418
+ 50% {
1419
+ opacity: 1;
1420
+ }
1421
+ }
1422
+
1423
+ .macro-rack {
1424
+ --macro-rack-columns: 4;
1425
+ container-type: inline-size;
1426
+ display: grid;
1427
+ grid-template-columns: repeat(var(--macro-rack-columns), minmax(0, 1fr));
1428
+ align-items: end;
1429
+ gap: 12px clamp(4px, 3cqi, 10px);
1430
+ min-inline-size: 0;
1431
+ padding: 12px;
1432
+ background: rgba(16, 16, 16, 0.42);
1433
+ border: 1px solid rgba(255, 255, 255, 0.08);
1434
+ border-radius: min(8px, calc(var(--control-radius) + 4px));
1435
+ box-sizing: border-box;
1436
+ }
1437
+
1438
+ .macro-rack__control {
1439
+ inline-size: 100%;
1440
+ justify-items: center;
1441
+ min-inline-size: 0;
1442
+ }
1443
+
1444
+ .macro-rack__control .field__label {
1445
+ max-inline-size: 100%;
1446
+ overflow: hidden;
1447
+ text-overflow: ellipsis;
1448
+ white-space: nowrap;
1449
+ }
1450
+
1451
+ .clip-step-launcher {
1452
+ inline-size: max-content;
1453
+ max-inline-size: 100%;
1454
+ }
1455
+
1456
+ .clip-step-launcher__transport {
1457
+ display: flex;
1458
+ flex-wrap: wrap;
1459
+ align-items: center;
1460
+ gap: 7px;
1461
+ min-inline-size: 0;
1462
+ }
1463
+
1464
+ .clip-step-launcher__launch,
1465
+ .clip-step-launcher__stop {
1466
+ min-inline-size: 66px;
1467
+ min-block-size: 24px;
1468
+ }
1469
+
1470
+ .clip-step-launcher__steps {
1471
+ max-inline-size: 100%;
1472
+ }
1473
+
1474
+ .clip-step-launcher__extra:empty {
1475
+ display: none;
1476
+ }