@stanko/ctrls 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.
package/dist/ctrls.css ADDED
@@ -0,0 +1,716 @@
1
+ .dual-range-input {
2
+ --dri-height: 1.5rem;
3
+ --dri-thumb-width: 1.25rem;
4
+ --dri-thumb-height: 1.25rem;
5
+ --dri-thumb-color: #ddd;
6
+ --dri-thumb-hover-color: #a8d5ff;
7
+ --dri-thumb-active-color: #4eaaff;
8
+ --dri-thumb-border-color: rgba(0, 0, 0, 0.1);
9
+ --dri-thumb-border-hover-color: var(--dri-thumb-border-color);
10
+ --dri-thumb-border-active-color: var(--dri-thumb-border-color);
11
+ --dri-thumb-border-radius: 1rem;
12
+ --dri-thumb-border-width: 1px;
13
+ --dri-track-height: 0.25rem;
14
+ --dri-track-border-radius: 1rem;
15
+ --dri-track-color: #ccc;
16
+ --dri-track-filled-color: #0084ff;
17
+ --dri-track-filled-gradient-mid-color: var(--dri-track-filled-color);
18
+ --dri-track-filled-gradient-end-color: var(--dri-track-filled-color);
19
+ display: flex;
20
+ height: var(--dri-height);
21
+ max-width: 100%;
22
+ width: 100%;
23
+ box-sizing: border-box;
24
+ padding-inline-end: calc(var(--dri-thumb-width) * 2);
25
+ }
26
+
27
+ .dual-range-input:has(input:focus-visible) {
28
+ outline: 2px solid var(--dri-thumb-active-color);
29
+ outline-offset: 4px;
30
+ border-radius: 2px;
31
+ }
32
+
33
+ .dual-range-input input {
34
+ -webkit-tap-highlight-color: transparent;
35
+ -webkit-appearance: none;
36
+ appearance: none;
37
+ background: none;
38
+ border-radius: 0;
39
+ flex-basis: calc(50% + var(--dri-thumb-width));
40
+ flex-shrink: 0;
41
+ font-size: inherit;
42
+ height: 100%;
43
+ margin: 0;
44
+ min-width: var(--dri-thumb-width);
45
+ outline: none;
46
+ }
47
+
48
+ .dual-range-input input::-moz-range-track {
49
+ background-color: var(--dri-track-color);
50
+ background-repeat: no-repeat;
51
+ box-sizing: border-box;
52
+ height: var(--dri-track-height);
53
+ }
54
+
55
+ .dual-range-input input:first-child::-moz-range-track {
56
+ border-start-start-radius: var(--dri-track-border-radius);
57
+ border-end-start-radius: var(--dri-track-border-radius);
58
+ background-image: linear-gradient(to right, var(--dri-track-color) var(--dri-gradient-position), var(--dri-track-filled-color) var(--dri-gradient-position), var(--dri-track-filled-gradient-mid-color));
59
+ }
60
+
61
+ [dir=rtl] .dual-range-input input:first-child::-moz-range-track {
62
+ background-image: linear-gradient(to left, var(--dri-track-color) var(--dri-gradient-position), var(--dri-track-filled-color) var(--dri-gradient-position), var(--dri-track-filled-gradient-mid-color));
63
+ }
64
+
65
+ .dual-range-input input:last-child::-moz-range-track {
66
+ border-start-end-radius: var(--dri-track-border-radius);
67
+ border-end-end-radius: var(--dri-track-border-radius);
68
+ background-image: linear-gradient(to right, var(--dri-track-filled-gradient-mid-color), var(--dri-track-filled-gradient-end-color) var(--dri-gradient-position), var(--dri-track-color) var(--dri-gradient-position));
69
+ }
70
+
71
+ [dir=rtl] .dual-range-input input:last-child::-moz-range-track {
72
+ background-image: linear-gradient(to left, var(--dri-track-filled-gradient-mid-color), var(--dri-track-filled-gradient-end-color) var(--dri-gradient-position), var(--dri-track-color) var(--dri-gradient-position));
73
+ }
74
+
75
+ .dual-range-input input::-moz-range-thumb {
76
+ -webkit-appearance: none;
77
+ appearance: none;
78
+ background-color: var(--dri-thumb-color);
79
+ border-radius: var(--dri-thumb-border-radius);
80
+ border: var(--dri-thumb-border-width) solid var(--dri-thumb-border-color);
81
+ box-shadow: none;
82
+ box-sizing: border-box;
83
+ height: var(--dri-thumb-height);
84
+ width: var(--dri-thumb-width);
85
+ max-width: 99.99%;
86
+ }
87
+
88
+ .dual-range-input input:not([data-ready=true])::-moz-range-thumb {
89
+ opacity: 0;
90
+ }
91
+
92
+ .dual-range-input input:hover::-moz-range-thumb {
93
+ background-color: var(--dri-thumb-hover-color);
94
+ border-color: var(--dri-thumb-border-hover-color);
95
+ }
96
+
97
+ .dual-range-input input:active::-moz-range-thumb {
98
+ background-color: var(--dri-thumb-active-color);
99
+ border-color: var(--dri-thumb-border-active-color);
100
+ }
101
+
102
+ .dual-range-input input:focus-visible::-moz-range-thumb {
103
+ background-color: var(--dri-thumb-active-color);
104
+ border-color: var(--dri-thumb-border-active-color);
105
+ }
106
+
107
+ .dual-range-input input::-webkit-slider-runnable-track {
108
+ background-color: var(--dri-track-color);
109
+ background-repeat: no-repeat;
110
+ box-sizing: border-box;
111
+ height: var(--dri-track-height);
112
+ }
113
+
114
+ .dual-range-input input:first-child::-webkit-slider-runnable-track {
115
+ border-start-start-radius: var(--dri-track-border-radius);
116
+ border-end-start-radius: var(--dri-track-border-radius);
117
+ background-image: linear-gradient(to right, var(--dri-track-color) var(--dri-gradient-position), var(--dri-track-filled-color) var(--dri-gradient-position), var(--dri-track-filled-gradient-mid-color));
118
+ }
119
+
120
+ [dir=rtl] .dual-range-input input:first-child::-webkit-slider-runnable-track {
121
+ background-image: linear-gradient(to left, var(--dri-track-color) var(--dri-gradient-position), var(--dri-track-filled-color) var(--dri-gradient-position), var(--dri-track-filled-gradient-mid-color));
122
+ }
123
+
124
+ .dual-range-input input:last-child::-webkit-slider-runnable-track {
125
+ border-start-end-radius: var(--dri-track-border-radius);
126
+ border-end-end-radius: var(--dri-track-border-radius);
127
+ background-image: linear-gradient(to right, var(--dri-track-filled-gradient-mid-color), var(--dri-track-filled-gradient-end-color) var(--dri-gradient-position), var(--dri-track-color) var(--dri-gradient-position));
128
+ }
129
+
130
+ [dir=rtl] .dual-range-input input:last-child::-webkit-slider-runnable-track {
131
+ background-image: linear-gradient(to left, var(--dri-track-filled-gradient-mid-color), var(--dri-track-filled-gradient-end-color) var(--dri-gradient-position), var(--dri-track-color) var(--dri-gradient-position));
132
+ }
133
+
134
+ .dual-range-input input::-webkit-slider-thumb {
135
+ -webkit-appearance: none;
136
+ appearance: none;
137
+ background-color: var(--dri-thumb-color);
138
+ border-radius: var(--dri-thumb-border-radius);
139
+ border: var(--dri-thumb-border-width) solid var(--dri-thumb-border-color);
140
+ box-shadow: none;
141
+ box-sizing: border-box;
142
+ height: var(--dri-thumb-height);
143
+ width: var(--dri-thumb-width);
144
+ margin-top: calc(var(--dri-track-height) / 2);
145
+ transform: translateY(-50%);
146
+ }
147
+
148
+ .dual-range-input input:not([data-ready=true])::-webkit-slider-thumb {
149
+ opacity: 0;
150
+ }
151
+
152
+ .dual-range-input input:hover::-webkit-slider-thumb {
153
+ background-color: var(--dri-thumb-hover-color);
154
+ border-color: var(--dri-thumb-border-hover-color);
155
+ }
156
+
157
+ .dual-range-input input:active::-webkit-slider-thumb {
158
+ background-color: var(--dri-thumb-active-color);
159
+ border-color: var(--dri-thumb-border-active-color);
160
+ }
161
+
162
+ .dual-range-input input:focus-visible::-webkit-slider-thumb {
163
+ background-color: var(--dri-thumb-active-color);
164
+ border-color: var(--dri-thumb-border-active-color);
165
+ }
166
+
167
+
168
+ .ctrls {
169
+ --ctrls-font:
170
+ ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas,
171
+ "DejaVu Sans Mono", monospace;
172
+ --ctrls-radius: 4px;
173
+ --ctrls-label-width: 5rem;
174
+ --ctrls-width: 22rem;
175
+ --ctrls-font-size: 0.75rem;
176
+ --ctrls-c: 0.25;
177
+ --ctrls-h: 245;
178
+ --ctrls-theme: oklch(0.65 var(--ctrls-c) var(--ctrls-h));
179
+ --ctrls-theme-oklch: 0.65 var(--ctrls-c) var(--ctrls-h);
180
+ --ctrls-gray-50: #f1f1f1;
181
+ --ctrls-gray-100: #e3e3e3;
182
+ --ctrls-gray-200: #c7c7c7;
183
+ --ctrls-gray-300: #acacac;
184
+ --ctrls-gray-400: #929292;
185
+ --ctrls-gray-500: #787878;
186
+ --ctrls-scrollbar-thumb-bg: var(--ctrls-gray-400);
187
+ --ctrls-bg: oklch(0.99 0.005 var(--ctrls-h) / 0.8);
188
+ --ctrls-text: oklch(0.01 0.3 var(--ctrls-h));
189
+ --ctrls-text-muted: oklch(0.5 0.005 var(--ctrls-h));
190
+ --ctrls-border: oklch(0.925 0.01 var(--ctrls-h));
191
+ --ctrls-input-border: oklch(0.925 0.01 var(--ctrls-h));
192
+ --ctrls-input-wrapper-bg: white;
193
+ --ctrls-btn-bg: white;
194
+ --ctrls-btn-hover-bg: oklch(0.95 0.01 var(--ctrls-h) / 0.5);
195
+ --ctrls-btn-hover-text: var(--ctrls-theme);
196
+ --ctrls-btn-selected-bg: var(--ctrls-theme);
197
+ --ctrls-btn-selected-text: white;
198
+ --ctrls-input-bg: white;
199
+ --ctrls-range-track-bg: var(--ctrls-gray-100);
200
+ --ctrls-range-track-active-bg: var(--ctrls-theme);
201
+ --ctrls-range-thumb-bg: var(--ctrls-gray-100);
202
+ --ctrls-range-thumb-border: var(--ctrls-gray-200);
203
+ --ctrls-range-thumb-hover-bg: var(--ctrls-gray-200);
204
+ --ctrls-range-thumb-hover-border: var(--ctrls-gray-300);
205
+ --ctrls-range-thumb-active-bg: var(--ctrls-theme);
206
+ --ctrls-range-thumb-radius: 4px;
207
+ --ctrls-checkbox-bg: white;
208
+ --ctrls-checkbox-radius: 4px;
209
+ --ctrls-checkbox-hover-text: var(--ctrls-gray-200);
210
+ --ctrls-checkbox-checked-bg: var(--ctrls-theme);
211
+ --ctrls-checkbox-checked-text: var(--ctrls-gray-50);
212
+ --ctrls-checkbox-checked-hover-bg: oklch(0.4 0.35 var(--ctrls-h));
213
+ --ctrls-easing-border: var(--ctrls-gray-200);
214
+ --ctrls-ctrls__easing-handle-bg: var(--ctrls-gray-50);
215
+ --ctrls-ctrls__easing-handle-border: var(--ctrls-gray-300);
216
+ }
217
+
218
+ @media (prefers-color-scheme: dark) {
219
+ .ctrls--system-theme {
220
+ --ctrls-c: 0.3;
221
+ --ctrls-theme-oklch: 0.55 calc(var(--ctrls-c) - 0.1) var(--ctrls-h);
222
+ --ctrls-theme: oklch(0.55 calc(var(--ctrls-c) - 0.1) var(--ctrls-h));
223
+ --ctrls-gray-50: #e1e1e1;
224
+ --ctrls-gray-100: #d3d3d3;
225
+ --ctrls-gray-200: #b7b7b7;
226
+ --ctrls-gray-300: #9c9c9c;
227
+ --ctrls-gray-400: #828282;
228
+ --ctrls-gray-500: #686868;
229
+ --ctrls-scrollbar-thumb-bg: #5f5f5f;
230
+ --ctrls-bg: oklch(0.27 0.003 var(--ctrls-h) / 0.8);
231
+ --ctrls-text: oklch(0.95 0.005 var(--ctrls-h));
232
+ --ctrls-text-muted: oklch(0.75 0.005 var(--ctrls-h));
233
+ --ctrls-border: oklch(0.35 0.01 var(--ctrls-h));
234
+ --ctrls-input-border: transparent;
235
+ --ctrls-input-wrapper-bg: oklch(0.22 0.002 var(--ctrls-h));
236
+ --ctrls-btn-bg: oklch(0.2 0.001 var(--ctrls-h));
237
+ --ctrls-btn-hover-bg: oklch(0.1 0.001 var(--ctrls-h));
238
+ --ctrls-input-bg: var(--ctrls-input-wrapper-bg);
239
+ }
240
+ }
241
+ .ctrls--dark-theme {
242
+ --ctrls-c: 0.3;
243
+ --ctrls-theme-oklch: 0.55 calc(var(--ctrls-c) - 0.1) var(--ctrls-h);
244
+ --ctrls-theme: oklch(0.55 calc(var(--ctrls-c) - 0.1) var(--ctrls-h));
245
+ --ctrls-gray-50: #e1e1e1;
246
+ --ctrls-gray-100: #d3d3d3;
247
+ --ctrls-gray-200: #b7b7b7;
248
+ --ctrls-gray-300: #9c9c9c;
249
+ --ctrls-gray-400: #828282;
250
+ --ctrls-gray-500: #686868;
251
+ --ctrls-scrollbar-thumb-bg: #5f5f5f;
252
+ --ctrls-bg: oklch(0.27 0.003 var(--ctrls-h) / 0.8);
253
+ --ctrls-text: oklch(0.95 0.005 var(--ctrls-h));
254
+ --ctrls-text-muted: oklch(0.75 0.005 var(--ctrls-h));
255
+ --ctrls-border: oklch(0.35 0.01 var(--ctrls-h));
256
+ --ctrls-input-border: transparent;
257
+ --ctrls-input-wrapper-bg: oklch(0.22 0.002 var(--ctrls-h));
258
+ --ctrls-btn-bg: oklch(0.2 0.001 var(--ctrls-h));
259
+ --ctrls-btn-hover-bg: oklch(0.1 0.001 var(--ctrls-h));
260
+ --ctrls-input-bg: var(--ctrls-input-wrapper-bg);
261
+ }
262
+
263
+ .ctrls {
264
+ box-sizing: border-box;
265
+ font-optical-sizing: auto;
266
+ font-weight: 400;
267
+ font-style: normal;
268
+ font-variation-settings: "wdth" 100;
269
+ font-family: var(--ctrls-font);
270
+ font-size: var(--ctrls-font-size);
271
+ color: var(--ctrls-text);
272
+ border-radius: min(var(--ctrls-radius) + 8px, 24px);
273
+ border: 1px solid var(--ctrls-border);
274
+ padding: 0.5rem;
275
+ display: grid;
276
+ gap: 0.5rem;
277
+ background-color: var(--ctrls-bg);
278
+ backdrop-filter: blur(4px);
279
+ scrollbar-width: thin;
280
+ scrollbar-color: var(--ctrls-scrollbar-thumb-bg) transparent;
281
+ overflow: auto;
282
+ max-width: var(--ctrls-width);
283
+ }
284
+ .ctrls *,
285
+ .ctrls *::before,
286
+ .ctrls *::after {
287
+ box-sizing: border-box;
288
+ padding: 0;
289
+ margin: 0;
290
+ }
291
+ .ctrls button,
292
+ .ctrls input {
293
+ font-family: inherit;
294
+ font-size: inherit;
295
+ color: inherit;
296
+ }
297
+ .ctrls svg {
298
+ display: block;
299
+ overflow: visible;
300
+ }
301
+
302
+ /* ----- Buttons ----- */
303
+ .ctrls__btn {
304
+ background: none;
305
+ border: none;
306
+ cursor: pointer;
307
+ display: flex;
308
+ align-items: center;
309
+ justify-content: center;
310
+ gap: 0.25rem;
311
+ border-radius: var(--ctrls-radius);
312
+ transition: color 500ms, background-color 500ms;
313
+ }
314
+ .ctrls__btn:focus-visible, .ctrls__btn:hover {
315
+ color: var(--ctrls-btn-hover-text);
316
+ }
317
+ .ctrls__btn svg {
318
+ width: 1rem;
319
+ transition: transform 500ms, color 500ms;
320
+ }
321
+ .ctrls__btn path {
322
+ transition: opacity 500ms;
323
+ }
324
+
325
+ .ctrls__btn--lg {
326
+ margin-left: var(--ctrls-label-width);
327
+ padding: 0.5rem 1rem;
328
+ background: var(--ctrls-btn-bg);
329
+ border: 1px solid var(--ctrls-input-border);
330
+ font-weight: 700;
331
+ }
332
+ .ctrls__btn--lg:focus-visible, .ctrls__btn--lg:hover {
333
+ color: var(--ctrls-theme);
334
+ background: var(--ctrls-btn-hover-bg);
335
+ }
336
+
337
+ .ctrls__btn--lg:focus-visible svg, .ctrls__btn--lg:hover svg {
338
+ transform: rotate(0.5turn);
339
+ }
340
+ .ctrls__btn--lg:focus-visible path:nth-child(2),
341
+ .ctrls__btn--lg:focus-visible path:nth-child(4), .ctrls__btn--lg:hover path:nth-child(2),
342
+ .ctrls__btn--lg:hover path:nth-child(4) {
343
+ opacity: 0;
344
+ }
345
+
346
+ /* ----- General ----- */
347
+ .ctrls__control {
348
+ display: grid;
349
+ grid-template-columns: var(--ctrls-label-width) minmax(0, 1fr);
350
+ align-items: center;
351
+ border-radius: var(--ctrls-radius);
352
+ }
353
+
354
+ .ctrls__control-label {
355
+ color: var(--ctrls-text-muted);
356
+ font-weight: 700;
357
+ hyphens: auto;
358
+ padding-right: 0.25rem;
359
+ }
360
+
361
+ .ctrls__control-right {
362
+ flex: auto 1 1;
363
+ }
364
+
365
+ .ctrls button:focus-visible {
366
+ outline: 2px solid var(--ctrls-theme);
367
+ outline-offset: 2px;
368
+ }
369
+
370
+ .ctrls__control--range .ctrls__control-right,
371
+ .ctrls__control--dual-range .ctrls__control-right {
372
+ border: 1px solid var(--ctrls-input-border);
373
+ background: var(--ctrls-input-wrapper-bg);
374
+ border-radius: var(--ctrls-radius);
375
+ }
376
+
377
+ /* ----- Boolean ----- */
378
+ .ctrls__control--boolean input {
379
+ opacity: 0;
380
+ pointer-events: none;
381
+ position: absolute;
382
+ left: -1000vw;
383
+ }
384
+
385
+ .ctrls__boolean-checkmark {
386
+ appearance: none;
387
+ width: 1.125rem;
388
+ height: 1.125rem;
389
+ color: transparent;
390
+ background: var(--ctrls-checkbox-bg);
391
+ border-radius: var(--ctrls-checkbox-radius);
392
+ border: 1px solid var(--ctrls-input-border);
393
+ display: grid;
394
+ place-items: center;
395
+ }
396
+ .ctrls__boolean-checkmark svg {
397
+ width: 0.875rem;
398
+ height: 0.875rem;
399
+ stroke-width: 4px;
400
+ }
401
+
402
+ .ctrls__boolean-input:checked + .ctrls__boolean-checkmark {
403
+ background: var(--ctrls-checkbox-checked-bg);
404
+ color: var(--ctrls-checkbox-checked-text);
405
+ border-color: transparent;
406
+ }
407
+
408
+ label:hover .ctrls__boolean-input:checked + .ctrls__boolean-checkmark {
409
+ background: var(--ctrls-checkbox-checked-hover-bg);
410
+ }
411
+
412
+ label:hover .ctrls__boolean-input:not(:checked) + .ctrls__boolean-checkmark {
413
+ color: var(--ctrls-checkbox-hover-text);
414
+ }
415
+
416
+ .ctrls__boolean-input:focus-visible + .ctrls__boolean-checkmark {
417
+ outline: 2px solid var(--ctrls-theme);
418
+ outline-offset: 2px;
419
+ }
420
+
421
+ /* ----- Range ----- */
422
+ .ctrls__range-input {
423
+ width: 100%;
424
+ -webkit-tap-highlight-color: transparent;
425
+ -webkit-appearance: none;
426
+ appearance: none;
427
+ display: block;
428
+ background: none;
429
+ border-radius: 0;
430
+ flex-basis: calc(50% + var(--dri-thumb-width));
431
+ flex-shrink: 0;
432
+ height: 1.75rem;
433
+ margin: 0;
434
+ min-width: var(--dri-thumb-width);
435
+ outline: none;
436
+ border-radius: var(--ctrls-radius);
437
+ padding: 0.5rem;
438
+ }
439
+ .ctrls__range-input:focus-visible {
440
+ outline: 2px solid var(--ctrls-theme);
441
+ outline-offset: 2px;
442
+ }
443
+
444
+ .ctrls__range-input::-moz-range-track {
445
+ background-color: var(--ctrls-range-track-bg);
446
+ background-repeat: no-repeat;
447
+ box-sizing: border-box;
448
+ height: 0.25rem;
449
+ border-radius: 100px;
450
+ background-image: linear-gradient(to right, var(--ctrls-range-track-active-bg) var(--gradient-position), var(--ctrls-range-track-bg) var(--gradient-position));
451
+ }
452
+
453
+ .ctrls__range-input::-moz-range-track {
454
+ background-color: var(--ctrls-range-track-bg);
455
+ background-repeat: no-repeat;
456
+ box-sizing: border-box;
457
+ height: 0.25rem;
458
+ border-radius: 100px;
459
+ background-image: linear-gradient(to right, var(--ctrls-range-track-active-bg) var(--gradient-position), var(--ctrls-range-track-bg) var(--gradient-position));
460
+ }
461
+
462
+ .ctrls__range-input::-moz-range-thumb {
463
+ -webkit-appearance: none;
464
+ appearance: none;
465
+ background-color: var(--ctrls-range-thumb-bg);
466
+ border-radius: var(--ctrls-range-thumb-radius);
467
+ border: 1px solid var(--ctrls-range-thumb-border);
468
+ box-shadow: none;
469
+ box-sizing: border-box;
470
+ height: 1rem;
471
+ width: 1.25rem;
472
+ max-width: 99.99%;
473
+ }
474
+
475
+ .ctrls__range-input:hover::-moz-range-thumb {
476
+ background-color: var(--ctrls-range-thumb-hover-bg);
477
+ border-color: var(--ctrls-range-thumb-hover-border);
478
+ }
479
+
480
+ .ctrls__range-input:active::-moz-range-thumb {
481
+ background-color: var(--ctrls-range-thumb-active-bg);
482
+ border-color: transparent;
483
+ }
484
+
485
+ .ctrls__range-input::-webkit-slider-runnable-track {
486
+ background-color: var(--ctrls-range-track-bg);
487
+ background-repeat: no-repeat;
488
+ box-sizing: border-box;
489
+ height: 0.25rem;
490
+ border-radius: 100px;
491
+ background-image: linear-gradient(to right, var(--ctrls-range-track-active-bg) var(--gradient-position), var(--ctrls-range-track-bg) var(--gradient-position));
492
+ }
493
+
494
+ .ctrls__range-input::-webkit-slider-thumb {
495
+ -webkit-appearance: none;
496
+ appearance: none;
497
+ background-color: var(--ctrls-range-thumb-bg);
498
+ border-radius: var(--ctrls-range-thumb-radius);
499
+ border: 1px solid var(--ctrls-range-thumb-border);
500
+ box-shadow: none;
501
+ box-sizing: border-box;
502
+ height: 1rem;
503
+ width: 1.25rem;
504
+ margin-top: 0.125rem;
505
+ transform: translateY(-50%);
506
+ }
507
+
508
+ .ctrls__range-input:hover::-webkit-slider-thumb {
509
+ background-color: var(--ctrls-range-thumb-hover-bg);
510
+ border-color: var(--ctrls-range-thumb-hover-border);
511
+ }
512
+
513
+ /* ----- Dual range ----- */
514
+ .ctrls__control-right .dual-range-input {
515
+ padding-inline: 0.5rem calc(var(--dri-thumb-width) * 2 + 0.5rem);
516
+ }
517
+ .ctrls__control-right .dual-range-input:has(input:focus-visible) {
518
+ border-radius: var(--ctrls-radius);
519
+ }
520
+ .ctrls__control-right .dual-range-input {
521
+ --dri-track-color: var(--ctrls-range-track-bg);
522
+ --dri-track-filled-color: var(--ctrls-range-track-active-bg);
523
+ --dri-height: 1.75rem;
524
+ --dri-thumb-width: 1.25rem;
525
+ --dri-thumb-height: 1rem;
526
+ --dri-thumb-border-radius: var(--ctrls-range-thumb-radius);
527
+ --dri-thumb-color: var(--ctrls-range-thumb-bg);
528
+ --dri-thumb-hover-color: var(--ctrls-range-thumb-hover-bg);
529
+ --dri-thumb-active-color: var(--ctrls-range-thumb-active-bg);
530
+ --dri-thumb-border-color: var(--ctrls-range-thumb-border);
531
+ --dri-thumb-border-hover-color: var(--ctrls-range-thumb-hover-border);
532
+ --dri-thumb-border-active-color: transparent;
533
+ }
534
+ .ctrls__control-right .dual-range-input:has(input:focus-visible) {
535
+ outline-offset: 2px;
536
+ }
537
+
538
+ /* ----- Radio ----- */
539
+ .ctrls__control--radio .ctrls__control-right {
540
+ display: grid;
541
+ grid-template-columns: 1fr 1fr 1fr;
542
+ gap: 0.25rem;
543
+ }
544
+
545
+ .ctrls__radio-label {
546
+ display: block;
547
+ text-align: center;
548
+ cursor: pointer;
549
+ padding: 0.25rem;
550
+ white-space: nowrap;
551
+ overflow: hidden;
552
+ text-overflow: ellipsis;
553
+ transition: color 250ms, background-color 250ms;
554
+ border-radius: var(--ctrls-radius);
555
+ border: 1px solid var(--ctrls-input-border);
556
+ background: var(--ctrls-btn-bg);
557
+ }
558
+ .ctrls__radio-label:focus-visible, .ctrls__radio-label:hover {
559
+ background: var(--ctrls-btn-hover-bg);
560
+ color: var(--ctrls-theme);
561
+ }
562
+
563
+ .ctrls__radio-label input {
564
+ opacity: 0;
565
+ pointer-events: none;
566
+ position: absolute;
567
+ left: -1000vw;
568
+ }
569
+
570
+ .ctrls__radio-label:has(input:checked) {
571
+ background: var(--ctrls-btn-selected-bg);
572
+ color: var(--ctrls-btn-selected-text);
573
+ border-color: transparent;
574
+ }
575
+
576
+ .ctrls__radio-label:has(input:focus-visible) {
577
+ outline: 2px solid var(--ctrls-theme);
578
+ outline-offset: 2px;
579
+ }
580
+
581
+ /* ----- Seed ----- */
582
+ .ctrls__control--seed .ctrls__control-right {
583
+ display: flex;
584
+ gap: 0.25rem;
585
+ }
586
+
587
+ .ctrls__seed-input {
588
+ background-color: var(--ctrls-input-bg);
589
+ border: 1px solid var(--ctrls-input-border);
590
+ padding: 0 0.5rem;
591
+ height: 1.75rem;
592
+ border-radius: var(--ctrls-radius);
593
+ width: 0;
594
+ flex-grow: 1;
595
+ }
596
+ .ctrls__seed-input:focus {
597
+ outline: 2px solid var(--ctrls-theme);
598
+ outline-offset: 2px;
599
+ }
600
+
601
+ .ctrls__seed-new-button {
602
+ padding: 0 0.375rem;
603
+ flex-shrink: 0;
604
+ }
605
+ .ctrls__seed-new-button:focus-visible svg, .ctrls__seed-new-button:hover svg {
606
+ transform: rotate(0.5turn);
607
+ }
608
+
609
+ /* ----- Easing ----- */
610
+ .ctrls__easing-wrapper {
611
+ padding: 0.5rem;
612
+ border: 1px solid var(--ctrls-input-border);
613
+ background: var(--ctrls-input-wrapper-bg);
614
+ border-radius: min(var(--ctrls-radius), 12px);
615
+ margin-bottom: 0.25rem;
616
+ }
617
+
618
+ .ctrls__easing {
619
+ position: relative;
620
+ margin-top: 0.5rem;
621
+ }
622
+ .ctrls__easing path,
623
+ .ctrls__easing line {
624
+ vector-effect: non-scaling-stroke;
625
+ fill: none;
626
+ stroke-linecap: round;
627
+ }
628
+
629
+ .ctrls__easing-ticks {
630
+ height: 0.375rem;
631
+ width: 100%;
632
+ }
633
+
634
+ .ctrls__easing-ticks line {
635
+ stroke: var(--ctrls-easing-border);
636
+ stroke-linecap: round;
637
+ vector-effect: non-scaling-stroke;
638
+ }
639
+
640
+ .easing-borders {
641
+ stroke: var(--ctrls-easing-border);
642
+ stroke-dasharray: 1 3;
643
+ }
644
+
645
+ .ctrls__easing-path {
646
+ stroke-width: 2px;
647
+ stroke: var(--ctrls-theme);
648
+ }
649
+
650
+ .ctrls__easing-line {
651
+ stroke: var(--ctrls-easing-border);
652
+ stroke-dasharray: 3;
653
+ }
654
+
655
+ .ctrls__easing-buttons {
656
+ display: grid;
657
+ grid-template-columns: 1fr 1fr 1fr;
658
+ gap: 0.25rem;
659
+ }
660
+
661
+ .ctrls__easing-buttons button {
662
+ overflow: hidden;
663
+ cursor: pointer;
664
+ display: grid;
665
+ align-content: center;
666
+ text-align: center;
667
+ border: 1px solid var(--ctrls-input-border);
668
+ border-radius: var(--ctrls-radius);
669
+ background: var(--ctrls-btn-bg);
670
+ padding: 0.25rem;
671
+ transition: color 250ms, background-color 250ms;
672
+ }
673
+ .ctrls__easing-buttons button:focus-visible, .ctrls__easing-buttons button:hover {
674
+ background: var(--ctrls-btn-hover-bg);
675
+ color: var(--ctrls-theme);
676
+ }
677
+
678
+ .ctrls__control--radio .ctrls__control-right {
679
+ display: grid;
680
+ grid-template-columns: 1fr 1fr 1fr;
681
+ gap: 0.25rem;
682
+ }
683
+
684
+ .ctrls__easing-handle {
685
+ background: none;
686
+ touch-action: none;
687
+ position: absolute;
688
+ transform: translate(-50%, -50%);
689
+ display: block;
690
+ width: 2rem;
691
+ height: 2rem;
692
+ border-radius: 50%;
693
+ cursor: grab;
694
+ font-size: 0;
695
+ color: transparent;
696
+ transition: border 250ms;
697
+ border: 0.75rem solid transparent;
698
+ }
699
+ .ctrls__easing-handle::after {
700
+ content: "";
701
+ display: block;
702
+ background-color: var(--ctrls-ctrls__easing-handle-bg);
703
+ border: 1px solid var(--ctrls-ctrls__easing-handle-border);
704
+ height: 100%;
705
+ width: 100%;
706
+ border-radius: 50%;
707
+ }
708
+ .ctrls__easing-handle:hover, .ctrls__easing-handle:focus-visible {
709
+ border-color: oklch(var(--ctrls-theme-oklch)/0.1);
710
+ }
711
+ .ctrls__easing-handle:hover::after, .ctrls__easing-handle:focus-visible::after {
712
+ background-color: var(--ctrls-theme);
713
+ border: 1px solid var(--ctrls-theme);
714
+ }
715
+
716
+ /*# sourceMappingURL=ctrls.css.map */