@leftium/nimble.css 0.1.0 → 0.2.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,946 @@
1
+ @charset "UTF-8";
2
+ @layer nimble.reset, nimble.base, nimble.utilities;
3
+ @layer nimble.reset {
4
+ :where(*:not(progress)),
5
+ :where(*::before),
6
+ :where(*::after) {
7
+ box-sizing: border-box;
8
+ background-repeat: no-repeat;
9
+ }
10
+ :where(html) {
11
+ line-height: 1.5;
12
+ -webkit-text-size-adjust: 100%;
13
+ tab-size: 4;
14
+ }
15
+ :where(body) {
16
+ margin: 0;
17
+ }
18
+ :where(h1) {
19
+ font-size: 2em;
20
+ margin-block: 0.67em;
21
+ }
22
+ :where(hr) {
23
+ height: 0;
24
+ color: inherit;
25
+ }
26
+ :where(nav) :where(ol, ul) {
27
+ list-style-type: none;
28
+ padding: 0;
29
+ }
30
+ :where(pre) {
31
+ font-family: monospace, monospace;
32
+ font-size: 1em;
33
+ }
34
+ :where(abbr[title]) {
35
+ text-decoration: underline dotted;
36
+ }
37
+ :where(b, strong) {
38
+ font-weight: bolder;
39
+ }
40
+ :where(code, kbd, samp) {
41
+ font-family: monospace, monospace;
42
+ font-size: 1em;
43
+ }
44
+ :where(small) {
45
+ font-size: 80%;
46
+ }
47
+ :where(sub, sup) {
48
+ font-size: 75%;
49
+ line-height: 0;
50
+ position: relative;
51
+ vertical-align: baseline;
52
+ }
53
+ :where(sub) {
54
+ bottom: -0.25em;
55
+ }
56
+ :where(sup) {
57
+ top: -0.5em;
58
+ }
59
+ :where(iframe) {
60
+ border-style: none;
61
+ }
62
+ :where(table) {
63
+ border-collapse: collapse;
64
+ border-color: currentColor;
65
+ text-indent: 0;
66
+ }
67
+ :where(button, input, select, textarea) {
68
+ font: inherit;
69
+ letter-spacing: inherit;
70
+ }
71
+ :where(button, [type=button], [type=reset], [type=submit]) {
72
+ -webkit-appearance: button;
73
+ }
74
+ :where(fieldset) {
75
+ border: 1px solid #a0a0a0;
76
+ }
77
+ :where(progress) {
78
+ vertical-align: baseline;
79
+ }
80
+ :where(textarea) {
81
+ resize: vertical;
82
+ overflow: auto;
83
+ }
84
+ :where([type=search]) {
85
+ -webkit-appearance: textfield;
86
+ outline-offset: -2px;
87
+ }
88
+ :where(::-webkit-search-decoration) {
89
+ -webkit-appearance: none;
90
+ }
91
+ :where(::-webkit-inner-spin-button),
92
+ :where(::-webkit-outer-spin-button) {
93
+ height: auto;
94
+ }
95
+ :where(::-webkit-file-upload-button) {
96
+ -webkit-appearance: button;
97
+ font: inherit;
98
+ }
99
+ :where(summary) {
100
+ display: list-item;
101
+ }
102
+ :where(a, area, button, input, label, select, summary, textarea, [tabindex]) {
103
+ touch-action: manipulation;
104
+ -webkit-tap-highlight-color: transparent;
105
+ }
106
+ :where([aria-busy=true]) {
107
+ cursor: progress;
108
+ }
109
+ :where([aria-disabled=true], [disabled]) {
110
+ cursor: not-allowed;
111
+ }
112
+ @media (prefers-reduced-motion: reduce) {
113
+ :where(*),
114
+ :where(*::before),
115
+ :where(*::after) {
116
+ animation-duration: 0.01ms !important;
117
+ animation-iteration-count: 1 !important;
118
+ transition-duration: 0.01ms !important;
119
+ scroll-behavior: auto !important;
120
+ }
121
+ }
122
+ }
123
+ @layer nimble.base {
124
+ :root {
125
+ color-scheme: light dark;
126
+ --nc-surface-1: light-dark(oklch(0.985 0.002 250), oklch(0.17 0.005 260));
127
+ --nc-surface-2: light-dark(oklch(0.955 0.002 250), oklch(0.2 0.005 260));
128
+ --nc-surface-3: light-dark(oklch(0.925 0.002 250), oklch(0.23 0.005 260));
129
+ --nc-surface-4: light-dark(oklch(0.885 0.002 250), oklch(0.27 0.005 260));
130
+ --nc-text: light-dark(oklch(0.28 0.005 250), oklch(0.86 0.005 250));
131
+ --nc-border: light-dark(oklch(0.83 0.005 250), oklch(0.28 0.005 260));
132
+ --nc-primary: light-dark(oklch(0.5 0.2 250), oklch(0.6 0.2 250));
133
+ --nc-primary-hover: light-dark(oklch(0.4 0.2 250), oklch(0.7 0.2 250));
134
+ --nc-primary-focus: oklch(0.5 0.2 250 / 0.4);
135
+ --nc-primary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
136
+ --nc-secondary: light-dark(oklch(0.45 0.05 250), oklch(0.6 0.05 250));
137
+ --nc-secondary-hover: light-dark(oklch(0.35 0.05 250), oklch(0.7 0.05 250));
138
+ --nc-secondary-focus: oklch(0.45 0.05 250 / 0.3);
139
+ --nc-secondary-contrast: light-dark(#fff, oklch(0.15 0.005 250));
140
+ --nc-valid: light-dark(oklch(0.52 0.17 145), oklch(0.65 0.2 145));
141
+ --nc-invalid: light-dark(oklch(0.55 0.22 25), oklch(0.65 0.22 25));
142
+ --nc-font-sans: system-ui, sans-serif;
143
+ --nc-font-mono: ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;
144
+ --nc-spacing: 1rem;
145
+ --nc-radius: 0.25rem;
146
+ --nc-content-width: 720px;
147
+ }
148
+ [data-theme=dark] {
149
+ color-scheme: dark;
150
+ }
151
+ [data-theme=light] {
152
+ color-scheme: light;
153
+ }
154
+ }
155
+ @layer nimble.base {
156
+ html {
157
+ font-family: var(--nc-font-sans);
158
+ font-size: 100%;
159
+ line-height: 1.5;
160
+ color: var(--nc-text);
161
+ background-color: var(--nc-surface-1);
162
+ }
163
+ body {
164
+ display: grid;
165
+ grid-template-columns: 1fr min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing))) 1fr;
166
+ min-height: 100dvh;
167
+ }
168
+ body > * {
169
+ grid-column: 2;
170
+ min-width: 0;
171
+ }
172
+ ::selection {
173
+ background-color: var(--nc-primary-focus);
174
+ color: var(--nc-text);
175
+ }
176
+ }
177
+ @layer nimble.base {
178
+ h1 {
179
+ font-size: 2rem;
180
+ line-height: 1.1;
181
+ margin-top: 0;
182
+ margin-bottom: var(--nc-spacing);
183
+ font-weight: 700;
184
+ text-wrap: balance;
185
+ }
186
+ h2 {
187
+ font-size: 1.75rem;
188
+ line-height: 1.15;
189
+ margin-top: 2rem;
190
+ margin-bottom: var(--nc-spacing);
191
+ font-weight: 700;
192
+ text-wrap: balance;
193
+ }
194
+ h3 {
195
+ font-size: 1.5rem;
196
+ line-height: 1.2;
197
+ margin-top: 1.5rem;
198
+ margin-bottom: var(--nc-spacing);
199
+ font-weight: 700;
200
+ text-wrap: balance;
201
+ }
202
+ h4 {
203
+ font-size: 1.25rem;
204
+ line-height: 1.3;
205
+ margin-top: 1.5rem;
206
+ margin-bottom: var(--nc-spacing);
207
+ font-weight: 700;
208
+ text-wrap: balance;
209
+ }
210
+ h5 {
211
+ font-size: 1.125rem;
212
+ line-height: 1.4;
213
+ margin-top: 1.5rem;
214
+ margin-bottom: var(--nc-spacing);
215
+ font-weight: 700;
216
+ text-wrap: balance;
217
+ }
218
+ h6 {
219
+ font-size: 1rem;
220
+ line-height: 1.5;
221
+ margin-top: 1.5rem;
222
+ margin-bottom: var(--nc-spacing);
223
+ font-weight: 700;
224
+ text-wrap: balance;
225
+ }
226
+ @media (max-width: 720px) {
227
+ h1 {
228
+ font-size: 1.75rem;
229
+ }
230
+ h2 {
231
+ font-size: 1.5rem;
232
+ }
233
+ h3 {
234
+ font-size: 1.3rem;
235
+ }
236
+ }
237
+ p, ul, ol, dl, blockquote, pre, table, figure, form, fieldset {
238
+ margin-top: 0;
239
+ margin-bottom: var(--nc-spacing);
240
+ }
241
+ ul, ol {
242
+ padding-inline-start: 1.5em;
243
+ }
244
+ li {
245
+ margin-bottom: 0.25em;
246
+ }
247
+ :where(li) > :where(ul, ol) {
248
+ margin-bottom: 0;
249
+ }
250
+ dt {
251
+ font-weight: 600;
252
+ }
253
+ dd {
254
+ margin-inline-start: 1.5em;
255
+ margin-bottom: 0.5em;
256
+ }
257
+ blockquote {
258
+ margin-block: var(--nc-spacing);
259
+ margin-inline: 0;
260
+ padding: 0.25em var(--nc-spacing);
261
+ border-inline-start: 0.25rem solid var(--nc-border);
262
+ font-style: italic;
263
+ }
264
+ :where(blockquote) footer,
265
+ :where(blockquote) cite {
266
+ font-style: normal;
267
+ font-size: 0.9em;
268
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
269
+ }
270
+ hr {
271
+ border: none;
272
+ height: 1px;
273
+ background-color: color-mix(in oklch, var(--nc-border), transparent 40%);
274
+ margin: calc(var(--nc-spacing) * 2) 0;
275
+ }
276
+ mark {
277
+ padding: 0.1em 0.25em;
278
+ background-color: light-dark(#fde68a, oklch(0.55 0.12 85));
279
+ color: light-dark(inherit, oklch(0.95 0.01 85));
280
+ border-radius: 2px;
281
+ }
282
+ address {
283
+ font-style: normal;
284
+ }
285
+ }
286
+ @layer nimble.base {
287
+ :where(a:not([role=button])) {
288
+ color: var(--nc-primary);
289
+ text-decoration: underline;
290
+ text-underline-offset: 0.15em;
291
+ text-decoration-color: color-mix(in oklch, var(--nc-primary), transparent 50%);
292
+ transition: color 0.2s, text-decoration-color 0.2s;
293
+ }
294
+ :where(a:not([role=button])):visited {
295
+ color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310));
296
+ text-decoration-color: color-mix(in oklch, var(--nc-primary) 40%, oklch(0.38 0.15 310) 30%);
297
+ }
298
+ :where(a:not([role=button])):hover {
299
+ color: var(--nc-primary-hover);
300
+ text-decoration-color: var(--nc-primary-hover);
301
+ }
302
+ }
303
+ @layer nimble.base {
304
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]) {
305
+ --_btn-padding-v: 0.5em;
306
+ --_btn-padding-h: 1em;
307
+ padding: var(--_btn-padding-v) var(--_btn-padding-h);
308
+ background-color: var(--nc-primary);
309
+ color: var(--nc-primary-contrast);
310
+ border: 1px solid var(--nc-primary);
311
+ border-radius: var(--nc-radius);
312
+ font: inherit;
313
+ font-size: 1rem;
314
+ line-height: 1.5;
315
+ cursor: pointer;
316
+ text-decoration: none;
317
+ display: inline-block;
318
+ text-align: center;
319
+ margin: 0 0.25em 0.25em 0;
320
+ transition: background-color 0.2s, border-color 0.2s;
321
+ }
322
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):hover {
323
+ background-color: var(--nc-primary-hover);
324
+ border-color: var(--nc-primary-hover);
325
+ }
326
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):focus-visible {
327
+ box-shadow: 0 0 0 2px var(--nc-primary-focus);
328
+ outline: none;
329
+ }
330
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]).inline {
331
+ --_btn-padding-v: 0.05em;
332
+ --_btn-padding-h: 0.4em;
333
+ margin: 0.1em 0.15em;
334
+ font-size: 0.875em;
335
+ vertical-align: baseline;
336
+ }
337
+ :where(button, [type=submit], [type=reset], [type=button], [role=button]):disabled {
338
+ opacity: 0.5;
339
+ cursor: not-allowed;
340
+ pointer-events: none;
341
+ }
342
+ :where([role=group]) {
343
+ display: inline-flex;
344
+ margin-bottom: var(--nc-spacing);
345
+ }
346
+ [role=group] > * {
347
+ border-radius: 0;
348
+ margin: 0;
349
+ position: relative;
350
+ }
351
+ [role=group] > * + * {
352
+ --_divider: "";
353
+ }
354
+ [role=group] > * + *::before {
355
+ content: var(--_divider);
356
+ position: absolute;
357
+ inset-inline-start: 0;
358
+ top: 20%;
359
+ bottom: 20%;
360
+ width: 1px;
361
+ background: rgba(255, 255, 255, 0.3);
362
+ pointer-events: none;
363
+ }
364
+ [role=group] > :not(.secondary):not(.outline) + .secondary,
365
+ [role=group] > .secondary + :not(.secondary):not(.outline) {
366
+ --_divider: none;
367
+ }
368
+ [role=group] > :not(.secondary):not(.outline) + .outline,
369
+ [role=group] > .outline + :not(.secondary):not(.outline) {
370
+ --_divider: none;
371
+ }
372
+ [role=group] > .secondary + .outline,
373
+ [role=group] > .outline + .secondary {
374
+ --_divider: none;
375
+ }
376
+ [role=group] > input + *,
377
+ [role=group] > select + * {
378
+ --_divider: none;
379
+ }
380
+ [role=group] > :first-child {
381
+ border-start-start-radius: var(--nc-radius);
382
+ border-end-start-radius: var(--nc-radius);
383
+ }
384
+ [role=group] > :last-child {
385
+ border-start-end-radius: var(--nc-radius);
386
+ border-end-end-radius: var(--nc-radius);
387
+ }
388
+ [role=group]:has(.outline):not(:has(> :not(.outline))) {
389
+ border: 1px solid var(--nc-primary);
390
+ border-radius: var(--nc-radius);
391
+ }
392
+ [role=group]:has(.outline):not(:has(> :not(.outline))) > .outline {
393
+ border: none;
394
+ }
395
+ [role=group] > .outline + .outline::before {
396
+ background: var(--nc-primary);
397
+ }
398
+ [role=search] [role=group] > :first-child {
399
+ border-start-start-radius: 5rem;
400
+ border-end-start-radius: 5rem;
401
+ padding-inline-start: 1.25em;
402
+ }
403
+ [role=search] [role=group] > :last-child {
404
+ border-start-end-radius: 5rem;
405
+ border-end-end-radius: 5rem;
406
+ padding-inline-end: 1.25em;
407
+ }
408
+ }
409
+ @layer nimble.utilities {
410
+ .secondary {
411
+ background-color: var(--nc-secondary);
412
+ border-color: var(--nc-secondary);
413
+ color: var(--nc-secondary-contrast);
414
+ }
415
+ .secondary:hover {
416
+ background-color: var(--nc-secondary-hover);
417
+ border-color: var(--nc-secondary-hover);
418
+ }
419
+ .secondary:focus-visible {
420
+ box-shadow: 0 0 0 2px var(--nc-secondary-focus);
421
+ }
422
+ .outline {
423
+ background-color: transparent;
424
+ color: var(--nc-primary);
425
+ }
426
+ .outline:hover {
427
+ background-color: var(--nc-primary-focus);
428
+ color: var(--nc-primary-hover);
429
+ border-color: var(--nc-primary-hover);
430
+ }
431
+ }
432
+ @layer nimble.base {
433
+ :where(input:not([type=checkbox], [type=radio], [type=range], [type=file], [type=color], [type=submit], [type=button], [type=reset]),
434
+ select, textarea) {
435
+ --_input-bg: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
436
+ padding: 0.5em 0.75em;
437
+ min-height: calc(2.5em + 2px);
438
+ background-color: var(--_input-bg);
439
+ border: 1px solid var(--nc-border);
440
+ border-radius: var(--nc-radius);
441
+ color: var(--nc-text);
442
+ font: inherit;
443
+ font-size: 1rem;
444
+ transition: border-color 0.2s, box-shadow 0.2s;
445
+ }
446
+ :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]),
447
+ select, textarea) {
448
+ width: 100%;
449
+ margin-bottom: var(--nc-spacing);
450
+ }
451
+ :where(input, select, textarea):focus-visible {
452
+ border-color: var(--nc-primary);
453
+ box-shadow: 0 0 0 2px var(--nc-primary-focus);
454
+ outline: none;
455
+ }
456
+ :where(input, select, textarea) + :where(small) {
457
+ display: block;
458
+ margin-top: calc(var(--nc-spacing) * -0.75);
459
+ margin-bottom: var(--nc-spacing);
460
+ font-size: 0.875em;
461
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
462
+ }
463
+ :where(input, select, textarea)[aria-invalid=false] {
464
+ border-color: var(--nc-valid);
465
+ }
466
+ :where(input, select, textarea)[aria-invalid=true] {
467
+ border-color: var(--nc-invalid);
468
+ }
469
+ :where(input, select, textarea)[aria-invalid=false] + :where(small) {
470
+ color: var(--nc-valid);
471
+ }
472
+ :where(input, select, textarea)[aria-invalid=true] + :where(small) {
473
+ color: var(--nc-invalid);
474
+ }
475
+ :where(label) {
476
+ display: block;
477
+ margin-bottom: 0.25em;
478
+ }
479
+ :where(label:has(+ input, + select, + textarea)) {
480
+ font-weight: 600;
481
+ }
482
+ :where(fieldset) {
483
+ border: 1px solid var(--nc-border);
484
+ border-radius: var(--nc-radius);
485
+ padding: var(--nc-spacing);
486
+ min-width: 0;
487
+ max-width: 100%;
488
+ }
489
+ :where(legend) {
490
+ font-weight: 600;
491
+ padding-inline: 0.25em;
492
+ }
493
+ :where([type=checkbox], [type=radio]) {
494
+ accent-color: var(--nc-primary);
495
+ width: 1.125em;
496
+ height: 1.125em;
497
+ margin: 0;
498
+ }
499
+ :where(label:has([type=checkbox], [type=radio])) {
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 0.35em;
503
+ margin-bottom: var(--nc-spacing);
504
+ }
505
+ :where(label:has([type=radio])) {
506
+ margin-bottom: 0.35em;
507
+ }
508
+ :where([type=range]) {
509
+ accent-color: var(--nc-primary);
510
+ width: 100%;
511
+ }
512
+ :where(input[list]) {
513
+ width: auto;
514
+ }
515
+ :where([type=file]) {
516
+ color: var(--nc-text);
517
+ font: inherit;
518
+ cursor: pointer;
519
+ max-width: 100%;
520
+ }
521
+ :where([type=file])::file-selector-button {
522
+ padding: 0.5em 1em;
523
+ margin-right: 0.75em;
524
+ margin-inline-end: 0.75em;
525
+ background-color: var(--nc-primary);
526
+ color: var(--nc-primary-contrast);
527
+ border: 1px solid var(--nc-primary);
528
+ border-radius: var(--nc-radius);
529
+ font: inherit;
530
+ cursor: pointer;
531
+ transition: background-color 0.2s, border-color 0.2s;
532
+ }
533
+ :where([type=file])::file-selector-button:hover {
534
+ background-color: var(--nc-primary-hover);
535
+ border-color: var(--nc-primary-hover);
536
+ }
537
+ :where([type=date], [type=month], [type=week], [type=time], [type=datetime-local]) {
538
+ min-width: 10em;
539
+ margin-bottom: var(--nc-spacing);
540
+ }
541
+ :where([type=color]) {
542
+ --_color-size: calc(1em * 1.5 + 1em + 2px);
543
+ --_color-pad: 0.25em;
544
+ height: var(--_color-size);
545
+ width: calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));
546
+ padding: var(--_color-pad);
547
+ background-color: color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);
548
+ border: 1px solid var(--nc-border);
549
+ border-radius: var(--nc-radius);
550
+ cursor: pointer;
551
+ }
552
+ :where([type=color])::-webkit-color-swatch-wrapper {
553
+ padding: 0;
554
+ }
555
+ :where([type=color])::-webkit-color-swatch {
556
+ border: none;
557
+ border-radius: calc(var(--nc-radius) * 0.5);
558
+ }
559
+ :where(label:has([type=checkbox][role=switch])) {
560
+ display: inline-flex;
561
+ align-items: center;
562
+ gap: 0.5em;
563
+ }
564
+ :where([type=checkbox][role=switch]) {
565
+ appearance: none;
566
+ width: 2.5em;
567
+ height: 1.25em;
568
+ border-radius: 1em;
569
+ background-color: var(--nc-border);
570
+ position: relative;
571
+ cursor: pointer;
572
+ flex-shrink: 0;
573
+ margin: 0;
574
+ transition: background-color 0.2s;
575
+ }
576
+ :where([type=checkbox][role=switch])::before {
577
+ content: "";
578
+ position: absolute;
579
+ top: 2px;
580
+ left: 2px;
581
+ width: calc(1.25em - 4px);
582
+ height: calc(1.25em - 4px);
583
+ border-radius: 50%;
584
+ background-color: #fff;
585
+ transition: transform 0.2s;
586
+ }
587
+ :where([type=checkbox][role=switch]):checked {
588
+ background-color: var(--nc-primary);
589
+ }
590
+ :where([type=checkbox][role=switch]):checked::before {
591
+ transform: translateX(1.25em);
592
+ }
593
+ }
594
+ [type=date],
595
+ [type=month],
596
+ [type=week],
597
+ [type=time],
598
+ [type=datetime-local] {
599
+ -webkit-appearance: none;
600
+ appearance: none;
601
+ }
602
+
603
+ @layer nimble.base {
604
+ :where(table) {
605
+ width: 100%;
606
+ border-collapse: collapse;
607
+ }
608
+ :where(th, td) {
609
+ padding: 0.5em 0.75em;
610
+ border-bottom: 1px solid color-mix(in oklch, var(--nc-border), transparent 40%);
611
+ text-align: start;
612
+ }
613
+ :where(thead th, thead td) {
614
+ font-weight: 600;
615
+ border-bottom-width: 2px;
616
+ background-color: var(--nc-surface-2);
617
+ text-wrap: balance;
618
+ }
619
+ :where(figure:has(table)) {
620
+ overflow-x: auto;
621
+ }
622
+ }
623
+ @layer nimble.base {
624
+ :where(code, kbd, samp) {
625
+ font-family: var(--nc-font-mono);
626
+ font-size: 0.875em;
627
+ background-color: var(--nc-surface-2);
628
+ border-radius: var(--nc-radius);
629
+ padding: 0.15em 0.35em;
630
+ }
631
+ :where(pre) {
632
+ background-color: var(--nc-surface-2);
633
+ border-radius: var(--nc-radius);
634
+ padding: var(--nc-spacing);
635
+ overflow-x: auto;
636
+ }
637
+ :where(pre code) {
638
+ background: none;
639
+ padding: 0;
640
+ font-size: inherit;
641
+ }
642
+ :where(kbd) {
643
+ border: 1px solid var(--nc-border);
644
+ border-bottom-width: 2px;
645
+ }
646
+ }
647
+ @layer nimble.base {
648
+ :where(img, video, canvas, svg) {
649
+ max-width: 100%;
650
+ height: auto;
651
+ }
652
+ :where(figure) {
653
+ margin: 0;
654
+ }
655
+ :where(figcaption) {
656
+ font-size: 0.9em;
657
+ color: color-mix(in oklch, var(--nc-text), transparent 40%);
658
+ margin-top: 0.5em;
659
+ }
660
+ }
661
+ @layer nimble.base {
662
+ :where(details) {
663
+ border: 1px solid var(--nc-border);
664
+ border-radius: var(--nc-radius);
665
+ padding: 0 1em;
666
+ }
667
+ :where(summary) {
668
+ cursor: pointer;
669
+ font-weight: 600;
670
+ margin: 0 -1em;
671
+ padding: 0.75em 1em;
672
+ list-style-type: "▶ ";
673
+ }
674
+ :where(details[open] > summary) {
675
+ list-style-type: "▼ ";
676
+ }
677
+ :where(details[open]) {
678
+ padding-bottom: 0.75em;
679
+ }
680
+ details :last-child {
681
+ margin-bottom: 0;
682
+ }
683
+ }
684
+ @supports selector(details::details-content) {
685
+ details::details-content {
686
+ transition: opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
687
+ opacity: 0;
688
+ }
689
+ details[open]::details-content {
690
+ opacity: 1;
691
+ }
692
+ @supports (interpolate-size: allow-keywords) {
693
+ details {
694
+ interpolate-size: allow-keywords;
695
+ }
696
+ details::details-content {
697
+ transition: height 0.3s ease, opacity 0.3s ease, content-visibility 0.3s ease allow-discrete;
698
+ height: 0;
699
+ overflow: clip;
700
+ }
701
+ details[open]::details-content {
702
+ height: auto;
703
+ }
704
+ }
705
+ }
706
+ @layer nimble.base {
707
+ :where(dialog) {
708
+ background-color: var(--nc-surface-4);
709
+ border: 1px solid var(--nc-border);
710
+ border-radius: var(--nc-radius);
711
+ max-width: min(90vw, 40rem);
712
+ padding: var(--nc-spacing);
713
+ }
714
+ dialog::backdrop {
715
+ background: rgba(0, 0, 0, 0.5);
716
+ backdrop-filter: blur(4px);
717
+ animation: nc-backdrop-in 0.2s ease;
718
+ }
719
+ @keyframes nc-backdrop-in {
720
+ from {
721
+ opacity: 0;
722
+ }
723
+ }
724
+ }
725
+ @media print {
726
+ body {
727
+ background: #fff;
728
+ color: #000;
729
+ }
730
+ a[href]::after {
731
+ content: " (" attr(href) ")";
732
+ font-size: 0.85em;
733
+ color: #555;
734
+ }
735
+ a[href^="#"]::after,
736
+ a[href^="javascript:"]::after {
737
+ content: none;
738
+ }
739
+ pre, blockquote {
740
+ page-break-inside: avoid;
741
+ }
742
+ h2, h3, h4 {
743
+ page-break-after: avoid;
744
+ }
745
+ img {
746
+ max-width: 100% !important;
747
+ }
748
+ @page {
749
+ margin: 2cm;
750
+ }
751
+ }
752
+ @layer nimble.base {
753
+ :where(progress) {
754
+ -webkit-appearance: none;
755
+ appearance: none;
756
+ position: relative;
757
+ width: 100%;
758
+ height: 0.5rem;
759
+ overflow: hidden;
760
+ border: 0;
761
+ border-radius: var(--nc-radius);
762
+ background-color: var(--nc-surface-3);
763
+ color: var(--nc-primary);
764
+ }
765
+ :where(progress)::-webkit-progress-bar {
766
+ border-radius: var(--nc-radius);
767
+ background-color: var(--nc-surface-3);
768
+ }
769
+ :where(progress)::-webkit-progress-value {
770
+ background-color: var(--nc-primary);
771
+ border-radius: var(--nc-radius);
772
+ transition: inline-size 0.3s ease;
773
+ }
774
+ :where(progress)::-moz-progress-bar {
775
+ background-color: var(--nc-primary);
776
+ border-radius: var(--nc-radius);
777
+ }
778
+ :where(progress):not([value]) {
779
+ --nc-progress-track:
780
+ linear-gradient(to right,
781
+ var(--nc-surface-3) 0%,
782
+ var(--nc-primary) 25%,
783
+ var(--nc-primary) 25%,
784
+ var(--nc-surface-3) 50%,
785
+ var(--nc-surface-3) 50%,
786
+ var(--nc-primary) 75%,
787
+ var(--nc-primary) 75%,
788
+ var(--nc-surface-3) 100%);
789
+ --nc-progress-track-size: 200% 100%;
790
+ }
791
+ @media (prefers-reduced-motion: no-preference) {
792
+ @supports selector(progress::after) {
793
+ :where(progress):not([value])::after {
794
+ content: "";
795
+ position: absolute;
796
+ inset: 0;
797
+ background: var(--nc-progress-track);
798
+ background-size: var(--nc-progress-track-size);
799
+ animation: nc-progress-indeterminate 12s linear infinite;
800
+ }
801
+ }
802
+ :where(progress):not([value])::-webkit-progress-bar {
803
+ background: var(--nc-progress-track);
804
+ background-size: var(--nc-progress-track-size);
805
+ animation: nc-progress-indeterminate 12s linear infinite;
806
+ }
807
+ :where(progress):not([value])::-moz-progress-bar {
808
+ background: var(--nc-progress-track);
809
+ background-size: var(--nc-progress-track-size);
810
+ animation: nc-progress-indeterminate 12s linear infinite;
811
+ }
812
+ }
813
+ @keyframes nc-progress-indeterminate {
814
+ from {
815
+ background-position: 0% 0%;
816
+ }
817
+ to {
818
+ background-position: -200% 0%;
819
+ }
820
+ }
821
+ }
822
+ @layer nimble.base {
823
+ :where(meter) {
824
+ -webkit-appearance: none;
825
+ -moz-appearance: none;
826
+ appearance: none;
827
+ width: 100%;
828
+ height: 0.5rem;
829
+ overflow: hidden;
830
+ border: 0;
831
+ border-radius: var(--nc-radius);
832
+ background-color: var(--nc-surface-3);
833
+ }
834
+ :where(meter)::-webkit-meter-bar {
835
+ border-radius: var(--nc-radius);
836
+ background-color: var(--nc-surface-3);
837
+ border: 0;
838
+ height: 0.5rem;
839
+ }
840
+ :where(meter)::-webkit-meter-optimum-value {
841
+ background-color: var(--nc-valid);
842
+ border-radius: var(--nc-radius);
843
+ }
844
+ :where(meter)::-webkit-meter-suboptimum-value {
845
+ background-color: var(--nc-primary);
846
+ border-radius: var(--nc-radius);
847
+ }
848
+ :where(meter)::-webkit-meter-even-less-good-value {
849
+ background-color: var(--nc-invalid);
850
+ border-radius: var(--nc-radius);
851
+ }
852
+ :where(meter)::-moz-meter-bar {
853
+ background-color: var(--nc-primary);
854
+ border-radius: var(--nc-radius);
855
+ }
856
+ :where(meter):-moz-meter-optimum::-moz-meter-bar {
857
+ background-color: var(--nc-valid);
858
+ }
859
+ :where(meter):-moz-meter-sub-optimum::-moz-meter-bar {
860
+ background-color: var(--nc-primary);
861
+ }
862
+ :where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar {
863
+ background-color: var(--nc-invalid);
864
+ }
865
+ }
866
+ @layer nimble.base {
867
+ @supports (appearance: base-select) {
868
+ :where(select),
869
+ :where(select)::picker(select) {
870
+ appearance: base-select;
871
+ }
872
+ :where(select)::picker-icon {
873
+ 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");
874
+ transition: rotate 0.4s;
875
+ }
876
+ :where(select):open::picker-icon {
877
+ rotate: 180deg;
878
+ }
879
+ :where(select)::picker(select) {
880
+ border: 1px solid var(--nc-border);
881
+ border-radius: var(--nc-radius);
882
+ background-color: var(--nc-surface-1);
883
+ padding: 0.25em;
884
+ opacity: 0;
885
+ transition: opacity 0.2s, overlay 0.2s allow-discrete, display 0.2s allow-discrete;
886
+ }
887
+ :where(select):open::picker(select) {
888
+ opacity: 1;
889
+ }
890
+ @starting-style {
891
+ :where(select):open::picker(select) {
892
+ opacity: 0;
893
+ }
894
+ }
895
+ :where(select) option {
896
+ padding: 0.5em 0.75em;
897
+ border-radius: var(--nc-radius);
898
+ transition: background-color 0.15s;
899
+ }
900
+ :where(select) option:hover {
901
+ background-color: var(--nc-surface-2);
902
+ }
903
+ :where(select) option:checked {
904
+ font-weight: 600;
905
+ }
906
+ }
907
+ }
908
+ @layer nimble.utilities {
909
+ .container {
910
+ max-width: var(--nc-content-width);
911
+ margin-inline: auto;
912
+ padding-inline: var(--nc-spacing);
913
+ }
914
+ .fluid {
915
+ display: block;
916
+ max-width: none;
917
+ padding-inline: var(--nc-spacing);
918
+ }
919
+ .full-bleed {
920
+ grid-column: 1/-1;
921
+ }
922
+ .wide {
923
+ grid-column: 1/-1;
924
+ width: 100%;
925
+ max-width: 1200px;
926
+ margin-inline: auto;
927
+ padding-inline: var(--nc-spacing);
928
+ }
929
+ .striped :where(tbody tr:nth-child(even)) {
930
+ background-color: var(--nc-surface-2);
931
+ }
932
+ .visually-hidden {
933
+ position: absolute;
934
+ width: 1px;
935
+ height: 1px;
936
+ padding: 0;
937
+ margin: -1px;
938
+ overflow: hidden;
939
+ clip-path: inset(50%);
940
+ white-space: nowrap;
941
+ border: 0;
942
+ }
943
+ .overflow-auto {
944
+ overflow: auto;
945
+ }
946
+ }