@leftium/nimble.css 0.1.0 → 0.3.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/nimble.css CHANGED
@@ -1,6 +1,7 @@
1
+ @charset "UTF-8";
1
2
  @layer nimble.reset, nimble.base, nimble.utilities;
2
3
  @layer nimble.reset {
3
- :where(*),
4
+ :where(*:not(progress)),
4
5
  :where(*::before),
5
6
  :where(*::after) {
6
7
  box-sizing: border-box;
@@ -100,6 +101,7 @@
100
101
  }
101
102
  :where(a, area, button, input, label, select, summary, textarea, [tabindex]) {
102
103
  touch-action: manipulation;
104
+ -webkit-tap-highlight-color: transparent;
103
105
  }
104
106
  :where([aria-busy=true]) {
105
107
  cursor: progress;
@@ -121,20 +123,20 @@
121
123
  @layer nimble.base {
122
124
  :root {
123
125
  color-scheme: light dark;
124
- --nc-surface-1: light-dark(oklch(0.985 0.002 250), oklch(0.17 0.005 260));
125
- --nc-surface-2: light-dark(oklch(0.955 0.002 250), oklch(0.2 0.005 260));
126
- --nc-surface-3: light-dark(oklch(0.925 0.002 250), oklch(0.23 0.005 260));
127
- --nc-surface-4: light-dark(oklch(0.885 0.002 250), oklch(0.27 0.005 260));
128
- --nc-text-1: light-dark(oklch(0.28 0.005 250), oklch(0.86 0.005 250));
129
- --nc-text-2: light-dark(oklch(0.58 0.005 250), oklch(0.65 0.005 250));
130
- --nc-border: light-dark(oklch(0.83 0.005 250), oklch(0.28 0.005 260));
126
+ --nc-surface-hue: 250;
127
+ --nc-surface-1: light-dark(oklch(0.985 0.002 var(--nc-surface-hue)), oklch(0.17 0.005 calc(var(--nc-surface-hue) + 10)));
128
+ --nc-surface-2: light-dark(oklch(0.955 0.002 var(--nc-surface-hue)), oklch(0.2 0.005 calc(var(--nc-surface-hue) + 10)));
129
+ --nc-surface-3: light-dark(oklch(0.925 0.002 var(--nc-surface-hue)), oklch(0.23 0.005 calc(var(--nc-surface-hue) + 10)));
130
+ --nc-surface-4: light-dark(oklch(0.885 0.002 var(--nc-surface-hue)), oklch(0.27 0.005 calc(var(--nc-surface-hue) + 10)));
131
+ --nc-text: light-dark(oklch(0.28 0.005 var(--nc-surface-hue)), oklch(0.86 0.005 var(--nc-surface-hue)));
132
+ --nc-border: light-dark(oklch(0.83 0.005 var(--nc-surface-hue)), oklch(0.28 0.005 calc(var(--nc-surface-hue) + 10)));
131
133
  --nc-primary: light-dark(oklch(0.5 0.2 250), oklch(0.6 0.2 250));
132
- --nc-primary-hover: light-dark(oklch(0.4 0.2 250), oklch(0.7 0.2 250));
133
- --nc-primary-focus: oklch(0.5 0.2 250 / 0.4);
134
+ --nc-primary-hover: light-dark(oklch(from var(--nc-primary) calc(l - 0.1) c h), oklch(from var(--nc-primary) calc(l + 0.1) c h));
135
+ --nc-primary-focus: oklch(from var(--nc-primary) l c h / 0.4);
134
136
  --nc-primary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
135
137
  --nc-secondary: light-dark(oklch(0.45 0.05 250), oklch(0.6 0.05 250));
136
- --nc-secondary-hover: light-dark(oklch(0.35 0.05 250), oklch(0.7 0.05 250));
137
- --nc-secondary-focus: oklch(0.45 0.05 250 / 0.3);
138
+ --nc-secondary-hover: light-dark(oklch(from var(--nc-secondary) calc(l - 0.1) c h), oklch(from var(--nc-secondary) calc(l + 0.1) c h));
139
+ --nc-secondary-focus: oklch(from var(--nc-secondary) l c h / 0.3);
138
140
  --nc-secondary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
139
141
  --nc-valid: light-dark(oklch(0.52 0.17 145), oklch(0.65 0.2 145));
140
142
  --nc-invalid: light-dark(oklch(0.55 0.22 25), oklch(0.65 0.22 25));
@@ -156,7 +158,7 @@
156
158
  font-family: var(--nc-font-sans);
157
159
  font-size: 100%;
158
160
  line-height: 1.5;
159
- color: var(--nc-text-1);
161
+ color: var(--nc-text);
160
162
  background-color: var(--nc-surface-1);
161
163
  }
162
164
  body {
@@ -166,10 +168,15 @@
166
168
  }
167
169
  body > * {
168
170
  grid-column: 2;
171
+ min-width: 0;
172
+ }
173
+ body > [style*="display: contents"] > * {
174
+ grid-column: 2;
175
+ min-width: 0;
169
176
  }
170
177
  ::selection {
171
178
  background-color: var(--nc-primary-focus);
172
- color: var(--nc-text-1);
179
+ color: var(--nc-text);
173
180
  }
174
181
  }
175
182
  @layer nimble.base {
@@ -184,7 +191,7 @@
184
191
  h2 {
185
192
  font-size: 1.75rem;
186
193
  line-height: 1.15;
187
- margin-top: 0;
194
+ margin-top: 2rem;
188
195
  margin-bottom: var(--nc-spacing);
189
196
  font-weight: 700;
190
197
  text-wrap: balance;
@@ -192,7 +199,7 @@
192
199
  h3 {
193
200
  font-size: 1.5rem;
194
201
  line-height: 1.2;
195
- margin-top: 0;
202
+ margin-top: 1.5rem;
196
203
  margin-bottom: var(--nc-spacing);
197
204
  font-weight: 700;
198
205
  text-wrap: balance;
@@ -200,7 +207,7 @@
200
207
  h4 {
201
208
  font-size: 1.25rem;
202
209
  line-height: 1.3;
203
- margin-top: 0;
210
+ margin-top: 1.5rem;
204
211
  margin-bottom: var(--nc-spacing);
205
212
  font-weight: 700;
206
213
  text-wrap: balance;
@@ -208,7 +215,7 @@
208
215
  h5 {
209
216
  font-size: 1.125rem;
210
217
  line-height: 1.4;
211
- margin-top: 0;
218
+ margin-top: 1.5rem;
212
219
  margin-bottom: var(--nc-spacing);
213
220
  font-weight: 700;
214
221
  text-wrap: balance;
@@ -216,7 +223,7 @@
216
223
  h6 {
217
224
  font-size: 1rem;
218
225
  line-height: 1.5;
219
- margin-top: 0;
226
+ margin-top: 1.5rem;
220
227
  margin-bottom: var(--nc-spacing);
221
228
  font-weight: 700;
222
229
  text-wrap: balance;
@@ -236,9 +243,6 @@
236
243
  margin-top: 0;
237
244
  margin-bottom: var(--nc-spacing);
238
245
  }
239
- :where(p, ul, ol, dl, blockquote, pre, table, figure, form) + :is(h1, h2, h3, h4, h5, h6) {
240
- margin-top: calc(var(--nc-spacing) * 2);
241
- }
242
246
  ul, ol {
243
247
  padding-inline-start: 1.5em;
244
248
  }
@@ -266,7 +270,7 @@
266
270
  :where(blockquote) cite {
267
271
  font-style: normal;
268
272
  font-size: 0.9em;
269
- color: var(--nc-text-2);
273
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
270
274
  }
271
275
  hr {
272
276
  border: none;
@@ -293,8 +297,8 @@
293
297
  transition: color 0.2s, text-decoration-color 0.2s;
294
298
  }
295
299
  :where(a:not([role=button])):visited {
296
- color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.5 0.2 310));
297
- text-decoration-color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.5 0.2 310) 30%);
300
+ color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310));
301
+ text-decoration-color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310) 30%);
298
302
  }
