@leftium/nimble.css 0.11.0 → 0.13.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
@@ -166,8 +166,9 @@
166
166
  }
167
167
  body {
168
168
  display: grid;
169
- grid-template-columns: 1fr var(--nc-content-shadow-gap) min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing) - 2 * var(--nc-content-shadow-gap))) var(--nc-content-shadow-gap) 1fr;
169
+ grid-template-columns: 1fr min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing))) 1fr;
170
170
  min-height: 100dvh;
171
+ padding-block: var(--nc-spacing);
171
172
  position: relative;
172
173
  }
173
174
  ::selection {
@@ -177,26 +178,24 @@
177
178
  }
178
179
  @layer nimble.base {
179
180
  body > * {
180
- grid-column: 3;
181
+ grid-column: 2;
181
182
  min-width: 0;
182
183
  }
183
184
  body > [style*="display: contents"] > * {
184
- grid-column: 3;
185
+ grid-column: 2;
185
186
  min-width: 0;
186
187
  }
187
- @media (min-width: 720px) {
188
- body::before {
189
- content: "";
190
- position: absolute;
191
- top: 0;
192
- bottom: 0;
193
- left: 50%;
194
- transform: translateX(-50%);
195
- width: min(calc(var(--nc-content-width) + 2 * var(--nc-content-shadow-gap)), calc(100% - 2 * var(--nc-spacing)));
196
- box-shadow: var(--nc-content-shadow);
197
- pointer-events: none;
198
- z-index: -1;
199
- }
188
+ body::before {
189
+ content: "";
190
+ position: absolute;
191
+ top: 0;
192
+ bottom: 0;
193
+ left: 50%;
194
+ transform: translateX(-50%);
195
+ width: clamp(0px, calc((100% - 2 * var(--nc-spacing) - var(--nc-content-width) - 4 * var(--nc-content-shadow-gap)) * 9999), calc(var(--nc-content-width) + 2 * var(--nc-content-shadow-gap)));
196
+ box-shadow: var(--nc-content-shadow);
197
+ pointer-events: none;
198
+ z-index: -1;
200
199
  }
201
200
  }
202
201
  @layer nimble.utilities {
@@ -210,12 +209,15 @@
210
209
  max-width: none;
211
210
  padding-inline: var(--nc-spacing);
212
211
  }
213
- .full-bleed {
212
+ .bleed-edge {
214
213
  grid-column: 1/-1;
214
+ width: 100%;
215
+ max-width: clamp(calc(var(--nc-content-width) + 2 * var(--nc-content-shadow-gap)), calc((100% - 2 * var(--nc-spacing) - var(--nc-content-width) - 4 * var(--nc-content-shadow-gap)) * -9999), 100%);
216
+ margin-inline: auto;
215
217
  box-shadow: none;
216
218
  position: relative;
217
219
  }
218
- .wide {
220
+ .bleed-wide {
219
221
  grid-column: 1/-1;
220
222
  box-shadow: none;
221
223
  width: 100%;
@@ -223,6 +225,22 @@
223
225
  margin-inline: auto;
224
226
  padding-inline: var(--nc-spacing);
225
227
  }
228
+ .bleed-full {
229
+ grid-column: 1/-1;
230
+ box-shadow: none;
231
+ position: relative;
232
+ }
233
+ .grid {
234
+ display: grid;
235
+ grid-template-columns: 1fr;
236
+ gap: var(--nc-spacing);
237
+ margin-bottom: var(--nc-spacing);
238
+ }
239
+ @media (min-width: 720px) {
240
+ .grid {
241
+ grid-template-columns: repeat(auto-fit, minmax(0%, 1fr));
242
+ }
243
+ }
226
244
  }
227
245
  @media print {
228
246
  body {
@@ -251,818 +269,784 @@
251
269
  margin: 2cm;
252
270
  }
253
271
  }
254
- @scope (:root) to (.no-nimble) {
255
- @layer nimble.base {
256
- h1 {
257
- font-size: 2rem;
258
- line-height: 1.1;
259
- margin-top: 0;
260
- margin-bottom: var(--nc-spacing);
261
- font-weight: 700;
262
- text-wrap: balance;
263
- }
264
- h2 {
265
- font-size: 1.75rem;
266
- line-height: 1.15;
267
- margin-top: 2rem;
268
- margin-bottom: var(--nc-spacing);
269
- font-weight: 700;
270
- text-wrap: balance;
271
- }
272
- h3 {
273
- font-size: 1.5rem;
274
- line-height: 1.2;
275
- margin-top: 1.5rem;
276
- margin-bottom: var(--nc-spacing);
277
- font-weight: 700;
278
- text-wrap: balance;
279
- }
280
- h4 {
281
- font-size: 1.25rem;
282
- line-height: 1.3;
283
- margin-top: 1.5rem;
284
- margin-bottom: var(--nc-spacing);
285
- font-weight: 700;
286
- text-wrap: balance;
287
- }
288
- h5 {
289
- font-size: 1.125rem;
290
- line-height: 1.4;
291
- margin-top: 1.5rem;
292
- margin-bottom: var(--nc-spacing);
293
- font-weight: 700;
294
- text-wrap: balance;
295
- }
296
- h6 {
297
- font-size: 1rem;
298
- line-height: 1.5;
299
- margin-top: 1.5rem;
300
- margin-bottom: var(--nc-spacing);
301
- font-weight: 700;
302
- text-wrap: balance;
303
- }
304
- @media (max-width: 720px) {
305
- h1 {
306
- font-size: 1.75rem;
307
- }
308
- h2 {
309
- font-size: 1.5rem;
310
- }
311
- h3 {
312
- font-size: 1.3rem;
313
- }
314
- }
315
- p, ul, ol, dl, blockquote, pre, table, figure, form, fieldset {
316
- margin-top: 0;
317
- margin-bottom: var(--nc-spacing);
318
- }
319
- ul, ol {
320
- padding-inline-start: 1.5em;
321
- }
322
- :where(li) {
323
- margin-bottom: 0.25em;
324
- }
325
- :where(li) > :where(ul, ol) {
326
- margin-bottom: 0;
327
- }
328
- dt {
329
- font-weight: 600;
330
- }
331
- dd {
332
- margin-inline-start: 1.5em;
333
- margin-bottom: 0.5em;
334
- }
335
- blockquote {
336
- margin-block: var(--nc-spacing);
337
- margin-inline: 0;
338
- padding: 0.25em var(--nc-spacing);
339
- border-inline-start: 0.25rem solid var(--nc-border);
340
- font-style: italic;
341
- }
342
- :where(blockquote) footer,
343
- :where(blockquote) cite {
344
- font-style: normal;
345
- font-size: 0.9em;
346
- color: color-mix(in oklch, var(--nc-text), transparent 40%);
347
- }
348
- hr {
349
- border: none;
350
- height: 1px;
351
- background-color: color-mix(in oklch, var(--nc-border), transparent 40%);
352
- margin: var(--nc-spacing) 0;
353
- }
354
- mark {
355
- padding: 0.1em 0.25em;
356
- background-color: light-dark(#fde68a, oklch(0.55 0.12 85));
357
- color: light-dark(inherit, oklch(0.95 0.01 85));
358
- border-radius: 2px;
359
- }
360
- address {
361
- font-style: normal;
362
- }
272
+ @layer nimble.base {
273
+ :root {
274
+ --nimble-scope-start: 1 ;
363
275
  }
364
- @layer nimble.base {
365
- :where(a:not([role=button])) {
366
- color: var(--nc-primary);
367
- text-decoration: underline;
368
- text-underline-offset: 0.15em;
369
- text-decoration-color: color-mix(in oklch, var(--nc-primary), transparent 50%);
370
- transition: color 0.2s, text-decoration-color 0.2s;
371
- }
372
- :where(a:not([role=button])):visited {
373
- color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310));
374
- text-decoration-color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310) 30%);
375
- }
376
- :where(a:not([role=button])):hover {
377
- color: var(--nc-primary-hover);
378
- text-decoration-color: var(--nc-primary-hover);
379
- }
276
+ }
277
+ @layer nimble.utilities {
278
+ :root {
279
+ --nimble-scope-start: 1 ;
380
280
  }
381
- @layer nimble.base {
382
- :where(button, [type=submit], [type=reset], [type=button], [role=button]) {
383
- --_btn-padding-v: 0.5em;
384
- --_btn-padding-h: 1em;
385
- padding: var(--_btn-padding-v) var(--_btn-padding-h);
386
- background-color: var(--nc-primary);
387
- color: var(--nc-primary-contrast);
388
- border: 1px solid var(--nc-primary);
389
- border-radius: var(--nc-radius);
390
- font: inherit;
391
- font-size: 1rem;
392
- line-height: 1.5;
393
- cursor: pointer;
394
- text-decoration: none;
395
- display: inline-block;
396
- text-align: center;
397
- margin: 0;
398
- transition: background-color 0.2s, border-color 0.2s;
399
- }
400
- :where(button, [type=submit], [type=reset], [type=button], [role=button]):hover {
401
- background-color: var(--nc-primary-hover);
402
- border-color: var(--nc-primary-hover);
403
- }
404
- :where(button, [type=submit], [type=reset], [type=button], [role=button]):focus-visible {
405
- box-shadow: 0 0 0 2px var(--nc-primary-focus);
406
- outline: none;
407
- }
408
- :where([type=reset]) {
409
- background-color: var(--nc-secondary);
410
- border-color: var(--nc-secondary);
411
- color: var(--nc-secondary-contrast);
412
- }
413
- :where([type=reset]):hover {
414
- background-color: var(--nc-secondary-hover);
415
- border-color: var(--nc-secondary-hover);
416
- }
417
- :where([type=reset]):focus-visible {
418
- box-shadow: 0 0 0 2px var(--nc-secondary-focus);
419
- }
420
- :where(button, [type=submit], [type=reset], [type=button], [role=button]).inline {
421
- --_btn-padding-v: 0.05em;
422
- --_btn-padding-h: 0.4em;
423
- margin: 0.1em 0.15em;
424
- font-size: 0.875em;
425
- vertical-align: baseline;
426
- }
427
- :where(button, [type=submit], [type=reset], [type=button], [role=button]):disabled {
428
- opacity: 0.5;
429
- cursor: not-allowed;
430
- pointer-events: none;
431
- }
432
- :where([role=group]) {
433
- display: inline-flex;
434
- margin-bottom: var(--nc-spacing);
435
- }
436
- [role=group] > * {
437
- border-radius: 0;
438
- margin: 0;
439
- position: relative;
440
- }
441
- [role=group] > * + * {
442
- --_divider: "";
443
- }
444
- [role=group] > * + *::before {
445
- content: var(--_divider);
446
- position: absolute;
447
- inset-inline-start: 0;
448
- top: 20%;
449
- bottom: 20%;
450
- width: 1px;
451
- background: rgba(255, 255, 255, 0.3);
452
- pointer-events: none;
453
- }
454
- [role=group] > :not(.secondary):not(.outline) + .secondary,
455
- [role=group] > .secondary + :not(.secondary):not(.outline) {
456
- --_divider: none;
457
- }
458
- [role=group] > :not(.secondary):not(.outline) + .outline,
459
- [role=group] > .outline + :not(.secondary):not(.outline) {
460
- --_divider: none;
461
- }
462
- [role=group] > .secondary + .outline,
463
- [role=group] > .outline + .secondary {
464
- --_divider: none;
465
- }
466
- [role=group] > input + *,
467
- [role=group] > select + * {
468
- --_divider: none;
469
- }
470
- [role=group] > :first-child {
471
- border-start-start-radius: var(--nc-radius);
472
- border-end-start-radius: var(--nc-radius);
473
- }
474
- [role=group] > :last-child {
475
- border-start-end-radius: var(--nc-radius);
476
- border-end-end-radius: var(--nc-radius);
477
- }
478
- [role=group]:has(.outline):not(:has(> :not(.outline))) {
479
- border: 1px solid var(--nc-primary);
480
- border-radius: var(--nc-radius);
481
- }
482
- [role=group]:has(.outline):not(:has(> :not(.outline))) > .outline {
483
- border: none;
484
- }
485
- [role=group] > .outline + .outline::before {
486
- background: var(--nc-primary);
487
- }
488
- [role=search] [role=group] > :first-child {
489
- border-start-start-radius: 5rem;
490
- border-end-start-radius: 5rem;
491
- padding-inline-start: 1.25em;
492
- }
493
- [role=search] [role=group] > :last-child {
494
- border-start-end-radius: 5rem;
495
- border-end-end-radius: 5rem;
496
- padding-inline-end: 1.25em;
497
- }
281
+ }
282
+ @layer nimble.base {
283
+ h1 {
284
+ font-size: 2rem;
285
+ line-height: 1.1;
286
+ margin-top: 0;
287
+ margin-bottom: var(--nc-spacing);
288
+ font-weight: 700;
289
+ text-wrap: balance;
290
+ }
291
+ h2 {
292
+ font-size: 1.75rem;
293
+ line-height: 1.15;
294
+ margin-top: 2rem;
295
+ margin-bottom: var(--nc-spacing);
296
+ font-weight: 700;
297
+ text-wrap: balance;
298
+ }
299
+ h3 {
300
+ font-size: 1.5rem;
301
+ line-height: 1.2;
302
+ margin-top: 1.5rem;
303
+ margin-bottom: var(--nc-spacing);
304
+ font-weight: 700;
305
+ text-wrap: balance;
306
+ }
307
+ h4 {
308
+ font-size: 1.25rem;
309
+ line-height: 1.3;
310
+ margin-top: 1.5rem;
311
+ margin-bottom: var(--nc-spacing);
312
+ font-weight: 700;
313
+ text-wrap: balance;
314
+ }
315
+ h5 {
316
+ font-size: 1.125rem;
317
+ line-height: 1.4;
318
+ margin-top: 1.5rem;
319
+ margin-bottom: var(--nc-spacing);
320
+ font-weight: 700;
321
+ text-wrap: balance;
322
+ }
323
+ h6 {
324
+ font-size: 1rem;
325
+ line-height: 1.5;
326
+ margin-top: 1.5rem;
327
+ margin-bottom: var(--nc-spacing);
328
+ font-weight: 700;
329
+ text-wrap: balance;
498
330
  }
499
- @layer nimble.utilities {
500
- .secondary:not(a:not([role=button])) {
501
- background-color: var(--nc-secondary);
502
- border-color: var(--nc-secondary);
503
- color: var(--nc-secondary-contrast);
504
- }
505
- .secondary:not(a:not([role=button])):hover {
506
- background-color: var(--nc-secondary-hover);
507
- border-color: var(--nc-secondary-hover);
508
- }
509
- .secondary:not(a:not([role=button])):focus-visible {
510
- box-shadow: 0 0 0 2px var(--nc-secondary-focus);
511
- }
512
- a:not([role=button]).secondary {
513
- color: var(--nc-secondary);
514
- text-decoration-color: color-mix(in oklch, var(--nc-secondary), transparent 50%);
515
- }
516
- a:not([role=button]).secondary:hover {
517
- color: var(--nc-secondary-hover);
518
- text-decoration-color: var(--nc-secondary-hover);
519
- }
520
- .outline:not(a:not([role=button])) {
521
- background-color: transparent;
522
- color: var(--nc-primary);
523
- }
524
- .outline:not(a:not([role=button])):hover {
525
- background-color: var(--nc-primary-focus);
526
- color: var(--nc-primary-hover);
527
- border-color: var(--nc-primary-hover);
528
- }
331
+ p, ul, ol, dl, blockquote, pre, table, figure, form, fieldset {
332
+ margin-top: 0;
333
+ margin-bottom: var(--nc-spacing);
529
334
  }
530
- @layer nimble.base {
531
- :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset]),
532
- select, textarea) {
533
- --_input-bg: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
534
- padding: 0.5em 0.75em;
535
- min-height: calc(2.5em + 2px);
536
- background-color: var(--_input-bg);
537
- border: 1px solid var(--nc-border);
538
- border-radius: var(--nc-radius);
539
- color: var(--nc-text);
540
- font: inherit;
541
- font-size: 1rem;
542
- transition: border-color 0.2s, box-shadow 0.2s;
543
- }
544
- :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]),
545
- select, textarea) {
546
- width: 100%;
547
- margin-bottom: var(--nc-spacing);
548
- }
549
- :where(input, select, textarea):focus-visible {
550
- border-color: var(--nc-primary);
551
- box-shadow: 0 0 0 2px var(--nc-primary-focus);
552
- outline: none;
553
- }
554
- :where(input:not([type=submit], [type=button], [type=reset]), select, textarea) + :where(small) {
555
- display: block;
556
- margin-top: calc(var(--nc-spacing) * -0.75);
557
- margin-bottom: var(--nc-spacing);
558
- font-size: 0.875em;
559
- color: color-mix(in oklch, var(--nc-text), transparent 40%);
560
- }
561
- :where(input, select, textarea)[aria-invalid=false] {
562
- border-color: var(--nc-valid);
563
- }
564
- :where(input, select, textarea)[aria-invalid=true] {
565
- border-color: var(--nc-invalid);
566
- }
567
- :where(input:not([type=submit], [type=button], [type=reset]), select, textarea)[aria-invalid=false] + :where(small) {
568
- color: var(--nc-valid);
569
- }
570
- :where(input:not([type=submit], [type=button], [type=reset]), select, textarea)[aria-invalid=true] + :where(small) {
571
- color: var(--nc-invalid);
572
- }
573
- :where(label) {
574
- display: block;
575
- margin-bottom: 0.25em;
576
- }
577
- :where(label:has(+ input, + select, + textarea)) {
578
- font-weight: 600;
579
- }
580
- :where(label:has(+ [type=file], + [type=range])) {
581
- margin-bottom: 0.5em;
582
- }
583
- :where(fieldset) {
584
- border: 1px solid var(--nc-border);
585
- border-radius: var(--nc-radius);
586
- padding: var(--nc-spacing);
587
- min-width: 0;
588
- max-width: 100%;
589
- }
590
- :where(legend) {
591
- font-weight: 600;
592
- padding-inline: 0.25em;
593
- }
594
- :where([type=checkbox], [type=radio]) {
595
- accent-color: var(--nc-primary);
596
- width: 1.125em;
597
- height: 1.125em;
598
- margin: 0;
599
- }
600
- :where(label:has([type=checkbox], [type=radio])) {
601
- display: flex;
602
- align-items: center;
603
- gap: 0.35em;
604
- margin-bottom: 0.5em;
605
- }
606
- :where(label:has([type=checkbox], [type=radio]):last-child) {
607
- margin-bottom: 0;
608
- }
609
- :where([type=search]) {
610
- border-radius: 5rem;
611
- padding-inline: 1.25em;
612
- }
613
- :where([type=range]) {
614
- accent-color: var(--nc-primary);
615
- width: 100%;
616
- margin-bottom: var(--nc-spacing);
617
- }
618
- :where(input[list]) {
619
- width: auto;
620
- }
621
- :where([type=file]) {
622
- color: var(--nc-text);
623
- font: inherit;
624
- cursor: pointer;
625
- max-width: 100%;
626
- margin-bottom: var(--nc-spacing);
627
- }
628
- :where([type=file])::file-selector-button {
629
- padding: 0.5em 1em;
630
- margin-right: 0.75em;
631
- margin-inline-end: 0.75em;
632
- background-color: var(--nc-primary);
633
- color: var(--nc-primary-contrast);
634
- border: 1px solid var(--nc-primary);
635
- border-radius: var(--nc-radius);
636
- font: inherit;
637
- cursor: pointer;
638
- transition: background-color 0.2s, border-color 0.2s;
639
- }
640
- :where([type=file])::file-selector-button:hover {
641
- background-color: var(--nc-primary-hover);
642
- border-color: var(--nc-primary-hover);
643
- }
644
- :where([type=date], [type=month], [type=week], [type=time], [type=datetime-local]) {
645
- min-width: 10em;
646
- margin-bottom: var(--nc-spacing);
647
- }
648
- :where([type=color]) {
649
- --_color-size: calc(1em * 1.5 + 1em + 2px);
650
- margin-bottom: var(--nc-spacing);
651
- --_color-pad: 0.25em;
652
- height: var(--_color-size);
653
- width: calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));
654
- padding: var(--_color-pad);
655
- background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
656
- border: 1px solid var(--nc-border);
657
- border-radius: var(--nc-radius);
658
- cursor: pointer;
659
- }
660
- :where([type=color])::-webkit-color-swatch-wrapper {
661
- padding: 0;
662
- }
663
- :where([type=color])::-webkit-color-swatch {
664
- border: none;
665
- border-radius: calc(var(--nc-radius) * 0.5);
666
- }
667
- :where(label:has([type=checkbox][role=switch])) {
668
- display: flex;
669
- align-items: center;
670
- gap: 0.5em;
671
- }
672
- :where([type=checkbox][role=switch]) {
673
- appearance: none;
674
- width: 2.5em;
675
- height: 1.25em;
676
- border-radius: 1em;
677
- background-color: var(--nc-border);
678
- position: relative;
679
- cursor: pointer;
680
- flex-shrink: 0;
681
- margin: 0;
682
- transition: background-color 0.2s;
683
- }
684
- :where([type=checkbox][role=switch])::before {
685
- content: "";
686
- position: absolute;
687
- top: 2px;
688
- left: 2px;
689
- width: calc(1.25em - 4px);
690
- height: calc(1.25em - 4px);
691
- border-radius: 50%;
692
- background-color: #fff;
693
- transition: transform 0.2s;
694
- }
695
- :where([type=checkbox][role=switch]):checked {
696
- background-color: var(--nc-primary);
697
- }
698
- :where([type=checkbox][role=switch]):checked::before {
699
- transform: translateX(1.25em);
700
- }
335
+ body > :first-child,
336
+ body > :first-child > :first-child {
337
+ margin-top: 0;
701
338
  }
