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