299
303
  :where(a:not([role=button])):hover {
300
304
  color: var(--nc-primary-hover);
@@ -328,6 +332,25 @@
328
332
  box-shadow: 0 0 0 2px var(--nc-primary-focus);
329
333
  outline: none;
330
334
  }
335
+ :where([type=reset]) {
336
+ background-color: var(--nc-secondary);
337
+ border-color: var(--nc-secondary);
338
+ color: var(--nc-secondary-contrast);
339
+ }
340
+ :where([type=reset]):hover {
341
+ background-color: var(--nc-secondary-hover);
342
+ border-color: var(--nc-secondary-hover);
343
+ }
344
+ :where([type=reset]):focus-visible {
345
+ box-shadow: 0 0 0 2px var(--nc-secondary-focus);
346
+ }
347
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]).inline {
348
+ --_btn-padding-v: 0.05em;
349
+ --_btn-padding-h: 0.4em;
350
+ margin: 0.1em 0.15em;
351
+ font-size: 0.875em;
352
+ vertical-align: baseline;
353
+ }
331
354
  :where(button, [type=submit], [type=reset], [type=button], [role=button]):disabled {
332
355
  opacity: 0.5;
333
356
  cursor: not-allowed;
@@ -335,13 +358,41 @@
335
358
  }