702
- [type=date],
703
- [type=month],
704
- [type=week],
705
- [type=time],
706
- [type=datetime-local] {
707
- -webkit-appearance: none;
339
+ body > :nth-last-child(1 of :not(script, style, dialog)),
340
+ body > :nth-last-child(1 of :not(script, style, dialog)) > :last-child {
341
+ margin-bottom: 0;
342
+ }
343
+ ul, ol {
344
+ padding-inline-start: 1.5em;
345
+ }
346
+ :where(li) {
347
+ margin-bottom: 0.25em;
348
+ }
349
+ :where(li) > :where(ul, ol) {
350
+ margin-bottom: 0;
351
+ }
352
+ dt {
353
+ font-weight: 600;
354
+ }
355
+ dd {
356
+ margin-inline-start: 1.5em;
357
+ margin-bottom: 0.5em;
358
+ }
359
+ blockquote {
360
+ margin-block: var(--nc-spacing);
361
+ margin-inline: 0;
362
+ padding: 0.25em var(--nc-spacing);
363
+ border-inline-start: 0.25rem solid var(--nc-border);
364
+ font-style: italic;
365
+ }
366
+ :where(blockquote) footer,
367
+ :where(blockquote) cite {
368
+ font-style: normal;
369
+ font-size: 0.9em;
370
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
371
+ }
372
+ hr {
373
+ border: none;
374
+ height: 1px;
375
+ background-color: color-mix(in oklch, var(--nc-border), transparent 40%);
376
+ margin: var(--nc-spacing) 0;
377
+ }
378
+ mark {
379
+ padding: 0.1em 0.25em;
380
+ background-color: light-dark(#fde68a, oklch(0.55 0.12 85));
381
+ color: light-dark(inherit, oklch(0.95 0.01 85));
382
+ border-radius: 2px;
383
+ }
384
+ address {
385
+ font-style: normal;
386
+ }
387
+ }
388
+ @layer nimble.base {
389
+ :where(a:not([role=button])) {
390
+ color: var(--nc-primary);
391
+ text-decoration: underline;
392
+ text-underline-offset: 0.15em;
393
+ text-decoration-color: color-mix(in oklch, var(--nc-primary), transparent 50%);
394
+ transition: color 0.2s, text-decoration-color 0.2s;
395
+ }
396
+ :where(a:not([role=button])):visited {
397
+ color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310));
398
+ text-decoration-color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310) 30%);
399
+ }
400
+ :where(a:not([role=button])):hover {
401
+ color: var(--nc-primary-hover);
402
+ text-decoration-color: var(--nc-primary-hover);
403
+ }
404
+ }
405
+ @layer nimble.base {
406
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]) {
407
+ --_btn-padding-v: 0.5em;
408
+ --_btn-padding-h: 1em;
409
+ padding: var(--_btn-padding-v) var(--_btn-padding-h);
410
+ background-color: var(--nc-primary);
411
+ color: var(--nc-primary-contrast);
412
+ border: 1px solid var(--nc-primary);
413
+ border-radius: var(--nc-radius);
414
+ font: inherit;
415
+ font-size: 1rem;
416
+ line-height: 1.5;
417
+ cursor: pointer;
418
+ text-decoration: none;
419
+ display: inline-block;
420
+ text-align: center;
421
+ margin: 0;
422
+ transition: background-color 0.2s, border-color 0.2s;
423
+ }
424
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]) {
425
+ margin-block-end: 0.25em;
426
+ }
427
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):hover {
428
+ background-color: var(--nc-primary-hover);
429
+ border-color: var(--nc-primary-hover);
430
+ }
431
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):focus-visible {
432
+ box-shadow: 0 0 0 2px var(--nc-primary-focus);
433
+ outline: none;
434
+ }
435
+ :where([type=reset]) {
436
+ background-color: var(--nc-secondary);
437
+ border-color: var(--nc-secondary);
438
+ color: var(--nc-secondary-contrast);
439
+ }
440
+ :where([type=reset]):hover {
441
+ background-color: var(--nc-secondary-hover);
442
+ border-color: var(--nc-secondary-hover);
443
+ }
444
+ :where([type=reset]):focus-visible {
445
+ box-shadow: 0 0 0 2px var(--nc-secondary-focus);
446
+ }
447
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]).inline {
448
+ --_btn-padding-v: 0.05em;
449
+ --_btn-padding-h: 0.4em;
450
+ margin: 0.1em 0.15em;
451
+ font-size: 0.875em;
452
+ vertical-align: baseline;
453
+ }
454
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):disabled {
455
+ opacity: 0.5;
456
+ cursor: not-allowed;
457
+ pointer-events: none;
458
+ }
459
+ :where([role=group]) {
460
+ display: inline-flex;
461
+ margin-bottom: 0.25em;
462
+ }
463
+ [role=group] > * {
464
+ border-radius: 0;
465
+ margin: 0;
466
+ position: relative;
467
+ }
468
+ [role=group] > * + * {
469
+ --_divider: "";
470
+ }
471
+ [role=group] > * + *::before {
472
+ content: var(--_divider);
473
+ position: absolute;
474
+ inset-inline-start: 0;
475
+ top: 20%;
476
+ bottom: 20%;
477
+ width: 1px;
478
+ background: rgba(255, 255, 255, 0.3);
479
+ pointer-events: none;
480
+ }
481
+ [role=group] > :not(.secondary):not(.outline) + .secondary,
482
+ [role=group] > .secondary + :not(.secondary):not(.outline) {
483
+ --_divider: none;
484
+ }
485
+ [role=group] > :not(.secondary):not(.outline) + .outline,
486
+ [role=group] > .outline + :not(.secondary):not(.outline) {
487
+ --_divider: none;
488
+ }
489
+ [role=group] > .secondary + .outline,
490
+ [role=group] > .outline + .secondary {
491
+ --_divider: none;
492
+ }
493
+ [role=group] > input + *,
494
+ [role=group] > select + * {
495
+ --_divider: none;
496
+ }
497
+ [role=group] > :first-child {
498
+ border-start-start-radius: var(--nc-radius);
499
+ border-end-start-radius: var(--nc-radius);
500
+ }
501
+ [role=group] > :last-child {
502
+ border-start-end-radius: var(--nc-radius);
503
+ border-end-end-radius: var(--nc-radius);
504
+ }
505
+ [role=group]:has(.outline):not(:has(> :not(.outline))) {
506
+ border: 1px solid var(--nc-primary);
507
+ border-radius: var(--nc-radius);
508
+ }
509
+ [role=group]:has(.outline):not(:has(> :not(.outline))) > .outline {
510
+ border: none;
511
+ }
512
+ [role=group] > .outline + .outline::before {
513
+ background: var(--nc-primary);
514
+ }
515
+ [role=search] [role=group] > :first-child {
516
+ border-start-start-radius: 5rem;
517
+ border-end-start-radius: 5rem;
518
+ padding-inline-start: 1.25em;
519
+ }
520
+ [role=search] [role=group] > :last-child {
521
+ border-start-end-radius: 5rem;
522
+ border-end-end-radius: 5rem;
523
+ padding-inline-end: 1.25em;
524
+ }
525
+ }
526
+ @layer nimble.utilities {
527
+ .secondary:not(a:not([role=button])) {
528
+ background-color: var(--nc-secondary);
529
+ border-color: var(--nc-secondary);
530
+ color: var(--nc-secondary-contrast);
531
+ }
532
+ .secondary:not(a:not([role=button])):hover {
533
+ background-color: var(--nc-secondary-hover);
534
+ border-color: var(--nc-secondary-hover);
535
+ }
536
+ .secondary:not(a:not([role=button])):focus-visible {
537
+ box-shadow: 0 0 0 2px var(--nc-secondary-focus);
538
+ }
539
+ a:not([role=button]).secondary {
540
+ color: var(--nc-secondary);
541
+ text-decoration-color: color-mix(in oklch, var(--nc-secondary), transparent 50%);
542
+ }
543
+ a:not([role=button]).secondary:hover {
544
+ color: var(--nc-secondary-hover);
545
+ text-decoration-color: var(--nc-secondary-hover);
546
+ }
547
+ .outline:not(a:not([role=button])) {
548
+ background-color: transparent;
549
+ color: var(--nc-primary);
550
+ }
551
+ .outline:not(a:not([role=button])):hover {
552
+ background-color: var(--nc-primary-focus);
553
+ color: var(--nc-primary-hover);
554
+ border-color: var(--nc-primary-hover);
555
+ }
556
+ }
557
+ @layer nimble.base {
558
+ :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset]),
559
+ select, textarea) {
560
+ --_input-bg: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
561
+ padding: 0.5em 0.75em;
562
+ min-height: calc(2.5em + 2px);
563
+ background-color: var(--_input-bg);
564
+ border: 1px solid var(--nc-border);
565
+ border-radius: var(--nc-radius);
566
+ color: var(--nc-text);
567
+ font: inherit;
568
+ font-size: 1rem;
569
+ transition: border-color 0.2s, box-shadow 0.2s;
570
+ }
571
+ :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]),
572
+ select, textarea) {
573
+ width: 100%;
574
+ margin-bottom: var(--nc-spacing);
575
+ }
576
+ :where(p, div) > :where(input, select, textarea):nth-last-child(1 of :not(datalist, script, style)) {
577
+ margin-bottom: 0;
578
+ }
579
+ :where(input, select, textarea):focus-visible {
580
+ border-color: var(--nc-primary);
581
+ box-shadow: 0 0 0 2px var(--nc-primary-focus);
582
+ outline: none;
583
+ }
584
+ :where(input:not([type=submit], [type=button], [type=reset]), select, textarea) + :where(small) {
585
+ display: block;
586
+ margin-top: calc(var(--nc-spacing) * -0.75);
587
+ margin-bottom: var(--nc-spacing);
588
+ font-size: 0.875em;
589
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
590
+ }
591
+ :where(input, select, textarea)[aria-invalid=false] {
592
+ border-color: var(--nc-valid);
593
+ }
594
+ :where(input, select, textarea)[aria-invalid=true] {
595
+ border-color: var(--nc-invalid);
596
+ }
597
+ :where(input:not([type=submit], [type=button], [type=reset]), select, textarea)[aria-invalid=false] + :where(small) {
598
+ color: var(--nc-valid);
599
+ }
600
+ :where(input:not([type=submit], [type=button], [type=reset]), select, textarea)[aria-invalid=true] + :where(small) {
601
+ color: var(--nc-invalid);
602
+ }
603
+ :where(label) {
604
+ display: block;
605
+ margin-bottom: 0.25em;
606
+ }
607
+ :where(label:has(+ input, + select, + textarea)) {
608
+ font-weight: 600;
609
+ }
610
+ :where(label:has(+ [type=file], + [type=range])) {
611
+ margin-bottom: 0.5em;
612
+ }
613
+ :where(fieldset) {
614
+ border: 1px solid var(--nc-border);
615
+ border-radius: var(--nc-radius);
616
+ padding: var(--nc-spacing);
617
+ min-width: 0;
618
+ max-width: 100%;
619
+ }
620
+ :where(fieldset) > :nth-last-child(1 of :not(datalist, script, style)),
621
+ :where(fieldset) > :nth-last-child(1 of :not(datalist, script, style)) > :nth-last-child(1 of :not(datalist, script, style)) {
622
+ margin-bottom: 0;
623
+ }
624
+ :where(legend) {
625
+ font-weight: 600;
626
+ padding-inline: 0.25em;
627
+ }
628
+ :where([type=checkbox], [type=radio]) {
629
+ accent-color: var(--nc-primary);
630
+ width: 1.125em;
631
+ height: 1.125em;
632
+ margin: 0;
633
+ }
634
+ :where(label:has([type=checkbox], [type=radio])) {
635
+ display: flex;
636
+ align-items: center;
637
+ gap: 0.35em;
638
+ margin-bottom: 0.5em;
639
+ }
640
+ :where(label:has([type=checkbox], [type=radio]):last-child) {
641
+ margin-bottom: 0;
642
+ }
643
+ :where([type=search]) {
644
+ border-radius: 5rem;
645
+ padding-inline: 1.25em;
646
+ }
647
+ :where([type=range]) {
648
+ accent-color: var(--nc-primary);
649
+ width: 100%;
650
+ margin-bottom: var(--nc-spacing);
651
+ }
652
+ :where(input[list]) {
653
+ width: auto;
654
+ }
655
+ :where([type=file]) {
656
+ color: var(--nc-text);
657
+ font: inherit;
658
+ cursor: pointer;
659
+ max-width: 100%;
660
+ margin-bottom: var(--nc-spacing);
661
+ }
662
+ :where([type=file])::file-selector-button {
663
+ padding: 0.5em 1em;
664
+ margin-right: 0.75em;
665
+ margin-inline-end: 0.75em;
666
+ background-color: var(--nc-primary);
667
+ color: var(--nc-primary-contrast);
668
+ border: 1px solid var(--nc-primary);
669
+ border-radius: var(--nc-radius);
670
+ font: inherit;
671
+ cursor: pointer;
672
+ transition: background-color 0.2s, border-color 0.2s;
673
+ }
674
+ :where([type=file])::file-selector-button:hover {
675
+ background-color: var(--nc-primary-hover);
676
+ border-color: var(--nc-primary-hover);
677
+ }
678
+ :where([type=date], [type=month], [type=week], [type=time], [type=datetime-local]) {
679
+ min-width: 10em;
680
+ margin-bottom: var(--nc-spacing);
681
+ }
682
+ :where([type=color]) {
683
+ --_color-size: calc(1em * 1.5 + 1em + 2px);
684
+ margin-bottom: var(--nc-spacing);
685
+ --_color-pad: 0.25em;
686
+ height: var(--_color-size);
687
+ width: calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));
688
+ padding: var(--_color-pad);
689
+ background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
690
+ border: 1px solid var(--nc-border);
691
+ border-radius: var(--nc-radius);
692
+ cursor: pointer;
693
+ }
694
+ :where([type=color])::-webkit-color-swatch-wrapper {
695
+ padding: 0;
696
+ }
697
+ :where([type=color])::-webkit-color-swatch {
698
+ border: none;
699
+ border-radius: calc(var(--nc-radius) * 0.5);
700
+ }
701
+ :where(label:has([type=checkbox][role=switch])) {
702
+ display: flex;
703
+ align-items: center;
704
+ gap: 0.5em;
705
+ }
706
+ :where([type=checkbox][role=switch]) {
708
707
  appearance: none;
708
+ width: 2.5em;
709
+ height: 1.25em;
710
+ border-radius: 1em;
711
+ background-color: var(--nc-border);
712
+ position: relative;
713
+ cursor: pointer;
714
+ flex-shrink: 0;
715
+ margin: 0;
716
+ transition: background-color 0.2s;
709
717
  }
