1@tailwind base;
2@tailwind components;
3@tailwind utilities;
4@layer base {
5 @font-face {
6 font-family: "InterVariable";
7 src: url("/static/fonts/InterVariable.woff2") format("woff2");
8 font-weight: normal;
9 font-style: normal;
10 font-display: swap;
11 }
12
13 @font-face {
14 font-family: "InterVariable";
15 src: url("/static/fonts/InterVariable-Italic.woff2") format("woff2");
16 font-weight: normal;
17 font-style: italic;
18 font-display: swap;
19 }
20
21 @font-face {
22 font-family: "InterVariable";
23 src: url("/static/fonts/InterDisplay-Bold.woff2") format("woff2");
24 font-weight: bold;
25 font-style: normal;
26 font-display: swap;
27 }
28
29 @font-face {
30 font-family: "InterVariable";
31 src: url("/static/fonts/InterDisplay-BoldItalic.woff2") format("woff2");
32 font-weight: bold;
33 font-style: italic;
34 font-display: swap;
35 }
36
37 @font-face {
38 font-family: "IBMPlexMono";
39 src: url("/static/fonts/IBMPlexMono-Regular.woff2") format("woff2");
40 font-weight: normal;
41 font-style: normal;
42 font-display: swap;
43 }
44
45 @font-face {
46 font-family: "IBMPlexMono";
47 src: url("/static/fonts/IBMPlexMono-Italic.woff2") format("woff2");
48 font-weight: normal;
49 font-style: italic;
50 font-display: swap;
51 }
52
53 @font-face {
54 font-family: "IBMPlexMono";
55 src: url("/static/fonts/IBMPlexMono-Bold.woff2") format("woff2");
56 font-weight: bold;
57 font-style: normal;
58 font-display: swap;
59 }
60
61 @font-face {
62 font-family: "IBMPlexMono";
63 src: url("/static/fonts/IBMPlexMono-BoldItalic.woff2") format("woff2");
64 font-weight: bold;
65 font-style: italic;
66 font-display: swap;
67 }
68
69 ::selection {
70 @apply bg-yellow-400 text-black bg-opacity-30 dark:bg-yellow-600 dark:bg-opacity-50 dark:text-white;
71 }
72
73 @layer base {
74 html {
75 font-size: 14px;
76 scrollbar-gutter: stable;
77 }
78 @supports (font-variation-settings: normal) {
79 html {
80 font-feature-settings:
81 "kern" 1,
82 "liga" 1,
83 "cv05" 1,
84 "tnum" 1;
85 }
86 }
87
88 a {
89 @apply no-underline text-black hover:underline hover:text-gray-800 dark:text-white dark:hover:text-gray-300;
90 }
91
92 label {
93 @apply block text-gray-900 text-sm font-bold py-2 uppercase dark:text-gray-100;
94 }
95 input {
96 @apply border border-gray-400 block rounded bg-gray-50 focus:ring-black p-3 dark:bg-gray-800 dark:border-gray-600 dark:text-white dark:focus:ring-gray-400;
97 }
98 textarea {
99 @apply border border-gray-400 block rounded bg-gray-50 focus:ring-black p-3 dark:bg-gray-800 dark:border-gray-600 dark:text-white dark:focus:ring-gray-400;
100 }
101 details summary::-webkit-details-marker {
102 display: none;
103 }
104
105 code {
106 @apply font-mono rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white;
107 }
108 }
109
110 @layer components {
111 .btn {
112 @apply relative z-10 inline-flex min-h-[30px] cursor-pointer items-center justify-center
113 bg-transparent px-2 pb-[0.2rem] text-sm text-gray-900
114 before:absolute before:inset-0 before:-z-10 before:block before:rounded
115 before:border before:border-gray-200 before:bg-white
116 before:shadow-[inset_0_-2px_0_0_rgba(0,0,0,0.1),0_1px_0_0_rgba(0,0,0,0.04)]
117 before:content-[''] before:transition-all before:duration-150 before:ease-in-out
118 hover:before:shadow-[inset_0_-2px_0_0_rgba(0,0,0,0.15),0_2px_1px_0_rgba(0,0,0,0.06)]
119 hover:before:bg-gray-50
120 dark:hover:before:bg-gray-700
121 active:before:shadow-[inset_0_2px_2px_0_rgba(0,0,0,0.1)]
122 focus:outline-none focus-visible:before:outline focus-visible:before:outline-2 focus-visible:before:outline-gray-400
123 disabled:cursor-not-allowed disabled:opacity-50
124 dark:text-gray-100 dark:before:bg-gray-800 dark:before:border-gray-700;
125 }
126
127 .btn-create {
128 @apply btn text-white
129 before:bg-green-600 hover:before:bg-green-700
130 dark:before:bg-green-700 dark:hover:before:bg-green-800
131 before:border before:border-green-700 hover:before:border-green-800
132 focus-visible:before:outline-green-500
133 disabled:before:bg-green-400 dark:disabled:before:bg-green-600;
134 }
135
136 .prose hr {
137 @apply my-2;
138 }
139
140 .prose li:has(input) {
141 @apply list-none;
142 }
143
144 .prose ul:has(input) {
145 @apply pl-2;
146 }
147
148 .prose .heading .anchor {
149 @apply no-underline mx-2 opacity-0;
150 }
151
152 .prose .heading:hover .anchor {
153 @apply opacity-70;
154 }
155
156 .prose .heading .anchor:hover {
157 @apply opacity-70;
158 }
159
160 .prose a.footnote-backref {
161 @apply no-underline;
162 }
163
164 .prose li {
165 @apply my-0 py-0;
166 }
167
168 .prose ul, .prose ol {
169 @apply my-1 py-0;
170 }
171
172 .prose img {
173 display: inline;
174 margin: 0;
175 vertical-align: middle;
176 }
177
178 .prose input {
179 @apply inline-block my-0 mb-1 mx-1;
180 }
181
182 .prose input[type="checkbox"] {
183 @apply disabled:accent-blue-500 checked:accent-blue-500 disabled:checked:accent-blue-500;
184 }
185 }
186 @layer utilities {
187 .error {
188 @apply py-1 text-red-400 dark:text-red-300;
189 }
190 .success {
191 @apply py-1 text-gray-900 dark:text-gray-100;
192 }
193 }
194}
195
196/* Background */
197.bg {
198 color: #4c4f69;
199 background-color: #eff1f5;
200}
201/* PreWrapper */
202.chroma {
203 color: #4c4f69;
204}
205/* Error */
206.chroma .err {
207 color: #d20f39;
208}
209/* LineLink */
210.chroma .lnlinks {
211 outline: none;
212 text-decoration: none;
213 color: inherit;
214}
215/* LineTableTD */
216.chroma .lntd {
217 vertical-align: top;
218 padding: 0;
219 margin: 0;
220 border: 0;
221}
222/* LineTable */
223.chroma .lntable {
224 border-spacing: 0;
225 padding: 0;
226 margin: 0;
227 border: 0;
228}
229/* LineHighlight */
230.chroma .hl {
231 @apply bg-amber-400/30 dark:bg-amber-500/20;
232}
233
234/* LineNumbersTable */
235.chroma .lnt {
236 white-space: pre;
237 -webkit-user-select: none;
238 user-select: none;
239 margin-right: 0.4em;
240 padding: 0 0.4em 0 0.4em;
241 color: #8c8fa1;
242}
243/* LineNumbers */
244.chroma .ln {
245 white-space: pre;
246 -webkit-user-select: none;
247 user-select: none;
248 margin-right: 0.4em;
249 padding: 0 0.4em 0 0.4em;
250 color: #8c8fa1;
251}
252/* Line */
253.chroma .line {
254 display: flex;
255}
256/* Keyword */
257.chroma .k {
258 color: #8839ef;
259}
260/* KeywordConstant */
261.chroma .kc {
262 color: #fe640b;
263}
264/* KeywordDeclaration */
265.chroma .kd {
266 color: #d20f39;
267}
268/* KeywordNamespace */
269.chroma .kn {
270 color: #179299;
271}
272/* KeywordPseudo */
273.chroma .kp {
274 color: #8839ef;
275}
276/* KeywordReserved */
277.chroma .kr {
278 color: #8839ef;
279}
280/* KeywordType */
281.chroma .kt {
282 color: #d20f39;
283}
284/* NameAttribute */
285.chroma .na {
286 color: #1e66f5;
287}
288/* NameBuiltin */
289.chroma .nb {
290 color: #04a5e5;
291}
292/* NameBuiltinPseudo */
293.chroma .bp {
294 color: #04a5e5;
295}
296/* NameClass */
297.chroma .nc {
298 color: #df8e1d;
299}
300/* NameConstant */
301.chroma .no {
302 color: #df8e1d;
303}
304/* NameDecorator */
305.chroma .nd {
306 color: #1e66f5;
307 font-weight: bold;
308}
309/* NameEntity */
310.chroma .ni {
311 color: #179299;
312}
313/* NameException */
314.chroma .ne {
315 color: #fe640b;
316}
317/* NameFunction */
318.chroma .nf {
319 color: #1e66f5;
320}
321/* NameFunctionMagic */
322.chroma .fm {
323 color: #1e66f5;
324}
325/* NameLabel */
326.chroma .nl {
327 color: #04a5e5;
328}
329/* NameNamespace */
330.chroma .nn {
331 color: #fe640b;
332}
333/* NameProperty */
334.chroma .py {
335 color: #fe640b;
336}
337/* NameTag */
338.chroma .nt {
339 color: #8839ef;
340}
341/* NameVariable */
342.chroma .nv {
343 color: #dc8a78;
344}
345/* NameVariableClass */
346.chroma .vc {
347 color: #dc8a78;
348}
349/* NameVariableGlobal */
350.chroma .vg {
351 color: #dc8a78;
352}
353/* NameVariableInstance */
354.chroma .vi {
355 color: #dc8a78;
356}
357/* NameVariableMagic */
358.chroma .vm {
359 color: #dc8a78;
360}
361/* LiteralString */
362.chroma .s {
363 color: #40a02b;
364}
365/* LiteralStringAffix */
366.chroma .sa {
367 color: #d20f39;
368}
369/* LiteralStringBacktick */
370.chroma .sb {
371 color: #40a02b;
372}
373/* LiteralStringChar */
374.chroma .sc {
375 color: #40a02b;
376}
377/* LiteralStringDelimiter */
378.chroma .dl {
379 color: #1e66f5;
380}
381/* LiteralStringDoc */
382.chroma .sd {
383 color: #9ca0b0;
384}
385/* LiteralStringDouble */
386.chroma .s2 {
387 color: #40a02b;
388}
389/* LiteralStringEscape */
390.chroma .se {
391 color: #1e66f5;
392}
393/* LiteralStringHeredoc */
394.chroma .sh {
395 color: #9ca0b0;
396}
397/* LiteralStringInterpol */
398.chroma .si {
399 color: #40a02b;
400}
401/* LiteralStringOther */
402.chroma .sx {
403 color: #40a02b;
404}
405/* LiteralStringRegex */
406.chroma .sr {
407 color: #179299;
408}
409/* LiteralStringSingle */
410.chroma .s1 {
411 color: #40a02b;
412}
413/* LiteralStringSymbol */
414.chroma .ss {
415 color: #40a02b;
416}
417/* LiteralNumber */
418.chroma .m {
419 color: #fe640b;
420}
421/* LiteralNumberBin */
422.chroma .mb {
423 color: #fe640b;
424}
425/* LiteralNumberFloat */
426.chroma .mf {
427 color: #fe640b;
428}
429/* LiteralNumberHex */
430.chroma .mh {
431 color: #fe640b;
432}
433/* LiteralNumberInteger */
434.chroma .mi {
435 color: #fe640b;
436}
437/* LiteralNumberIntegerLong */
438.chroma .il {
439 color: #fe640b;
440}
441/* LiteralNumberOct */
442.chroma .mo {
443 color: #fe640b;
444}
445/* Operator */
446.chroma .o {
447 color: #04a5e5;
448 font-weight: bold;
449}
450/* OperatorWord */
451.chroma .ow {
452 color: #04a5e5;
453 font-weight: bold;
454}
455/* Comment */
456.chroma .c {
457 color: #9ca0b0;
458 font-style: italic;
459}
460/* CommentHashbang */
461.chroma .ch {
462 color: #9ca0b0;
463 font-style: italic;
464}
465/* CommentMultiline */
466.chroma .cm {
467 color: #9ca0b0;
468 font-style: italic;
469}
470/* CommentSingle */
471.chroma .c1 {
472 color: #9ca0b0;
473 font-style: italic;
474}
475/* CommentSpecial */
476.chroma .cs {
477 color: #9ca0b0;
478 font-style: italic;
479}
480/* CommentPreproc */
481.chroma .cp {
482 color: #9ca0b0;
483 font-style: italic;
484}
485/* CommentPreprocFile */
486.chroma .cpf {
487 color: #9ca0b0;
488 font-weight: bold;
489 font-style: italic;
490}
491/* GenericDeleted */
492.chroma .gd {
493 color: #d20f39;
494 background-color: oklch(93.6% 0.032 17.717);
495}
496/* GenericEmph */
497.chroma .ge {
498 font-style: italic;
499}
500/* GenericError */
501.chroma .gr {
502 color: #d20f39;
503}
504/* GenericHeading */
505.chroma .gh {
506 color: #fe640b;
507 font-weight: bold;
508}
509/* GenericInserted */
510.chroma .gi {
511 color: #40a02b;
512 background-color: oklch(96.2% 0.044 156.743);
513}
514/* GenericStrong */
515.chroma .gs {
516 font-weight: bold;
517}
518/* GenericSubheading */
519.chroma .gu {
520 color: #fe640b;
521 font-weight: bold;
522}
523/* GenericTraceback */
524.chroma .gt {
525 color: #d20f39;
526}
527/* GenericUnderline */
528.chroma .gl {
529 text-decoration: underline;
530}
531
532@media (prefers-color-scheme: dark) {
533 /* Background */
534 .bg {
535 color: #cad3f5;
536 background-color: #24273a;
537 }
538 /* PreWrapper */
539 .chroma {
540 color: #cad3f5;
541 }
542 /* Error */
543 .chroma .err {
544 color: #ed8796;
545 }
546 /* LineLink */
547 .chroma .lnlinks {
548 outline: none;
549 text-decoration: none;
550 color: inherit;
551 }
552 /* LineTableTD */
553 .chroma .lntd {
554 vertical-align: top;
555 padding: 0;
556 margin: 0;
557 border: 0;
558 }
559 /* LineTable */
560 .chroma .lntable {
561 border-spacing: 0;
562 padding: 0;
563 margin: 0;
564 border: 0;
565 }
566 /* LineHighlight */
567 .chroma .hl {
568 background-color: #494d64;
569 }
570 /* LineNumbersTable */
571 .chroma .lnt {
572 white-space: pre;
573 -webkit-user-select: none;
574 user-select: none;
575 margin-right: 0.4em;
576 padding: 0 0.4em 0 0.4em;
577 color: #8087a2;
578 }
579 /* LineNumbers */
580 .chroma .ln {
581 white-space: pre;
582 -webkit-user-select: none;
583 user-select: none;
584 margin-right: 0.4em;
585 padding: 0 0.4em 0 0.4em;
586 color: #8087a2;
587 }
588 /* Line */
589 .chroma .line {
590 display: flex;
591 }
592 /* Keyword */
593 .chroma .k {
594 color: #c6a0f6;
595 }
596 /* KeywordConstant */
597 .chroma .kc {
598 color: #f5a97f;
599 }
600 /* KeywordDeclaration */
601 .chroma .kd {
602 color: #ed8796;
603 }
604 /* KeywordNamespace */
605 .chroma .kn {
606 color: #8bd5ca;
607 }
608 /* KeywordPseudo */
609 .chroma .kp {
610 color: #c6a0f6;
611 }
612 /* KeywordReserved */
613 .chroma .kr {
614 color: #c6a0f6;
615 }
616 /* KeywordType */
617 .chroma .kt {
618 color: #ed8796;
619 }
620 /* NameAttribute */
621 .chroma .na {
622 color: #8aadf4;
623 }
624 /* NameBuiltin */
625 .chroma .nb {
626 color: #91d7e3;
627 }
628 /* NameBuiltinPseudo */
629 .chroma .bp {
630 color: #91d7e3;
631 }
632 /* NameClass */
633 .chroma .nc {
634 color: #eed49f;
635 }
636 /* NameConstant */
637 .chroma .no {
638 color: #eed49f;
639 }
640 /* NameDecorator */
641 .chroma .nd {
642 color: #8aadf4;
643 font-weight: bold;
644 }
645 /* NameEntity */
646 .chroma .ni {
647 color: #8bd5ca;
648 }
649 /* NameException */
650 .chroma .ne {
651 color: #f5a97f;
652 }
653 /* NameFunction */
654 .chroma .nf {
655 color: #8aadf4;
656 }
657 /* NameFunctionMagic */
658 .chroma .fm {
659 color: #8aadf4;
660 }
661 /* NameLabel */
662 .chroma .nl {
663 color: #91d7e3;
664 }
665 /* NameNamespace */
666 .chroma .nn {
667 color: #f5a97f;
668 }
669 /* NameProperty */
670 .chroma .py {
671 color: #f5a97f;
672 }
673 /* NameTag */
674 .chroma .nt {
675 color: #c6a0f6;
676 }
677 /* NameVariable */
678 .chroma .nv {
679 color: #f4dbd6;
680 }
681 /* NameVariableClass */
682 .chroma .vc {
683 color: #f4dbd6;
684 }
685 /* NameVariableGlobal */
686 .chroma .vg {
687 color: #f4dbd6;
688 }
689 /* NameVariableInstance */
690 .chroma .vi {
691 color: #f4dbd6;
692 }
693 /* NameVariableMagic */
694 .chroma .vm {
695 color: #f4dbd6;
696 }
697 /* LiteralString */
698 .chroma .s {
699 color: #a6da95;
700 }
701 /* LiteralStringAffix */
702 .chroma .sa {
703 color: #ed8796;
704 }
705 /* LiteralStringBacktick */
706 .chroma .sb {
707 color: #a6da95;
708 }
709 /* LiteralStringChar */
710 .chroma .sc {
711 color: #a6da95;
712 }
713 /* LiteralStringDelimiter */
714 .chroma .dl {
715 color: #8aadf4;
716 }
717 /* LiteralStringDoc */
718 .chroma .sd {
719 color: #6e738d;
720 }
721 /* LiteralStringDouble */
722 .chroma .s2 {
723 color: #a6da95;
724 }
725 /* LiteralStringEscape */
726 .chroma .se {
727 color: #8aadf4;
728 }
729 /* LiteralStringHeredoc */
730 .chroma .sh {
731 color: #6e738d;
732 }
733 /* LiteralStringInterpol */
734 .chroma .si {
735 color: #a6da95;
736 }
737 /* LiteralStringOther */
738 .chroma .sx {
739 color: #a6da95;
740 }
741 /* LiteralStringRegex */
742 .chroma .sr {
743 color: #8bd5ca;
744 }
745 /* LiteralStringSingle */
746 .chroma .s1 {
747 color: #a6da95;
748 }
749 /* LiteralStringSymbol */
750 .chroma .ss {
751 color: #a6da95;
752 }
753 /* LiteralNumber */
754 .chroma .m {
755 color: #f5a97f;
756 }
757 /* LiteralNumberBin */
758 .chroma .mb {
759 color: #f5a97f;
760 }
761 /* LiteralNumberFloat */
762 .chroma .mf {
763 color: #f5a97f;
764 }
765 /* LiteralNumberHex */
766 .chroma .mh {
767 color: #f5a97f;
768 }
769 /* LiteralNumberInteger */
770 .chroma .mi {
771 color: #f5a97f;
772 }
773 /* LiteralNumberIntegerLong */
774 .chroma .il {
775 color: #f5a97f;
776 }
777 /* LiteralNumberOct */
778 .chroma .mo {
779 color: #f5a97f;
780 }
781 /* Operator */
782 .chroma .o {
783 color: #91d7e3;
784 font-weight: bold;
785 }
786 /* OperatorWord */
787 .chroma .ow {
788 color: #91d7e3;
789 font-weight: bold;
790 }
791 /* Comment */
792 .chroma .c {
793 color: #6e738d;
794 font-style: italic;
795 }
796 /* CommentHashbang */
797 .chroma .ch {
798 color: #6e738d;
799 font-style: italic;
800 }
801 /* CommentMultiline */
802 .chroma .cm {
803 color: #6e738d;
804 font-style: italic;
805 }
806 /* CommentSingle */
807 .chroma .c1 {
808 color: #6e738d;
809 font-style: italic;
810 }
811 /* CommentSpecial */
812 .chroma .cs {
813 color: #6e738d;
814 font-style: italic;
815 }
816 /* CommentPreproc */
817 .chroma .cp {
818 color: #6e738d;
819 font-style: italic;
820 }
821 /* CommentPreprocFile */
822 .chroma .cpf {
823 color: #6e738d;
824 font-weight: bold;
825 font-style: italic;
826 }
827 /* GenericDeleted */
828 .chroma .gd {
829 color: #ed8796;
830 background-color: oklch(44.4% 0.177 26.899 / 0.5);
831 }
832 /* GenericEmph */
833 .chroma .ge {
834 font-style: italic;
835 }
836 /* GenericError */
837 .chroma .gr {
838 color: #ed8796;
839 }
840 /* GenericHeading */
841 .chroma .gh {
842 color: #f5a97f;
843 font-weight: bold;
844 }
845 /* GenericInserted */
846 .chroma .gi {
847 color: #a6da95;
848 background-color: oklch(44.8% 0.119 151.328 / 0.5);
849 }
850 /* GenericStrong */
851 .chroma .gs {
852 font-weight: bold;
853 }
854 /* GenericSubheading */
855 .chroma .gu {
856 color: #f5a97f;
857 font-weight: bold;
858 }
859 /* GenericTraceback */
860 .chroma .gt {
861 color: #ed8796;
862 }
863 /* GenericUnderline */
864 .chroma .gl {
865 text-decoration: underline;
866 }
867}