336
359
  :where([role=group]) {
337
360
  display: inline-flex;
361
+ margin-bottom: var(--nc-spacing);
338
362
  }
339
363
  [role=group] > * {
340
364
  border-radius: 0;
341
365
  margin: 0;
366
+ position: relative;
342
367
  }
343
368
  [role=group] > * + * {
344
- box-shadow: -1px 0 0 rgba(255, 255, 255, 0.3);
369
+ --_divider: "";
370
+ }
371
+ [role=group] > * + *::before {
372
+ content: var(--_divider);
373
+ position: absolute;
374
+ inset-inline-start: 0;
375
+ top: 20%;
376
+ bottom: 20%;
377
+ width: 1px;
378
+ background: rgba(255, 255, 255, 0.3);
379
+ pointer-events: none;
380
+ }
381
+ [role=group] > :not(.secondary):not(.outline) + .secondary,
382
+ [role=group] > .secondary + :not(.secondary):not(.outline) {
383
+ --_divider: none;
384
+ }
385
+ [role=group] > :not(.secondary):not(.outline) + .outline,
386
+ [role=group] > .outline + :not(.secondary):not(.outline) {
387
+ --_divider: none;
388
+ }
389
+ [role=group] > .secondary + .outline,
390
+ [role=group] > .outline + .secondary {
391
+ --_divider: none;
392
+ }
393
+ [role=group] > input + *,
394
+ [role=group] > select + * {
395
+ --_divider: none;
345
396
  }
346
397
  [role=group] > :first-child {
347
398
  border-start-start-radius: var(--nc-radius);
@@ -351,6 +402,16 @@
351
402
  border-start-end-radius: var(--nc-radius);
352
403
  border-end-end-radius: var(--nc-radius);
353
404
  }
405
+ [role=group]:has(.outline):not(:has(> :not(.outline))) {
406
+ border: 1px solid var(--nc-primary);
407
+ border-radius: var(--nc-radius);
408
+ }
409
+ [role=group]:has(.outline):not(:has(> :not(.outline))) > .outline {
410
+ border: none;
411
+ }
412
+ [role=group] > .outline + .outline::before {
413
+ background: var(--nc-primary);
414
+ }
354
415
  [role=search] [role=group] > :first-child {
355
416
  border-start-start-radius: 5rem;
356
417
  border-end-start-radius: 5rem;
@@ -363,55 +424,79 @@
363
424
  }
364
425
  }
