offline-first, p2p synced, atproto enabled, feed reader
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

wip: got a shell sorta

+2256 -112
+1952 -12
package-lock.json
··· 22 22 "level": "^10.0.0", 23 23 "linkedom": "^0.18.12", 24 24 "nanoid": "^5.1.5", 25 + "postcss-preset-env": "^10.4.0", 25 26 "solid-js": "^1.9.5", 26 27 "solid-motionone": "^1.0.4", 27 28 "solid-transition-group": "^0.3.0", ··· 34 35 "zod": "^4.1.12" 35 36 }, 36 37 "devDependencies": { 38 + "@csstools/postcss-global-data": "^3.1.0", 37 39 "@eslint/compat": "^2.0.0", 38 40 "@eslint/css": "^0.14.1", 39 41 "@eslint/js": "^9.39.1", ··· 461 463 "node": ">=18" 462 464 } 463 465 }, 466 + "node_modules/@csstools/cascade-layer-name-parser": { 467 + "version": "2.0.5", 468 + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", 469 + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", 470 + "funding": [ 471 + { 472 + "type": "github", 473 + "url": "https://github.com/sponsors/csstools" 474 + }, 475 + { 476 + "type": "opencollective", 477 + "url": "https://opencollective.com/csstools" 478 + } 479 + ], 480 + "license": "MIT", 481 + "engines": { 482 + "node": ">=18" 483 + }, 484 + "peerDependencies": { 485 + "@csstools/css-parser-algorithms": "^3.0.5", 486 + "@csstools/css-tokenizer": "^3.0.4" 487 + } 488 + }, 464 489 "node_modules/@csstools/color-helpers": { 465 490 "version": "5.1.0", 466 491 "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", 467 492 "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", 468 - "dev": true, 469 493 "funding": [ 470 494 { 471 495 "type": "github", ··· 485 509 "version": "2.1.4", 486 510 "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", 487 511 "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", 488 - "dev": true, 489 512 "funding": [ 490 513 { 491 514 "type": "github", ··· 509 532 "version": "3.1.0", 510 533 "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", 511 534 "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", 512 - "dev": true, 513 535 "funding": [ 514 536 { 515 537 "type": "github", ··· 537 559 "version": "3.0.5", 538 560 "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", 539 561 "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", 540 - "dev": true, 541 562 "funding": [ 542 563 { 543 564 "type": "github", ··· 581 602 "version": "3.0.4", 582 603 "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", 583 604 "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", 584 - "dev": true, 585 605 "funding": [ 586 606 { 587 607 "type": "github", ··· 598 618 "node": ">=18" 599 619 } 600 620 }, 621 + "node_modules/@csstools/media-query-list-parser": { 622 + "version": "4.0.3", 623 + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", 624 + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", 625 + "funding": [ 626 + { 627 + "type": "github", 628 + "url": "https://github.com/sponsors/csstools" 629 + }, 630 + { 631 + "type": "opencollective", 632 + "url": "https://opencollective.com/csstools" 633 + } 634 + ], 635 + "license": "MIT", 636 + "engines": { 637 + "node": ">=18" 638 + }, 639 + "peerDependencies": { 640 + "@csstools/css-parser-algorithms": "^3.0.5", 641 + "@csstools/css-tokenizer": "^3.0.4" 642 + } 643 + }, 644 + "node_modules/@csstools/postcss-alpha-function": { 645 + "version": "1.0.1", 646 + "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", 647 + "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", 648 + "funding": [ 649 + { 650 + "type": "github", 651 + "url": "https://github.com/sponsors/csstools" 652 + }, 653 + { 654 + "type": "opencollective", 655 + "url": "https://opencollective.com/csstools" 656 + } 657 + ], 658 + "license": "MIT-0", 659 + "dependencies": { 660 + "@csstools/css-color-parser": "^3.1.0", 661 + "@csstools/css-parser-algorithms": "^3.0.5", 662 + "@csstools/css-tokenizer": "^3.0.4", 663 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 664 + "@csstools/utilities": "^2.0.0" 665 + }, 666 + "engines": { 667 + "node": ">=18" 668 + }, 669 + "peerDependencies": { 670 + "postcss": "^8.4" 671 + } 672 + }, 673 + "node_modules/@csstools/postcss-cascade-layers": { 674 + "version": "5.0.2", 675 + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", 676 + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", 677 + "funding": [ 678 + { 679 + "type": "github", 680 + "url": "https://github.com/sponsors/csstools" 681 + }, 682 + { 683 + "type": "opencollective", 684 + "url": "https://opencollective.com/csstools" 685 + } 686 + ], 687 + "license": "MIT-0", 688 + "dependencies": { 689 + "@csstools/selector-specificity": "^5.0.0", 690 + "postcss-selector-parser": "^7.0.0" 691 + }, 692 + "engines": { 693 + "node": ">=18" 694 + }, 695 + "peerDependencies": { 696 + "postcss": "^8.4" 697 + } 698 + }, 699 + "node_modules/@csstools/postcss-color-function": { 700 + "version": "4.0.12", 701 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", 702 + "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", 703 + "funding": [ 704 + { 705 + "type": "github", 706 + "url": "https://github.com/sponsors/csstools" 707 + }, 708 + { 709 + "type": "opencollective", 710 + "url": "https://opencollective.com/csstools" 711 + } 712 + ], 713 + "license": "MIT-0", 714 + "dependencies": { 715 + "@csstools/css-color-parser": "^3.1.0", 716 + "@csstools/css-parser-algorithms": "^3.0.5", 717 + "@csstools/css-tokenizer": "^3.0.4", 718 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 719 + "@csstools/utilities": "^2.0.0" 720 + }, 721 + "engines": { 722 + "node": ">=18" 723 + }, 724 + "peerDependencies": { 725 + "postcss": "^8.4" 726 + } 727 + }, 728 + "node_modules/@csstools/postcss-color-function-display-p3-linear": { 729 + "version": "1.0.1", 730 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", 731 + "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", 732 + "funding": [ 733 + { 734 + "type": "github", 735 + "url": "https://github.com/sponsors/csstools" 736 + }, 737 + { 738 + "type": "opencollective", 739 + "url": "https://opencollective.com/csstools" 740 + } 741 + ], 742 + "license": "MIT-0", 743 + "dependencies": { 744 + "@csstools/css-color-parser": "^3.1.0", 745 + "@csstools/css-parser-algorithms": "^3.0.5", 746 + "@csstools/css-tokenizer": "^3.0.4", 747 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 748 + "@csstools/utilities": "^2.0.0" 749 + }, 750 + "engines": { 751 + "node": ">=18" 752 + }, 753 + "peerDependencies": { 754 + "postcss": "^8.4" 755 + } 756 + }, 757 + "node_modules/@csstools/postcss-color-mix-function": { 758 + "version": "3.0.12", 759 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", 760 + "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", 761 + "funding": [ 762 + { 763 + "type": "github", 764 + "url": "https://github.com/sponsors/csstools" 765 + }, 766 + { 767 + "type": "opencollective", 768 + "url": "https://opencollective.com/csstools" 769 + } 770 + ], 771 + "license": "MIT-0", 772 + "dependencies": { 773 + "@csstools/css-color-parser": "^3.1.0", 774 + "@csstools/css-parser-algorithms": "^3.0.5", 775 + "@csstools/css-tokenizer": "^3.0.4", 776 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 777 + "@csstools/utilities": "^2.0.0" 778 + }, 779 + "engines": { 780 + "node": ">=18" 781 + }, 782 + "peerDependencies": { 783 + "postcss": "^8.4" 784 + } 785 + }, 786 + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { 787 + "version": "1.0.2", 788 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", 789 + "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", 790 + "funding": [ 791 + { 792 + "type": "github", 793 + "url": "https://github.com/sponsors/csstools" 794 + }, 795 + { 796 + "type": "opencollective", 797 + "url": "https://opencollective.com/csstools" 798 + } 799 + ], 800 + "license": "MIT-0", 801 + "dependencies": { 802 + "@csstools/css-color-parser": "^3.1.0", 803 + "@csstools/css-parser-algorithms": "^3.0.5", 804 + "@csstools/css-tokenizer": "^3.0.4", 805 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 806 + "@csstools/utilities": "^2.0.0" 807 + }, 808 + "engines": { 809 + "node": ">=18" 810 + }, 811 + "peerDependencies": { 812 + "postcss": "^8.4" 813 + } 814 + }, 815 + "node_modules/@csstools/postcss-content-alt-text": { 816 + "version": "2.0.8", 817 + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", 818 + "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", 819 + "funding": [ 820 + { 821 + "type": "github", 822 + "url": "https://github.com/sponsors/csstools" 823 + }, 824 + { 825 + "type": "opencollective", 826 + "url": "https://opencollective.com/csstools" 827 + } 828 + ], 829 + "license": "MIT-0", 830 + "dependencies": { 831 + "@csstools/css-parser-algorithms": "^3.0.5", 832 + "@csstools/css-tokenizer": "^3.0.4", 833 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 834 + "@csstools/utilities": "^2.0.0" 835 + }, 836 + "engines": { 837 + "node": ">=18" 838 + }, 839 + "peerDependencies": { 840 + "postcss": "^8.4" 841 + } 842 + }, 843 + "node_modules/@csstools/postcss-contrast-color-function": { 844 + "version": "2.0.12", 845 + "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", 846 + "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", 847 + "funding": [ 848 + { 849 + "type": "github", 850 + "url": "https://github.com/sponsors/csstools" 851 + }, 852 + { 853 + "type": "opencollective", 854 + "url": "https://opencollective.com/csstools" 855 + } 856 + ], 857 + "license": "MIT-0", 858 + "dependencies": { 859 + "@csstools/css-color-parser": "^3.1.0", 860 + "@csstools/css-parser-algorithms": "^3.0.5", 861 + "@csstools/css-tokenizer": "^3.0.4", 862 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 863 + "@csstools/utilities": "^2.0.0" 864 + }, 865 + "engines": { 866 + "node": ">=18" 867 + }, 868 + "peerDependencies": { 869 + "postcss": "^8.4" 870 + } 871 + }, 872 + "node_modules/@csstools/postcss-exponential-functions": { 873 + "version": "2.0.9", 874 + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", 875 + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", 876 + "funding": [ 877 + { 878 + "type": "github", 879 + "url": "https://github.com/sponsors/csstools" 880 + }, 881 + { 882 + "type": "opencollective", 883 + "url": "https://opencollective.com/csstools" 884 + } 885 + ], 886 + "license": "MIT-0", 887 + "dependencies": { 888 + "@csstools/css-calc": "^2.1.4", 889 + "@csstools/css-parser-algorithms": "^3.0.5", 890 + "@csstools/css-tokenizer": "^3.0.4" 891 + }, 892 + "engines": { 893 + "node": ">=18" 894 + }, 895 + "peerDependencies": { 896 + "postcss": "^8.4" 897 + } 898 + }, 899 + "node_modules/@csstools/postcss-font-format-keywords": { 900 + "version": "4.0.0", 901 + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", 902 + "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", 903 + "funding": [ 904 + { 905 + "type": "github", 906 + "url": "https://github.com/sponsors/csstools" 907 + }, 908 + { 909 + "type": "opencollective", 910 + "url": "https://opencollective.com/csstools" 911 + } 912 + ], 913 + "license": "MIT-0", 914 + "dependencies": { 915 + "@csstools/utilities": "^2.0.0", 916 + "postcss-value-parser": "^4.2.0" 917 + }, 918 + "engines": { 919 + "node": ">=18" 920 + }, 921 + "peerDependencies": { 922 + "postcss": "^8.4" 923 + } 924 + }, 925 + "node_modules/@csstools/postcss-gamut-mapping": { 926 + "version": "2.0.11", 927 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", 928 + "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", 929 + "funding": [ 930 + { 931 + "type": "github", 932 + "url": "https://github.com/sponsors/csstools" 933 + }, 934 + { 935 + "type": "opencollective", 936 + "url": "https://opencollective.com/csstools" 937 + } 938 + ], 939 + "license": "MIT-0", 940 + "dependencies": { 941 + "@csstools/css-color-parser": "^3.1.0", 942 + "@csstools/css-parser-algorithms": "^3.0.5", 943 + "@csstools/css-tokenizer": "^3.0.4" 944 + }, 945 + "engines": { 946 + "node": ">=18" 947 + }, 948 + "peerDependencies": { 949 + "postcss": "^8.4" 950 + } 951 + }, 952 + "node_modules/@csstools/postcss-global-data": { 953 + "version": "3.1.0", 954 + "resolved": "https://registry.npmjs.org/@csstools/postcss-global-data/-/postcss-global-data-3.1.0.tgz", 955 + "integrity": "sha512-qfS0bUxBukuyxEyxTTZG+px2xwAQPf7Qk6B7lFdjWnovb/O6h0t3sxrVY81nJLh7z0KvEMhjxTURNtEmOrADpQ==", 956 + "dev": true, 957 + "funding": [ 958 + { 959 + "type": "github", 960 + "url": "https://github.com/sponsors/csstools" 961 + }, 962 + { 963 + "type": "opencollective", 964 + "url": "https://opencollective.com/csstools" 965 + } 966 + ], 967 + "license": "MIT-0", 968 + "engines": { 969 + "node": ">=18" 970 + }, 971 + "peerDependencies": { 972 + "postcss": "^8.4" 973 + } 974 + }, 975 + "node_modules/@csstools/postcss-gradients-interpolation-method": { 976 + "version": "5.0.12", 977 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", 978 + "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", 979 + "funding": [ 980 + { 981 + "type": "github", 982 + "url": "https://github.com/sponsors/csstools" 983 + }, 984 + { 985 + "type": "opencollective", 986 + "url": "https://opencollective.com/csstools" 987 + } 988 + ], 989 + "license": "MIT-0", 990 + "dependencies": { 991 + "@csstools/css-color-parser": "^3.1.0", 992 + "@csstools/css-parser-algorithms": "^3.0.5", 993 + "@csstools/css-tokenizer": "^3.0.4", 994 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 995 + "@csstools/utilities": "^2.0.0" 996 + }, 997 + "engines": { 998 + "node": ">=18" 999 + }, 1000 + "peerDependencies": { 1001 + "postcss": "^8.4" 1002 + } 1003 + }, 1004 + "node_modules/@csstools/postcss-hwb-function": { 1005 + "version": "4.0.12", 1006 + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", 1007 + "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", 1008 + "funding": [ 1009 + { 1010 + "type": "github", 1011 + "url": "https://github.com/sponsors/csstools" 1012 + }, 1013 + { 1014 + "type": "opencollective", 1015 + "url": "https://opencollective.com/csstools" 1016 + } 1017 + ], 1018 + "license": "MIT-0", 1019 + "dependencies": { 1020 + "@csstools/css-color-parser": "^3.1.0", 1021 + "@csstools/css-parser-algorithms": "^3.0.5", 1022 + "@csstools/css-tokenizer": "^3.0.4", 1023 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 1024 + "@csstools/utilities": "^2.0.0" 1025 + }, 1026 + "engines": { 1027 + "node": ">=18" 1028 + }, 1029 + "peerDependencies": { 1030 + "postcss": "^8.4" 1031 + } 1032 + }, 1033 + "node_modules/@csstools/postcss-ic-unit": { 1034 + "version": "4.0.4", 1035 + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", 1036 + "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", 1037 + "funding": [ 1038 + { 1039 + "type": "github", 1040 + "url": "https://github.com/sponsors/csstools" 1041 + }, 1042 + { 1043 + "type": "opencollective", 1044 + "url": "https://opencollective.com/csstools" 1045 + } 1046 + ], 1047 + "license": "MIT-0", 1048 + "dependencies": { 1049 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 1050 + "@csstools/utilities": "^2.0.0", 1051 + "postcss-value-parser": "^4.2.0" 1052 + }, 1053 + "engines": { 1054 + "node": ">=18" 1055 + }, 1056 + "peerDependencies": { 1057 + "postcss": "^8.4" 1058 + } 1059 + }, 1060 + "node_modules/@csstools/postcss-initial": { 1061 + "version": "2.0.1", 1062 + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", 1063 + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", 1064 + "funding": [ 1065 + { 1066 + "type": "github", 1067 + "url": "https://github.com/sponsors/csstools" 1068 + }, 1069 + { 1070 + "type": "opencollective", 1071 + "url": "https://opencollective.com/csstools" 1072 + } 1073 + ], 1074 + "license": "MIT-0", 1075 + "engines": { 1076 + "node": ">=18" 1077 + }, 1078 + "peerDependencies": { 1079 + "postcss": "^8.4" 1080 + } 1081 + }, 1082 + "node_modules/@csstools/postcss-is-pseudo-class": { 1083 + "version": "5.0.3", 1084 + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", 1085 + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", 1086 + "funding": [ 1087 + { 1088 + "type": "github", 1089 + "url": "https://github.com/sponsors/csstools" 1090 + }, 1091 + { 1092 + "type": "opencollective", 1093 + "url": "https://opencollective.com/csstools" 1094 + } 1095 + ], 1096 + "license": "MIT-0", 1097 + "dependencies": { 1098 + "@csstools/selector-specificity": "^5.0.0", 1099 + "postcss-selector-parser": "^7.0.0" 1100 + }, 1101 + "engines": { 1102 + "node": ">=18" 1103 + }, 1104 + "peerDependencies": { 1105 + "postcss": "^8.4" 1106 + } 1107 + }, 1108 + "node_modules/@csstools/postcss-light-dark-function": { 1109 + "version": "2.0.11", 1110 + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", 1111 + "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", 1112 + "funding": [ 1113 + { 1114 + "type": "github", 1115 + "url": "https://github.com/sponsors/csstools" 1116 + }, 1117 + { 1118 + "type": "opencollective", 1119 + "url": "https://opencollective.com/csstools" 1120 + } 1121 + ], 1122 + "license": "MIT-0", 1123 + "dependencies": { 1124 + "@csstools/css-parser-algorithms": "^3.0.5", 1125 + "@csstools/css-tokenizer": "^3.0.4", 1126 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 1127 + "@csstools/utilities": "^2.0.0" 1128 + }, 1129 + "engines": { 1130 + "node": ">=18" 1131 + }, 1132 + "peerDependencies": { 1133 + "postcss": "^8.4" 1134 + } 1135 + }, 1136 + "node_modules/@csstools/postcss-logical-float-and-clear": { 1137 + "version": "3.0.0", 1138 + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", 1139 + "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", 1140 + "funding": [ 1141 + { 1142 + "type": "github", 1143 + "url": "https://github.com/sponsors/csstools" 1144 + }, 1145 + { 1146 + "type": "opencollective", 1147 + "url": "https://opencollective.com/csstools" 1148 + } 1149 + ], 1150 + "license": "MIT-0", 1151 + "engines": { 1152 + "node": ">=18" 1153 + }, 1154 + "peerDependencies": { 1155 + "postcss": "^8.4" 1156 + } 1157 + }, 1158 + "node_modules/@csstools/postcss-logical-overflow": { 1159 + "version": "2.0.0", 1160 + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", 1161 + "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", 1162 + "funding": [ 1163 + { 1164 + "type": "github", 1165 + "url": "https://github.com/sponsors/csstools" 1166 + }, 1167 + { 1168 + "type": "opencollective", 1169 + "url": "https://opencollective.com/csstools" 1170 + } 1171 + ], 1172 + "license": "MIT-0", 1173 + "engines": { 1174 + "node": ">=18" 1175 + }, 1176 + "peerDependencies": { 1177 + "postcss": "^8.4" 1178 + } 1179 + }, 1180 + "node_modules/@csstools/postcss-logical-overscroll-behavior": { 1181 + "version": "2.0.0", 1182 + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", 1183 + "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", 1184 + "funding": [ 1185 + { 1186 + "type": "github", 1187 + "url": "https://github.com/sponsors/csstools" 1188 + }, 1189 + { 1190 + "type": "opencollective", 1191 + "url": "https://opencollective.com/csstools" 1192 + } 1193 + ], 1194 + "license": "MIT-0", 1195 + "engines": { 1196 + "node": ">=18" 1197 + }, 1198 + "peerDependencies": { 1199 + "postcss": "^8.4" 1200 + } 1201 + }, 1202 + "node_modules/@csstools/postcss-logical-resize": { 1203 + "version": "3.0.0", 1204 + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", 1205 + "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", 1206 + "funding": [ 1207 + { 1208 + "type": "github", 1209 + "url": "https://github.com/sponsors/csstools" 1210 + }, 1211 + { 1212 + "type": "opencollective", 1213 + "url": "https://opencollective.com/csstools" 1214 + } 1215 + ], 1216 + "license": "MIT-0", 1217 + "dependencies": { 1218 + "postcss-value-parser": "^4.2.0" 1219 + }, 1220 + "engines": { 1221 + "node": ">=18" 1222 + }, 1223 + "peerDependencies": { 1224 + "postcss": "^8.4" 1225 + } 1226 + }, 1227 + "node_modules/@csstools/postcss-logical-viewport-units": { 1228 + "version": "3.0.4", 1229 + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", 1230 + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", 1231 + "funding": [ 1232 + { 1233 + "type": "github", 1234 + "url": "https://github.com/sponsors/csstools" 1235 + }, 1236 + { 1237 + "type": "opencollective", 1238 + "url": "https://opencollective.com/csstools" 1239 + } 1240 + ], 1241 + "license": "MIT-0", 1242 + "dependencies": { 1243 + "@csstools/css-tokenizer": "^3.0.4", 1244 + "@csstools/utilities": "^2.0.0" 1245 + }, 1246 + "engines": { 1247 + "node": ">=18" 1248 + }, 1249 + "peerDependencies": { 1250 + "postcss": "^8.4" 1251 + } 1252 + }, 1253 + "node_modules/@csstools/postcss-media-minmax": { 1254 + "version": "2.0.9", 1255 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", 1256 + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", 1257 + "funding": [ 1258 + { 1259 + "type": "github", 1260 + "url": "https://github.com/sponsors/csstools" 1261 + }, 1262 + { 1263 + "type": "opencollective", 1264 + "url": "https://opencollective.com/csstools" 1265 + } 1266 + ], 1267 + "license": "MIT", 1268 + "dependencies": { 1269 + "@csstools/css-calc": "^2.1.4", 1270 + "@csstools/css-parser-algorithms": "^3.0.5", 1271 + "@csstools/css-tokenizer": "^3.0.4", 1272 + "@csstools/media-query-list-parser": "^4.0.3" 1273 + }, 1274 + "engines": { 1275 + "node": ">=18" 1276 + }, 1277 + "peerDependencies": { 1278 + "postcss": "^8.4" 1279 + } 1280 + }, 1281 + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { 1282 + "version": "3.0.5", 1283 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", 1284 + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", 1285 + "funding": [ 1286 + { 1287 + "type": "github", 1288 + "url": "https://github.com/sponsors/csstools" 1289 + }, 1290 + { 1291 + "type": "opencollective", 1292 + "url": "https://opencollective.com/csstools" 1293 + } 1294 + ], 1295 + "license": "MIT-0", 1296 + "dependencies": { 1297 + "@csstools/css-parser-algorithms": "^3.0.5", 1298 + "@csstools/css-tokenizer": "^3.0.4", 1299 + "@csstools/media-query-list-parser": "^4.0.3" 1300 + }, 1301 + "engines": { 1302 + "node": ">=18" 1303 + }, 1304 + "peerDependencies": { 1305 + "postcss": "^8.4" 1306 + } 1307 + }, 1308 + "node_modules/@csstools/postcss-nested-calc": { 1309 + "version": "4.0.0", 1310 + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", 1311 + "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", 1312 + "funding": [ 1313 + { 1314 + "type": "github", 1315 + "url": "https://github.com/sponsors/csstools" 1316 + }, 1317 + { 1318 + "type": "opencollective", 1319 + "url": "https://opencollective.com/csstools" 1320 + } 1321 + ], 1322 + "license": "MIT-0", 1323 + "dependencies": { 1324 + "@csstools/utilities": "^2.0.0", 1325 + "postcss-value-parser": "^4.2.0" 1326 + }, 1327 + "engines": { 1328 + "node": ">=18" 1329 + }, 1330 + "peerDependencies": { 1331 + "postcss": "^8.4" 1332 + } 1333 + }, 1334 + "node_modules/@csstools/postcss-normalize-display-values": { 1335 + "version": "4.0.0", 1336 + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", 1337 + "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", 1338 + "funding": [ 1339 + { 1340 + "type": "github", 1341 + "url": "https://github.com/sponsors/csstools" 1342 + }, 1343 + { 1344 + "type": "opencollective", 1345 + "url": "https://opencollective.com/csstools" 1346 + } 1347 + ], 1348 + "license": "MIT-0", 1349 + "dependencies": { 1350 + "postcss-value-parser": "^4.2.0" 1351 + }, 1352 + "engines": { 1353 + "node": ">=18" 1354 + }, 1355 + "peerDependencies": { 1356 + "postcss": "^8.4" 1357 + } 1358 + }, 1359 + "node_modules/@csstools/postcss-oklab-function": { 1360 + "version": "4.0.12", 1361 + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", 1362 + "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", 1363 + "funding": [ 1364 + { 1365 + "type": "github", 1366 + "url": "https://github.com/sponsors/csstools" 1367 + }, 1368 + { 1369 + "type": "opencollective", 1370 + "url": "https://opencollective.com/csstools" 1371 + } 1372 + ], 1373 + "license": "MIT-0", 1374 + "dependencies": { 1375 + "@csstools/css-color-parser": "^3.1.0", 1376 + "@csstools/css-parser-algorithms": "^3.0.5", 1377 + "@csstools/css-tokenizer": "^3.0.4", 1378 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 1379 + "@csstools/utilities": "^2.0.0" 1380 + }, 1381 + "engines": { 1382 + "node": ">=18" 1383 + }, 1384 + "peerDependencies": { 1385 + "postcss": "^8.4" 1386 + } 1387 + }, 1388 + "node_modules/@csstools/postcss-progressive-custom-properties": { 1389 + "version": "4.2.1", 1390 + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", 1391 + "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", 1392 + "funding": [ 1393 + { 1394 + "type": "github", 1395 + "url": "https://github.com/sponsors/csstools" 1396 + }, 1397 + { 1398 + "type": "opencollective", 1399 + "url": "https://opencollective.com/csstools" 1400 + } 1401 + ], 1402 + "license": "MIT-0", 1403 + "dependencies": { 1404 + "postcss-value-parser": "^4.2.0" 1405 + }, 1406 + "engines": { 1407 + "node": ">=18" 1408 + }, 1409 + "peerDependencies": { 1410 + "postcss": "^8.4" 1411 + } 1412 + }, 1413 + "node_modules/@csstools/postcss-random-function": { 1414 + "version": "2.0.1", 1415 + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", 1416 + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", 1417 + "funding": [ 1418 + { 1419 + "type": "github", 1420 + "url": "https://github.com/sponsors/csstools" 1421 + }, 1422 + { 1423 + "type": "opencollective", 1424 + "url": "https://opencollective.com/csstools" 1425 + } 1426 + ], 1427 + "license": "MIT-0", 1428 + "dependencies": { 1429 + "@csstools/css-calc": "^2.1.4", 1430 + "@csstools/css-parser-algorithms": "^3.0.5", 1431 + "@csstools/css-tokenizer": "^3.0.4" 1432 + }, 1433 + "engines": { 1434 + "node": ">=18" 1435 + }, 1436 + "peerDependencies": { 1437 + "postcss": "^8.4" 1438 + } 1439 + }, 1440 + "node_modules/@csstools/postcss-relative-color-syntax": { 1441 + "version": "3.0.12", 1442 + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", 1443 + "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", 1444 + "funding": [ 1445 + { 1446 + "type": "github", 1447 + "url": "https://github.com/sponsors/csstools" 1448 + }, 1449 + { 1450 + "type": "opencollective", 1451 + "url": "https://opencollective.com/csstools" 1452 + } 1453 + ], 1454 + "license": "MIT-0", 1455 + "dependencies": { 1456 + "@csstools/css-color-parser": "^3.1.0", 1457 + "@csstools/css-parser-algorithms": "^3.0.5", 1458 + "@csstools/css-tokenizer": "^3.0.4", 1459 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 1460 + "@csstools/utilities": "^2.0.0" 1461 + }, 1462 + "engines": { 1463 + "node": ">=18" 1464 + }, 1465 + "peerDependencies": { 1466 + "postcss": "^8.4" 1467 + } 1468 + }, 1469 + "node_modules/@csstools/postcss-scope-pseudo-class": { 1470 + "version": "4.0.1", 1471 + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", 1472 + "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", 1473 + "funding": [ 1474 + { 1475 + "type": "github", 1476 + "url": "https://github.com/sponsors/csstools" 1477 + }, 1478 + { 1479 + "type": "opencollective", 1480 + "url": "https://opencollective.com/csstools" 1481 + } 1482 + ], 1483 + "license": "MIT-0", 1484 + "dependencies": { 1485 + "postcss-selector-parser": "^7.0.0" 1486 + }, 1487 + "engines": { 1488 + "node": ">=18" 1489 + }, 1490 + "peerDependencies": { 1491 + "postcss": "^8.4" 1492 + } 1493 + }, 1494 + "node_modules/@csstools/postcss-sign-functions": { 1495 + "version": "1.1.4", 1496 + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", 1497 + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", 1498 + "funding": [ 1499 + { 1500 + "type": "github", 1501 + "url": "https://github.com/sponsors/csstools" 1502 + }, 1503 + { 1504 + "type": "opencollective", 1505 + "url": "https://opencollective.com/csstools" 1506 + } 1507 + ], 1508 + "license": "MIT-0", 1509 + "dependencies": { 1510 + "@csstools/css-calc": "^2.1.4", 1511 + "@csstools/css-parser-algorithms": "^3.0.5", 1512 + "@csstools/css-tokenizer": "^3.0.4" 1513 + }, 1514 + "engines": { 1515 + "node": ">=18" 1516 + }, 1517 + "peerDependencies": { 1518 + "postcss": "^8.4" 1519 + } 1520 + }, 1521 + "node_modules/@csstools/postcss-stepped-value-functions": { 1522 + "version": "4.0.9", 1523 + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", 1524 + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", 1525 + "funding": [ 1526 + { 1527 + "type": "github", 1528 + "url": "https://github.com/sponsors/csstools" 1529 + }, 1530 + { 1531 + "type": "opencollective", 1532 + "url": "https://opencollective.com/csstools" 1533 + } 1534 + ], 1535 + "license": "MIT-0", 1536 + "dependencies": { 1537 + "@csstools/css-calc": "^2.1.4", 1538 + "@csstools/css-parser-algorithms": "^3.0.5", 1539 + "@csstools/css-tokenizer": "^3.0.4" 1540 + }, 1541 + "engines": { 1542 + "node": ">=18" 1543 + }, 1544 + "peerDependencies": { 1545 + "postcss": "^8.4" 1546 + } 1547 + }, 1548 + "node_modules/@csstools/postcss-text-decoration-shorthand": { 1549 + "version": "4.0.3", 1550 + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", 1551 + "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", 1552 + "funding": [ 1553 + { 1554 + "type": "github", 1555 + "url": "https://github.com/sponsors/csstools" 1556 + }, 1557 + { 1558 + "type": "opencollective", 1559 + "url": "https://opencollective.com/csstools" 1560 + } 1561 + ], 1562 + "license": "MIT-0", 1563 + "dependencies": { 1564 + "@csstools/color-helpers": "^5.1.0", 1565 + "postcss-value-parser": "^4.2.0" 1566 + }, 1567 + "engines": { 1568 + "node": ">=18" 1569 + }, 1570 + "peerDependencies": { 1571 + "postcss": "^8.4" 1572 + } 1573 + }, 1574 + "node_modules/@csstools/postcss-trigonometric-functions": { 1575 + "version": "4.0.9", 1576 + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", 1577 + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", 1578 + "funding": [ 1579 + { 1580 + "type": "github", 1581 + "url": "https://github.com/sponsors/csstools" 1582 + }, 1583 + { 1584 + "type": "opencollective", 1585 + "url": "https://opencollective.com/csstools" 1586 + } 1587 + ], 1588 + "license": "MIT-0", 1589 + "dependencies": { 1590 + "@csstools/css-calc": "^2.1.4", 1591 + "@csstools/css-parser-algorithms": "^3.0.5", 1592 + "@csstools/css-tokenizer": "^3.0.4" 1593 + }, 1594 + "engines": { 1595 + "node": ">=18" 1596 + }, 1597 + "peerDependencies": { 1598 + "postcss": "^8.4" 1599 + } 1600 + }, 1601 + "node_modules/@csstools/postcss-unset-value": { 1602 + "version": "4.0.0", 1603 + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", 1604 + "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", 1605 + "funding": [ 1606 + { 1607 + "type": "github", 1608 + "url": "https://github.com/sponsors/csstools" 1609 + }, 1610 + { 1611 + "type": "opencollective", 1612 + "url": "https://opencollective.com/csstools" 1613 + } 1614 + ], 1615 + "license": "MIT-0", 1616 + "engines": { 1617 + "node": ">=18" 1618 + }, 1619 + "peerDependencies": { 1620 + "postcss": "^8.4" 1621 + } 1622 + }, 1623 + "node_modules/@csstools/selector-resolve-nested": { 1624 + "version": "3.1.0", 1625 + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", 1626 + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", 1627 + "funding": [ 1628 + { 1629 + "type": "github", 1630 + "url": "https://github.com/sponsors/csstools" 1631 + }, 1632 + { 1633 + "type": "opencollective", 1634 + "url": "https://opencollective.com/csstools" 1635 + } 1636 + ], 1637 + "license": "MIT-0", 1638 + "engines": { 1639 + "node": ">=18" 1640 + }, 1641 + "peerDependencies": { 1642 + "postcss-selector-parser": "^7.0.0" 1643 + } 1644 + }, 1645 + "node_modules/@csstools/selector-specificity": { 1646 + "version": "5.0.0", 1647 + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", 1648 + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", 1649 + "funding": [ 1650 + { 1651 + "type": "github", 1652 + "url": "https://github.com/sponsors/csstools" 1653 + }, 1654 + { 1655 + "type": "opencollective", 1656 + "url": "https://opencollective.com/csstools" 1657 + } 1658 + ], 1659 + "license": "MIT-0", 1660 + "engines": { 1661 + "node": ">=18" 1662 + }, 1663 + "peerDependencies": { 1664 + "postcss-selector-parser": "^7.0.0" 1665 + } 1666 + }, 1667 + "node_modules/@csstools/utilities": { 1668 + "version": "2.0.0", 1669 + "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", 1670 + "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", 1671 + "funding": [ 1672 + { 1673 + "type": "github", 1674 + "url": "https://github.com/sponsors/csstools" 1675 + }, 1676 + { 1677 + "type": "opencollective", 1678 + "url": "https://opencollective.com/csstools" 1679 + } 1680 + ], 1681 + "license": "MIT-0", 1682 + "engines": { 1683 + "node": ">=18" 1684 + }, 1685 + "peerDependencies": { 1686 + "postcss": "^8.4" 1687 + } 1688 + }, 601 1689 "node_modules/@esbuild/aix-ppc64": { 602 1690 "version": "0.25.12", 603 1691 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", ··· 3816 4904 "dev": true, 3817 4905 "license": "MIT" 3818 4906 }, 4907 + "node_modules/autoprefixer": { 4908 + "version": "10.4.22", 4909 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", 4910 + "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", 4911 + "funding": [ 4912 + { 4913 + "type": "opencollective", 4914 + "url": "https://opencollective.com/postcss/" 4915 + }, 4916 + { 4917 + "type": "tidelift", 4918 + "url": "https://tidelift.com/funding/github/npm/autoprefixer" 4919 + }, 4920 + { 4921 + "type": "github", 4922 + "url": "https://github.com/sponsors/ai" 4923 + } 4924 + ], 4925 + "license": "MIT", 4926 + "dependencies": { 4927 + "browserslist": "^4.27.0", 4928 + "caniuse-lite": "^1.0.30001754", 4929 + "fraction.js": "^5.3.4", 4930 + "normalize-range": "^0.1.2", 4931 + "picocolors": "^1.1.1", 4932 + "postcss-value-parser": "^4.2.0" 4933 + }, 4934 + "bin": { 4935 + "autoprefixer": "bin/autoprefixer" 4936 + }, 4937 + "engines": { 4938 + "node": "^10 || ^12 || >=14" 4939 + }, 4940 + "peerDependencies": { 4941 + "postcss": "^8.1.0" 4942 + } 4943 + }, 3819 4944 "node_modules/available-typed-arrays": { 3820 4945 "version": "1.0.7", 3821 4946 "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", ··· 4076 5201 "version": "2.8.30", 4077 5202 "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", 4078 5203 "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", 4079 - "dev": true, 4080 5204 "license": "Apache-2.0", 4081 5205 "bin": { 4082 5206 "baseline-browser-mapping": "dist/cli.js" ··· 4558 5682 "version": "4.28.0", 4559 5683 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", 4560 5684 "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", 4561 - "dev": true, 4562 5685 "funding": [ 4563 5686 { 4564 5687 "type": "opencollective", ··· 4792 5915 "version": "1.0.30001756", 4793 5916 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", 4794 5917 "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", 4795 - "dev": true, 4796 5918 "funding": [ 4797 5919 { 4798 5920 "type": "opencollective", ··· 5306 6428 "url": "https://github.com/sponsors/ljharb" 5307 6429 } 5308 6430 }, 6431 + "node_modules/css-blank-pseudo": { 6432 + "version": "7.0.1", 6433 + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", 6434 + "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", 6435 + "funding": [ 6436 + { 6437 + "type": "github", 6438 + "url": "https://github.com/sponsors/csstools" 6439 + }, 6440 + { 6441 + "type": "opencollective", 6442 + "url": "https://opencollective.com/csstools" 6443 + } 6444 + ], 6445 + "license": "MIT-0", 6446 + "dependencies": { 6447 + "postcss-selector-parser": "^7.0.0" 6448 + }, 6449 + "engines": { 6450 + "node": ">=18" 6451 + }, 6452 + "peerDependencies": { 6453 + "postcss": "^8.4" 6454 + } 6455 + }, 6456 + "node_modules/css-has-pseudo": { 6457 + "version": "7.0.3", 6458 + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", 6459 + "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", 6460 + "funding": [ 6461 + { 6462 + "type": "github", 6463 + "url": "https://github.com/sponsors/csstools" 6464 + }, 6465 + { 6466 + "type": "opencollective", 6467 + "url": "https://opencollective.com/csstools" 6468 + } 6469 + ], 6470 + "license": "MIT-0", 6471 + "dependencies": { 6472 + "@csstools/selector-specificity": "^5.0.0", 6473 + "postcss-selector-parser": "^7.0.0", 6474 + "postcss-value-parser": "^4.2.0" 6475 + }, 6476 + "engines": { 6477 + "node": ">=18" 6478 + }, 6479 + "peerDependencies": { 6480 + "postcss": "^8.4" 6481 + } 6482 + }, 6483 + "node_modules/css-prefers-color-scheme": { 6484 + "version": "10.0.0", 6485 + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", 6486 + "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", 6487 + "funding": [ 6488 + { 6489 + "type": "github", 6490 + "url": "https://github.com/sponsors/csstools" 6491 + }, 6492 + { 6493 + "type": "opencollective", 6494 + "url": "https://opencollective.com/csstools" 6495 + } 6496 + ], 6497 + "license": "MIT-0", 6498 + "engines": { 6499 + "node": ">=18" 6500 + }, 6501 + "peerDependencies": { 6502 + "postcss": "^8.4" 6503 + } 6504 + }, 5309 6505 "node_modules/css-select": { 5310 6506 "version": "5.2.2", 5311 6507 "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", ··· 5362 6558 "dev": true, 5363 6559 "license": "MIT" 5364 6560 }, 6561 + "node_modules/cssdb": { 6562 + "version": "8.4.2", 6563 + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.4.2.tgz", 6564 + "integrity": "sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg==", 6565 + "funding": [ 6566 + { 6567 + "type": "opencollective", 6568 + "url": "https://opencollective.com/csstools" 6569 + }, 6570 + { 6571 + "type": "github", 6572 + "url": "https://github.com/sponsors/csstools" 6573 + } 6574 + ], 6575 + "license": "MIT-0" 6576 + }, 6577 + "node_modules/cssesc": { 6578 + "version": "3.0.0", 6579 + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 6580 + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 6581 + "license": "MIT", 6582 + "bin": { 6583 + "cssesc": "bin/cssesc" 6584 + }, 6585 + "engines": { 6586 + "node": ">=4" 6587 + } 6588 + }, 5365 6589 "node_modules/cssom": { 5366 6590 "version": "0.5.0", 5367 6591 "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", ··· 5773 6997 "version": "1.5.259", 5774 6998 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz", 5775 6999 "integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==", 5776 - "dev": true, 5777 7000 "license": "ISC" 5778 7001 }, 5779 7002 "node_modules/elliptic": { ··· 5962 7185 "version": "3.2.0", 5963 7186 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 5964 7187 "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 5965 - "dev": true, 5966 7188 "license": "MIT", 5967 7189 "engines": { 5968 7190 "node": ">=6" ··· 6850 8072 "license": "MIT", 6851 8073 "engines": { 6852 8074 "node": ">= 0.6" 8075 + } 8076 + }, 8077 + "node_modules/fraction.js": { 8078 + "version": "5.3.4", 8079 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", 8080 + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", 8081 + "license": "MIT", 8082 + "engines": { 8083 + "node": "*" 8084 + }, 8085 + "funding": { 8086 + "type": "github", 8087 + "url": "https://github.com/sponsors/rawify" 6853 8088 } 6854 8089 }, 6855 8090 "node_modules/freelist": { ··· 10489 11724 "version": "2.0.27", 10490 11725 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", 10491 11726 "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 10492 - "dev": true, 10493 11727 "license": "MIT" 10494 11728 }, 10495 11729 "node_modules/node-stdlib-browser": { ··· 10592 11826 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 10593 11827 "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 10594 11828 "dev": true, 11829 + "license": "MIT", 11830 + "engines": { 11831 + "node": ">=0.10.0" 11832 + } 11833 + }, 11834 + "node_modules/normalize-range": { 11835 + "version": "0.1.2", 11836 + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 11837 + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 10595 11838 "license": "MIT", 10596 11839 "engines": { 10597 11840 "node": ">=0.10.0" ··· 11096 12339 } 11097 12340 ], 11098 12341 "license": "MIT", 12342 + "peer": true, 11099 12343 "dependencies": { 11100 12344 "nanoid": "^3.3.11", 11101 12345 "picocolors": "^1.1.1", ··· 11105 12349 "node": "^10 || ^12 || >=14" 11106 12350 } 11107 12351 }, 12352 + "node_modules/postcss-attribute-case-insensitive": { 12353 + "version": "7.0.1", 12354 + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", 12355 + "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", 12356 + "funding": [ 12357 + { 12358 + "type": "github", 12359 + "url": "https://github.com/sponsors/csstools" 12360 + }, 12361 + { 12362 + "type": "opencollective", 12363 + "url": "https://opencollective.com/csstools" 12364 + } 12365 + ], 12366 + "license": "MIT", 12367 + "dependencies": { 12368 + "postcss-selector-parser": "^7.0.0" 12369 + }, 12370 + "engines": { 12371 + "node": ">=18" 12372 + }, 12373 + "peerDependencies": { 12374 + "postcss": "^8.4" 12375 + } 12376 + }, 12377 + "node_modules/postcss-clamp": { 12378 + "version": "4.1.0", 12379 + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", 12380 + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", 12381 + "license": "MIT", 12382 + "dependencies": { 12383 + "postcss-value-parser": "^4.2.0" 12384 + }, 12385 + "engines": { 12386 + "node": ">=7.6.0" 12387 + }, 12388 + "peerDependencies": { 12389 + "postcss": "^8.4.6" 12390 + } 12391 + }, 12392 + "node_modules/postcss-color-functional-notation": { 12393 + "version": "7.0.12", 12394 + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", 12395 + "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", 12396 + "funding": [ 12397 + { 12398 + "type": "github", 12399 + "url": "https://github.com/sponsors/csstools" 12400 + }, 12401 + { 12402 + "type": "opencollective", 12403 + "url": "https://opencollective.com/csstools" 12404 + } 12405 + ], 12406 + "license": "MIT-0", 12407 + "dependencies": { 12408 + "@csstools/css-color-parser": "^3.1.0", 12409 + "@csstools/css-parser-algorithms": "^3.0.5", 12410 + "@csstools/css-tokenizer": "^3.0.4", 12411 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 12412 + "@csstools/utilities": "^2.0.0" 12413 + }, 12414 + "engines": { 12415 + "node": ">=18" 12416 + }, 12417 + "peerDependencies": { 12418 + "postcss": "^8.4" 12419 + } 12420 + }, 12421 + "node_modules/postcss-color-hex-alpha": { 12422 + "version": "10.0.0", 12423 + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", 12424 + "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", 12425 + "funding": [ 12426 + { 12427 + "type": "github", 12428 + "url": "https://github.com/sponsors/csstools" 12429 + }, 12430 + { 12431 + "type": "opencollective", 12432 + "url": "https://opencollective.com/csstools" 12433 + } 12434 + ], 12435 + "license": "MIT", 12436 + "dependencies": { 12437 + "@csstools/utilities": "^2.0.0", 12438 + "postcss-value-parser": "^4.2.0" 12439 + }, 12440 + "engines": { 12441 + "node": ">=18" 12442 + }, 12443 + "peerDependencies": { 12444 + "postcss": "^8.4" 12445 + } 12446 + }, 12447 + "node_modules/postcss-color-rebeccapurple": { 12448 + "version": "10.0.0", 12449 + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", 12450 + "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", 12451 + "funding": [ 12452 + { 12453 + "type": "github", 12454 + "url": "https://github.com/sponsors/csstools" 12455 + }, 12456 + { 12457 + "type": "opencollective", 12458 + "url": "https://opencollective.com/csstools" 12459 + } 12460 + ], 12461 + "license": "MIT-0", 12462 + "dependencies": { 12463 + "@csstools/utilities": "^2.0.0", 12464 + "postcss-value-parser": "^4.2.0" 12465 + }, 12466 + "engines": { 12467 + "node": ">=18" 12468 + }, 12469 + "peerDependencies": { 12470 + "postcss": "^8.4" 12471 + } 12472 + }, 12473 + "node_modules/postcss-custom-media": { 12474 + "version": "11.0.6", 12475 + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", 12476 + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", 12477 + "funding": [ 12478 + { 12479 + "type": "github", 12480 + "url": "https://github.com/sponsors/csstools" 12481 + }, 12482 + { 12483 + "type": "opencollective", 12484 + "url": "https://opencollective.com/csstools" 12485 + } 12486 + ], 12487 + "license": "MIT", 12488 + "dependencies": { 12489 + "@csstools/cascade-layer-name-parser": "^2.0.5", 12490 + "@csstools/css-parser-algorithms": "^3.0.5", 12491 + "@csstools/css-tokenizer": "^3.0.4", 12492 + "@csstools/media-query-list-parser": "^4.0.3" 12493 + }, 12494 + "engines": { 12495 + "node": ">=18" 12496 + }, 12497 + "peerDependencies": { 12498 + "postcss": "^8.4" 12499 + } 12500 + }, 12501 + "node_modules/postcss-custom-properties": { 12502 + "version": "14.0.6", 12503 + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", 12504 + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", 12505 + "funding": [ 12506 + { 12507 + "type": "github", 12508 + "url": "https://github.com/sponsors/csstools" 12509 + }, 12510 + { 12511 + "type": "opencollective", 12512 + "url": "https://opencollective.com/csstools" 12513 + } 12514 + ], 12515 + "license": "MIT", 12516 + "dependencies": { 12517 + "@csstools/cascade-layer-name-parser": "^2.0.5", 12518 + "@csstools/css-parser-algorithms": "^3.0.5", 12519 + "@csstools/css-tokenizer": "^3.0.4", 12520 + "@csstools/utilities": "^2.0.0", 12521 + "postcss-value-parser": "^4.2.0" 12522 + }, 12523 + "engines": { 12524 + "node": ">=18" 12525 + }, 12526 + "peerDependencies": { 12527 + "postcss": "^8.4" 12528 + } 12529 + }, 12530 + "node_modules/postcss-custom-selectors": { 12531 + "version": "8.0.5", 12532 + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", 12533 + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", 12534 + "funding": [ 12535 + { 12536 + "type": "github", 12537 + "url": "https://github.com/sponsors/csstools" 12538 + }, 12539 + { 12540 + "type": "opencollective", 12541 + "url": "https://opencollective.com/csstools" 12542 + } 12543 + ], 12544 + "license": "MIT", 12545 + "dependencies": { 12546 + "@csstools/cascade-layer-name-parser": "^2.0.5", 12547 + "@csstools/css-parser-algorithms": "^3.0.5", 12548 + "@csstools/css-tokenizer": "^3.0.4", 12549 + "postcss-selector-parser": "^7.0.0" 12550 + }, 12551 + "engines": { 12552 + "node": ">=18" 12553 + }, 12554 + "peerDependencies": { 12555 + "postcss": "^8.4" 12556 + } 12557 + }, 12558 + "node_modules/postcss-dir-pseudo-class": { 12559 + "version": "9.0.1", 12560 + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", 12561 + "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", 12562 + "funding": [ 12563 + { 12564 + "type": "github", 12565 + "url": "https://github.com/sponsors/csstools" 12566 + }, 12567 + { 12568 + "type": "opencollective", 12569 + "url": "https://opencollective.com/csstools" 12570 + } 12571 + ], 12572 + "license": "MIT-0", 12573 + "dependencies": { 12574 + "postcss-selector-parser": "^7.0.0" 12575 + }, 12576 + "engines": { 12577 + "node": ">=18" 12578 + }, 12579 + "peerDependencies": { 12580 + "postcss": "^8.4" 12581 + } 12582 + }, 12583 + "node_modules/postcss-double-position-gradients": { 12584 + "version": "6.0.4", 12585 + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", 12586 + "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", 12587 + "funding": [ 12588 + { 12589 + "type": "github", 12590 + "url": "https://github.com/sponsors/csstools" 12591 + }, 12592 + { 12593 + "type": "opencollective", 12594 + "url": "https://opencollective.com/csstools" 12595 + } 12596 + ], 12597 + "license": "MIT-0", 12598 + "dependencies": { 12599 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 12600 + "@csstools/utilities": "^2.0.0", 12601 + "postcss-value-parser": "^4.2.0" 12602 + }, 12603 + "engines": { 12604 + "node": ">=18" 12605 + }, 12606 + "peerDependencies": { 12607 + "postcss": "^8.4" 12608 + } 12609 + }, 12610 + "node_modules/postcss-focus-visible": { 12611 + "version": "10.0.1", 12612 + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", 12613 + "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", 12614 + "funding": [ 12615 + { 12616 + "type": "github", 12617 + "url": "https://github.com/sponsors/csstools" 12618 + }, 12619 + { 12620 + "type": "opencollective", 12621 + "url": "https://opencollective.com/csstools" 12622 + } 12623 + ], 12624 + "license": "MIT-0", 12625 + "dependencies": { 12626 + "postcss-selector-parser": "^7.0.0" 12627 + }, 12628 + "engines": { 12629 + "node": ">=18" 12630 + }, 12631 + "peerDependencies": { 12632 + "postcss": "^8.4" 12633 + } 12634 + }, 12635 + "node_modules/postcss-focus-within": { 12636 + "version": "9.0.1", 12637 + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", 12638 + "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", 12639 + "funding": [ 12640 + { 12641 + "type": "github", 12642 + "url": "https://github.com/sponsors/csstools" 12643 + }, 12644 + { 12645 + "type": "opencollective", 12646 + "url": "https://opencollective.com/csstools" 12647 + } 12648 + ], 12649 + "license": "MIT-0", 12650 + "dependencies": { 12651 + "postcss-selector-parser": "^7.0.0" 12652 + }, 12653 + "engines": { 12654 + "node": ">=18" 12655 + }, 12656 + "peerDependencies": { 12657 + "postcss": "^8.4" 12658 + } 12659 + }, 12660 + "node_modules/postcss-font-variant": { 12661 + "version": "5.0.0", 12662 + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", 12663 + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", 12664 + "license": "MIT", 12665 + "peerDependencies": { 12666 + "postcss": "^8.1.0" 12667 + } 12668 + }, 12669 + "node_modules/postcss-gap-properties": { 12670 + "version": "6.0.0", 12671 + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", 12672 + "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", 12673 + "funding": [ 12674 + { 12675 + "type": "github", 12676 + "url": "https://github.com/sponsors/csstools" 12677 + }, 12678 + { 12679 + "type": "opencollective", 12680 + "url": "https://opencollective.com/csstools" 12681 + } 12682 + ], 12683 + "license": "MIT-0", 12684 + "engines": { 12685 + "node": ">=18" 12686 + }, 12687 + "peerDependencies": { 12688 + "postcss": "^8.4" 12689 + } 12690 + }, 12691 + "node_modules/postcss-image-set-function": { 12692 + "version": "7.0.0", 12693 + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", 12694 + "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", 12695 + "funding": [ 12696 + { 12697 + "type": "github", 12698 + "url": "https://github.com/sponsors/csstools" 12699 + }, 12700 + { 12701 + "type": "opencollective", 12702 + "url": "https://opencollective.com/csstools" 12703 + } 12704 + ], 12705 + "license": "MIT-0", 12706 + "dependencies": { 12707 + "@csstools/utilities": "^2.0.0", 12708 + "postcss-value-parser": "^4.2.0" 12709 + }, 12710 + "engines": { 12711 + "node": ">=18" 12712 + }, 12713 + "peerDependencies": { 12714 + "postcss": "^8.4" 12715 + } 12716 + }, 12717 + "node_modules/postcss-lab-function": { 12718 + "version": "7.0.12", 12719 + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", 12720 + "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", 12721 + "funding": [ 12722 + { 12723 + "type": "github", 12724 + "url": "https://github.com/sponsors/csstools" 12725 + }, 12726 + { 12727 + "type": "opencollective", 12728 + "url": "https://opencollective.com/csstools" 12729 + } 12730 + ], 12731 + "license": "MIT-0", 12732 + "dependencies": { 12733 + "@csstools/css-color-parser": "^3.1.0", 12734 + "@csstools/css-parser-algorithms": "^3.0.5", 12735 + "@csstools/css-tokenizer": "^3.0.4", 12736 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 12737 + "@csstools/utilities": "^2.0.0" 12738 + }, 12739 + "engines": { 12740 + "node": ">=18" 12741 + }, 12742 + "peerDependencies": { 12743 + "postcss": "^8.4" 12744 + } 12745 + }, 12746 + "node_modules/postcss-logical": { 12747 + "version": "8.1.0", 12748 + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", 12749 + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", 12750 + "funding": [ 12751 + { 12752 + "type": "github", 12753 + "url": "https://github.com/sponsors/csstools" 12754 + }, 12755 + { 12756 + "type": "opencollective", 12757 + "url": "https://opencollective.com/csstools" 12758 + } 12759 + ], 12760 + "license": "MIT-0", 12761 + "dependencies": { 12762 + "postcss-value-parser": "^4.2.0" 12763 + }, 12764 + "engines": { 12765 + "node": ">=18" 12766 + }, 12767 + "peerDependencies": { 12768 + "postcss": "^8.4" 12769 + } 12770 + }, 12771 + "node_modules/postcss-nesting": { 12772 + "version": "13.0.2", 12773 + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", 12774 + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", 12775 + "funding": [ 12776 + { 12777 + "type": "github", 12778 + "url": "https://github.com/sponsors/csstools" 12779 + }, 12780 + { 12781 + "type": "opencollective", 12782 + "url": "https://opencollective.com/csstools" 12783 + } 12784 + ], 12785 + "license": "MIT-0", 12786 + "dependencies": { 12787 + "@csstools/selector-resolve-nested": "^3.1.0", 12788 + "@csstools/selector-specificity": "^5.0.0", 12789 + "postcss-selector-parser": "^7.0.0" 12790 + }, 12791 + "engines": { 12792 + "node": ">=18" 12793 + }, 12794 + "peerDependencies": { 12795 + "postcss": "^8.4" 12796 + } 12797 + }, 12798 + "node_modules/postcss-opacity-percentage": { 12799 + "version": "3.0.0", 12800 + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", 12801 + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", 12802 + "funding": [ 12803 + { 12804 + "type": "kofi", 12805 + "url": "https://ko-fi.com/mrcgrtz" 12806 + }, 12807 + { 12808 + "type": "liberapay", 12809 + "url": "https://liberapay.com/mrcgrtz" 12810 + } 12811 + ], 12812 + "license": "MIT", 12813 + "engines": { 12814 + "node": ">=18" 12815 + }, 12816 + "peerDependencies": { 12817 + "postcss": "^8.4" 12818 + } 12819 + }, 12820 + "node_modules/postcss-overflow-shorthand": { 12821 + "version": "6.0.0", 12822 + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", 12823 + "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", 12824 + "funding": [ 12825 + { 12826 + "type": "github", 12827 + "url": "https://github.com/sponsors/csstools" 12828 + }, 12829 + { 12830 + "type": "opencollective", 12831 + "url": "https://opencollective.com/csstools" 12832 + } 12833 + ], 12834 + "license": "MIT-0", 12835 + "dependencies": { 12836 + "postcss-value-parser": "^4.2.0" 12837 + }, 12838 + "engines": { 12839 + "node": ">=18" 12840 + }, 12841 + "peerDependencies": { 12842 + "postcss": "^8.4" 12843 + } 12844 + }, 12845 + "node_modules/postcss-page-break": { 12846 + "version": "3.0.4", 12847 + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", 12848 + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", 12849 + "license": "MIT", 12850 + "peerDependencies": { 12851 + "postcss": "^8" 12852 + } 12853 + }, 12854 + "node_modules/postcss-place": { 12855 + "version": "10.0.0", 12856 + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", 12857 + "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", 12858 + "funding": [ 12859 + { 12860 + "type": "github", 12861 + "url": "https://github.com/sponsors/csstools" 12862 + }, 12863 + { 12864 + "type": "opencollective", 12865 + "url": "https://opencollective.com/csstools" 12866 + } 12867 + ], 12868 + "license": "MIT-0", 12869 + "dependencies": { 12870 + "postcss-value-parser": "^4.2.0" 12871 + }, 12872 + "engines": { 12873 + "node": ">=18" 12874 + }, 12875 + "peerDependencies": { 12876 + "postcss": "^8.4" 12877 + } 12878 + }, 12879 + "node_modules/postcss-preset-env": { 12880 + "version": "10.4.0", 12881 + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz", 12882 + "integrity": "sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==", 12883 + "funding": [ 12884 + { 12885 + "type": "github", 12886 + "url": "https://github.com/sponsors/csstools" 12887 + }, 12888 + { 12889 + "type": "opencollective", 12890 + "url": "https://opencollective.com/csstools" 12891 + } 12892 + ], 12893 + "license": "MIT-0", 12894 + "dependencies": { 12895 + "@csstools/postcss-alpha-function": "^1.0.1", 12896 + "@csstools/postcss-cascade-layers": "^5.0.2", 12897 + "@csstools/postcss-color-function": "^4.0.12", 12898 + "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", 12899 + "@csstools/postcss-color-mix-function": "^3.0.12", 12900 + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", 12901 + "@csstools/postcss-content-alt-text": "^2.0.8", 12902 + "@csstools/postcss-contrast-color-function": "^2.0.12", 12903 + "@csstools/postcss-exponential-functions": "^2.0.9", 12904 + "@csstools/postcss-font-format-keywords": "^4.0.0", 12905 + "@csstools/postcss-gamut-mapping": "^2.0.11", 12906 + "@csstools/postcss-gradients-interpolation-method": "^5.0.12", 12907 + "@csstools/postcss-hwb-function": "^4.0.12", 12908 + "@csstools/postcss-ic-unit": "^4.0.4", 12909 + "@csstools/postcss-initial": "^2.0.1", 12910 + "@csstools/postcss-is-pseudo-class": "^5.0.3", 12911 + "@csstools/postcss-light-dark-function": "^2.0.11", 12912 + "@csstools/postcss-logical-float-and-clear": "^3.0.0", 12913 + "@csstools/postcss-logical-overflow": "^2.0.0", 12914 + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", 12915 + "@csstools/postcss-logical-resize": "^3.0.0", 12916 + "@csstools/postcss-logical-viewport-units": "^3.0.4", 12917 + "@csstools/postcss-media-minmax": "^2.0.9", 12918 + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", 12919 + "@csstools/postcss-nested-calc": "^4.0.0", 12920 + "@csstools/postcss-normalize-display-values": "^4.0.0", 12921 + "@csstools/postcss-oklab-function": "^4.0.12", 12922 + "@csstools/postcss-progressive-custom-properties": "^4.2.1", 12923 + "@csstools/postcss-random-function": "^2.0.1", 12924 + "@csstools/postcss-relative-color-syntax": "^3.0.12", 12925 + "@csstools/postcss-scope-pseudo-class": "^4.0.1", 12926 + "@csstools/postcss-sign-functions": "^1.1.4", 12927 + "@csstools/postcss-stepped-value-functions": "^4.0.9", 12928 + "@csstools/postcss-text-decoration-shorthand": "^4.0.3", 12929 + "@csstools/postcss-trigonometric-functions": "^4.0.9", 12930 + "@csstools/postcss-unset-value": "^4.0.0", 12931 + "autoprefixer": "^10.4.21", 12932 + "browserslist": "^4.26.0", 12933 + "css-blank-pseudo": "^7.0.1", 12934 + "css-has-pseudo": "^7.0.3", 12935 + "css-prefers-color-scheme": "^10.0.0", 12936 + "cssdb": "^8.4.2", 12937 + "postcss-attribute-case-insensitive": "^7.0.1", 12938 + "postcss-clamp": "^4.1.0", 12939 + "postcss-color-functional-notation": "^7.0.12", 12940 + "postcss-color-hex-alpha": "^10.0.0", 12941 + "postcss-color-rebeccapurple": "^10.0.0", 12942 + "postcss-custom-media": "^11.0.6", 12943 + "postcss-custom-properties": "^14.0.6", 12944 + "postcss-custom-selectors": "^8.0.5", 12945 + "postcss-dir-pseudo-class": "^9.0.1", 12946 + "postcss-double-position-gradients": "^6.0.4", 12947 + "postcss-focus-visible": "^10.0.1", 12948 + "postcss-focus-within": "^9.0.1", 12949 + "postcss-font-variant": "^5.0.0", 12950 + "postcss-gap-properties": "^6.0.0", 12951 + "postcss-image-set-function": "^7.0.0", 12952 + "postcss-lab-function": "^7.0.12", 12953 + "postcss-logical": "^8.1.0", 12954 + "postcss-nesting": "^13.0.2", 12955 + "postcss-opacity-percentage": "^3.0.0", 12956 + "postcss-overflow-shorthand": "^6.0.0", 12957 + "postcss-page-break": "^3.0.4", 12958 + "postcss-place": "^10.0.0", 12959 + "postcss-pseudo-class-any-link": "^10.0.1", 12960 + "postcss-replace-overflow-wrap": "^4.0.0", 12961 + "postcss-selector-not": "^8.0.1" 12962 + }, 12963 + "engines": { 12964 + "node": ">=18" 12965 + }, 12966 + "peerDependencies": { 12967 + "postcss": "^8.4" 12968 + } 12969 + }, 12970 + "node_modules/postcss-pseudo-class-any-link": { 12971 + "version": "10.0.1", 12972 + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", 12973 + "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", 12974 + "funding": [ 12975 + { 12976 + "type": "github", 12977 + "url": "https://github.com/sponsors/csstools" 12978 + }, 12979 + { 12980 + "type": "opencollective", 12981 + "url": "https://opencollective.com/csstools" 12982 + } 12983 + ], 12984 + "license": "MIT-0", 12985 + "dependencies": { 12986 + "postcss-selector-parser": "^7.0.0" 12987 + }, 12988 + "engines": { 12989 + "node": ">=18" 12990 + }, 12991 + "peerDependencies": { 12992 + "postcss": "^8.4" 12993 + } 12994 + }, 12995 + "node_modules/postcss-replace-overflow-wrap": { 12996 + "version": "4.0.0", 12997 + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", 12998 + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", 12999 + "license": "MIT", 13000 + "peerDependencies": { 13001 + "postcss": "^8.0.3" 13002 + } 13003 + }, 13004 + "node_modules/postcss-selector-not": { 13005 + "version": "8.0.1", 13006 + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", 13007 + "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", 13008 + "funding": [ 13009 + { 13010 + "type": "github", 13011 + "url": "https://github.com/sponsors/csstools" 13012 + }, 13013 + { 13014 + "type": "opencollective", 13015 + "url": "https://opencollective.com/csstools" 13016 + } 13017 + ], 13018 + "license": "MIT", 13019 + "dependencies": { 13020 + "postcss-selector-parser": "^7.0.0" 13021 + }, 13022 + "engines": { 13023 + "node": ">=18" 13024 + }, 13025 + "peerDependencies": { 13026 + "postcss": "^8.4" 13027 + } 13028 + }, 13029 + "node_modules/postcss-selector-parser": { 13030 + "version": "7.1.1", 13031 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", 13032 + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", 13033 + "license": "MIT", 13034 + "peer": true, 13035 + "dependencies": { 13036 + "cssesc": "^3.0.0", 13037 + "util-deprecate": "^1.0.2" 13038 + }, 13039 + "engines": { 13040 + "node": ">=4" 13041 + } 13042 + }, 13043 + "node_modules/postcss-value-parser": { 13044 + "version": "4.2.0", 13045 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 13046 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 13047 + "license": "MIT" 13048 + }, 11108 13049 "node_modules/postcss/node_modules/nanoid": { 11109 13050 "version": "3.3.11", 11110 13051 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", ··· 13472 15413 "version": "1.1.4", 13473 15414 "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", 13474 15415 "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 13475 - "dev": true, 13476 15416 "funding": [ 13477 15417 { 13478 15418 "type": "opencollective",
+2
package.json
··· 36 36 "level": "^10.0.0", 37 37 "linkedom": "^0.18.12", 38 38 "nanoid": "^5.1.5", 39 + "postcss-preset-env": "^10.4.0", 39 40 "solid-js": "^1.9.5", 40 41 "solid-motionone": "^1.0.4", 41 42 "solid-transition-group": "^0.3.0", ··· 48 49 "zod": "^4.1.12" 49 50 }, 50 51 "devDependencies": { 52 + "@csstools/postcss-global-data": "^3.1.0", 51 53 "@eslint/compat": "^2.0.0", 52 54 "@eslint/css": "^0.14.1", 53 55 "@eslint/js": "^9.39.1",
+4 -4
src/app/components/breadcrumbs.tsx
··· 1 - import { useFeedlineDatabase } from "#app/context/feedline.jsx" 2 - import { A, useLocation } from "@solidjs/router" 3 - import { createResource, For, Show } from "solid-js" 1 + import {useFeedlineDatabase} from '#app/context/feedline.jsx' 2 + import {A, useLocation} from '@solidjs/router' 3 + import {For, Show, createResource} from 'solid-js' 4 4 5 5 export function Breadcrumbs() { 6 6 const location = useLocation() ··· 25 25 }) 26 26 27 27 const breadcrumbs = () => { 28 - const crumbs: Array<{label: string; href: string | null}> = [{label: 'feedline.at', href: '/'}] 28 + const crumbs: Array<{label: string; href: string | null}> = [{label: 'Home', href: '/'}] 29 29 30 30 const crumbparts = parts() 31 31 if (crumbparts) {
+3
src/app/comptime.css
··· 1 + @custom-media --phone (); 2 + @custom-media --tablet (min-width: 768px); 3 + @custom-media --desktop (min-width: 1100px);
+15 -4
src/app/index.css
··· 1 - @import './reset.css'; 1 + /* 2 + see comptime.css for postcss features that are globally scoped 3 + eg, @media-query, @custom-selector, etc. 4 + 5 + layers: 6 + @layer reset - the bottom most, get things niceish 7 + @layer system - design tokens and system stuff 8 + @layer components - reusable components, so we can layer customizations 9 + 10 + no layer = top-level 11 + */ 12 + 13 + @layer reset, system, component; 2 14 3 - html { 4 - font-size: 14px; 5 - } 15 + @import './styles/reset.css'; 16 + @import './styles/system.css';
+2 -1
src/app/index.html
··· 8 8 <title>feedline.at</title> 9 9 </head> 10 10 <body> 11 - <script type="module">import "solid-devtools"</script> 11 + <script type="module"> 12 + </script> 12 13 <script type="module" src="index.tsx"></script> 13 14 </body> 14 15 </html>
+5 -1
src/app/index.tsx
··· 7 7 import Dashboard from './pages/dashboard' 8 8 import EntryPage from './pages/entry' 9 9 import FeedPage from './pages/feed' 10 - import Layout from './layout' 10 + import Layout from './pages/layout' 11 11 12 12 export function App() { 13 13 const host = window.location.host ··· 25 25 </FeedlineContextProvider> 26 26 </RealmIdentityProvider> 27 27 ) 28 + } 29 + 30 + if (import.meta.env.DEV) { 31 + await import('solid-devtools') 28 32 } 29 33 30 34 render(() => <App />, document.body)
-3
src/app/layout.module.css
··· 1 - .root { 2 - display: flex; 3 - }
-21
src/app/layout.tsx
··· 1 - import { ParentProps } from 'solid-js' 2 - import { Breadcrumbs } from './components/breadcrumbs' 3 - 4 - import styles from './layout.module.css' 5 - 6 - export default function Layout(props: ParentProps) { 7 - return ( 8 - <div class={styles.root}> 9 - <header> 10 - <Breadcrumbs /> 11 - </header> 12 - <aside> 13 - </aside> 14 - <main> 15 - {props.children} 16 - </main> 17 - <footer> 18 - </footer> 19 - </div> 20 - ) 21 - }
+8 -6
src/app/pages/entry.tsx
··· 1 1 import {useRealmIdentity} from '#app/context/realm-identity.jsx' 2 2 import {useFeedlineDatabase} from '../context/feedline' 3 3 import {RouteSectionProps} from '@solidjs/router' 4 + import {liveQuery} from 'dexie' 4 5 import {For, Show, Suspense, createEffect, createMemo, createSignal, on, onCleanup} from 'solid-js' 5 6 6 7 import {EntryPatchAction} from '#feedline/schema/actions-entry.js' 7 - import { Entry } from '#feedline/schema/entry.js' 8 - import { liveQuery } from 'dexie' 8 + import {Entry} from '#feedline/schema/entry.js' 9 9 10 10 export default function EntryPage(props: RouteSectionProps) { 11 11 const identity = useRealmIdentity() ··· 13 13 14 14 const key = createMemo(() => { 15 15 const feedurl = props.params.feedurl && decodeURIComponent(props.params.feedurl) 16 - const guid = props.params.guid && decodeURIComponent(props.params.guid) 16 + const guid = props.params.guid && decodeURIComponent(props.params.guid) 17 17 18 - return (feedurl && guid) ? [feedurl, guid] : null 18 + return feedurl && guid ? [feedurl, guid] : null 19 19 }) 20 20 21 21 const [entry, setEntry] = createSignal<Entry>() ··· 25 25 26 26 const query = liveQuery(async () => await feedline.entries.where('[feedurl+guid]').equals(key).first()) 27 27 const subscription = query.subscribe((e) => setEntry(e)) 28 - onCleanup(() => subscription.unsubscribe()) 29 - }) 28 + onCleanup(() => { 29 + subscription.unsubscribe() 30 + }) 31 + }), 30 32 ) 31 33 32 34 const setTitle = () => {
+79
src/app/pages/layout.module.css
··· 1 + .shell { 2 + height: 100dvh; 3 + overflow: hidden; 4 + 5 + display: grid; 6 + grid-template-areas: 7 + 'header' 8 + 'content' 9 + 'peek'; 10 + grid-template-rows: 11 + calc(var(--shell-header-height) + var(--safe-top)) 12 + 1fr 13 + calc(var(--shell-drawer-peek) + var(--safe-bottom)); 14 + grid-template-columns: 1fr; 15 + 16 + > header { 17 + grid-area: header; 18 + background: #700; 19 + 20 + display: flex; 21 + column-gap: 1rem; 22 + flex-direction: row; 23 + 24 + padding-top: var(--safe-top); 25 + padding-left: var(--safe-left); 26 + padding-right: var(--safe-right); 27 + } 28 + 29 + > main { 30 + grid-area: content; 31 + background: #070; 32 + 33 + overflow: hidden; 34 + position: relative; 35 + } 36 + 37 + > aside { 38 + /* shouldn't even be rendered in small viewports */ 39 + display: none; 40 + } 41 + 42 + > footer { 43 + grid-area: peek; 44 + background: #007; 45 + 46 + padding-left: var(--safe-left); 47 + padding-right: var(--safe-right); 48 + padding-bottom: var(--safe-bottom); 49 + } 50 + 51 + @media (--tablet) { 52 + & { 53 + grid-template-areas: 54 + 'header header' 55 + 'sidebar content' 56 + 'sidebar peek'; 57 + 58 + grid-template-columns: 59 + var(--shell-sidebar-width) 60 + 1fr; 61 + } 62 + 63 + > header { 64 + display: grid; 65 + grid-template-rows: 1fr; 66 + grid-template-columns: subgrid; 67 + } 68 + 69 + > aside { 70 + grid-area: sidebar; 71 + background: #770; 72 + 73 + padding-left: var(--safe-left); 74 + overflow-y: auto; 75 + 76 + display: flex; 77 + } 78 + } 79 + }
+23
src/app/pages/layout.tsx
··· 1 + import {Breadcrumbs} from '#app/components/breadcrumbs' 2 + import {useBreakpoints} from '#app/primitives/breakpoints' 3 + import {ParentProps, Show} from 'solid-js' 4 + 5 + import styles from './layout.module.css' 6 + 7 + export default function Layout(props: ParentProps) { 8 + const bp = useBreakpoints() 9 + 10 + return ( 11 + <div class={styles['shell']}> 12 + <header> 13 + <h2>feedline.at</h2> 14 + <Breadcrumbs /> 15 + </header> 16 + <Show when={!bp.isPhone()}> 17 + <aside /> 18 + </Show> 19 + <main>{props.children}</main> 20 + <footer /> 21 + </div> 22 + ) 23 + }
+44
src/app/primitives/breakpoints.ts
··· 1 + import {createEffect, createSignal, onCleanup, onMount} from 'solid-js' 2 + import z from 'zod/v4' 3 + 4 + const breakpointSchema = z.enum(['init', 'phone', 'tablet', 'desktop']) 5 + export type Breakpoint = z.infer<typeof breakpointSchema> 6 + 7 + function breakpointLabel(): Breakpoint { 8 + const content = window 9 + .getComputedStyle(document.body, ':before') 10 + .getPropertyValue('content') 11 + .replace(/\"|\'/g, '') 12 + 13 + // will fail loudly if we change labels 14 + return breakpointSchema.parse(content) 15 + } 16 + 17 + export function useBreakpoints() { 18 + const [breakpoint, setBreakpoint] = createSignal('init') 19 + 20 + const abort = new AbortController() 21 + const check = () => { 22 + setBreakpoint(breakpointLabel()) 23 + } 24 + 25 + onMount(check) 26 + createEffect(() => { 27 + console.log('breakpoint is currently:', breakpoint()) 28 + }) 29 + 30 + const opts = {signal: abort.signal, passive: true} 31 + window.addEventListener('resize', check, opts) 32 + window.addEventListener('orientationchange', check, opts) 33 + 34 + onCleanup(() => { 35 + abort.abort('cleaning up') 36 + }) 37 + 38 + return { 39 + breakpoint, 40 + isPhone: () => breakpoint() === 'phone', 41 + isTablet: () => breakpoint() === 'tablet', 42 + isDesktop: () => breakpoint() === 'desktop', 43 + } 44 + }
+15 -6
src/app/primitives/database.ts
··· 6 6 7 7 type NotArray<T> = T extends unknown[] ? never : T 8 8 9 - export function makeSignalQuery<T>(query: () => NotArray<T> | Promise<NotArray<T>>, options?: ReconcileOptions): Accessor<T | undefined> { 9 + export function makeSignalQuery<T>( 10 + query: () => NotArray<T> | Promise<NotArray<T>>, 11 + options?: ReconcileOptions, 12 + ): Accessor<T | undefined> { 10 13 const [value, setValue] = createSignal<T>() 11 14 12 15 createEffect( 13 16 on(query, () => { 14 17 const unsub = liveQuery(query).subscribe((v) => setValue(reconcile(v, options))) 15 - onCleanup(() => unsub.unsubscribe()) 16 - }) 18 + onCleanup(() => { 19 + unsub.unsubscribe() 20 + }) 21 + }), 17 22 ) 18 23 19 24 return value ··· 24 29 25 30 createEffect( 26 31 on(query, () => { 27 - const unsub = liveQuery(query).subscribe((v) => setStore(reconcile(v, options))) 28 - onCleanup(() => unsub.unsubscribe()) 29 - }) 32 + const unsub = liveQuery(query).subscribe((v) => { 33 + setStore(reconcile(v, options)) 34 + }) 35 + onCleanup(() => { 36 + unsub.unsubscribe() 37 + }) 38 + }), 30 39 ) 31 40 32 41 return store
+12 -21
src/app/reset.css src/app/styles/reset.css
··· 1 - /* https://frontendmasters.com/blog/the-coyier-css-starter/ */ 1 + /* 2 + https://frontendmasters.com/blog/the-coyier-css-starter/ 3 + 4 + custom: 5 + - body, removed padding 6 + - default font size = 14px 7 + */ 2 8 3 9 @layer reset { 4 10 html { ··· 13 19 14 20 body { 15 21 margin: 0; 16 - padding: 2rem; 17 - @media (width < 500px) { 18 - padding: 1rem; 19 - } 22 + padding: 0; 20 23 } 21 24 22 25 *, ··· 115 118 label { 116 119 display: block; 117 120 } 118 - input:not( 119 - :where( 120 - [type="submit"], 121 - [type="checkbox"], 122 - [type="radio"], 123 - [type="button"], 124 - [type="reset"] 125 - ) 126 - ) { 121 + input:not(:where([type='submit'], [type='checkbox'], [type='radio'], [type='button'], [type='reset'])) { 127 122 inline-size: 100%; 128 123 } 129 124 button, 130 - input:where( 131 - [type="submit"], 132 - [type="reset"], 133 - [type="button"] 134 - ) { 125 + input:where([type='submit'], [type='reset'], [type='button']) { 135 126 background: CanvasText; 136 127 color: Canvas; 137 128 border: 1px solid transparent; ··· 160 151 fill: currentColor; 161 152 } 162 153 163 - [aria-disabled="true" i], 154 + [aria-disabled='true' i], 164 155 [disabled] { 165 156 cursor: not-allowed; 166 157 } ··· 199 190 padding: 0.5rem; 200 191 } 201 192 } 202 - [role="region"][aria-labelledby][tabindex] { 193 + [role='region'][aria-labelledby][tabindex] { 203 194 overflow: auto; 204 195 } 205 196 caption {
+35
src/app/styles/system.css
··· 1 + @layer system { 2 + :root { 3 + --shell-header-height: 56px; 4 + --shell-sidebar-width: 280px; 5 + --shell-drawer-peek: 64px; 6 + 7 + --safe-top: env(safe-area-inset-top, 0px); 8 + --safe-bottom: env(safe-area-inset-bottom, 0px); 9 + --safe-left: env(safe-area-inset-left, 0px); 10 + --safe-right: env(safe-area-inset-right, 0px); 11 + } 12 + 13 + html { 14 + font-size: 14px; /* default */ 15 + } 16 + 17 + /* put content on the page that js can use to detect breakpoints */ 18 + 19 + body:before { 20 + content: 'phone'; 21 + display: none; 22 + } 23 + 24 + @media (--tablet) { 25 + body:before { 26 + content: 'tablet'; 27 + } 28 + } 29 + 30 + @media (--desktop) { 31 + body:before { 32 + content: 'desktop'; 33 + } 34 + } 35 + }
+12 -8
src/feedline/client/feed-fetcher.ts
··· 1 - import {IndexableType, liveQuery, Subscription} from 'dexie' 1 + import {IndexableType, Subscription, liveQuery} from 'dexie' 2 2 import {parseFeed as parseFeedsmith} from 'feedsmith' 3 3 import {Atom, Rss} from 'feedsmith/types' 4 4 ··· 41 41 this.#owner = identid 42 42 this.#apihost = apihost 43 43 44 - const query = liveQuery(async () => await this.#db.feeds.where('subscription.status').equals('pending').primaryKeys()) 44 + const query = liveQuery( 45 + async () => await this.#db.feeds.where('subscription.status').equals('pending').primaryKeys(), 46 + ) 45 47 this.#subscription = query.subscribe((urls) => { 46 48 console.log('pendingFeeds', urls) 47 49 48 50 const feeds = this.#db.feeds.where('url').anyOf(urls) 49 - this.#db.withLock('feeds', feeds, this.#clock, this.#owner, this.#processLocked).catch((exc: unknown) => { 50 - if (this.#abort.signal.aborted) return 51 + this.#db 52 + .withLock('feeds', feeds, this.#clock, this.#owner, this.#processLocked) 53 + .catch((exc: unknown) => { 54 + if (this.#abort.signal.aborted) return 51 55 52 - const error = normalizeError(exc) 53 - console.error('unexpected error out of refresh loop', error.name, error.message) 54 - this.dispatchCustomEvent('error', error) 55 - }) 56 + const error = normalizeError(exc) 57 + console.error('unexpected error out of refresh loop', error.name, error.message) 58 + this.dispatchCustomEvent('error', error) 59 + }) 56 60 }) 57 61 } 58 62
+3 -2
src/feedline/main.ts
··· 7 7 8 8 import {driveSocket} from '#realm/server/driver' 9 9 import {closeRealms, listRealms} from '#realm/server/storage' 10 - import { corsProxy } from './api/cors-proxy' 11 - import { readabilityProxy } from './api/reader-proxy' 10 + 11 + import {corsProxy} from './api/cors-proxy' 12 + import {readabilityProxy} from './api/reader-proxy' 12 13 13 14 const __filename = fileURLToPath(import.meta.url) 14 15 const __dirname = path.dirname(__filename)
+21 -17
src/lib/client/webrtc.ts
··· 4 4 import {controllerWithSignals, timeoutAbort} from '#lib/async/aborts' 5 5 import {BlockingQueue} from '#lib/async/blocking-queue' 6 6 import {Fence} from '#lib/async/fence' 7 + import {sleep} from '#lib/async/sleep.js' 7 8 import {normalizeError} from '#lib/errors' 8 9 import {TypedEventTarget} from '#lib/events' 9 - import { sleep } from '#lib/async/sleep.js' 10 10 11 11 export const rtcSessionDescriptionSchema = z.object({ 12 12 sdp: z.string().optional(), ··· 53 53 data: CustomEvent<string> 54 54 } 55 55 56 - type DataChunk = { buffer: Uint8Array<ArrayBuffer>, compressed: boolean } 56 + type DataChunk = {buffer: Uint8Array<ArrayBuffer>; compressed: boolean} 57 57 58 58 const BUFFER_LOWWATER = 512 * 1024 // ~512KB 59 59 ··· 79 79 #chan: RTCDataChannel | null = null 80 80 #queue = new BlockingQueue<DataChannelSendable>() 81 81 82 - #chunkIncoming: (DataChunk & { offset: number }) | null = null 82 + #chunkIncoming: (DataChunk & {offset: number}) | null = null 83 83 #chunkBuffer = new BlockingQueue<DataChunk>() 84 84 85 85 constructor(initiator: boolean, config?: RTCConfiguration, signal?: AbortSignal) { ··· 203 203 #setupDataChannel() { 204 204 if (!this.#chan) return 205 205 206 - this.#chan.binaryType = "arraybuffer" 206 + this.#chan.binaryType = 'arraybuffer' 207 207 208 208 const opts = {signal: this.#abort.signal} 209 209 this.#chan.addEventListener('open', () => this.dispatchCustomEvent('connect'), opts) 210 210 this.#chan.addEventListener('close', () => this.dispatchCustomEvent('close'), opts) 211 211 this.#chan.addEventListener('error', (e) => this.dispatchCustomEvent('error', normalizeError(e)), opts) 212 - this.#chan.addEventListener('message', (e: MessageEvent<ArrayBuffer>) => this.#incomingChunk(e.data), opts) 212 + this.#chan.addEventListener( 213 + 'message', 214 + (e: MessageEvent<ArrayBuffer>) => { 215 + this.#incomingChunk(e.data) 216 + }, 217 + opts, 218 + ) 213 219 214 220 // drain loop blocks on lowwater, which it handles internally 215 221 void this.#drainLoop(this.#chan).catch((exc: unknown) => { ··· 316 322 let data: DataChannelSendable 317 323 send: while ((data = await this.#queue.dequeue(this.#abort.signal))) { 318 324 let index = 0 319 - const chunks = this.#chunkMessage(data as string) 325 + const chunks = this.#chunkMessage(data) 320 326 for await (const chunk of chunks) { 321 327 await lowwater.enter(this.#abort.signal) // wait for peer buffer capacity 322 328 console.log('sending chunk', index++) ··· 356 362 357 363 // maybe compress 358 364 if (encoded.length > COMPRESSION_THRESHOLD) { 359 - const stream = new Blob([encoded]).stream().pipeThrough(new CompressionStream("gzip")) 365 + const stream = new Blob([encoded]).stream().pipeThrough(new CompressionStream('gzip')) 360 366 const compressed = new Uint8Array(await new Response(stream).arrayBuffer()) 361 367 362 368 if (compressed.length < encoded.length) { ··· 373 379 while (offset < totalLength) { 374 380 const headerSize = isFirst ? 5 : 1 375 381 const maxPayload = CHUNK_SIZE - headerSize 376 - const chunkSize = Math.min(maxPayload, totalLength - offset) 377 - const isFinal = offset + chunkSize >= totalLength 382 + const chunkSize = Math.min(maxPayload, totalLength - offset) 383 + const isFinal = offset + chunkSize >= totalLength 378 384 379 385 const chunk = new ArrayBuffer(headerSize + chunkSize) 380 386 const bytes = new Uint8Array(chunk) 381 - const view = new DataView(chunk) 387 + const view = new DataView(chunk) 382 388 383 389 // byte 0 = flags 384 390 view.setUint8( ··· 408 414 409 415 #incomingChunk(data: ArrayBuffer) { 410 416 const chunk = new Uint8Array(data) 411 - const view = new DataView(chunk.buffer) 417 + const view = new DataView(chunk.buffer) 412 418 413 419 const flags = chunk[0] 414 420 const isFinal = (flags & ChunkFlags.FINAL) !== 0 ··· 433 439 this.#chunkIncoming = { 434 440 buffer: new Uint8Array(totalLength), 435 441 offset: 0, 436 - compressed: isCompressed 442 + compressed: isCompressed, 437 443 } 438 444 439 445 this.#chunkIncoming.buffer.set(chunk.subarray(5), 0) 440 446 this.#chunkIncoming.offset = chunk.length - 5 // header length 441 - } 442 - else if (this.#chunkIncoming) { 447 + } else if (this.#chunkIncoming) { 443 448 // continuation chunk 444 449 this.#chunkIncoming.buffer.set(chunk.subarray(1), this.#chunkIncoming.offset) 445 450 this.#chunkIncoming.offset += chunk.length - 1 // header length 446 - } 447 - else { 451 + } else { 448 452 console.warn('received orphan chunk, ignoring') 449 453 return 450 454 } ··· 463 467 464 468 try { 465 469 if (chunk.compressed) { 466 - const stream = new Blob([payload]).stream().pipeThrough(new DecompressionStream("gzip")) 470 + const stream = new Blob([payload]).stream().pipeThrough(new DecompressionStream('gzip')) 467 471 payload = new Uint8Array(await new Response(stream).arrayBuffer()) 468 472 } 469 473
+21 -6
vite.config.js
··· 1 - import tailwind from '@tailwindcss/vite' 1 + import postcssGlobalData from '@csstools/postcss-global-data' 2 2 import basicSsl from '@vitejs/plugin-basic-ssl' 3 + import postcssPresetEnv from 'postcss-preset-env' 3 4 import devtools from 'solid-devtools/vite' 4 5 import {defineConfig} from 'vite' 5 6 import {analyzer} from 'vite-bundle-analyzer' ··· 13 14 devtools({autoname: true}), 14 15 analyzer({analyzerMode: 'static'}), 15 16 solidPlugin(), 16 - tailwind(), 17 17 basicSsl({name: 'dev'}), 18 18 ], 19 19 20 20 define: { 21 21 global: {}, 22 22 }, 23 + 24 + css: { 25 + postcss: { 26 + plugins: [ 27 + postcssGlobalData({ 28 + files: ['./src/app/comptime.css'], 29 + }), 30 + postcssPresetEnv({ 31 + browsers: 'last 2 versions' 32 + }) 33 + ], 34 + }, 35 + }, 36 + 37 + worker: { 38 + format: 'es', 39 + }, 40 + 23 41 build: { 24 42 // relative to root 25 - outDir: '../../../dist', 43 + outDir: '../../dist', 26 44 copyPublicDir: true, 27 45 emptyOutDir: true, 28 46 target: 'esnext', ··· 37 55 }, 38 56 }, 39 57 }, 40 - }, 41 - worker: { 42 - format: 'es', 43 58 }, 44 59 45 60 clearScreen: false,