@cratis/components 4.10.3 → 4.11.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,1933 @@
1
+ @layer cratis-components {
2
+ /* @cratis/components/CommandDialog/styles — requires @cratis/components/styles/base. Areas: CommandDialog, CommandForm, Common, Dialogs, Notifications. */
3
+ /* ── ./CommandDialog/CommandStepper.css ─────────────────────────────────────── */
4
+ /* Copyright (c) Cratis. All rights reserved. */
5
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
6
+
7
+ .cratis-command-stepper {
8
+ display: flex;
9
+ width: 100%;
10
+ flex-direction: column;
11
+ gap: 0.75rem;
12
+ }
13
+ .cratis-command-stepper__root,
14
+ .cratis-command-stepper__panels,
15
+ .cratis-command-stepper__panel {
16
+ width: 100%;
17
+ box-sizing: border-box;
18
+ }
19
+ .cratis-command-stepper__list {
20
+ display: flex;
21
+ margin: 0;
22
+ padding: 0;
23
+ list-style: none;
24
+ }
25
+ .cratis-command-stepper__step {
26
+ display: flex;
27
+ min-width: 0;
28
+ align-items: center;
29
+ flex: 1;
30
+ }
31
+ .cratis-command-stepper__header {
32
+ display: inline-flex;
33
+ min-width: 0;
34
+ padding: 0.4rem;
35
+ align-items: center;
36
+ gap: 0.5rem;
37
+ border: 0;
38
+ background: transparent;
39
+ color: var(--cratis-text-color);
40
+ font: inherit;
41
+ cursor: pointer;
42
+ }
43
+ .cratis-command-stepper__header:disabled {
44
+ cursor: default;
45
+ }
46
+ .cratis-command-stepper__header:focus-visible {
47
+ outline: none;
48
+ border-radius: var(--cratis-border-radius);
49
+ box-shadow: var(--cratis-focus-ring);
50
+ }
51
+ .cratis-command-stepper__step:not([data-active]) .cratis-command-stepper__header {
52
+ opacity: 0.55;
53
+ }
54
+ .cratis-command-stepper__number {
55
+ display: inline-flex;
56
+ width: 1.8rem;
57
+ height: 1.8rem;
58
+ align-items: center;
59
+ justify-content: center;
60
+ flex: 0 0 auto;
61
+ border: 1px solid var(--cratis-surface-border);
62
+ border-radius: 50%;
63
+ background: var(--cratis-surface-card);
64
+ }
65
+ .cratis-command-stepper__step[data-active='true'] .cratis-command-stepper__number {
66
+ border-color: var(--cratis-primary-color);
67
+ background: var(--cratis-action-background);
68
+ color: var(--cratis-action-text);
69
+ }
70
+ .cratis-command-stepper__step[data-visited='true']:not([data-invalid='true'])
71
+ .cratis-command-stepper__number {
72
+ border-color: var(--cratis-green-500);
73
+ color: var(--cratis-green-500);
74
+ }
75
+ .cratis-command-stepper__step[data-invalid='true'] .cratis-command-stepper__number {
76
+ border-color: var(--cratis-red-500);
77
+ background: var(--cratis-surface-card);
78
+ color: var(--cratis-red-500);
79
+ }
80
+ .cratis-command-stepper__title {
81
+ overflow: hidden;
82
+ text-overflow: ellipsis;
83
+ white-space: nowrap;
84
+ }
85
+ .cratis-command-stepper__separator {
86
+ height: 2px;
87
+ min-width: 1rem;
88
+ margin-inline: 0.25rem;
89
+ flex: 1;
90
+ background: var(--cratis-surface-border);
91
+ }
92
+ .cratis-command-stepper__panel {
93
+ padding-block: 0.5rem;
94
+ }
95
+
96
+ .cratis-command-stepper--horizontal .cratis-command-stepper__list {
97
+ flex-direction: row;
98
+ align-items: center;
99
+ }
100
+ .cratis-command-stepper--vertical .cratis-command-stepper__root {
101
+ display: flex;
102
+ flex-direction: row;
103
+ align-items: flex-start;
104
+ gap: 1.5rem;
105
+ }
106
+ .cratis-command-stepper--vertical .cratis-command-stepper__list {
107
+ width: max-content;
108
+ flex-direction: column;
109
+ align-items: flex-start;
110
+ gap: 0.25rem;
111
+ }
112
+ .cratis-command-stepper--vertical .cratis-command-stepper__step {
113
+ flex-direction: column;
114
+ align-items: flex-start;
115
+ }
116
+ .cratis-command-stepper--vertical .cratis-command-stepper__separator {
117
+ width: 2px;
118
+ min-width: 2px;
119
+ min-height: 1.25rem;
120
+ margin-inline-start: 1.3rem;
121
+ }
122
+ .cratis-command-stepper--vertical .cratis-command-stepper__panels {
123
+ min-width: 0;
124
+ flex: 1;
125
+ }
126
+
127
+ @media (forced-colors: active) {
128
+ .cratis-command-stepper__number,
129
+ .cratis-command-stepper__separator {
130
+ border-color: CanvasText;
131
+ }
132
+ .cratis-command-stepper__step[data-active='true'] .cratis-command-stepper__number {
133
+ background: Highlight;
134
+ color: HighlightText;
135
+ }
136
+ }
137
+
138
+ /* ── ./CommandForm/fields/Fields.css ─────────────────────────────────────── */
139
+ /* Copyright (c) Cratis. All rights reserved. */
140
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
141
+
142
+ .cratis-field-sr-only {
143
+ position: absolute;
144
+ width: 1px;
145
+ height: 1px;
146
+ padding: 0;
147
+ margin: -1px;
148
+ overflow: hidden;
149
+ clip: rect(0, 0, 0, 0);
150
+ white-space: nowrap;
151
+ border: 0;
152
+ }
153
+
154
+ .cratis-field-input {
155
+ box-sizing: border-box;
156
+ min-height: var(--cratis-control-height);
157
+ padding: 0.625rem 0.75rem;
158
+ border: 1px solid var(--cratis-control-border);
159
+ border-radius: var(--cratis-border-radius);
160
+ background: var(--cratis-control-background);
161
+ color: var(--cratis-text-color);
162
+ font: inherit;
163
+ box-shadow: var(--cratis-shadow-subtle);
164
+ }
165
+ .cratis-field-input::placeholder {
166
+ color: var(--cratis-text-color-secondary);
167
+ }
168
+ .cratis-field-input:focus-visible {
169
+ outline: none;
170
+ border-color: var(--cratis-primary-color);
171
+ box-shadow: var(--cratis-focus-ring);
172
+ }
173
+ .cratis-field-input:disabled {
174
+ cursor: not-allowed;
175
+ opacity: var(--cratis-disabled-opacity);
176
+ }
177
+ .cratis-field-input[data-invalid='true'],
178
+ .cratis-field-input[aria-invalid='true'] {
179
+ border-color: var(--cratis-red-500);
180
+ }
181
+ .cratis-field-textarea {
182
+ resize: vertical;
183
+ }
184
+ .cratis-number-field,
185
+ .cratis-password-field {
186
+ position: relative;
187
+ display: flex;
188
+ }
189
+ .cratis-password-field .cratis-field-input {
190
+ padding-inline-end: 2.75rem;
191
+ }
192
+ .cratis-password-field__toggle {
193
+ position: absolute;
194
+ inset-inline-end: 0.35rem;
195
+ top: 50%;
196
+ display: inline-flex;
197
+ width: 2rem;
198
+ height: 2rem;
199
+ padding: 0;
200
+ align-items: center;
201
+ justify-content: center;
202
+ transform: translateY(-50%);
203
+ border: 0;
204
+ border-radius: 50%;
205
+ background: transparent;
206
+ color: var(--cratis-text-color-secondary);
207
+ cursor: pointer;
208
+ }
209
+ .cratis-password-field__toggle:hover {
210
+ background: var(--cratis-surface-hover);
211
+ }
212
+ .cratis-password-field__toggle:focus-visible {
213
+ outline: none;
214
+ box-shadow: var(--cratis-focus-ring);
215
+ }
216
+
217
+ .cratis-choice-field {
218
+ position: relative;
219
+ display: inline-flex;
220
+ align-items: center;
221
+ gap: 0.5rem;
222
+ cursor: pointer;
223
+ }
224
+ .cratis-choice-field:has(.cratis-choice-field__native:disabled) {
225
+ cursor: not-allowed;
226
+ opacity: var(--cratis-disabled-opacity);
227
+ }
228
+ .cratis-choice-field__native {
229
+ position: absolute;
230
+ width: 1px;
231
+ height: 1px;
232
+ overflow: hidden;
233
+ opacity: 0;
234
+ }
235
+ .cratis-checkbox__box {
236
+ display: inline-flex;
237
+ width: 1.25rem;
238
+ height: 1.25rem;
239
+ align-items: center;
240
+ justify-content: center;
241
+ border: 1px solid var(--cratis-control-border);
242
+ border-radius: var(--cratis-border-radius);
243
+ background: var(--cratis-control-background);
244
+ }
245
+ .cratis-checkbox__indicator {
246
+ opacity: 0;
247
+ color: var(--cratis-primary-color-text);
248
+ font-size: 0.85rem;
249
+ }
250
+ .cratis-choice-field__native:checked + .cratis-checkbox__box {
251
+ border-color: var(--cratis-primary-color);
252
+ background: var(--cratis-primary-color);
253
+ }
254
+ .cratis-choice-field__native:checked + .cratis-checkbox__box .cratis-checkbox__indicator {
255
+ opacity: 1;
256
+ }
257
+ .cratis-choice-field__native:focus-visible
258
+ + :is(.cratis-checkbox__box, .cratis-switch__control) {
259
+ box-shadow: var(--cratis-focus-ring);
260
+ }
261
+ .cratis-choice-field[data-invalid='true']
262
+ :is(.cratis-checkbox__box, .cratis-switch__control) {
263
+ border-color: var(--cratis-red-500);
264
+ }
265
+
266
+ .cratis-switch__control {
267
+ display: inline-flex;
268
+ width: 2.5rem;
269
+ height: 1.4rem;
270
+ padding: 0.15rem;
271
+ align-items: center;
272
+ border: 1px solid var(--cratis-control-border);
273
+ border-radius: 999px;
274
+ background: var(--cratis-surface-100);
275
+ transition: background-color 140ms ease;
276
+ }
277
+ .cratis-switch__handle {
278
+ width: 1rem;
279
+ height: 1rem;
280
+ border-radius: 50%;
281
+ background: var(--cratis-control-background);
282
+ box-shadow: var(--cratis-shadow-subtle);
283
+ transition: transform 140ms ease;
284
+ }
285
+ .cratis-choice-field__native:checked + .cratis-switch__control {
286
+ border-color: var(--cratis-primary-color);
287
+ background: var(--cratis-primary-color);
288
+ }
289
+ .cratis-choice-field__native:checked + .cratis-switch__control .cratis-switch__handle {
290
+ transform: translateX(1.05rem);
291
+ }
292
+
293
+ .cratis-radio__box {
294
+ display: inline-flex;
295
+ width: 1.25rem;
296
+ height: 1.25rem;
297
+ align-items: center;
298
+ justify-content: center;
299
+ border: 1px solid var(--cratis-control-border);
300
+ border-radius: 50%;
301
+ background: var(--cratis-control-background);
302
+ }
303
+ .cratis-radio__indicator {
304
+ width: 0.65rem;
305
+ height: 0.65rem;
306
+ border-radius: 50%;
307
+ background: var(--cratis-primary-color);
308
+ opacity: 0;
309
+ }
310
+ .cratis-choice-field__native:checked + .cratis-radio__box {
311
+ border-color: var(--cratis-primary-color);
312
+ }
313
+ .cratis-choice-field__native:checked + .cratis-radio__box .cratis-radio__indicator {
314
+ opacity: 1;
315
+ }
316
+ .cratis-radio-group {
317
+ display: flex;
318
+ }
319
+ .cratis-radio-group--vertical {
320
+ flex-direction: column;
321
+ gap: 0.5rem;
322
+ }
323
+ .cratis-radio-group--horizontal {
324
+ flex-direction: row;
325
+ flex-wrap: wrap;
326
+ gap: 1rem;
327
+ }
328
+
329
+ .cratis-slider-field {
330
+ display: grid;
331
+ grid-template-columns: 1fr auto;
332
+ align-items: center;
333
+ gap: 0.75rem;
334
+ }
335
+ .cratis-slider-field__input {
336
+ width: 100%;
337
+ accent-color: var(--cratis-primary-color);
338
+ }
339
+ .cratis-slider-field__input:focus-visible {
340
+ outline: none;
341
+ box-shadow: var(--cratis-focus-ring);
342
+ }
343
+ .cratis-slider-field__value {
344
+ min-width: 2.5rem;
345
+ text-align: end;
346
+ font-weight: 600;
347
+ font-variant-numeric: tabular-nums;
348
+ }
349
+
350
+ .cratis-chips-field {
351
+ display: flex;
352
+ box-sizing: border-box;
353
+ min-height: var(--cratis-control-height);
354
+ padding: 0.4rem;
355
+ align-items: center;
356
+ flex-wrap: wrap;
357
+ gap: 0.35rem;
358
+ border: 1px solid var(--cratis-control-border);
359
+ border-radius: var(--cratis-border-radius);
360
+ background: var(--cratis-control-background);
361
+ }
362
+ .cratis-chips-field:focus-within {
363
+ border-color: var(--cratis-primary-color);
364
+ box-shadow: var(--cratis-focus-ring);
365
+ }
366
+ .cratis-chips-field[data-invalid='true'] {
367
+ border-color: var(--cratis-red-500);
368
+ }
369
+ .cratis-chips-field__item {
370
+ display: inline-flex;
371
+ padding: 0.3rem 0.45rem;
372
+ align-items: center;
373
+ gap: 0.3rem;
374
+ border-radius: 999px;
375
+ background: var(--cratis-surface-100);
376
+ }
377
+ .cratis-chips-field__remove {
378
+ border: 0;
379
+ background: transparent;
380
+ color: inherit;
381
+ cursor: pointer;
382
+ }
383
+ .cratis-chips-field__remove:focus-visible {
384
+ outline: none;
385
+ border-radius: 50%;
386
+ box-shadow: var(--cratis-focus-ring);
387
+ }
388
+ .cratis-chips-field__input {
389
+ min-width: 7rem;
390
+ padding: 0.3rem;
391
+ flex: 1;
392
+ border: 0;
393
+ outline: none;
394
+ background: transparent;
395
+ color: var(--cratis-text-color);
396
+ font: inherit;
397
+ }
398
+
399
+ .cratis-color-field {
400
+ display: inline-flex;
401
+ align-items: center;
402
+ gap: 0.6rem;
403
+ }
404
+ .cratis-color-field__input {
405
+ width: 3rem;
406
+ height: var(--cratis-control-height);
407
+ padding: 0.2rem;
408
+ border: 1px solid var(--cratis-control-border);
409
+ border-radius: var(--cratis-border-radius);
410
+ background: var(--cratis-control-background);
411
+ }
412
+ .cratis-color-field__input:focus-visible {
413
+ outline: none;
414
+ box-shadow: var(--cratis-focus-ring);
415
+ }
416
+ .cratis-color-field__value {
417
+ font-family: ui-monospace, monospace;
418
+ }
419
+
420
+ .cratis-rating-field {
421
+ display: inline-flex;
422
+ align-items: center;
423
+ }
424
+ .cratis-rating-field__option {
425
+ position: relative;
426
+ cursor: pointer;
427
+ }
428
+ .cratis-rating-field__star {
429
+ color: var(--cratis-surface-border);
430
+ font-size: 1.4rem;
431
+ line-height: 1;
432
+ }
433
+ .cratis-rating-field__star[data-selected='true'] {
434
+ color: var(--cratis-orange-500);
435
+ }
436
+ .cratis-rating-field__option:focus-within .cratis-rating-field__star {
437
+ border-radius: 0.2rem;
438
+ box-shadow: var(--cratis-focus-ring);
439
+ }
440
+
441
+ @media (prefers-reduced-motion: reduce) {
442
+ .cratis-switch__control,
443
+ .cratis-switch__handle {
444
+ transition: none;
445
+ }
446
+ }
447
+
448
+ @media (forced-colors: active) {
449
+ .cratis-field-input,
450
+ .cratis-checkbox__box,
451
+ .cratis-switch__control {
452
+ border-color: CanvasText;
453
+ }
454
+ .cratis-choice-field__native:checked
455
+ + :is(.cratis-checkbox__box, .cratis-switch__control) {
456
+ background: Highlight;
457
+ }
458
+ }
459
+
460
+ /* ── ./Common/ActionMenubar.css ─────────────────────────────────────── */
461
+ /* Copyright (c) Cratis. All rights reserved. */
462
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
463
+
464
+ .cratis-action-menubar {
465
+ display: flex;
466
+ align-items: center;
467
+ gap: 0.25rem;
468
+ flex-wrap: wrap;
469
+ }
470
+
471
+ /* ── ./Common/Button.css ─────────────────────────────────────── */
472
+ /* Copyright (c) Cratis. All rights reserved. */
473
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
474
+
475
+ .cratis-button {
476
+ display: inline-flex;
477
+ box-sizing: border-box;
478
+ min-height: var(--cratis-control-height);
479
+ padding: 0.75rem 1.25rem;
480
+ align-items: center;
481
+ justify-content: center;
482
+ gap: 0.45rem;
483
+ border: 1px solid var(--cratis-action-background);
484
+ border-radius: var(--cratis-border-radius);
485
+ background: var(--cratis-action-background);
486
+ color: var(--cratis-action-text);
487
+ font: inherit;
488
+ font-weight: 600;
489
+ line-height: 1;
490
+ cursor: pointer;
491
+ transition:
492
+ background-color 140ms ease,
493
+ border-color 140ms ease,
494
+ color 140ms ease,
495
+ opacity 140ms ease;
496
+ }
497
+ .cratis-button:not([data-tone])[data-variant='solid']:hover:not(:disabled) {
498
+ border-color: var(--cratis-action-background-hover);
499
+ background: var(--cratis-action-background-hover);
500
+ }
501
+ .cratis-button:not([data-tone])[data-variant='solid']:active:not(:disabled) {
502
+ border-color: var(--cratis-action-background-active);
503
+ background: var(--cratis-action-background-active);
504
+ }
505
+ .cratis-button:is([data-variant='outline'], [data-variant='ghost']):hover:not(:disabled) {
506
+ background: color-mix(in srgb, currentColor 4%, transparent);
507
+ }
508
+ .cratis-button:is([data-variant='outline'], [data-variant='ghost']):active:not(
509
+ :disabled
510
+ ) {
511
+ background: color-mix(in srgb, currentColor 16%, transparent);
512
+ }
513
+ .cratis-button:focus-visible {
514
+ outline: none;
515
+ box-shadow: var(--cratis-focus-ring);
516
+ }
517
+ .cratis-button:disabled {
518
+ cursor: not-allowed;
519
+ opacity: var(--cratis-disabled-opacity);
520
+ }
521
+ .cratis-button[data-size='small'] {
522
+ min-height: var(--cratis-control-height-small);
523
+ padding: 0.5rem 0.75rem;
524
+ font-size: 0.8rem;
525
+ }
526
+ .cratis-button[data-size='large'] {
527
+ min-height: var(--cratis-control-height-large);
528
+ padding: 0.875rem 1.5rem;
529
+ font-size: 1rem;
530
+ }
531
+ .cratis-button[data-shape='pill'],
532
+ .cratis-button[data-icon-only='true'] {
533
+ border-radius: 999px;
534
+ }
535
+ .cratis-button[data-icon-only='true'] {
536
+ width: var(--cratis-control-height);
537
+ padding: 0;
538
+ }
539
+ .cratis-button[data-size='small'][data-icon-only='true'] {
540
+ width: var(--cratis-control-height-small);
541
+ }
542
+ .cratis-button[data-size='large'][data-icon-only='true'] {
543
+ width: var(--cratis-control-height-large);
544
+ }
545
+
546
+ .cratis-button[data-variant='outline'] {
547
+ border-color: currentColor;
548
+ background: transparent;
549
+ color: var(--cratis-primary-color);
550
+ }
551
+ .cratis-button[data-variant='ghost'] {
552
+ border-color: transparent;
553
+ background: transparent;
554
+ color: var(--cratis-text-color);
555
+ }
556
+ .cratis-button[data-variant='link'] {
557
+ min-height: auto;
558
+ padding: 0;
559
+ border-color: transparent;
560
+ background: transparent;
561
+ color: var(--cratis-primary-color);
562
+ text-decoration: underline;
563
+ }
564
+
565
+ .cratis-button[data-tone='neutral'] {
566
+ --cratis-button-tone: var(--cratis-text-color);
567
+ --cratis-button-fill: var(--cratis-surface-100);
568
+ --cratis-button-fill-text: var(--cratis-text-color);
569
+ }
570
+ .cratis-button[data-tone='accent'] {
571
+ --cratis-button-tone: var(--cratis-info-background);
572
+ --cratis-button-fill: var(--cratis-info-background);
573
+ --cratis-button-fill-text: var(--cratis-info-text);
574
+ }
575
+ .cratis-button[data-tone='positive'] {
576
+ --cratis-button-tone: var(--cratis-success-background);
577
+ --cratis-button-fill: var(--cratis-success-background);
578
+ --cratis-button-fill-text: var(--cratis-success-text);
579
+ }
580
+ .cratis-button[data-tone='caution'] {
581
+ --cratis-button-tone: var(--cratis-warning-background);
582
+ --cratis-button-fill: var(--cratis-warning-background);
583
+ --cratis-button-fill-text: var(--cratis-warning-text);
584
+ }
585
+ .cratis-button[data-tone='critical'] {
586
+ --cratis-button-tone: var(--cratis-danger-background);
587
+ --cratis-button-fill: var(--cratis-danger-background);
588
+ --cratis-button-fill-text: var(--cratis-danger-text);
589
+ }
590
+ .cratis-button[data-tone='accent'][data-severity='help'] {
591
+ --cratis-button-tone: var(--cratis-primary-600);
592
+ --cratis-button-fill: var(--cratis-primary-600);
593
+ --cratis-button-fill-text: var(--cratis-primary-600-text);
594
+ }
595
+ .cratis-button[data-tone='neutral'][data-severity='contrast'] {
596
+ --cratis-button-tone: var(--cratis-text-color);
597
+ --cratis-button-fill: var(--cratis-text-color);
598
+ --cratis-button-fill-text: var(--cratis-surface-0);
599
+ }
600
+ .cratis-button[data-tone][data-variant='solid'] {
601
+ border-color: var(--cratis-button-fill);
602
+ background: var(--cratis-button-fill);
603
+ color: var(--cratis-button-fill-text);
604
+ }
605
+ .cratis-button[data-tone][data-variant='solid']:hover:not(:disabled) {
606
+ border-color: color-mix(in srgb, var(--cratis-button-fill) 88%, black);
607
+ background: color-mix(in srgb, var(--cratis-button-fill) 88%, black);
608
+ }
609
+ .cratis-button[data-tone][data-variant='solid']:active:not(:disabled) {
610
+ border-color: color-mix(in srgb, var(--cratis-button-fill) 76%, black);
611
+ background: color-mix(in srgb, var(--cratis-button-fill) 76%, black);
612
+ }
613
+ .cratis-button[data-tone]:is(
614
+ [data-variant='outline'],
615
+ [data-variant='ghost'],
616
+ [data-variant='link']
617
+ ) {
618
+ color: var(--cratis-button-tone);
619
+ }
620
+
621
+ .cratis-button__icon,
622
+ .cratis-button__spinner {
623
+ display: inline-flex;
624
+ flex: 0 0 auto;
625
+ }
626
+ .cratis-button__spinner {
627
+ width: 1em;
628
+ height: 1em;
629
+ border: 2px solid currentColor;
630
+ border-right-color: transparent;
631
+ border-radius: 50%;
632
+ animation: cratis-button-spin 700ms linear infinite;
633
+ }
634
+
635
+ @keyframes cratis-button-spin {
636
+ to {
637
+ transform: rotate(360deg);
638
+ }
639
+ }
640
+
641
+ @media (prefers-reduced-motion: reduce) {
642
+ .cratis-button,
643
+ .cratis-button__spinner {
644
+ transition: none;
645
+ animation: none;
646
+ }
647
+ }
648
+
649
+ @media (forced-colors: active) {
650
+ .cratis-button {
651
+ border-color: ButtonText;
652
+ }
653
+ .cratis-button:focus-visible {
654
+ outline: 2px solid Highlight;
655
+ outline-offset: 2px;
656
+ box-shadow: none;
657
+ }
658
+ }
659
+
660
+ /* ── ./Common/ComboBox.css ─────────────────────────────────────── */
661
+ /* Copyright (c) Cratis. All rights reserved. */
662
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
663
+
664
+ .cratis-combobox {
665
+ display: inline-flex;
666
+ flex-direction: column;
667
+ min-width: 10rem;
668
+ color: var(--cratis-text-color);
669
+ }
670
+ .cratis-combobox__control {
671
+ display: flex;
672
+ min-height: var(--cratis-control-height);
673
+ border: 1px solid var(--cratis-control-border);
674
+ border-radius: var(--cratis-border-radius);
675
+ background: var(--cratis-control-background);
676
+ }
677
+ .cratis-combobox__control:focus-within {
678
+ border-color: var(--cratis-primary-color);
679
+ box-shadow: var(--cratis-focus-ring);
680
+ }
681
+ .cratis-combobox[data-invalid='true'] .cratis-combobox__control {
682
+ border-color: var(--cratis-red-500);
683
+ }
684
+ .cratis-combobox[data-disabled='true'] {
685
+ cursor: not-allowed;
686
+ opacity: var(--cratis-disabled-opacity);
687
+ }
688
+ .cratis-combobox__input,
689
+ .cratis-combobox__trigger {
690
+ border: 0;
691
+ background: transparent;
692
+ color: inherit;
693
+ font: inherit;
694
+ }
695
+ .cratis-combobox__input {
696
+ flex: 1 1 auto;
697
+ min-width: 0;
698
+ padding: 0.625rem 0.75rem;
699
+ outline: 0;
700
+ }
701
+ .cratis-combobox__trigger {
702
+ padding: 0 0.75rem;
703
+ color: var(--cratis-text-color-secondary);
704
+ }
705
+ .cratis-combobox__popover {
706
+ width: var(--trigger-width);
707
+ overflow: auto;
708
+ border: 1px solid var(--cratis-surface-border);
709
+ border-radius: var(--cratis-border-radius);
710
+ background: var(--cratis-surface-overlay);
711
+ box-shadow: var(--cratis-shadow-overlay);
712
+ }
713
+ .cratis-combobox__listbox {
714
+ max-height: 18rem;
715
+ padding: 0.25rem;
716
+ }
717
+ .cratis-combobox__option,
718
+ .cratis-combobox__action,
719
+ .cratis-combobox__message {
720
+ display: flex;
721
+ gap: 0.5rem;
722
+ padding: 0.5rem 0.75rem;
723
+ border-radius: var(--cratis-border-radius);
724
+ }
725
+ .cratis-combobox__listbox[data-option-layout='stacked'] .cratis-combobox__option {
726
+ flex-direction: column;
727
+ }
728
+ .cratis-combobox__option[data-focused],
729
+ .cratis-combobox__action[data-focused] {
730
+ background: var(--cratis-surface-hover);
731
+ }
732
+ .cratis-combobox__option[data-selected='true'] {
733
+ background: var(--cratis-highlight-bg);
734
+ color: var(--cratis-highlight-text-color);
735
+ }
736
+ .cratis-combobox__option[data-disabled='true'] {
737
+ opacity: var(--cratis-disabled-opacity);
738
+ }
739
+ .cratis-combobox__option-description,
740
+ .cratis-combobox__message,
741
+ .cratis-combobox__description {
742
+ color: var(--cratis-text-color-secondary);
743
+ }
744
+ .cratis-combobox__action {
745
+ border-top: 1px solid var(--cratis-surface-border);
746
+ color: var(--cratis-primary-color);
747
+ }
748
+ .cratis-combobox__description,
749
+ .cratis-combobox__error {
750
+ margin-top: 0.25rem;
751
+ font-size: 0.875em;
752
+ }
753
+ .cratis-combobox__error {
754
+ color: var(--cratis-red-500);
755
+ }
756
+
757
+ /* ── ./Common/Collections.css ─────────────────────────────────────── */
758
+ /* Copyright (c) Cratis. All rights reserved. */
759
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
760
+
761
+ /* Toggle group, tabs, tag group and breadcrumbs share a token vocabulary and a focus treatment, so
762
+ they share one stylesheet rather than repeating it four times in the published aggregate. */
763
+
764
+ .cratis-toggle-group,
765
+ .cratis-tabs__list,
766
+ .cratis-tag-group,
767
+ .cratis-breadcrumbs {
768
+ display: flex;
769
+ align-items: center;
770
+ color: var(--cratis-text-color);
771
+ }
772
+ .cratis-toggle-group__option:focus-visible,
773
+ .cratis-tabs__tab:focus-visible,
774
+ .cratis-tag-group__tag:focus-visible,
775
+ .cratis-tag-group__remove:focus-visible,
776
+ .cratis-tag-group__input:focus-visible,
777
+ .cratis-breadcrumbs__link:focus-visible {
778
+ outline: none;
779
+ box-shadow: var(--cratis-focus-ring);
780
+ }
781
+ .cratis-toggle-group[data-disabled],
782
+ .cratis-tabs[data-disabled] {
783
+ cursor: not-allowed;
784
+ opacity: var(--cratis-disabled-opacity);
785
+ }
786
+ /* A disabled tag group keeps its values readable — they are information, not an inactive control,
787
+ and fading them takes their contrast below the threshold. Only the affordances dim. */
788
+ .cratis-tag-group[data-disabled] {
789
+ cursor: not-allowed;
790
+ background: var(--cratis-surface-ground);
791
+ }
792
+ .cratis-tag-group[data-disabled] .cratis-tag-group__tag {
793
+ border-style: dashed;
794
+ }
795
+
796
+ /* Toggle group */
797
+ .cratis-toggle-group {
798
+ gap: 0.125rem;
799
+ padding: 0.125rem;
800
+ border: 1px solid var(--cratis-surface-border);
801
+ border-radius: var(--cratis-border-radius);
802
+ background: var(--cratis-surface-ground);
803
+ }
804
+ .cratis-toggle-group__option {
805
+ display: inline-flex;
806
+ align-items: center;
807
+ gap: 0.35rem;
808
+ padding: 0.25rem 0.75rem;
809
+ border: 0;
810
+ border-radius: calc(var(--cratis-border-radius) - 1px);
811
+ background: transparent;
812
+ color: inherit;
813
+ font: inherit;
814
+ cursor: pointer;
815
+ }
816
+ .cratis-toggle-group__option[data-selected] {
817
+ background: var(--cratis-surface-card);
818
+ box-shadow: var(--cratis-shadow-card, none);
819
+ font-weight: 600;
820
+ }
821
+ .cratis-toggle-group__option[data-disabled] {
822
+ cursor: not-allowed;
823
+ opacity: var(--cratis-disabled-opacity);
824
+ }
825
+ .cratis-toggle-group__icon {
826
+ display: inline-flex;
827
+ }
828
+ .cratis-toggle-group[data-invalid] {
829
+ border-color: var(--cratis-red-500);
830
+ }
831
+
832
+ /* Tabs */
833
+ .cratis-tabs {
834
+ display: flex;
835
+ flex-direction: column;
836
+ }
837
+ .cratis-tabs__list {
838
+ gap: 0.25rem;
839
+ border-bottom: 1px solid var(--cratis-surface-border);
840
+ }
841
+ .cratis-tabs__tab {
842
+ padding: 0.5rem 0.75rem;
843
+ border: 0;
844
+ border-bottom: 2px solid transparent;
845
+ background: transparent;
846
+ color: var(--cratis-text-color-secondary);
847
+ font: inherit;
848
+ cursor: pointer;
849
+ }
850
+ .cratis-tabs__tab[data-selected] {
851
+ border-bottom-color: var(--cratis-primary-color);
852
+ color: var(--cratis-text-color);
853
+ font-weight: 600;
854
+ }
855
+ .cratis-tabs__tab[data-disabled] {
856
+ cursor: not-allowed;
857
+ opacity: var(--cratis-disabled-opacity);
858
+ }
859
+ .cratis-tabs__panel {
860
+ padding: 0.75rem 0;
861
+ outline: none;
862
+ }
863
+
864
+ /* Tag group */
865
+ .cratis-tag-group {
866
+ flex-wrap: wrap;
867
+ gap: 0.35rem;
868
+ min-height: var(--cratis-control-height);
869
+ padding: 0.25rem 0.5rem;
870
+ border: 1px solid var(--cratis-control-border);
871
+ border-radius: var(--cratis-border-radius);
872
+ background: var(--cratis-control-background);
873
+ }
874
+ .cratis-tag-group:focus-within {
875
+ border-color: var(--cratis-primary-color);
876
+ box-shadow: var(--cratis-focus-ring);
877
+ }
878
+ .cratis-tag-group[data-invalid] {
879
+ border-color: var(--cratis-red-500);
880
+ }
881
+ .cratis-tag-group__group,
882
+ .cratis-tag-group__list {
883
+ display: contents;
884
+ }
885
+ .cratis-tag-group__tag {
886
+ display: inline-flex;
887
+ align-items: center;
888
+ gap: 0.25rem;
889
+ padding: 0.1rem 0.5rem;
890
+ border: 1px solid var(--cratis-surface-border);
891
+ border-radius: 999px;
892
+ background: var(--cratis-surface-ground);
893
+ font-size: 0.9em;
894
+ }
895
+ .cratis-tag-group__remove {
896
+ display: inline-flex;
897
+ align-items: center;
898
+ justify-content: center;
899
+ padding: 0;
900
+ border: 0;
901
+ background: transparent;
902
+ color: var(--cratis-text-color-secondary);
903
+ line-height: 1;
904
+ cursor: pointer;
905
+ }
906
+ .cratis-tag-group__remove:hover {
907
+ color: var(--cratis-text-color);
908
+ }
909
+ .cratis-tag-group__input {
910
+ flex: 1 1 6rem;
911
+ min-width: 4rem;
912
+ border: 0;
913
+ background: transparent;
914
+ color: inherit;
915
+ font: inherit;
916
+ outline: none;
917
+ }
918
+
919
+ /* Breadcrumbs */
920
+ .cratis-breadcrumbs {
921
+ flex-wrap: wrap;
922
+ gap: 0.35rem;
923
+ padding: 0;
924
+ margin: 0;
925
+ list-style: none;
926
+ }
927
+ .cratis-breadcrumbs__item {
928
+ display: inline-flex;
929
+ align-items: center;
930
+ gap: 0.35rem;
931
+ }
932
+ .cratis-breadcrumbs__link {
933
+ border-radius: var(--cratis-border-radius);
934
+ color: var(--cratis-text-color-secondary);
935
+ text-decoration: none;
936
+ cursor: pointer;
937
+ }
938
+ .cratis-breadcrumbs__link:hover {
939
+ color: var(--cratis-text-color);
940
+ text-decoration: underline;
941
+ }
942
+ .cratis-breadcrumbs__item[data-selected] {
943
+ color: var(--cratis-text-color);
944
+ font-weight: 600;
945
+ }
946
+ .cratis-breadcrumbs__separator {
947
+ color: var(--cratis-text-color-secondary);
948
+ }
949
+
950
+ @media (forced-colors: active) {
951
+ .cratis-toggle-group__option[data-selected],
952
+ .cratis-tabs__tab[data-selected] {
953
+ forced-color-adjust: none;
954
+ background: Highlight;
955
+ color: HighlightText;
956
+ }
957
+ }
958
+
959
+ /* ── ./Common/DatePickerInput.css ─────────────────────────────────────── */
960
+ /* Copyright (c) Cratis. All rights reserved. */
961
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
962
+
963
+ .cratis-date-picker {
964
+ display: inline-flex;
965
+ width: 100%;
966
+ color: var(--cratis-text-color);
967
+ }
968
+ .cratis-date-picker__picker {
969
+ width: 100%;
970
+ }
971
+ .cratis-date-picker__group {
972
+ position: relative;
973
+ display: flex;
974
+ width: 100%;
975
+ box-sizing: border-box;
976
+ min-height: var(--cratis-control-height);
977
+ align-items: center;
978
+ overflow: hidden;
979
+ border: 1px solid var(--cratis-control-border);
980
+ border-radius: var(--cratis-border-radius);
981
+ background: var(--cratis-control-background);
982
+ }
983
+ .cratis-date-picker__group[data-focus-within] {
984
+ border-color: var(--cratis-primary-color);
985
+ box-shadow: var(--cratis-focus-ring);
986
+ }
987
+ .cratis-date-picker[data-invalid='true'] .cratis-date-picker__group {
988
+ border-color: var(--cratis-red-500);
989
+ }
990
+ .cratis-date-picker[data-disabled='true'] {
991
+ opacity: var(--cratis-disabled-opacity);
992
+ }
993
+ .cratis-date-picker__input {
994
+ display: flex;
995
+ flex: 1;
996
+ flex-wrap: wrap;
997
+ min-width: 0;
998
+ padding: 0.625rem 0.75rem;
999
+ }
1000
+ .cratis-date-picker__group[data-empty='true']:not([data-focus-within])
1001
+ .cratis-date-picker__input {
1002
+ opacity: 0;
1003
+ }
1004
+ .cratis-date-picker__placeholder {
1005
+ position: absolute;
1006
+ inset-inline-start: 0.7rem;
1007
+ color: var(--cratis-text-color-secondary);
1008
+ pointer-events: none;
1009
+ }
1010
+ .cratis-date-picker__group[data-focus-within] .cratis-date-picker__placeholder {
1011
+ display: none;
1012
+ }
1013
+ .cratis-date-picker__segment {
1014
+ padding: 0 0.1rem;
1015
+ border-radius: 0.2rem;
1016
+ outline: none;
1017
+ font-variant-numeric: tabular-nums;
1018
+ }
1019
+ .cratis-date-picker__segment:not([data-type='literal']) {
1020
+ display: flex;
1021
+ min-width: 24px;
1022
+ min-height: 24px;
1023
+ align-items: center;
1024
+ justify-content: center;
1025
+ }
1026
+ .cratis-date-picker__segment[data-placeholder] {
1027
+ color: var(--cratis-text-color-secondary);
1028
+ }
1029
+ .cratis-date-picker__segment[data-focused] {
1030
+ background: var(--cratis-highlight-bg);
1031
+ color: var(--cratis-highlight-text-color);
1032
+ }
1033
+ .cratis-date-picker__trigger {
1034
+ align-self: stretch;
1035
+ min-width: var(--cratis-control-height);
1036
+ border: 0;
1037
+ border-inline-start: 1px solid var(--cratis-control-border);
1038
+ background: transparent;
1039
+ color: var(--cratis-text-color-secondary);
1040
+ cursor: pointer;
1041
+ }
1042
+ .cratis-date-picker__trigger:hover {
1043
+ background: var(--cratis-surface-hover);
1044
+ color: var(--cratis-text-color);
1045
+ }
1046
+ .cratis-date-picker__trigger:focus-visible {
1047
+ outline: none;
1048
+ box-shadow: inset var(--cratis-focus-ring);
1049
+ }
1050
+ .cratis-date-picker__popover {
1051
+ z-index: var(--cratis-z-index-overlay);
1052
+ overflow: auto;
1053
+ border: 1px solid var(--cratis-surface-border);
1054
+ border-radius: var(--cratis-border-radius);
1055
+ background: var(--cratis-surface-overlay);
1056
+ color: var(--cratis-text-color);
1057
+ box-shadow: var(--cratis-shadow-overlay);
1058
+ }
1059
+ .cratis-date-picker__dialog {
1060
+ padding: 0.75rem;
1061
+ outline: none;
1062
+ }
1063
+ .cratis-date-picker__calendar {
1064
+ width: max-content;
1065
+ }
1066
+ .cratis-date-picker__header {
1067
+ display: grid;
1068
+ grid-template-columns: 2rem 1fr 2rem;
1069
+ align-items: center;
1070
+ gap: 0.5rem;
1071
+ margin-bottom: 0.5rem;
1072
+ }
1073
+ .cratis-date-picker__heading {
1074
+ margin: 0;
1075
+ text-align: center;
1076
+ font-size: 0.95rem;
1077
+ }
1078
+ .cratis-date-picker__nav,
1079
+ .cratis-date-picker__action {
1080
+ min-height: 2rem;
1081
+ border: 1px solid var(--cratis-surface-border);
1082
+ border-radius: calc(var(--cratis-border-radius) * 0.75);
1083
+ background: transparent;
1084
+ color: inherit;
1085
+ cursor: pointer;
1086
+ }
1087
+ .cratis-date-picker__nav:hover,
1088
+ .cratis-date-picker__action:hover {
1089
+ background: var(--cratis-surface-hover);
1090
+ }
1091
+ .cratis-date-picker__nav:focus-visible,
1092
+ .cratis-date-picker__action:focus-visible {
1093
+ outline: none;
1094
+ box-shadow: var(--cratis-focus-ring);
1095
+ }
1096
+ .cratis-date-picker__grid {
1097
+ border-collapse: collapse;
1098
+ }
1099
+ .cratis-date-picker__grid th {
1100
+ width: 2.25rem;
1101
+ height: 2rem;
1102
+ color: var(--cratis-text-color-secondary);
1103
+ font-size: 0.75rem;
1104
+ font-weight: 500;
1105
+ }
1106
+ .cratis-date-picker__cell {
1107
+ display: flex;
1108
+ width: 2.5rem;
1109
+ height: 2.5rem;
1110
+ align-items: center;
1111
+ justify-content: center;
1112
+ border-radius: 50%;
1113
+ outline: none;
1114
+ cursor: default;
1115
+ }
1116
+ .cratis-date-picker__cell[data-hovered] {
1117
+ background: var(--cratis-surface-hover);
1118
+ }
1119
+ .cratis-date-picker__cell[data-selected] {
1120
+ background: var(--cratis-action-background);
1121
+ color: var(--cratis-action-text);
1122
+ }
1123
+ .cratis-date-picker__cell[data-focused] {
1124
+ box-shadow: var(--cratis-focus-ring);
1125
+ }
1126
+ .cratis-date-picker__cell[data-disabled],
1127
+ .cratis-date-picker__cell[data-outside-month] {
1128
+ opacity: 0.45;
1129
+ }
1130
+ .cratis-date-picker__button-bar {
1131
+ display: flex;
1132
+ justify-content: flex-end;
1133
+ gap: 0.5rem;
1134
+ margin-top: 0.6rem;
1135
+ padding-top: 0.6rem;
1136
+ border-top: 1px solid var(--cratis-surface-border);
1137
+ }
1138
+ .cratis-date-picker__action {
1139
+ padding: 0.35rem 0.65rem;
1140
+ }
1141
+
1142
+ @media (forced-colors: active) {
1143
+ .cratis-date-picker__group,
1144
+ .cratis-date-picker__popover,
1145
+ .cratis-date-picker__nav,
1146
+ .cratis-date-picker__action {
1147
+ border-color: CanvasText;
1148
+ }
1149
+ .cratis-date-picker__cell[data-selected] {
1150
+ background: Highlight;
1151
+ color: HighlightText;
1152
+ }
1153
+ }
1154
+
1155
+ /* ── ./Common/FormElement.css ─────────────────────────────────────── */
1156
+ /* Copyright (c) Cratis. All rights reserved. */
1157
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1158
+
1159
+ .cratis-form-element {
1160
+ display: flex;
1161
+ flex: 1 1 auto;
1162
+ align-items: stretch;
1163
+ }
1164
+
1165
+ .cratis-form-element__addon {
1166
+ display: inline-flex;
1167
+ align-items: center;
1168
+ justify-content: center;
1169
+ padding: 0 0.75rem;
1170
+ color: var(--cratis-text-color-secondary);
1171
+ background: var(--cratis-surface-100);
1172
+ border: 1px solid var(--cratis-control-border);
1173
+ border-right: 0;
1174
+ border-top-left-radius: var(--cratis-border-radius);
1175
+ border-bottom-left-radius: var(--cratis-border-radius);
1176
+ }
1177
+
1178
+ .cratis-form-element > *:not(.cratis-form-element__addon) {
1179
+ flex: 1 1 auto;
1180
+ min-width: 0;
1181
+ }
1182
+
1183
+ /* ── ./Common/NumberInput.css ─────────────────────────────────────── */
1184
+ /* Copyright (c) Cratis. All rights reserved. */
1185
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1186
+
1187
+ .cratis-number-input {
1188
+ box-sizing: border-box;
1189
+ width: 100%;
1190
+ max-width: 100%;
1191
+ color: var(--cratis-text-color);
1192
+ }
1193
+ .cratis-number-input__group {
1194
+ display: flex;
1195
+ box-sizing: border-box;
1196
+ min-width: 0;
1197
+ min-height: var(--cratis-control-height);
1198
+ align-items: stretch;
1199
+ overflow: hidden;
1200
+ border: 1px solid var(--cratis-control-border);
1201
+ border-radius: var(--cratis-border-radius);
1202
+ background: var(--cratis-control-background);
1203
+ box-shadow: var(--cratis-shadow-subtle);
1204
+ }
1205
+ .cratis-number-input__control,
1206
+ .cratis-number-input__steps {
1207
+ display: flex;
1208
+ min-width: 0;
1209
+ align-items: stretch;
1210
+ }
1211
+ .cratis-number-input__control {
1212
+ flex: 1 1 auto;
1213
+ }
1214
+ .cratis-number-input__steps {
1215
+ flex: 0 0 auto;
1216
+ }
1217
+ .cratis-number-input__group:focus-within {
1218
+ border-color: var(--cratis-primary-color);
1219
+ box-shadow: var(--cratis-focus-ring);
1220
+ }
1221
+ .cratis-number-input[data-invalid='true'] .cratis-number-input__group {
1222
+ border-color: var(--cratis-red-500);
1223
+ }
1224
+ .cratis-number-input[data-disabled='true'] {
1225
+ cursor: not-allowed;
1226
+ opacity: var(--cratis-disabled-opacity);
1227
+ }
1228
+ .cratis-number-input:is([data-disabled='true'], [data-readonly='true'])
1229
+ .cratis-number-input__group {
1230
+ background: var(--cratis-surface-100);
1231
+ }
1232
+ .cratis-number-input__input {
1233
+ box-sizing: border-box;
1234
+ width: 100%;
1235
+ min-width: 0;
1236
+ min-height: var(--cratis-control-height);
1237
+ padding: 0.625rem 0.75rem;
1238
+ flex: 1 1 auto;
1239
+ border: 0;
1240
+ outline: 0;
1241
+ background: transparent;
1242
+ color: var(--cratis-text-color);
1243
+ font: inherit;
1244
+ font-variant-numeric: tabular-nums;
1245
+ }
1246
+ .cratis-number-input__input::placeholder {
1247
+ color: var(--cratis-text-color-secondary);
1248
+ }
1249
+ .cratis-number-input__adornment {
1250
+ display: inline-flex;
1251
+ min-width: 0;
1252
+ padding-inline: 0.75rem;
1253
+ align-items: center;
1254
+ color: var(--cratis-number-input-adornment-color);
1255
+ white-space: nowrap;
1256
+ }
1257
+ .cratis-number-input__prefix {
1258
+ padding-inline-end: 0;
1259
+ }
1260
+ .cratis-number-input__suffix {
1261
+ padding-inline-start: 0;
1262
+ }
1263
+ .cratis-number-input__step {
1264
+ display: inline-flex;
1265
+ box-sizing: border-box;
1266
+ width: var(--cratis-control-height);
1267
+ min-width: 2.75rem;
1268
+ min-height: var(--cratis-control-height);
1269
+ padding: 0;
1270
+ align-items: center;
1271
+ justify-content: center;
1272
+ border: 0;
1273
+ border-inline-start: 1px solid var(--cratis-control-border);
1274
+ background: var(--cratis-number-input-step-background);
1275
+ color: var(--cratis-text-color);
1276
+ font: inherit;
1277
+ cursor: pointer;
1278
+ }
1279
+ .cratis-number-input__step:hover:not(:disabled) {
1280
+ background: var(--cratis-number-input-step-background-hover);
1281
+ }
1282
+ .cratis-number-input__step:focus-visible {
1283
+ outline: 2px solid var(--cratis-primary-color);
1284
+ outline-offset: -3px;
1285
+ }
1286
+ .cratis-number-input__step:disabled {
1287
+ cursor: not-allowed;
1288
+ opacity: var(--cratis-disabled-opacity);
1289
+ }
1290
+ .cratis-number-input__description,
1291
+ .cratis-number-input__error {
1292
+ display: block;
1293
+ margin-block-start: 0.35rem;
1294
+ line-height: 1.4;
1295
+ }
1296
+ .cratis-number-input__description {
1297
+ color: var(--cratis-text-color-secondary);
1298
+ }
1299
+ .cratis-number-input__error {
1300
+ color: var(--cratis-red-500);
1301
+ }
1302
+
1303
+ @media (max-width: 24rem) {
1304
+ .cratis-number-input__group {
1305
+ flex-wrap: wrap;
1306
+ }
1307
+ .cratis-number-input__control,
1308
+ .cratis-number-input__steps {
1309
+ width: 100%;
1310
+ flex-basis: 100%;
1311
+ border-block-start: 1px solid var(--cratis-control-border);
1312
+ }
1313
+ .cratis-number-input__step {
1314
+ width: 50%;
1315
+ min-width: 0;
1316
+ flex: 1 1 50%;
1317
+ }
1318
+ .cratis-number-input__step:first-child {
1319
+ border-inline-start: 0;
1320
+ }
1321
+ }
1322
+
1323
+ @media (forced-colors: active) {
1324
+ .cratis-number-input__group,
1325
+ .cratis-number-input__step {
1326
+ border-color: CanvasText;
1327
+ }
1328
+ .cratis-number-input__group:focus-within,
1329
+ .cratis-number-input__step:focus-visible {
1330
+ outline: 2px solid Highlight;
1331
+ outline-offset: 2px;
1332
+ box-shadow: none;
1333
+ }
1334
+ }
1335
+
1336
+ /* ── ./Common/Primitives.css ─────────────────────────────────────── */
1337
+ /* Copyright (c) Cratis. All rights reserved. */
1338
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1339
+
1340
+ .cratis-text-input,
1341
+ .cratis-text-area {
1342
+ box-sizing: border-box;
1343
+ min-height: var(--cratis-control-height);
1344
+ padding: 0.625rem 0.75rem;
1345
+ border: 1px solid var(--cratis-control-border);
1346
+ border-radius: var(--cratis-border-radius);
1347
+ background: var(--cratis-control-background);
1348
+ color: var(--cratis-text-color);
1349
+ font: inherit;
1350
+ box-shadow: var(--cratis-shadow-subtle);
1351
+ }
1352
+ .cratis-text-area {
1353
+ resize: vertical;
1354
+ }
1355
+ .cratis-text-input::placeholder,
1356
+ .cratis-text-area::placeholder {
1357
+ color: var(--cratis-text-color-secondary);
1358
+ }
1359
+ .cratis-text-input:focus-visible,
1360
+ .cratis-text-area:focus-visible {
1361
+ outline: none;
1362
+ border-color: var(--cratis-primary-color);
1363
+ box-shadow: var(--cratis-focus-ring);
1364
+ }
1365
+ .cratis-text-input:is(:disabled, [data-readonly='true']),
1366
+ .cratis-text-area:is(:disabled, [data-readonly='true']) {
1367
+ background: var(--cratis-surface-100);
1368
+ }
1369
+ .cratis-text-input:disabled,
1370
+ .cratis-text-area:disabled {
1371
+ cursor: not-allowed;
1372
+ opacity: var(--cratis-disabled-opacity);
1373
+ }
1374
+ .cratis-text-input[data-invalid='true'],
1375
+ .cratis-text-area[data-invalid='true'] {
1376
+ border-color: var(--cratis-red-500);
1377
+ }
1378
+
1379
+ .cratis-choice {
1380
+ position: relative;
1381
+ display: inline-flex;
1382
+ align-items: center;
1383
+ gap: 0.5rem;
1384
+ color: var(--cratis-text-color);
1385
+ cursor: pointer;
1386
+ }
1387
+ .cratis-choice[data-disabled='true'] {
1388
+ cursor: not-allowed;
1389
+ opacity: var(--cratis-disabled-opacity);
1390
+ }
1391
+ .cratis-choice[data-readonly='true']:not([data-disabled='true']) {
1392
+ cursor: default;
1393
+ }
1394
+ .cratis-choice__input {
1395
+ position: absolute;
1396
+ width: 1px;
1397
+ height: 1px;
1398
+ margin: -1px;
1399
+ overflow: hidden;
1400
+ clip: rect(0 0 0 0);
1401
+ clip-path: inset(50%);
1402
+ white-space: nowrap;
1403
+ }
1404
+ .cratis-checkbox__box,
1405
+ .cratis-radio__box,
1406
+ .cratis-switch__control {
1407
+ display: inline-flex;
1408
+ box-sizing: border-box;
1409
+ flex: 0 0 auto;
1410
+ align-items: center;
1411
+ border: 1px solid var(--cratis-control-border);
1412
+ background: var(--cratis-control-background);
1413
+ }
1414
+ .cratis-checkbox__box,
1415
+ .cratis-radio__box {
1416
+ width: 1.25rem;
1417
+ height: 1.25rem;
1418
+ justify-content: center;
1419
+ }
1420
+ .cratis-checkbox__box {
1421
+ border-radius: var(--cratis-border-radius);
1422
+ }
1423
+ .cratis-checkbox__indicator {
1424
+ color: var(--cratis-primary-color-text);
1425
+ font-size: 0.85rem;
1426
+ line-height: 1;
1427
+ opacity: 0;
1428
+ }
1429
+ .cratis-radio__box {
1430
+ border-radius: 50%;
1431
+ }
1432
+ .cratis-radio__indicator {
1433
+ width: 0.65rem;
1434
+ height: 0.65rem;
1435
+ border-radius: 50%;
1436
+ background: var(--cratis-primary-color);
1437
+ opacity: 0;
1438
+ }
1439
+ .cratis-switch__control {
1440
+ width: 2.5rem;
1441
+ height: 1.4rem;
1442
+ padding: 0.15rem;
1443
+ border-radius: 999px;
1444
+ background: var(--cratis-surface-100);
1445
+ transition: background-color 140ms ease;
1446
+ }
1447
+ .cratis-switch__handle {
1448
+ width: 1rem;
1449
+ height: 1rem;
1450
+ border-radius: 50%;
1451
+ background: var(--cratis-control-background);
1452
+ box-shadow: var(--cratis-shadow-subtle);
1453
+ transition: transform 140ms ease;
1454
+ }
1455
+ .cratis-choice__input:focus-visible
1456
+ + :is(.cratis-checkbox__box, .cratis-radio__box, .cratis-switch__control) {
1457
+ box-shadow: var(--cratis-focus-ring);
1458
+ }
1459
+ .cratis-choice__input:checked + .cratis-checkbox__box,
1460
+ .cratis-choice__input:checked + .cratis-switch__control {
1461
+ border-color: var(--cratis-primary-color);
1462
+ background: var(--cratis-primary-color);
1463
+ }
1464
+ .cratis-choice__input:checked + .cratis-checkbox__box .cratis-checkbox__indicator,
1465
+ .cratis-choice__input:checked + .cratis-radio__box .cratis-radio__indicator {
1466
+ opacity: 1;
1467
+ }
1468
+ .cratis-choice__input:checked + .cratis-radio__box {
1469
+ border-color: var(--cratis-primary-color);
1470
+ }
1471
+ .cratis-choice__input:checked + .cratis-switch__control .cratis-switch__handle {
1472
+ transform: translateX(1.05rem);
1473
+ }
1474
+ .cratis-choice:dir(rtl)
1475
+ .cratis-choice__input:checked
1476
+ + .cratis-switch__control
1477
+ .cratis-switch__handle {
1478
+ transform: translateX(-1.05rem);
1479
+ }
1480
+ .cratis-choice[data-invalid='true']
1481
+ :is(.cratis-checkbox__box, .cratis-radio__box, .cratis-switch__control) {
1482
+ border-color: var(--cratis-red-500);
1483
+ }
1484
+
1485
+ .cratis-surface {
1486
+ box-sizing: border-box;
1487
+ border: 1px solid var(--cratis-surface-border);
1488
+ border-radius: var(--cratis-border-radius);
1489
+ background: var(--cratis-surface-card);
1490
+ color: var(--cratis-text-color);
1491
+ box-shadow: var(--cratis-shadow-subtle);
1492
+ }
1493
+
1494
+ @media (prefers-reduced-motion: reduce) {
1495
+ .cratis-switch__control,
1496
+ .cratis-switch__handle {
1497
+ transition: none;
1498
+ }
1499
+ }
1500
+
1501
+ @media (forced-colors: active) {
1502
+ .cratis-text-input,
1503
+ .cratis-text-area,
1504
+ .cratis-checkbox__box,
1505
+ .cratis-radio__box,
1506
+ .cratis-switch__control,
1507
+ .cratis-surface {
1508
+ border-color: CanvasText;
1509
+ }
1510
+ .cratis-choice__input:checked
1511
+ + :is(.cratis-checkbox__box, .cratis-switch__control) {
1512
+ background: Highlight;
1513
+ }
1514
+ .cratis-choice__input:checked + .cratis-radio__box .cratis-radio__indicator {
1515
+ background: Highlight;
1516
+ }
1517
+ .cratis-choice__input:focus-visible
1518
+ + :is(.cratis-checkbox__box, .cratis-radio__box, .cratis-switch__control),
1519
+ .cratis-text-input:focus-visible,
1520
+ .cratis-text-area:focus-visible {
1521
+ outline: 2px solid Highlight;
1522
+ outline-offset: 2px;
1523
+ box-shadow: none;
1524
+ }
1525
+ }
1526
+
1527
+ /* ── ./Common/Tooltip.css ─────────────────────────────────────── */
1528
+ /* Copyright (c) Cratis. All rights reserved. */
1529
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1530
+
1531
+ /* ── Tooltip bubble ──────────────────────────────────────────────────────── */
1532
+ .cratis-tooltip-popup {
1533
+ background: var(--cratis-surface-100);
1534
+ color: var(--cratis-text-color);
1535
+ border: 1px solid var(--cratis-surface-border);
1536
+ box-shadow: var(--cratis-shadow-overlay);
1537
+ border-radius: var(--cratis-border-radius);
1538
+ padding: 0.25rem 0.5rem;
1539
+ font-size: 0.75rem;
1540
+ font-family: inherit;
1541
+ max-width: 24rem;
1542
+ z-index: var(--cratis-z-index-tooltip);
1543
+ }
1544
+
1545
+ /* ── ./Dialogs/Dialog.css ─────────────────────────────────────── */
1546
+ /* Copyright (c) Cratis. All rights reserved. */
1547
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1548
+
1549
+ .cratis-dialog__backdrop {
1550
+ position: fixed;
1551
+ inset: 0;
1552
+ z-index: var(--cratis-z-index-dialog);
1553
+ display: flex;
1554
+ align-items: center;
1555
+ justify-content: center;
1556
+ padding: 2rem;
1557
+ background: var(--cratis-maskbg);
1558
+ }
1559
+ .cratis-dialog__backdrop[data-entering] {
1560
+ animation: cratis-dialog-fade 160ms ease-out;
1561
+ }
1562
+ .cratis-dialog__backdrop[data-exiting] {
1563
+ animation: cratis-dialog-fade 120ms reverse ease-in;
1564
+ }
1565
+ .cratis-dialog__backdrop[data-placement='start'],
1566
+ .cratis-dialog__backdrop[data-placement='end'] {
1567
+ padding: 0;
1568
+ align-items: stretch;
1569
+ }
1570
+ .cratis-dialog__backdrop[data-placement='start'] {
1571
+ justify-content: flex-start;
1572
+ }
1573
+ .cratis-dialog__backdrop[data-placement='end'] {
1574
+ justify-content: flex-end;
1575
+ }
1576
+ .cratis-dialog__positioner {
1577
+ display: flex;
1578
+ max-width: 100%;
1579
+ max-height: 100%;
1580
+ align-items: center;
1581
+ justify-content: center;
1582
+ }
1583
+ .cratis-dialog {
1584
+ display: flex;
1585
+ max-width: min(100%, calc(100vw - 2rem));
1586
+ max-height: min(90vh, calc(100vh - 2rem));
1587
+ overflow: hidden;
1588
+ flex-direction: column;
1589
+ border: 1px solid var(--cratis-surface-border);
1590
+ border-radius: var(--cratis-border-radius);
1591
+ background: var(--cratis-surface-overlay);
1592
+ color: var(--cratis-text-color);
1593
+ box-shadow: var(--cratis-shadow-dialog);
1594
+ outline: none;
1595
+ }
1596
+ .cratis-dialog[data-placement='start'],
1597
+ .cratis-dialog[data-placement='end'] {
1598
+ height: 100%;
1599
+ max-width: 100%;
1600
+ max-height: 100%;
1601
+ border-radius: 0;
1602
+ border-block-width: 0;
1603
+ }
1604
+ .cratis-dialog[data-placement='start'] {
1605
+ --cratis-dialog-slide-from: -100%;
1606
+ border-inline-start-width: 0;
1607
+ }
1608
+ .cratis-dialog[data-placement='end'] {
1609
+ --cratis-dialog-slide-from: 100%;
1610
+ border-inline-end-width: 0;
1611
+ }
1612
+ .cratis-dialog[data-placement='start']:dir(rtl) {
1613
+ --cratis-dialog-slide-from: 100%;
1614
+ }
1615
+ .cratis-dialog[data-placement='end']:dir(rtl) {
1616
+ --cratis-dialog-slide-from: -100%;
1617
+ }
1618
+ .cratis-dialog[data-placement='start'][data-entering],
1619
+ .cratis-dialog[data-placement='end'][data-entering] {
1620
+ animation: cratis-dialog-slide 200ms ease-out;
1621
+ }
1622
+ .cratis-dialog[data-placement='start'][data-exiting],
1623
+ .cratis-dialog[data-placement='end'][data-exiting] {
1624
+ animation: cratis-dialog-slide 150ms reverse ease-in;
1625
+ }
1626
+ .cratis-dialog__document {
1627
+ display: flex;
1628
+ min-height: 0;
1629
+ flex: 1;
1630
+ flex-direction: column;
1631
+ outline: none;
1632
+ }
1633
+ .cratis-dialog__header {
1634
+ display: grid;
1635
+ grid-template-columns: minmax(0, 1fr) auto;
1636
+ padding: 1rem 1.25rem;
1637
+ align-items: center;
1638
+ column-gap: 1rem;
1639
+ flex: 0 0 auto;
1640
+ border-bottom: 1px solid var(--cratis-surface-border);
1641
+ }
1642
+ .cratis-dialog__title {
1643
+ grid-column: 1;
1644
+ justify-self: start;
1645
+ margin: 0;
1646
+ font-size: 1.1rem;
1647
+ font-weight: 700;
1648
+ outline: none;
1649
+ }
1650
+ .cratis-dialog__subtitle {
1651
+ grid-column: 1;
1652
+ margin: 0.25rem 0 0;
1653
+ color: var(--cratis-text-color-secondary);
1654
+ font-size: 0.9rem;
1655
+ }
1656
+ .cratis-dialog__title:focus-visible {
1657
+ border-radius: var(--cratis-border-radius);
1658
+ }
1659
+ .cratis-dialog__close {
1660
+ display: inline-flex;
1661
+ grid-column: 2;
1662
+ grid-row: 1;
1663
+ width: 2rem;
1664
+ height: 2rem;
1665
+ padding: 0;
1666
+ align-items: center;
1667
+ justify-content: center;
1668
+ border: 0;
1669
+ border-radius: 50%;
1670
+ background: transparent;
1671
+ color: var(--cratis-text-color-secondary);
1672
+ font-size: 1.25rem;
1673
+ cursor: pointer;
1674
+ }
1675
+ .cratis-dialog__close:hover {
1676
+ background: var(--cratis-surface-hover);
1677
+ color: var(--cratis-text-color);
1678
+ }
1679
+ .cratis-dialog__content {
1680
+ min-height: 0;
1681
+ padding: 1.25rem;
1682
+ overflow: auto;
1683
+ flex: 1 1 auto;
1684
+ }
1685
+ .cratis-dialog__busy-scope {
1686
+ display: contents;
1687
+ min-inline-size: 0;
1688
+ padding: 0;
1689
+ margin: 0;
1690
+ border: 0;
1691
+ }
1692
+ .cratis-dialog__footer {
1693
+ display: flex;
1694
+ padding: 0.9rem 1.25rem;
1695
+ justify-content: flex-start;
1696
+ flex-wrap: wrap;
1697
+ gap: 0.75rem;
1698
+ flex: 0 0 auto;
1699
+ border-top: 1px solid var(--cratis-surface-border);
1700
+ }
1701
+ .cratis-dialog__button {
1702
+ display: inline-flex;
1703
+ box-sizing: border-box;
1704
+ min-height: var(--cratis-control-height);
1705
+ padding: 0.75rem 1.25rem;
1706
+ align-items: center;
1707
+ justify-content: center;
1708
+ gap: 0.45rem;
1709
+ border: 1px solid var(--cratis-action-background);
1710
+ border-radius: var(--cratis-border-radius);
1711
+ font: inherit;
1712
+ font-weight: 600;
1713
+ cursor: pointer;
1714
+ }
1715
+ .cratis-dialog__button--primary {
1716
+ background: var(--cratis-action-background);
1717
+ color: var(--cratis-action-text);
1718
+ }
1719
+ .cratis-dialog__button--secondary {
1720
+ background: transparent;
1721
+ color: var(--cratis-action-background);
1722
+ }
1723
+ .cratis-dialog__button--primary:hover:not(:disabled) {
1724
+ border-color: var(--cratis-action-background-hover);
1725
+ background: var(--cratis-action-background-hover);
1726
+ }
1727
+ .cratis-dialog__button--primary:active:not(:disabled) {
1728
+ border-color: var(--cratis-action-background-active);
1729
+ background: var(--cratis-action-background-active);
1730
+ }
1731
+ .cratis-dialog__button--secondary:hover:not(:disabled) {
1732
+ background: color-mix(in srgb, var(--cratis-action-background) 4%, transparent);
1733
+ }
1734
+ .cratis-dialog__button--secondary:active:not(:disabled) {
1735
+ background: color-mix(in srgb, var(--cratis-action-background) 16%, transparent);
1736
+ }
1737
+ .cratis-dialog__title:focus-visible,
1738
+ .cratis-dialog__close:focus-visible,
1739
+ .cratis-dialog__button:focus-visible {
1740
+ outline: none;
1741
+ box-shadow: var(--cratis-focus-ring);
1742
+ }
1743
+ .cratis-dialog__button:disabled {
1744
+ cursor: not-allowed;
1745
+ opacity: var(--cratis-disabled-opacity);
1746
+ }
1747
+ .cratis-dialog__spinner {
1748
+ width: 1em;
1749
+ height: 1em;
1750
+ border: 2px solid currentColor;
1751
+ border-right-color: transparent;
1752
+ border-radius: 50%;
1753
+ animation: cratis-dialog-spin 700ms linear infinite;
1754
+ }
1755
+
1756
+ @keyframes cratis-dialog-fade {
1757
+ from {
1758
+ opacity: 0;
1759
+ }
1760
+ to {
1761
+ opacity: 1;
1762
+ }
1763
+ }
1764
+ @keyframes cratis-dialog-spin {
1765
+ to {
1766
+ transform: rotate(360deg);
1767
+ }
1768
+ }
1769
+ @keyframes cratis-dialog-slide {
1770
+ from {
1771
+ translate: var(--cratis-dialog-slide-from) 0;
1772
+ }
1773
+ }
1774
+
1775
+ @media (prefers-reduced-motion: reduce) {
1776
+ .cratis-dialog__backdrop,
1777
+ .cratis-dialog[data-placement],
1778
+ .cratis-dialog__spinner {
1779
+ animation: none;
1780
+ }
1781
+ }
1782
+
1783
+ @media (forced-colors: active) {
1784
+ .cratis-dialog,
1785
+ .cratis-dialog__button {
1786
+ border-color: CanvasText;
1787
+ }
1788
+ .cratis-dialog__close:focus-visible,
1789
+ .cratis-dialog__button:focus-visible {
1790
+ outline: 2px solid Highlight;
1791
+ outline-offset: 2px;
1792
+ box-shadow: none;
1793
+ }
1794
+ }
1795
+
1796
+ /* ── ./Notifications/Toaster.css ─────────────────────────────────────── */
1797
+ /* Copyright (c) Cratis. All rights reserved. */
1798
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
1799
+
1800
+ .cratis-toaster {
1801
+ position: fixed;
1802
+ z-index: var(--cratis-z-index-toast);
1803
+ display: flex;
1804
+ width: min(26rem, calc(100vw - 2rem));
1805
+ flex-direction: column;
1806
+ gap: 0.75rem;
1807
+ pointer-events: none;
1808
+ }
1809
+ .cratis-toaster[data-position^='top'] {
1810
+ top: 1rem;
1811
+ }
1812
+ .cratis-toaster[data-position^='bottom'] {
1813
+ bottom: 1rem;
1814
+ }
1815
+ .cratis-toaster[data-position$='left'] {
1816
+ left: 1rem;
1817
+ }
1818
+ .cratis-toaster[data-position$='right'] {
1819
+ right: 1rem;
1820
+ }
1821
+ .cratis-toaster[data-position$='center'] {
1822
+ left: 50%;
1823
+ transform: translateX(-50%);
1824
+ }
1825
+
1826
+ .cratis-toast {
1827
+ display: flex;
1828
+ min-width: 18rem;
1829
+ max-width: 26rem;
1830
+ padding: 0.75rem 1rem;
1831
+ align-items: flex-start;
1832
+ gap: 0.625rem;
1833
+ border: 1px solid var(--cratis-surface-border);
1834
+ border-inline-start: 4px solid var(--cratis-surface-border);
1835
+ border-radius: var(--cratis-border-radius);
1836
+ background: var(--cratis-surface-overlay);
1837
+ color: var(--cratis-text-color);
1838
+ box-shadow: var(--cratis-shadow-toast);
1839
+ pointer-events: auto;
1840
+ }
1841
+ .cratis-toast__content {
1842
+ display: flex;
1843
+ min-width: 0;
1844
+ flex: 1;
1845
+ flex-direction: column;
1846
+ gap: 0.125rem;
1847
+ }
1848
+ .cratis-toast__title {
1849
+ font-weight: 600;
1850
+ }
1851
+ .cratis-toast__description {
1852
+ color: var(--cratis-text-color-secondary);
1853
+ font-size: 0.875rem;
1854
+ white-space: pre-line;
1855
+ }
1856
+ .cratis-toast__icon {
1857
+ flex: 0 0 auto;
1858
+ }
1859
+ .cratis-toast__close {
1860
+ display: inline-flex;
1861
+ width: 1.75rem;
1862
+ height: 1.75rem;
1863
+ padding: 0;
1864
+ align-items: center;
1865
+ justify-content: center;
1866
+ border: 0;
1867
+ border-radius: 50%;
1868
+ background: transparent;
1869
+ color: var(--cratis-text-color-secondary);
1870
+ cursor: pointer;
1871
+ }
1872
+ .cratis-toast__close:hover {
1873
+ background: var(--cratis-surface-hover);
1874
+ color: var(--cratis-text-color);
1875
+ }
1876
+ .cratis-toast__close:focus-visible {
1877
+ outline: none;
1878
+ box-shadow: var(--cratis-focus-ring);
1879
+ }
1880
+ .cratis-toast__action {
1881
+ align-self: flex-start;
1882
+ margin-top: 0.4rem;
1883
+ }
1884
+ .cratis-toast[data-loading='true'] .cratis-toast__icon {
1885
+ animation: cratis-toast-spin 800ms linear infinite;
1886
+ }
1887
+ .cratis-toast[data-severity='success'] {
1888
+ border-inline-start-color: var(--cratis-green-500);
1889
+ }
1890
+ .cratis-toast[data-severity='info'] {
1891
+ border-inline-start-color: var(--cratis-primary-color);
1892
+ }
1893
+ .cratis-toast[data-severity='warn'] {
1894
+ border-inline-start-color: var(--cratis-orange-500);
1895
+ }
1896
+ .cratis-toast[data-severity='error'] {
1897
+ border-inline-start-color: var(--cratis-red-500);
1898
+ }
1899
+ .cratis-toast[data-severity='success'] .cratis-toast__icon {
1900
+ color: var(--cratis-green-500);
1901
+ }
1902
+ .cratis-toast[data-severity='info'] .cratis-toast__icon {
1903
+ color: var(--cratis-primary-color);
1904
+ }
1905
+ .cratis-toast[data-severity='warn'] .cratis-toast__icon {
1906
+ color: var(--cratis-orange-500);
1907
+ }
1908
+ .cratis-toast[data-severity='error'] .cratis-toast__icon {
1909
+ color: var(--cratis-red-500);
1910
+ }
1911
+
1912
+ @keyframes cratis-toast-spin {
1913
+ to {
1914
+ transform: rotate(360deg);
1915
+ }
1916
+ }
1917
+ @media (prefers-reduced-motion: reduce) {
1918
+ .cratis-toast__icon {
1919
+ animation: none !important;
1920
+ }
1921
+ }
1922
+ @media (forced-colors: active) {
1923
+ .cratis-toast {
1924
+ border-color: CanvasText;
1925
+ }
1926
+ .cratis-toast__close:focus-visible {
1927
+ outline: 2px solid Highlight;
1928
+ outline-offset: 2px;
1929
+ box-shadow: none;
1930
+ }
1931
+ }
1932
+
1933
+ }