365
426
  @layer nimble.utilities {
366
- .secondary {
427
+ .secondary:not(a:not([role=button])) {
367
428
  background-color: var(--nc-secondary);
368
429
  border-color: var(--nc-secondary);
369
430
  color: var(--nc-secondary-contrast);
370
431
  }
371
- .secondary:hover {
432
+ .secondary:not(a:not([role=button])):hover {
372
433
  background-color: var(--nc-secondary-hover);
373
434
  border-color: var(--nc-secondary-hover);
374
435
  }
375
- .secondary:focus-visible {
436
+ .secondary:not(a:not([role=button])):focus-visible {
376
437
  box-shadow: 0 0 0 2px var(--nc-secondary-focus);
377
438
  }
378
- .outline {
439
+ a:not([role=button]).secondary {
440
+ color: var(--nc-secondary);
441
+ text-decoration-color: color-mix(in oklch, var(--nc-secondary), transparent 50%);
442
+ }
443
+ a:not([role=button]).secondary:hover {
444
+ color: var(--nc-secondary-hover);
445
+ text-decoration-color: var(--nc-secondary-hover);
446
+ }
447
+ .outline:not(a:not([role=button])) {
379
448
  background-color: transparent;
380
449
  color: var(--nc-primary);
381
450
  }
382
- .outline:hover {
451
+ .outline:not(a:not([role=button])):hover {
383
452
  background-color: var(--nc-primary-focus);
384
453
  color: var(--nc-primary-hover);
385
454
  border-color: var(--nc-primary-hover);
386
455
  }
387
456
  }
388
457
  @layer nimble.base {
389
- :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color]),
458
+ :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset]),
390
459
  select, textarea) {
391
460
  --_input-bg: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
392
461
  padding: 0.5em 0.75em;
462
+ min-height: calc(2.5em + 2px);
393
463
  background-color: var(--_input-bg);
394
464
  border: 1px solid var(--nc-border);
395
465
  border-radius: var(--nc-radius);
396
- color: var(--nc-text-1);
466
+ color: var(--nc-text);
397
467
  font: inherit;
468
+ font-size: 1rem;
398
469
  transition: border-color 0.2s, box-shadow 0.2s;
399
470
  }
400
- :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset]),
471
+ :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset], [type=date], [type=month], [type=week], [type=time], [type=datetime-local]),
401
472
  select, textarea) {
402
473
  width: 100%;
474
+ margin-bottom: var(--nc-spacing);
403
475
  }
404
476
  :where(input, select, textarea):focus-visible {
405
477
  border-color: var(--nc-primary);
406
478
  box-shadow: 0 0 0 2px var(--nc-primary-focus);
407
479
  outline: none;
408
480
  }
481
+ :where(input, select, textarea) + :where(small) {
482
+ display: block;
483
+ margin-top: calc(var(--nc-spacing) * -0.75);
484
+ margin-bottom: var(--nc-spacing);
485
+ font-size: 0.875em;
486
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
487
+ }
409
488
  :where(input, select, textarea)[aria-invalid=false] {
410
489
  border-color: var(--nc-valid);
411
490
  }
412
491
  :where(input, select, textarea)[aria-invalid=true] {
413
492
  border-color: var(--nc-invalid);
414
493
  }
494
+ :where(input, select, textarea)[aria-invalid=false] + :where(small) {
495
+ color: var(--nc-valid);
496
+ }
497
+ :where(input, select, textarea)[aria-invalid=true] + :where(small) {
498
+ color: var(--nc-invalid);
499
+ }
415
500
  :where(label) {
416
501
  display: block;
417
502
  margin-bottom: 0.25em;
@@ -419,10 +504,15 @@
419
504
  :where(label:has(+ input, + select, + textarea)) {
420
505
  font-weight: 600;
421
506
  }
507
+ :where(label:has(+ [type=file], + [type=range])) {
508
+ margin-bottom: 0.5em;
509
+ }
422
510
  :where(fieldset) {
423
511
  border: 1px solid var(--nc-border);
424
512
  border-radius: var(--nc-radius);
425
513
  padding: var(--nc-spacing);
514
+ min-width: 0;
515
+ max-width: 100%;
426
516
  }
427
517
  :where(legend) {
428
518
  font-weight: 600;
@@ -430,14 +520,82 @@
430
520
  }
431
521
  :where([type=checkbox], [type=radio]) {
432
522
  accent-color: var(--nc-primary);
523
+ width: 1.125em;
524
+ height: 1.125em;
525
+ margin: 0;
526
+ }
527
+ :where(label:has([type=checkbox], [type=radio])) {
528
+ display: flex;
529
+ align-items: center;
530
+ gap: 0.35em;
531
+ margin-bottom: 0.5em;
532
+ }
533
+ :where(label:has([type=checkbox], [type=radio]):last-child) {
534
+ margin-bottom: 0;
535
+ }
536
+ :where([type=search]) {
537
+ border-radius: 5rem;
538
+ padding-inline: 1.25em;
433
539
  }
434
540
  :where([type=range]) {
435
541
  accent-color: var(--nc-primary);
436
542
  width: 100%;
543
+ margin-bottom: var(--nc-spacing);
544
+ }
545
+ :where(input[list]) {
546
+ width: auto;
547
+ }
548
+ :where([type=file]) {
549
+ color: var(--nc-text);
550
+ font: inherit;
551
+ cursor: pointer;
552
+ max-width: 100%;
553
+ margin-bottom: var(--nc-spacing);
554
+ }
555
+ :where([type=file])::file-selector-button {
556
+ padding: 0.5em 1em;
557
+ margin-right: 0.75em;
558
+ margin-inline-end: 0.75em;
559
+ background-color: var(--nc-primary);
560
+ color: var(--nc-primary-contrast);
561
+ border: 1px solid var(--nc-primary);
562
+ border-radius: var(--nc-radius);
563
+ font: inherit;
564
+ cursor: pointer;
565
+ transition: background-color 0.2s, border-color 0.2s;
566
+ }
567
+ :where([type=file])::file-selector-button:hover {
568
+ background-color: var(--nc-primary-hover);
569
+ border-color: var(--nc-primary-hover);
570
+ }
571
+ :where([type=date], [type=month], [type=week], [type=time], [type=datetime-local]) {
572
+ min-width: 10em;
573
+ margin-bottom: var(--nc-spacing);
437
574
  }
438
575
  :where([type=color]) {
576
+ --_color-size: calc(1em * 1.5 + 1em + 2px);
577
+ margin-bottom: var(--nc-spacing);
578
+ --_color-pad: 0.25em;
579
+ height: var(--_color-size);
580
+ width: calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));
581
+ padding: var(--_color-pad);
582
+ background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
583
+ border: 1px solid var(--nc-border);
584
+ border-radius: var(--nc-radius);
439
585
  cursor: pointer;
