canny-ui 1.0.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,887 @@
1
+ @charset "UTF-8";
2
+ @import url("https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght,SOFT@0,9..144,300..900,0..100;1,9..144,300..900,0..100&family=Geist+Mono:wght@300..700&family=Geist:wght@300..700&display=swap");
3
+ :root {
4
+ --bg-base: #f5f2ea;
5
+ --bg-surface-low: #fbfaf6;
6
+ --bg-surface-lowest: #ffffff;
7
+ --bg-surface-edge: #ebe6d8;
8
+ --text-primary: #10131a;
9
+ --text-secondary: #2a2f3a;
10
+ --text-muted: #6b7180;
11
+ --text-on-solid: #fbfaf6;
12
+ --text-accent: #0050b3;
13
+ --color-primary: #0066ff;
14
+ --color-primary-dark: #003a7a;
15
+ --color-primary-soft: #88b3ff;
16
+ --color-danger: #c2410c;
17
+ --color-warning: #a16207;
18
+ --color-success: #3f6212;
19
+ --color-info: #475569;
20
+ --hairline-color: rgba(16, 19, 26, 0.12);
21
+ --hairline-strong: rgba(16, 19, 26, 0.24);
22
+ --shadow-ambient: 0 6px 32px -8px rgba(0, 102, 255, 0.22);
23
+ --shadow-card: 0 1px 2px rgba(16, 19, 26, 0.04),
24
+ 0 8px 24px -12px rgba(16, 19, 26, 0.12);
25
+ --shadow-lift: 0 2px 4px rgba(16, 19, 26, 0.06),
26
+ 0 24px 48px -16px rgba(16, 19, 26, 0.18);
27
+ --ease-precise: cubic-bezier(0.2, 0.8, 0.2, 1);
28
+ --transition-fast: 120ms var(--ease-precise);
29
+ --transition-base: 200ms var(--ease-precise);
30
+ --transition-slow: 320ms var(--ease-precise);
31
+ --radius-xs: 2px;
32
+ --radius-sm: 4px;
33
+ --radius-md: 6px;
34
+ --radius-lg: 10px;
35
+ --font-display: 'Fraunces', 'Newsreader', 'Iowan Old Style', Georgia, serif;
36
+ --font-body: 'Geist', ui-sans-serif, -apple-system, 'Segoe UI', sans-serif;
37
+ --font-mono: 'Geist Mono', 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
38
+ --text-xs: 0.75rem;
39
+ --text-sm: 0.875rem;
40
+ --text-base: 1rem;
41
+ --text-lg: 1.125rem;
42
+ --text-xl: 1.375rem;
43
+ --text-2xl: 1.875rem;
44
+ --text-3xl: 2.75rem;
45
+ --text-4xl: 4rem;
46
+ --track-tight: -0.02em;
47
+ --track-normal: 0;
48
+ --track-wide: 0.08em;
49
+ --track-wider: 0.14em;
50
+ }
51
+
52
+ @media (prefers-color-scheme: dark) {
53
+ :root {
54
+ --bg-base: #0b0d12;
55
+ --bg-surface-low: #131620;
56
+ --bg-surface-lowest: #1c2030;
57
+ --bg-surface-edge: #262b3d;
58
+ --text-primary: #fbfaf6;
59
+ --text-secondary: #ebe6d8;
60
+ --text-muted: #9aa0ae;
61
+ --text-on-solid: #0b0d12;
62
+ --text-accent: #4d8cff;
63
+ --color-primary: #4d8cff;
64
+ --color-primary-dark: #0050b3;
65
+ --color-primary-soft: #003a7a;
66
+ --color-danger: #ea580c;
67
+ --color-warning: #ca8a04;
68
+ --color-success: #65a30d;
69
+ --color-info: #64748b;
70
+ --hairline-color: rgba(251, 250, 246, 0.10);
71
+ --hairline-strong: rgba(251, 250, 246, 0.22);
72
+ --shadow-ambient: 0 8px 40px -8px rgba(77, 140, 255, 0.35);
73
+ --shadow-card: 0 1px 0 rgba(251, 250, 246, 0.04),
74
+ 0 16px 40px -16px rgba(0, 0, 0, 0.6);
75
+ --shadow-lift: 0 24px 48px -16px rgba(0, 0, 0, 0.7);
76
+ }
77
+ }
78
+ .cny-dark {
79
+ --bg-base: #0b0d12;
80
+ --bg-surface-low: #131620;
81
+ --bg-surface-lowest: #1c2030;
82
+ --bg-surface-edge: #262b3d;
83
+ --text-primary: #fbfaf6;
84
+ --text-secondary: #ebe6d8;
85
+ --text-muted: #9aa0ae;
86
+ --text-on-solid: #0b0d12;
87
+ --text-accent: #4d8cff;
88
+ --color-primary: #4d8cff;
89
+ --color-primary-dark: #0050b3;
90
+ --color-primary-soft: #003a7a;
91
+ --color-danger: #ea580c;
92
+ --color-warning: #ca8a04;
93
+ --color-success: #65a30d;
94
+ --color-info: #64748b;
95
+ --hairline-color: rgba(251, 250, 246, 0.10);
96
+ --hairline-strong: rgba(251, 250, 246, 0.22);
97
+ --shadow-ambient: 0 8px 40px -8px rgba(77, 140, 255, 0.35);
98
+ --shadow-card: 0 1px 0 rgba(251, 250, 246, 0.04),
99
+ 0 16px 40px -16px rgba(0, 0, 0, 0.6);
100
+ --shadow-lift: 0 24px 48px -16px rgba(0, 0, 0, 0.7);
101
+ }
102
+
103
+ *,
104
+ *::before,
105
+ *::after {
106
+ box-sizing: border-box;
107
+ }
108
+
109
+ html,
110
+ body {
111
+ margin: 0;
112
+ padding: 0;
113
+ }
114
+
115
+ body {
116
+ background: var(--bg-base);
117
+ color: var(--text-primary);
118
+ }
119
+
120
+ .cny-app {
121
+ font-family: var(--font-body);
122
+ font-size: var(--text-base);
123
+ line-height: 1.55;
124
+ color: var(--text-primary);
125
+ font-feature-settings: "ss01", "cv11";
126
+ -webkit-font-smoothing: antialiased;
127
+ -moz-osx-font-smoothing: grayscale;
128
+ text-rendering: optimizeLegibility;
129
+ }
130
+ .cny-app h1 {
131
+ font-family: var(--font-display);
132
+ font-size: var(--text-3xl);
133
+ font-weight: 400;
134
+ font-variation-settings: "opsz" 144, "SOFT" 20;
135
+ letter-spacing: var(--track-tight);
136
+ line-height: 1.02;
137
+ margin: 0 0 24px;
138
+ color: var(--text-primary);
139
+ }
140
+ .cny-app h2 {
141
+ font-family: var(--font-display);
142
+ font-size: var(--text-2xl);
143
+ font-weight: 400;
144
+ font-variation-settings: "opsz" 96, "SOFT" 40;
145
+ letter-spacing: var(--track-tight);
146
+ line-height: 1.12;
147
+ margin: 0 0 16px;
148
+ }
149
+ .cny-app h3 {
150
+ font-family: var(--font-body);
151
+ font-size: var(--text-xl);
152
+ font-weight: 500;
153
+ letter-spacing: -0.005em;
154
+ line-height: 1.25;
155
+ margin: 0 0 12px;
156
+ }
157
+ .cny-app p {
158
+ margin: 0 0 16px;
159
+ max-width: 68ch;
160
+ }
161
+ .cny-app a {
162
+ color: var(--text-accent);
163
+ text-decoration-line: underline;
164
+ text-decoration-color: var(--hairline-strong);
165
+ text-decoration-thickness: 1px;
166
+ text-underline-offset: 0.18em;
167
+ transition: text-decoration-color var(--transition-fast);
168
+ }
169
+ .cny-app a:hover {
170
+ text-decoration-color: currentColor;
171
+ }
172
+ .cny-app small,
173
+ .cny-app .cny-meta {
174
+ font-size: var(--text-xs);
175
+ color: var(--text-muted);
176
+ }
177
+ .cny-app code, .cny-app kbd, .cny-app pre, .cny-app samp {
178
+ font-family: var(--font-mono);
179
+ font-size: 0.92em;
180
+ }
181
+ .cny-app em, .cny-app i {
182
+ font-family: var(--font-display);
183
+ font-style: italic;
184
+ font-variation-settings: "opsz" 48, "SOFT" 80;
185
+ }
186
+ .cny-app .cny-tabular {
187
+ font-variant-numeric: tabular-nums slashed-zero;
188
+ }
189
+
190
+ .btn {
191
+ position: relative;
192
+ display: inline-flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ gap: 8px;
196
+ padding: 8px 20px;
197
+ min-height: 36px;
198
+ border: 0;
199
+ border-radius: var(--radius-md);
200
+ font-family: var(--font-body);
201
+ font-size: 0.875rem;
202
+ font-weight: 500;
203
+ letter-spacing: -0.005em;
204
+ line-height: 1.2;
205
+ cursor: pointer;
206
+ user-select: none;
207
+ transition: background var(--transition-base), color var(--transition-base), box-shadow var(--transition-base), transform var(--transition-base);
208
+ }
209
+ .btn:disabled {
210
+ opacity: 0.4;
211
+ cursor: not-allowed;
212
+ }
213
+ .btn:focus-visible {
214
+ outline: 2px solid var(--color-primary);
215
+ outline-offset: 2px;
216
+ }
217
+ .btn.solid {
218
+ background: linear-gradient(180deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);
219
+ color: var(--text-on-solid);
220
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 1px 2px rgba(0, 0, 0, 0.08);
221
+ }
222
+ .btn.solid:hover:not(:disabled) {
223
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), var(--shadow-ambient);
224
+ transform: translateY(-1px);
225
+ }
226
+ .btn.solid:active:not(:disabled) {
227
+ transform: translateY(0);
228
+ box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.2);
229
+ }
230
+ .btn.solid.danger {
231
+ --color-primary: var(--color-danger);
232
+ --color-primary-dark: #c2410c;
233
+ }
234
+ .btn.solid.warning {
235
+ --color-primary: var(--color-warning);
236
+ --color-primary-dark: #a16207;
237
+ }
238
+ .btn.solid.success {
239
+ --color-primary: var(--color-success);
240
+ --color-primary-dark: #3f6212;
241
+ }
242
+ .btn.solid.info {
243
+ --color-primary: var(--color-info);
244
+ --color-primary-dark: #475569;
245
+ }
246
+ .btn.ghost {
247
+ background: transparent;
248
+ color: var(--color-primary);
249
+ }
250
+ .btn.ghost:hover:not(:disabled) {
251
+ background: var(--bg-surface-low);
252
+ }
253
+ .btn.ghost:active:not(:disabled) {
254
+ background: var(--bg-surface-edge);
255
+ }
256
+ .btn.ghost.danger {
257
+ color: var(--color-danger);
258
+ }
259
+ .btn.ghost.warning {
260
+ color: var(--color-warning);
261
+ }
262
+ .btn.ghost.success {
263
+ color: var(--color-success);
264
+ }
265
+ .btn.ghost.info {
266
+ color: var(--color-info);
267
+ }
268
+ .btn.outline {
269
+ background: transparent;
270
+ color: var(--text-primary);
271
+ box-shadow: inset 0 0 0 1px var(--hairline-strong);
272
+ }
273
+ .btn.outline:hover:not(:disabled) {
274
+ background: var(--bg-surface-low);
275
+ box-shadow: inset 0 0 0 1px var(--text-primary);
276
+ }
277
+ .btn.link {
278
+ background: transparent;
279
+ color: var(--text-accent);
280
+ padding-left: 0;
281
+ padding-right: 0;
282
+ min-height: auto;
283
+ box-shadow: inset 0 -1px 0 0 var(--hairline-color);
284
+ border-radius: 0;
285
+ }
286
+ .btn.link:hover:not(:disabled) {
287
+ box-shadow: inset 0 -1px 0 0 currentColor;
288
+ }
289
+ .btn.sm {
290
+ padding: 4px 12px;
291
+ min-height: 28px;
292
+ font-size: 0.8125rem;
293
+ }
294
+ .btn.lg {
295
+ padding: 12px 24px;
296
+ min-height: 44px;
297
+ font-size: 0.9375rem;
298
+ }
299
+
300
+ .input {
301
+ display: block;
302
+ width: 100%;
303
+ padding: 12px 12px 8px;
304
+ background: transparent;
305
+ color: var(--text-primary);
306
+ border: 0;
307
+ border-bottom: 1px solid var(--hairline-strong);
308
+ border-radius: 0;
309
+ outline: none;
310
+ font-family: var(--font-body);
311
+ font-size: 0.9375rem;
312
+ line-height: 1.4;
313
+ transition: border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);
314
+ }
315
+ .input::placeholder {
316
+ color: var(--text-muted);
317
+ }
318
+ .input:hover:not(:disabled):not(:focus) {
319
+ border-bottom-color: var(--text-primary);
320
+ }
321
+ .input:focus {
322
+ border-bottom: 1px solid var(--color-primary);
323
+ background: linear-gradient(to top, color-mix(in oklch, var(--color-primary) 6%, transparent) 0%, transparent 40%);
324
+ box-shadow: 0 1px 0 0 var(--color-primary);
325
+ }
326
+ .input:disabled {
327
+ opacity: 0.5;
328
+ cursor: not-allowed;
329
+ }
330
+ .input.danger {
331
+ border-bottom-color: var(--color-danger);
332
+ }
333
+ .input.danger:focus {
334
+ border-bottom-color: var(--color-danger);
335
+ box-shadow: 0 1px 0 0 var(--color-danger);
336
+ background: linear-gradient(to top, color-mix(in oklch, var(--color-danger) 6%, transparent) 0%, transparent 40%);
337
+ }
338
+ .input.warning {
339
+ border-bottom-color: var(--color-warning);
340
+ }
341
+ .input.warning:focus {
342
+ border-bottom-color: var(--color-warning);
343
+ box-shadow: 0 1px 0 0 var(--color-warning);
344
+ }
345
+
346
+ .card {
347
+ position: relative;
348
+ background: var(--bg-surface-lowest);
349
+ border-radius: var(--radius-lg);
350
+ box-shadow: var(--shadow-card);
351
+ padding: 24px;
352
+ transition: box-shadow var(--transition-base), transform var(--transition-base);
353
+ }
354
+ .card.interactive {
355
+ cursor: pointer;
356
+ }
357
+ .card.interactive:hover {
358
+ box-shadow: var(--shadow-lift);
359
+ transform: translateY(-2px);
360
+ }
361
+ .card.danger, .card.warning, .card.success, .card.info {
362
+ overflow: hidden;
363
+ }
364
+ .card.danger::before, .card.warning::before, .card.success::before, .card.info::before {
365
+ content: "";
366
+ position: absolute;
367
+ left: 0;
368
+ top: 24px;
369
+ bottom: 24px;
370
+ width: 2px;
371
+ border-radius: 1px;
372
+ }
373
+ .card.danger::before {
374
+ background: var(--color-danger);
375
+ }
376
+ .card.warning::before {
377
+ background: var(--color-warning);
378
+ }
379
+ .card.success::before {
380
+ background: var(--color-success);
381
+ }
382
+ .card.info::before {
383
+ background: var(--color-info);
384
+ }
385
+ .card.flush {
386
+ background: transparent;
387
+ box-shadow: none;
388
+ border-top: 1px solid var(--hairline-color);
389
+ border-radius: 0;
390
+ padding: 20px 0;
391
+ }
392
+ .card-header {
393
+ display: flex;
394
+ align-items: baseline;
395
+ justify-content: space-between;
396
+ gap: 16px;
397
+ margin-bottom: 16px;
398
+ }
399
+ .card-footer {
400
+ margin-top: 20px;
401
+ padding-top: 16px;
402
+ border-top: 1px solid var(--hairline-color);
403
+ display: flex;
404
+ align-items: center;
405
+ justify-content: space-between;
406
+ gap: 12px;
407
+ }
408
+
409
+ .p-0 {
410
+ padding: 0;
411
+ }
412
+
413
+ .m-0 {
414
+ margin: 0;
415
+ }
416
+
417
+ .px-0 {
418
+ padding-left: 0;
419
+ padding-right: 0;
420
+ }
421
+
422
+ .py-0 {
423
+ padding-top: 0;
424
+ padding-bottom: 0;
425
+ }
426
+
427
+ .mx-0 {
428
+ margin-left: 0;
429
+ margin-right: 0;
430
+ }
431
+
432
+ .my-0 {
433
+ margin-top: 0;
434
+ margin-bottom: 0;
435
+ }
436
+
437
+ .gap-0 {
438
+ gap: 0;
439
+ }
440
+
441
+ .p-1 {
442
+ padding: 4px;
443
+ }
444
+
445
+ .m-1 {
446
+ margin: 4px;
447
+ }
448
+
449
+ .px-1 {
450
+ padding-left: 4px;
451
+ padding-right: 4px;
452
+ }
453
+
454
+ .py-1 {
455
+ padding-top: 4px;
456
+ padding-bottom: 4px;
457
+ }
458
+
459
+ .mx-1 {
460
+ margin-left: 4px;
461
+ margin-right: 4px;
462
+ }
463
+
464
+ .my-1 {
465
+ margin-top: 4px;
466
+ margin-bottom: 4px;
467
+ }
468
+
469
+ .gap-1 {
470
+ gap: 4px;
471
+ }
472
+
473
+ .p-2 {
474
+ padding: 8px;
475
+ }
476
+
477
+ .m-2 {
478
+ margin: 8px;
479
+ }
480
+
481
+ .px-2 {
482
+ padding-left: 8px;
483
+ padding-right: 8px;
484
+ }
485
+
486
+ .py-2 {
487
+ padding-top: 8px;
488
+ padding-bottom: 8px;
489
+ }
490
+
491
+ .mx-2 {
492
+ margin-left: 8px;
493
+ margin-right: 8px;
494
+ }
495
+
496
+ .my-2 {
497
+ margin-top: 8px;
498
+ margin-bottom: 8px;
499
+ }
500
+
501
+ .gap-2 {
502
+ gap: 8px;
503
+ }
504
+
505
+ .p-3 {
506
+ padding: 12px;
507
+ }
508
+
509
+ .m-3 {
510
+ margin: 12px;
511
+ }
512
+
513
+ .px-3 {
514
+ padding-left: 12px;
515
+ padding-right: 12px;
516
+ }
517
+
518
+ .py-3 {
519
+ padding-top: 12px;
520
+ padding-bottom: 12px;
521
+ }
522
+
523
+ .mx-3 {
524
+ margin-left: 12px;
525
+ margin-right: 12px;
526
+ }
527
+
528
+ .my-3 {
529
+ margin-top: 12px;
530
+ margin-bottom: 12px;
531
+ }
532
+
533
+ .gap-3 {
534
+ gap: 12px;
535
+ }
536
+
537
+ .p-4 {
538
+ padding: 16px;
539
+ }
540
+
541
+ .m-4 {
542
+ margin: 16px;
543
+ }
544
+
545
+ .px-4 {
546
+ padding-left: 16px;
547
+ padding-right: 16px;
548
+ }
549
+
550
+ .py-4 {
551
+ padding-top: 16px;
552
+ padding-bottom: 16px;
553
+ }
554
+
555
+ .mx-4 {
556
+ margin-left: 16px;
557
+ margin-right: 16px;
558
+ }
559
+
560
+ .my-4 {
561
+ margin-top: 16px;
562
+ margin-bottom: 16px;
563
+ }
564
+
565
+ .gap-4 {
566
+ gap: 16px;
567
+ }
568
+
569
+ .p-5 {
570
+ padding: 20px;
571
+ }
572
+
573
+ .m-5 {
574
+ margin: 20px;
575
+ }
576
+
577
+ .px-5 {
578
+ padding-left: 20px;
579
+ padding-right: 20px;
580
+ }
581
+
582
+ .py-5 {
583
+ padding-top: 20px;
584
+ padding-bottom: 20px;
585
+ }
586
+
587
+ .mx-5 {
588
+ margin-left: 20px;
589
+ margin-right: 20px;
590
+ }
591
+
592
+ .my-5 {
593
+ margin-top: 20px;
594
+ margin-bottom: 20px;
595
+ }
596
+
597
+ .gap-5 {
598
+ gap: 20px;
599
+ }
600
+
601
+ .p-6 {
602
+ padding: 24px;
603
+ }
604
+
605
+ .m-6 {
606
+ margin: 24px;
607
+ }
608
+
609
+ .px-6 {
610
+ padding-left: 24px;
611
+ padding-right: 24px;
612
+ }
613
+
614
+ .py-6 {
615
+ padding-top: 24px;
616
+ padding-bottom: 24px;
617
+ }
618
+
619
+ .mx-6 {
620
+ margin-left: 24px;
621
+ margin-right: 24px;
622
+ }
623
+
624
+ .my-6 {
625
+ margin-top: 24px;
626
+ margin-bottom: 24px;
627
+ }
628
+
629
+ .gap-6 {
630
+ gap: 24px;
631
+ }
632
+
633
+ .p-8 {
634
+ padding: 32px;
635
+ }
636
+
637
+ .m-8 {
638
+ margin: 32px;
639
+ }
640
+
641
+ .px-8 {
642
+ padding-left: 32px;
643
+ padding-right: 32px;
644
+ }
645
+
646
+ .py-8 {
647
+ padding-top: 32px;
648
+ padding-bottom: 32px;
649
+ }
650
+
651
+ .mx-8 {
652
+ margin-left: 32px;
653
+ margin-right: 32px;
654
+ }
655
+
656
+ .my-8 {
657
+ margin-top: 32px;
658
+ margin-bottom: 32px;
659
+ }
660
+
661
+ .gap-8 {
662
+ gap: 32px;
663
+ }
664
+
665
+ .p-10 {
666
+ padding: 40px;
667
+ }
668
+
669
+ .m-10 {
670
+ margin: 40px;
671
+ }
672
+
673
+ .px-10 {
674
+ padding-left: 40px;
675
+ padding-right: 40px;
676
+ }
677
+
678
+ .py-10 {
679
+ padding-top: 40px;
680
+ padding-bottom: 40px;
681
+ }
682
+
683
+ .mx-10 {
684
+ margin-left: 40px;
685
+ margin-right: 40px;
686
+ }
687
+
688
+ .my-10 {
689
+ margin-top: 40px;
690
+ margin-bottom: 40px;
691
+ }
692
+
693
+ .gap-10 {
694
+ gap: 40px;
695
+ }
696
+
697
+ .p-12 {
698
+ padding: 48px;
699
+ }
700
+
701
+ .m-12 {
702
+ margin: 48px;
703
+ }
704
+
705
+ .px-12 {
706
+ padding-left: 48px;
707
+ padding-right: 48px;
708
+ }
709
+
710
+ .py-12 {
711
+ padding-top: 48px;
712
+ padding-bottom: 48px;
713
+ }
714
+
715
+ .mx-12 {
716
+ margin-left: 48px;
717
+ margin-right: 48px;
718
+ }
719
+
720
+ .my-12 {
721
+ margin-top: 48px;
722
+ margin-bottom: 48px;
723
+ }
724
+
725
+ .gap-12 {
726
+ gap: 48px;
727
+ }
728
+
729
+ .p-16 {
730
+ padding: 64px;
731
+ }
732
+
733
+ .m-16 {
734
+ margin: 64px;
735
+ }
736
+
737
+ .px-16 {
738
+ padding-left: 64px;
739
+ padding-right: 64px;
740
+ }
741
+
742
+ .py-16 {
743
+ padding-top: 64px;
744
+ padding-bottom: 64px;
745
+ }
746
+
747
+ .mx-16 {
748
+ margin-left: 64px;
749
+ margin-right: 64px;
750
+ }
751
+
752
+ .my-16 {
753
+ margin-top: 64px;
754
+ margin-bottom: 64px;
755
+ }
756
+
757
+ .gap-16 {
758
+ gap: 64px;
759
+ }
760
+
761
+ .text-primary {
762
+ color: var(--text-primary);
763
+ }
764
+
765
+ .text-secondary {
766
+ color: var(--text-secondary);
767
+ }
768
+
769
+ .text-muted {
770
+ color: var(--text-muted);
771
+ }
772
+
773
+ .text-accent {
774
+ color: var(--text-accent);
775
+ }
776
+
777
+ .text-danger {
778
+ color: var(--color-danger);
779
+ }
780
+
781
+ .text-success {
782
+ color: var(--color-success);
783
+ }
784
+
785
+ .text-warning {
786
+ color: var(--color-warning);
787
+ }
788
+
789
+ .text-info {
790
+ color: var(--color-info);
791
+ }
792
+
793
+ .cny-label {
794
+ font-family: var(--font-mono);
795
+ font-size: 0.6875rem;
796
+ font-weight: 500;
797
+ letter-spacing: var(--track-wider);
798
+ text-transform: uppercase;
799
+ color: var(--text-muted);
800
+ }
801
+
802
+ .cny-mono {
803
+ font-family: var(--font-mono);
804
+ font-feature-settings: "tnum" 1, "zero" 1;
805
+ letter-spacing: -0.005em;
806
+ }
807
+
808
+ .cny-rule {
809
+ height: 1px;
810
+ width: 100%;
811
+ background: var(--hairline-color);
812
+ border: 0;
813
+ margin: 24px 0;
814
+ }
815
+
816
+ .cny-index {
817
+ font-family: var(--font-mono);
818
+ font-size: 0.75rem;
819
+ font-weight: 500;
820
+ letter-spacing: var(--track-wide);
821
+ color: var(--color-primary);
822
+ margin-right: 12px;
823
+ vertical-align: 0.08em;
824
+ }
825
+ .cny-index::after {
826
+ content: " —";
827
+ color: var(--text-muted);
828
+ margin-left: 0.25em;
829
+ }
830
+
831
+ .cny-grid-paper {
832
+ background-image: linear-gradient(var(--hairline-color) 1px, transparent 1px), linear-gradient(90deg, var(--hairline-color) 1px, transparent 1px);
833
+ background-size: 8px 8px, 8px 8px;
834
+ background-position: -1px -1px;
835
+ }
836
+
837
+ .cny-grain {
838
+ position: relative;
839
+ isolation: isolate;
840
+ }
841
+ .cny-grain::after {
842
+ content: "";
843
+ position: absolute;
844
+ inset: 0;
845
+ pointer-events: none;
846
+ z-index: -1;
847
+ opacity: 0.35;
848
+ mix-blend-mode: multiply;
849
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.05 0 0 0 0 0.05 0 0 0 0 0.08 0 0 0 0.25 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
850
+ }
851
+
852
+ .cny-divide-top {
853
+ box-shadow: 0 -1px 0 0 var(--hairline-color);
854
+ }
855
+
856
+ .cny-divide-bottom {
857
+ box-shadow: 0 1px 0 0 var(--hairline-color);
858
+ }
859
+
860
+ @keyframes cny-rise {
861
+ from {
862
+ opacity: 0;
863
+ transform: translateY(12px);
864
+ }
865
+ to {
866
+ opacity: 1;
867
+ transform: translateY(0);
868
+ }
869
+ }
870
+ .cny-rise {
871
+ animation: cny-rise 700ms var(--ease-precise) both;
872
+ }
873
+
874
+ .cny-stack {
875
+ display: flex;
876
+ flex-direction: column;
877
+ }
878
+
879
+ .cny-row {
880
+ display: flex;
881
+ flex-direction: row;
882
+ align-items: center;
883
+ }
884
+
885
+ .cny-wrap {
886
+ flex-wrap: wrap;
887
+ }