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