440
586
  }
587
+ :where([type=color])::-webkit-color-swatch-wrapper {
588
+ padding: 0;
589
+ }
590
+ :where([type=color])::-webkit-color-swatch {
591
+ border: none;
592
+ border-radius: calc(var(--nc-radius) * 0.5);
593
+ }
594
+ :where(label:has([type=checkbox][role=switch])) {
595
+ display: flex;
596
+ align-items: center;
597
+ gap: 0.5em;
598
+ }
441
599
  :where([type=checkbox][role=switch]) {
442
600
  appearance: none;
443
601
  width: 2.5em;
@@ -446,6 +604,8 @@
446
604
  background-color: var(--nc-border);
447
605
  position: relative;
448
606
  cursor: pointer;
607
+ flex-shrink: 0;
608
+ margin: 0;
449
609
  transition: background-color 0.2s;
450
610
  }
451
611
  :where([type=checkbox][role=switch])::before {
@@ -466,6 +626,15 @@
466
626
  transform: translateX(1.25em);
467
627
  }
468
628
  }
629
+ [type=date],
630
+ [type=month],
631
+ [type=week],
632
+ [type=time],
633
+ [type=datetime-local] {
634
+ -webkit-appearance: none;
635
+ appearance: none;
636
+ }
637
+
469
638
  @layer nimble.base {
470
639
  :where(table) {
471
640
  width: 100%;
@@ -520,22 +689,95 @@
520
689
  }
521
690
  :where(figcaption) {
522
691
  font-size: 0.9em;
523
- color: var(--nc-text-2);
692
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
524
693
  margin-top: 0.5em;
525
694
  }
526
695
  }