710
- @layer nimble.base {
711
- :where(table) {
712
- width: 100%;
713
- border-collapse: collapse;
714
- }
715
- :where(th, td) {
716
- padding: 0.5em 0.75em;
717
- border-bottom: 1px solid color-mix(in oklch, var(--nc-border), transparent 40%);
718
- text-align: start;
719
- }
720
- :where(thead th, thead td) {
721
- font-weight: 600;
722
- border-bottom-width: 2px;
723
- background-color: var(--nc-surface-2);
724
- text-wrap: balance;
725
- }
726
- :where(figure:has(table)) {
727
- overflow-x: auto;
728
- }
718
+ :where([type=checkbox][role=switch])::before {
719
+ content: "";
720
+ position: absolute;
721
+ top: 2px;
722
+ left: 2px;
723
+ width: calc(1.25em - 4px);
724
+ height: calc(1.25em - 4px);
725
+ border-radius: 50%;
726
+ background-color: #fff;
727
+ transition: transform 0.2s;
729
728
  }
730
- @layer nimble.base {
731
- :where(code, kbd, samp) {
732
- font-family: var(--nc-font-mono);
733
- font-size: 0.875em;
734
- background-color: var(--nc-surface-2);
735
- border-radius: var(--nc-radius);
736
- padding: 0.15em 0.35em;
737
- }
738
- :where(pre) {
739
- background-color: var(--nc-surface-2);
740
- border-radius: var(--nc-radius);
741
- padding: var(--nc-spacing);
742
- overflow-x: auto;
743
- }
744
- :where(pre code) {
745
- background: none;
746
- padding: 0;
747
- font-size: inherit;
748
- }
749
- :where(kbd) {
750
- border: 1px solid var(--nc-border);
751
- border-bottom-width: 2px;
752
- }
729
+ :where([type=checkbox][role=switch]):checked {
730
+ background-color: var(--nc-primary);
753
731
  }
754
- @layer nimble.base {
755
- :where(img, video, canvas, svg) {
756
- max-width: 100%;
757
- height: auto;
758
- }
759
- :where(figure) {
760
- margin: 0;
761
- }
762
- :where(figcaption) {
763
- font-size: 0.9em;
764
- color: color-mix(in oklch, var(--nc-text), transparent 40%);
765
- margin-top: 0.5em;
766
- }
732
+ :where([type=checkbox][role=switch]):checked::before {
733
+ transform: translateX(1.25em);
767
734
  }
768
- @layer nimble.base {
769
- :where(article) {
770
- background-color: var(--nc-surface-1);
771
- border: 1px solid var(--nc-border);
772
- border-radius: var(--nc-radius);
773
- padding: var(--nc-spacing);
774
- margin-bottom: var(--nc-spacing);
775
- }
776
- :where(article > header),
777
- :where(article > footer) {
778
- background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
779
- padding: var(--nc-spacing);
780
- }
781
- :where(article > header) {
782
- margin: calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1) var(--nc-spacing);
783
- border-bottom: 1px solid var(--nc-border);
784
- border-radius: var(--nc-radius) var(--nc-radius) 0 0;
785
- }
786
- :where(article > footer) {
787
- margin: var(--nc-spacing) calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1);
788
- border-top: 1px solid var(--nc-border);
789
- border-radius: 0 0 var(--nc-radius) var(--nc-radius);
790
- }
791
- :where(article) > :last-child:not(footer) {
792
- margin-bottom: 0;
793
- }
794
- :where(article > header, article > footer) > :last-child {
795
- margin-bottom: 0;
796
- }
797
- :where(article > header, article > footer) > h1,
798
- :where(article > header, article > footer) > h2,
799
- :where(article > header, article > footer) > h3,
800
- :where(article > header, article > footer) > h4,
801
- :where(article > header, article > footer) > h5,
802
- :where(article > header, article > footer) > h6 {
803
- margin-top: 0;
804
- margin-bottom: 0;
805
- }
735
+ }
736
+ [type=date],
737
+ [type=month],
738
+ [type=week],
739
+ [type=time],
740
+ [type=datetime-local] {
741
+ -webkit-appearance: none;
742
+ appearance: none;
743
+ }
744
+
745
+ @layer nimble.base {
746
+ :where(table) {
747
+ width: 100%;
748
+ border-collapse: collapse;
806
749
  }
807
- @layer nimble.base {
808
- :where(details) {
809
- border: 1px solid var(--nc-border);
810
- border-radius: var(--nc-radius);
811
- padding: 0 1em;
812
- }
813
- :where(details) {
814
- margin-bottom: 0.5em;
815
- }
816
- :where(summary) {
817
- cursor: pointer;
818
- font-weight: 600;
819
- margin: 0 -1em;
820
- padding: 0.5em 1em;
821
- list-style-type: "▶ ";
822
- }
823
- :where(details[open] > summary) {
824
- list-style-type: "▼ ";
825
- }
826
- :where(summary[role=button]) {
827
- display: block;
828
- width: auto;
829
- margin: 0 -1em;
830
- list-style: none;
831
- }
832
- :where(summary[role=button])::before {
833
- content: "▶ ";
834
- display: inline-block;
835
- transition: transform 0.2s ease;
836
- font-size: 0.75em;
837
- vertical-align: middle;
838
- }
839
- :where(details[open] > summary[role=button])::before {
840
- transform: rotate(90deg);
841
- }
842
- :where(details[open]) {
843
- padding-bottom: 0.5em;
844
- }
750
+ :where(th, td) {
751
+ padding: 0.5em 0.75em;
752
+ border-bottom: 1px solid color-mix(in oklch, var(--nc-border), transparent 40%);
753
+ text-align: start;
845
754
  }
846
- details :last-child:last-child {
755
+ :where(thead th, thead td) {
756
+ font-weight: 600;
757
+ border-bottom-width: 2px;
758
+ background-color: var(--nc-surface-2);
759
+ text-wrap: balance;
760
+ }
761
+ :where(figure:has(table)) {
762
+ overflow-x: auto;
763
+ }
764
+ }
765
+ @layer nimble.base {
766
+ :where(code, kbd, samp) {
767
+ font-family: var(--nc-font-mono);
768
+ font-size: 0.875em;
769
+ background-color: var(--nc-surface-2);
770
+ border-radius: var(--nc-radius);
771
+ padding: 0.15em 0.35em;
772
+ }
773
+ :where(pre) {
774
+ background-color: var(--nc-surface-2);
775
+ border-radius: var(--nc-radius);
776
+ padding: var(--nc-spacing);
777
+ overflow-x: auto;
778
+ }
779
+ :where(pre code) {
780
+ background: none;
781
+ padding: 0;
782
+ font-size: inherit;
783
+ }
784
+ :where(kbd) {
785
+ border: 1px solid var(--nc-border);
786
+ border-bottom-width: 2px;
787
+ }
788
+ }
789
+ @layer nimble.base {
790
+ :where(img, video, canvas, svg) {
791
+ max-width: 100%;
792
+ height: auto;
793
+ }
794
+ :where(figure) {
795
+ margin: 0;
796
+ }
797
+ :where(figcaption) {
798
+ font-size: 0.9em;
799
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
800
+ margin-top: 0.5em;
801
+ }
802
+ }
803
+ @layer nimble.base {
804
+ :where(article) {
805
+ background-color: var(--nc-surface-1);
806
+ border: 1px solid var(--nc-border);
807
+ border-radius: var(--nc-radius);
808
+ padding: var(--nc-spacing);
809
+ margin-bottom: var(--nc-spacing);
810
+ }
811
+ :where(article > header),
812
+ :where(article > footer) {
813
+ background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
814
+ padding: var(--nc-spacing);
815
+ }
816
+ :where(article > header) {
817
+ margin: calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1) var(--nc-spacing);
818
+ border-bottom: 1px solid var(--nc-border);
819
+ border-radius: var(--nc-radius) var(--nc-radius) 0 0;
820
+ }
821
+ :where(article > footer) {
822
+ margin: var(--nc-spacing) calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1);
823
+ border-top: 1px solid var(--nc-border);
824
+ border-radius: 0 0 var(--nc-radius) var(--nc-radius);
825
+ }
826
+ :where(article) > :last-child:not(footer) {
827
+ margin-bottom: 0;
828
+ }
829
+ :where(article > header, article > footer) > :last-child {
847
830
  margin-bottom: 0;
848
831
  }
849
- @supports selector(details::details-content) {
832
+ :where(article > header, article > footer) > h1,
833
+ :where(article > header, article > footer) > h2,
834
+ :where(article > header, article > footer) > h3,
835
+ :where(article > header, article > footer) > h4,
836
+ :where(article > header, article > footer) > h5,
837
+ :where(article > header, article > footer) > h6 {
838
+ margin-top: 0;
839
+ margin-bottom: 0;
840
+ }
841
+ }
842
+ @layer nimble.base {
843
+ :where(details) {
844
+ border: 1px solid var(--nc-border);
845
+ border-radius: var(--nc-radius);
846
+ padding: 0 1em;
847
+ }
848
+ :where(details) {
849
+ margin-bottom: 0.5em;
850
+ }
851
+ :where(summary) {
852
+ cursor: pointer;
853
+ font-weight: 600;
854
+ margin: 0 -1em;
855
+ padding: 0.5em 1em;
856
+ list-style-type: "▶ ";
857
+ }
858
+ :where(details[open] > summary) {
859
+ list-style-type: "▼ ";
860
+ }
861
+ :where(summary[role=button]) {
862
+ display: block;
863
+ width: auto;
864
+ margin: 0 -1em;
865
+ list-style: none;
866
+ }
867
+ :where(summary[role=button])::before {
868
+ content: "▶ ";
869
+ display: inline-block;
870
+ transition: transform 0.2s ease;
871
+ font-size: 0.75em;
872
+ vertical-align: middle;
873
+ }
874
+ :where(details[open] > summary[role=button])::before {
875
+ transform: rotate(90deg);
876
+ }
877
+ :where(details[open]) {
878
+ padding-bottom: 0.5em;
879
+ }
880
+ }
881
+ details :last-child:last-child {
882
+ margin-bottom: 0;
883
+ }
884
+
885
+ @supports selector(details::details-content) {
886
+ details::details-content {
887
+ transition: opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
888
+ opacity: 0;
889
+ }
890
+ details[open]::details-content {
891
+ opacity: 1;
892
+ }
893
+ @supports (interpolate-size: allow-keywords) {
894
+ details {
895
+ interpolate-size: allow-keywords;
896
+ }
850
897
  details::details-content {
851
- transition: opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
852
- opacity: 0;
898
+ transition: height 0.3s ease, opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
899
+ height: 0;
900
+ overflow: clip;
853
901
  }
854
902
  details[open]::details-content {
855
- opacity: 1;
856
- }
857
- @supports (interpolate-size: allow-keywords) {
858
- details {
859
- interpolate-size: allow-keywords;
860
- }
861
- details::details-content {
862
- transition: height 0.3s ease, opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
863
- height: 0;
864
- overflow: clip;
865
- }
866
- details[open]::details-content {
867
- height: auto;
868
- }
903
+ height: auto;
869
904
  }
870
905
  }
871
- @layer nimble.base {
872
- :where(dialog) {
873
- background-color: var(--nc-surface-4);
874
- border: 1px solid var(--nc-border);
875
- border-radius: var(--nc-radius);
876
- max-width: min(90vw, 40rem);
877
- padding: var(--nc-spacing);
878
- }
879
- dialog::backdrop {
880
- background: rgba(0, 0, 0, 0.5);
881
- backdrop-filter: blur(4px);
882
- animation: nc-backdrop-in 0.2s ease;
883
- }
884
- @keyframes nc-backdrop-in {
885
- from {
886
- opacity: 0;
887
- }
888
- }
906
+ }
907
+ @layer nimble.base {
908
+ :where(dialog) {
909
+ background-color: var(--nc-surface-4);
910
+ border: 1px solid var(--nc-border);
911
+ border-radius: var(--nc-radius);
912
+ max-width: min(90vw, 40rem);
913
+ max-height: 85vh;
914
+ padding: var(--nc-spacing);
915
+ }
916
+ :where(dialog[open]) {
917
+ position: fixed;
918
+ inset: 0;
919
+ margin: auto;
920
+ }
921
+ :where(dialog:has(> article)) {
922
+ background: none;
923
+ border: none;
924
+ padding: 0;
889
925
  }
890
- @layer nimble.utilities {
891
- .striped :where(tbody tr:nth-child(even)) {
892
- background-color: var(--nc-surface-2);
893
- }
894
- .visually-hidden {
895
- position: absolute;
896
- width: 1px;
897
- height: 1px;
898
- padding: 0;
899
- margin: -1px;
900
- overflow: hidden;
901
- clip-path: inset(50%);
902
- white-space: nowrap;
903
- border: 0;
904
- }
905
- .overflow-auto {
906
- overflow: auto;
907
- }
926
+ :where(dialog > article) {
927
+ margin-bottom: 0;
908
928
  }
909
- @layer nimble.base {
910
- :where(progress) {
911
- -webkit-appearance: none;
912
- appearance: none;
913
- position: relative;
914
- width: 100%;
915
- height: 0.5rem;
916
- overflow: hidden;
917
- border: 0;
918
- border-radius: var(--nc-radius);
919
- background-color: var(--nc-surface-3);
920
- color: var(--nc-primary);
921
- }
922
- :where(progress)::-webkit-progress-bar {
923
- border-radius: var(--nc-radius);
924
- background-color: var(--nc-surface-3);
925
- }
926
- :where(progress)::-webkit-progress-value {
927
- background-color: var(--nc-primary);
928
- border-radius: var(--nc-radius);
929
- transition: inline-size 0.3s ease;
930
- }
931
- :where(progress)::-moz-progress-bar {
932
- background-color: var(--nc-primary);
933
- border-radius: var(--nc-radius);
934
- }
935
- :where(progress):not([value]) {
936
- --nc-progress-track:
937
- linear-gradient(to right,
938
- var(--nc-surface-3) 0%,
939
- var(--nc-primary) 25%,
940
- var(--nc-primary) 25%,
941
- var(--nc-surface-3) 50%,
942
- var(--nc-surface-3) 50%,
943
- var(--nc-primary) 75%,
944
- var(--nc-primary) 75%,
945
- var(--nc-surface-3) 100%);
946
- --nc-progress-track-size: 200% 100%;
947
- }
948
- @media (prefers-reduced-motion: no-preference) {
949
- @supports selector(progress::after) {
950
- :where(progress):not([value])::after {
951
- content: "";
952
- position: absolute;
953
- inset: 0;
954
- background: var(--nc-progress-track);
955
- background-size: var(--nc-progress-track-size);
956
- animation: nc-progress-indeterminate 12s linear infinite;
957
- }
958
- }
959
- :where(progress):not([value])::-webkit-progress-bar {
960
- background: var(--nc-progress-track);
961
- background-size: var(--nc-progress-track-size);
962
- animation: nc-progress-indeterminate 12s linear infinite;
963
- }
964
- :where(progress):not([value])::-moz-progress-bar {
965
- background: var(--nc-progress-track);
966
- background-size: var(--nc-progress-track-size);
967
- animation: nc-progress-indeterminate 12s linear infinite;
968
- }
969
- }
970
- @keyframes nc-progress-indeterminate {
971
- from {
972
- background-position: 0% 0%;
973
- }
974
- to {
975
- background-position: -200% 0%;
976
- }
977
- }
929
+ dialog::backdrop {
930
+ background: rgba(0, 0, 0, 0.5);
931
+ backdrop-filter: blur(4px);
932
+ animation: nc-backdrop-in 0.2s ease;
978
933
  }
979
- @layer nimble.base {
980
- :where(meter) {
981
- -webkit-appearance: none;
982
- -moz-appearance: none;
983
- appearance: none;
984
- width: 100%;
985
- height: 0.5rem;
986
- overflow: hidden;
987
- border: 0;
988
- border-radius: var(--nc-radius);
989
- background-color: var(--nc-surface-3);
990
- }
991
- :where(meter)::-webkit-meter-bar {
992
- border-radius: var(--nc-radius);
993
- background-color: var(--nc-surface-3);
994
- border: 0;
995
- height: 0.5rem;
934
+ @keyframes nc-backdrop-in {
935
+ from {
936
+ opacity: 0;
996
937
  }
997
- :where(meter)::-webkit-meter-optimum-value {
998
- background-color: var(--nc-valid);
938
+ }
939
+ }
940
+ @layer nimble.utilities {
941
+ .striped :where(tbody tr:nth-child(even)) {
942
+ background-color: var(--nc-surface-2);
943
+ }
944
+ .visually-hidden {
945
+ position: absolute;
946
+ width: 1px;
947
+ height: 1px;
948
+ padding: 0;
949
+ margin: -1px;
950
+ overflow: hidden;
951
+ clip-path: inset(50%);
952
+ white-space: nowrap;
953
+ border: 0;
954
+ }
955
+ .overflow-auto {
956
+ overflow: auto;
957
+ }
958
+ }
959
+ @layer nimble.base {
960
+ :where(progress) {
961
+ width: 100%;
962
+ }
963
+ }
964
+ @layer nimble.base {
965
+ :where(meter) {
966
+ -webkit-appearance: none;
967
+ -moz-appearance: none;
968
+ appearance: none;
969
+ width: 100%;
970
+ height: 0.5rem;
971
+ overflow: hidden;
972
+ border: 0;
973
+ border-radius: var(--nc-radius);
974
+ background-color: var(--nc-surface-3);
975
+ }
976
+ :where(meter)::-webkit-meter-bar {
977
+ border-radius: var(--nc-radius);
978
+ background-color: var(--nc-surface-3);
979
+ border: 0;
980
+ height: 0.5rem;
981
+ }
982
+ :where(meter)::-webkit-meter-optimum-value {
983
+ background-color: var(--nc-valid);
984
+ border-radius: var(--nc-radius);
985
+ }
986
+ :where(meter)::-webkit-meter-suboptimum-value {
987
+ background-color: var(--nc-primary);
988
+ border-radius: var(--nc-radius);
989
+ }
990
+ :where(meter)::-webkit-meter-even-less-good-value {
991
+ background-color: var(--nc-invalid);
992
+ border-radius: var(--nc-radius);
993
+ }
994
+ :where(meter)::-moz-meter-bar {
995
+ background-color: var(--nc-primary);
996
+ border-radius: var(--nc-radius);
997
+ }
998
+ :where(meter):-moz-meter-optimum::-moz-meter-bar {
999
+ background-color: var(--nc-valid);
1000
+ }
1001
+ :where(meter):-moz-meter-sub-optimum::-moz-meter-bar {
1002
+ background-color: var(--nc-primary);
1003
+ }
1004
+ :where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar {
1005
+ background-color: var(--nc-invalid);
1006
+ }
1007
+ }
1008
+ @layer nimble.base {
1009
+ @supports (appearance: base-select) {
1010
+ :where(select),
1011
+ :where(select)::picker(select) {
1012
+ appearance: base-select;
1013
+ }
1014
+ :where(select)::picker-icon {
1015
+ 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");
1016
+ transition: rotate 0.4s;
1017
+ }
1018
+ :where(select):open::picker-icon {
1019
+ rotate: 180deg;
1020
+ }
1021
+ :where(select)::picker(select) {
1022
+ position-area: block-end;
1023
+ position-try-order: normal;
1024
+ position-try-fallbacks: flip-block;
1025
+ border: 1px solid var(--nc-border);
999
1026
  border-radius: var(--nc-radius);
1027
+ background-color: var(--nc-surface-1);
1028
+ padding: 0.25em;
1029
+ opacity: 0;
1030
+ transition: opacity 0.2s, overlay 0.2s allow-discrete, display 0.2s allow-discrete;
1000
1031
  }
1001
- :where(meter)::-webkit-meter-suboptimum-value {
1002
- background-color: var(--nc-primary);
1003
- border-radius: var(--nc-radius);
1032
+ :where(select):open::picker(select) {
1033
+ opacity: 1;
1004
1034
  }
1005
- :where(meter)::-webkit-meter-even-less-good-value {
1006
- background-color: var(--nc-invalid);
1007
- border-radius: var(--nc-radius);
1035
+ @starting-style {
1036
+ :where(select):open::picker(select) {
1037
+ opacity: 0;
1038
+ }
1008
1039
  }
1009
- :where(meter)::-moz-meter-bar {
1010
- background-color: var(--nc-primary);
1040
+ :where(select) option {
1041
+ padding: 0.5em 0.75em;
1011
1042
  border-radius: var(--nc-radius);
1043
+ transition: background-color 0.15s;
1012
1044
  }
1013
- :where(meter):-moz-meter-optimum::-moz-meter-bar {
1014
- background-color: var(--nc-valid);
1015
- }
1016
- :where(meter):-moz-meter-sub-optimum::-moz-meter-bar {
1017
- background-color: var(--nc-primary);
1018
- }
1019
- :where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar {
1020
- background-color: var(--nc-invalid);
1045
+ :where(select) option:hover {
1046
+ background-color: var(--nc-surface-2);
1021
1047
  }
1022
- }
1023
- @layer nimble.base {
1024
- @supports (appearance: base-select) {
1025
- :where(select),
1026
- :where(select)::picker(select) {
1027
- appearance: base-select;
1028
- }
1029
- :where(select)::picker-icon {
1030
- 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");
1031
- transition: rotate 0.4s;
1032
- }
1033
- :where(select):open::picker-icon {
1034
- rotate: 180deg;
1035
- }
1036
- :where(select)::picker(select) {
1037
- position-area: block-end;
1038
- position-try-order: normal;
1039
- position-try-fallbacks: flip-block;
1040
- border: 1px solid var(--nc-border);
1041
- border-radius: var(--nc-radius);
1042
- background-color: var(--nc-surface-1);
1043
- padding: 0.25em;
1044
- opacity: 0;
1045
- transition: opacity 0.2s, overlay 0.2s allow-discrete, display 0.2s allow-discrete;
1046
- }
1047
- :where(select):open::picker(select) {
1048
- opacity: 1;
1049
- }
1050
- @starting-style {
1051
- :where(select):open::picker(select) {
1052
- opacity: 0;
1053
- }
1054
- }
1055
- :where(select) option {
1056
- padding: 0.5em 0.75em;
1057
- border-radius: var(--nc-radius);
1058
- transition: background-color 0.15s;
1059
- }
1060
- :where(select) option:hover {
1061
- background-color: var(--nc-surface-2);
1062
- }
1063
- :where(select) option:checked {
1064
- font-weight: 600;
1065
- }
1048
+ :where(select) option:checked {
1049
+ font-weight: 600;
1066
1050
  }
1067
1051
  }
1068
1052
  }