696
+ @layer nimble.base {
697
+ :where(article) {
698
+ background-color: var(--nc-surface-1);
699
+ border: 1px solid var(--nc-border);
700
+ border-radius: var(--nc-radius);
701
+ padding: var(--nc-spacing);
702
+ margin-bottom: var(--nc-spacing);
703
+ }
704
+ :where(article > header),
705
+ :where(article > footer) {
706
+ background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
707
+ padding: var(--nc-spacing);
708
+ }
709
+ :where(article > header) {
710
+ margin: calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1) var(--nc-spacing);
711
+ border-bottom: 1px solid var(--nc-border);
712
+ border-radius: var(--nc-radius) var(--nc-radius) 0 0;
713
+ }
714
+ :where(article > footer) {
715
+ margin: var(--nc-spacing) calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1);
716
+ border-top: 1px solid var(--nc-border);
717
+ border-radius: 0 0 var(--nc-radius) var(--nc-radius);
718
+ }
719
+ :where(article) > :last-child:not(footer) {
720
+ margin-bottom: 0;
721
+ }
722
+ :where(article > header, article > footer) > :last-child {
723
+ margin-bottom: 0;
724
+ }
725
+ :where(article > header, article > footer) > h1,
726
+ :where(article > header, article > footer) > h2,
727
+ :where(article > header, article > footer) > h3,
728
+ :where(article > header, article > footer) > h4,
729
+ :where(article > header, article > footer) > h5,
730
+ :where(article > header, article > footer) > h6 {
731
+ margin-top: 0;
732
+ margin-bottom: 0;
733
+ }
734
+ }
527
735
  @layer nimble.base {
528
736
  :where(details) {
529
737
  border: 1px solid var(--nc-border);
530
738
  border-radius: var(--nc-radius);
531
- padding: 0.75em 1em;
739
+ padding: 0 1em;
740
+ }
741
+ :where(details) {
742
+ margin-bottom: 0.5em;
532
743
  }
533
744
  :where(summary) {
534
745
  cursor: pointer;
535
746
  font-weight: 600;
747
+ margin: 0 -1em;
748
+ padding: 0.75em 1em;
749
+ list-style-type: "▶ ";
536
750
  }
537
751
  :where(details[open] > summary) {
538
- margin-bottom: 0.5em;
752
+ list-style-type: "▼ ";
753
+ }
754
+ :where(details[open]) {
755
+ padding-bottom: 0.75em;
756
+ }
757
+ details :last-child {
758
+ margin-bottom: 0;
759
+ }
760
+ }
761
+ @supports selector(details::details-content) {
762
+ details::details-content {
763
+ transition: opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
764
+ opacity: 0;
765
+ }
766
+ details[open]::details-content {
767
+ opacity: 1;
768
+ }
769
+ @supports (interpolate-size: allow-keywords) {
770
+ details {
771
+ interpolate-size: allow-keywords;
772
+ }
773
+ details::details-content {
774
+ transition: height 0.3s ease, opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
775
+ height: 0;
776
+ overflow: clip;
777
+ }
778
+ details[open]::details-content {
779
+ height: auto;
780
+ }
539
781
  }
540
782
  }
541
783
  @layer nimble.base {
@@ -546,8 +788,15 @@
546
788
  max-width: min(90vw, 40rem);
547
789
  padding: var(--nc-spacing);
548
790
  }
549
- :where(dialog::backdrop) {
791
+ dialog::backdrop {
550
792
  background: rgba(0, 0, 0, 0.5);
793
+ backdrop-filter: blur(4px);
794
+ animation: nc-backdrop-in 0.2s ease;
795
+ }
796
+ @keyframes nc-backdrop-in {
797
+ from {
798
+ opacity: 0;
799
+ }
551
800
  }
552
801
  }
553
802
  @media print {
@@ -577,6 +826,165 @@
577
826
  margin: 2cm;
578
827
  }
579
828
  }
829
+ @layer nimble.base {
830
+ :where(progress) {
831
+ -webkit-appearance: none;
832
+ appearance: none;
833
+ position: relative;
834
+ width: 100%;
835
+ height: 0.5rem;
836
+ overflow: hidden;
837
+ border: 0;
838
+ border-radius: var(--nc-radius);
839
+ background-color: var(--nc-surface-3);
840
+ color: var(--nc-primary);
841
+ }
842
+ :where(progress)::-webkit-progress-bar {
843
+ border-radius: var(--nc-radius);
844
+ background-color: var(--nc-surface-3);
845
+ }
846
+ :where(progress)::-webkit-progress-value {
847
+ background-color: var(--nc-primary);
848
+ border-radius: var(--nc-radius);
849
+ transition: inline-size 0.3s ease;
850
+ }
851
+ :where(progress)::-moz-progress-bar {
852
+ background-color: var(--nc-primary);
853
+ border-radius: var(--nc-radius);
854
+ }
855
+ :where(progress):not([value]) {
856
+ --nc-progress-track:
857
+ linear-gradient(to right,
858
+ var(--nc-surface-3) 0%,
859
+ var(--nc-primary) 25%,
860
+ var(--nc-primary) 25%,
861
+ var(--nc-surface-3) 50%,
862
+ var(--nc-surface-3) 50%,
863
+ var(--nc-primary) 75%,
864
+ var(--nc-primary) 75%,
865
+ var(--nc-surface-3) 100%);
866
+ --nc-progress-track-size: 200% 100%;
867
+ }
868
+ @media (prefers-reduced-motion: no-preference) {
869
+ @supports selector(progress::after) {
870
+ :where(progress):not([value])::after {
871
+ content: "";
872
+ position: absolute;
873
+ inset: 0;
874
+ background: var(--nc-progress-track);
875
+ background-size: var(--nc-progress-track-size);
876
+ animation: nc-progress-indeterminate 12s linear infinite;
877
+ }
878
+ }
879
+ :where(progress):not([value])::-webkit-progress-bar {
880
+ background: var(--nc-progress-track);
881
+ background-size: var(--nc-progress-track-size);
882
+ animation: nc-progress-indeterminate 12s linear infinite;
883
+ }
884
+ :where(progress):not([value])::-moz-progress-bar {
885
+ background: var(--nc-progress-track);
886
+ background-size: var(--nc-progress-track-size);
887
+ animation: nc-progress-indeterminate 12s linear infinite;
888
+ }
889
+ }
890
+ @keyframes nc-progress-indeterminate {
891
+ from {
892
+ background-position: 0% 0%;
893
+ }
894
+ to {
895
+ background-position: -200% 0%;
896
+ }
897
+ }
898
+ }
899
+ @layer nimble.base {
900
+ :where(meter) {
901
+ -webkit-appearance: none;
902
+ -moz-appearance: none;
903
+ appearance: none;
904
+ width: 100%;
905
+ height: 0.5rem;
906
+ overflow: hidden;
907
+ border: 0;
908
+ border-radius: var(--nc-radius);
909
+ background-color: var(--nc-surface-3);
910
+ }
911
+ :where(meter)::-webkit-meter-bar {
912
+ border-radius: var(--nc-radius);
913
+ background-color: var(--nc-surface-3);
914
+ border: 0;
915
+ height: 0.5rem;
916
+ }
917
+ :where(meter)::-webkit-meter-optimum-value {
918
+ background-color: var(--nc-valid);
919
+ border-radius: var(--nc-radius);
920
+ }
921
+ :where(meter)::-webkit-meter-suboptimum-value {
922
+ background-color: var(--nc-primary);
923
+ border-radius: var(--nc-radius);
924
+ }
925
+ :where(meter)::-webkit-meter-even-less-good-value {
926
+ background-color: var(--nc-invalid);
927
+ border-radius: var(--nc-radius);
928
+ }
929
+ :where(meter)::-moz-meter-bar {
930
+ background-color: var(--nc-primary);
931
+ border-radius: var(--nc-radius);
932
+ }
933
+ :where(meter):-moz-meter-optimum::-moz-meter-bar {
934
+ background-color: var(--nc-valid);
935
+ }
936
+ :where(meter):-moz-meter-sub-optimum::-moz-meter-bar {
937
+ background-color: var(--nc-primary);
938
+ }
939
+ :where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar {
940
+ background-color: var(--nc-invalid);
941
+ }
942
+ }
943
+ @layer nimble.base {
944
+ @supports (appearance: base-select) {
945
+ :where(select),
946
+ :where(select)::picker(select) {
947
+ appearance: base-select;
948
+ }
949
+ :where(select)::picker-icon {
950
+ content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 2l6 6 6-6'/%3E%3C/svg%3E");
951
+ transition: rotate 0.4s;
952
+ }
953
+ :where(select):open::picker-icon {
954
+ rotate: 180deg;
955
+ }
956
+ :where(select)::picker(select) {
957
+ position-area: block-end;
958
+ position-try-order: normal;
959
+ position-try-fallbacks: flip-block;
960
+ border: 1px solid var(--nc-border);
961
+ border-radius: var(--nc-radius);
962
+ background-color: var(--nc-surface-1);
963
+ padding: 0.25em;
964
+ opacity: 0;
965
+ transition: opacity 0.2s, overlay 0.2s allow-discrete, display 0.2s allow-discrete;
966
+ }
967
+ :where(select):open::picker(select) {
968
+ opacity: 1;
969
+ }
970
+ @starting-style {
971
+ :where(select):open::picker(select) {
972
+ opacity: 0;
973
+ }
974
+ }
975
+ :where(select) option {
976
+ padding: 0.5em 0.75em;
977
+ border-radius: var(--nc-radius);
978
+ transition: background-color 0.15s;
979
+ }
980
+ :where(select) option:hover {
981
+ background-color: var(--nc-surface-2);
982
+ }
983
+ :where(select) option:checked {
984
+ font-weight: 600;
985
+ }
986
+ }
987
+ }
580
988
  @layer nimble.utilities {
581
989
  .container {
582
990
  max-width: var(--nc-content-width);