version 2 of my website
0
fork

Configure Feed

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

just a big WIP commit, idk

+586 -151
+35
.vscode/starwind.code-snippets
··· 1 + { 2 + "Starwind UI Theme Toggle": { 3 + "prefix": "starwind-theme-toggle", 4 + "description": "Starwind UI theme initialization script for the document head", 5 + "scope": "astro,typescript", 6 + "body": [ 7 + "<script is:inline>", 8 + " function initTheme() {", 9 + " const colorTheme = localStorage.getItem(\"colorTheme\");", 10 + " if (!colorTheme) {", 11 + " if (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches) {", 12 + " document.documentElement.classList.add(\"dark\");", 13 + " localStorage.setItem(\"colorTheme\", \"dark\");", 14 + " } else {", 15 + " document.documentElement.classList.remove(\"dark\");", 16 + " localStorage.setItem(\"colorTheme\", \"light\");", 17 + " }", 18 + " } else {", 19 + " if (colorTheme === \"dark\") {", 20 + " document.documentElement.classList.add(\"dark\");", 21 + " } else if (colorTheme === \"light\") {", 22 + " document.documentElement.classList.remove(\"dark\");", 23 + " } else if (colorTheme === \"system\") {", 24 + " const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;", 25 + " document.documentElement.classList.toggle(\"dark\", prefersDark);", 26 + " }", 27 + " }", 28 + " }", 29 + "", 30 + " initTheme();", 31 + " document.addEventListener(\"astro:after-swap\", initTheme);", 32 + "</script>" 33 + ] 34 + } 35 + }
+2 -1
astro.config.mjs
··· 1 + import tailwindcss from "@tailwindcss/vite"; 1 2 // @ts-check 2 3 import { defineConfig } from 'astro/config'; 3 4 ··· 9 10 10 11 // https://astro.build/config 11 12 export default defineConfig({ 12 - vite: { 13 + vite: { 13 14 plugins: [tailwindcss()] 14 15 }, 15 16
+243 -141
package-lock.json
··· 12 12 "@astrojs/react": "^4.4.2", 13 13 "@lucide/astro": "^0.563.0", 14 14 "@nanostores/react": "^1.0.0", 15 - "@tailwindcss/vite": "^4.1.5", 15 + "@tabler/icons": "^3.37.1", 16 + "@tailwindcss/forms": "^0.5.11", 17 + "@tailwindcss/vite": "^4.2.1", 16 18 "@types/react": "^19.1.12", 17 19 "@types/react-dom": "^19.1.9", 18 20 "astro": "^5.18.0", 19 21 "nanostores": "^1.0.1", 20 22 "react": "^19.1.1", 21 23 "react-dom": "^19.1.1", 22 - "tailwindcss": "^4.1.5" 24 + "tailwind-merge": "^3.5.0", 25 + "tailwind-variants": "^3.2.2", 26 + "tailwindcss": "^4.2.1", 27 + "tw-animate-css": "^1.4.0" 23 28 } 24 29 }, 25 30 "node_modules/@astrojs/compiler": { ··· 1736 1741 "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", 1737 1742 "license": "MIT" 1738 1743 }, 1744 + "node_modules/@tabler/icons": { 1745 + "version": "3.37.1", 1746 + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.37.1.tgz", 1747 + "integrity": "sha512-neLCWkuyNHEPXCyYu6nbN4S3g/59BTa4qyITAugYVpq1YzYNDOZooW7/vRWH98ZItXAudxdKU8muFT7y1PqzuA==", 1748 + "license": "MIT", 1749 + "funding": { 1750 + "type": "github", 1751 + "url": "https://github.com/sponsors/codecalm" 1752 + } 1753 + }, 1754 + "node_modules/@tailwindcss/forms": { 1755 + "version": "0.5.11", 1756 + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", 1757 + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", 1758 + "license": "MIT", 1759 + "dependencies": { 1760 + "mini-svg-data-uri": "^1.2.3" 1761 + }, 1762 + "peerDependencies": { 1763 + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" 1764 + } 1765 + }, 1739 1766 "node_modules/@tailwindcss/node": { 1740 - "version": "4.1.5", 1741 - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.5.tgz", 1742 - "integrity": "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==", 1767 + "version": "4.2.1", 1768 + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz", 1769 + "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==", 1743 1770 "license": "MIT", 1744 1771 "dependencies": { 1745 - "enhanced-resolve": "^5.18.1", 1746 - "jiti": "^2.4.2", 1747 - "lightningcss": "1.29.2", 1748 - "tailwindcss": "4.1.5" 1772 + "@jridgewell/remapping": "^2.3.5", 1773 + "enhanced-resolve": "^5.19.0", 1774 + "jiti": "^2.6.1", 1775 + "lightningcss": "1.31.1", 1776 + "magic-string": "^0.30.21", 1777 + "source-map-js": "^1.2.1", 1778 + "tailwindcss": "4.2.1" 1749 1779 } 1750 1780 }, 1751 1781 "node_modules/@tailwindcss/oxide": { 1752 - "version": "4.1.5", 1753 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.5.tgz", 1754 - "integrity": "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==", 1782 + "version": "4.2.1", 1783 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz", 1784 + "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==", 1755 1785 "license": "MIT", 1756 1786 "engines": { 1757 - "node": ">= 10" 1787 + "node": ">= 20" 1758 1788 }, 1759 1789 "optionalDependencies": { 1760 - "@tailwindcss/oxide-android-arm64": "4.1.5", 1761 - "@tailwindcss/oxide-darwin-arm64": "4.1.5", 1762 - "@tailwindcss/oxide-darwin-x64": "4.1.5", 1763 - "@tailwindcss/oxide-freebsd-x64": "4.1.5", 1764 - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.5", 1765 - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.5", 1766 - "@tailwindcss/oxide-linux-arm64-musl": "4.1.5", 1767 - "@tailwindcss/oxide-linux-x64-gnu": "4.1.5", 1768 - "@tailwindcss/oxide-linux-x64-musl": "4.1.5", 1769 - "@tailwindcss/oxide-wasm32-wasi": "4.1.5", 1770 - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.5", 1771 - "@tailwindcss/oxide-win32-x64-msvc": "4.1.5" 1790 + "@tailwindcss/oxide-android-arm64": "4.2.1", 1791 + "@tailwindcss/oxide-darwin-arm64": "4.2.1", 1792 + "@tailwindcss/oxide-darwin-x64": "4.2.1", 1793 + "@tailwindcss/oxide-freebsd-x64": "4.2.1", 1794 + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", 1795 + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", 1796 + "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", 1797 + "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", 1798 + "@tailwindcss/oxide-linux-x64-musl": "4.2.1", 1799 + "@tailwindcss/oxide-wasm32-wasi": "4.2.1", 1800 + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", 1801 + "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" 1772 1802 } 1773 1803 }, 1774 1804 "node_modules/@tailwindcss/oxide-android-arm64": { 1775 - "version": "4.1.5", 1776 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.5.tgz", 1777 - "integrity": "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==", 1805 + "version": "4.2.1", 1806 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz", 1807 + "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==", 1778 1808 "cpu": [ 1779 1809 "arm64" 1780 1810 ], ··· 1784 1814 "android" 1785 1815 ], 1786 1816 "engines": { 1787 - "node": ">= 10" 1817 + "node": ">= 20" 1788 1818 } 1789 1819 }, 1790 1820 "node_modules/@tailwindcss/oxide-darwin-arm64": { 1791 - "version": "4.1.5", 1792 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.5.tgz", 1793 - "integrity": "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==", 1821 + "version": "4.2.1", 1822 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz", 1823 + "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==", 1794 1824 "cpu": [ 1795 1825 "arm64" 1796 1826 ], ··· 1800 1830 "darwin" 1801 1831 ], 1802 1832 "engines": { 1803 - "node": ">= 10" 1833 + "node": ">= 20" 1804 1834 } 1805 1835 }, 1806 1836 "node_modules/@tailwindcss/oxide-darwin-x64": { 1807 - "version": "4.1.5", 1808 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.5.tgz", 1809 - "integrity": "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==", 1837 + "version": "4.2.1", 1838 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz", 1839 + "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==", 1810 1840 "cpu": [ 1811 1841 "x64" 1812 1842 ], ··· 1816 1846 "darwin" 1817 1847 ], 1818 1848 "engines": { 1819 - "node": ">= 10" 1849 + "node": ">= 20" 1820 1850 } 1821 1851 }, 1822 1852 "node_modules/@tailwindcss/oxide-freebsd-x64": { 1823 - "version": "4.1.5", 1824 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.5.tgz", 1825 - "integrity": "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==", 1853 + "version": "4.2.1", 1854 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz", 1855 + "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==", 1826 1856 "cpu": [ 1827 1857 "x64" 1828 1858 ], ··· 1832 1862 "freebsd" 1833 1863 ], 1834 1864 "engines": { 1835 - "node": ">= 10" 1865 + "node": ">= 20" 1836 1866 } 1837 1867 }, 1838 1868 "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 1839 - "version": "4.1.5", 1840 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.5.tgz", 1841 - "integrity": "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==", 1869 + "version": "4.2.1", 1870 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz", 1871 + "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==", 1842 1872 "cpu": [ 1843 1873 "arm" 1844 1874 ], ··· 1848 1878 "linux" 1849 1879 ], 1850 1880 "engines": { 1851 - "node": ">= 10" 1881 + "node": ">= 20" 1852 1882 } 1853 1883 }, 1854 1884 "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 1855 - "version": "4.1.5", 1856 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.5.tgz", 1857 - "integrity": "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==", 1885 + "version": "4.2.1", 1886 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz", 1887 + "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==", 1858 1888 "cpu": [ 1859 1889 "arm64" 1860 1890 ], ··· 1864 1894 "linux" 1865 1895 ], 1866 1896 "engines": { 1867 - "node": ">= 10" 1897 + "node": ">= 20" 1868 1898 } 1869 1899 }, 1870 1900 "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 1871 - "version": "4.1.5", 1872 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.5.tgz", 1873 - "integrity": "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==", 1901 + "version": "4.2.1", 1902 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz", 1903 + "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==", 1874 1904 "cpu": [ 1875 1905 "arm64" 1876 1906 ], ··· 1880 1910 "linux" 1881 1911 ], 1882 1912 "engines": { 1883 - "node": ">= 10" 1913 + "node": ">= 20" 1884 1914 } 1885 1915 }, 1886 1916 "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 1887 - "version": "4.1.5", 1888 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.5.tgz", 1889 - "integrity": "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==", 1917 + "version": "4.2.1", 1918 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz", 1919 + "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==", 1890 1920 "cpu": [ 1891 1921 "x64" 1892 1922 ], ··· 1896 1926 "linux" 1897 1927 ], 1898 1928 "engines": { 1899 - "node": ">= 10" 1929 + "node": ">= 20" 1900 1930 } 1901 1931 }, 1902 1932 "node_modules/@tailwindcss/oxide-linux-x64-musl": { 1903 - "version": "4.1.5", 1904 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.5.tgz", 1905 - "integrity": "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==", 1933 + "version": "4.2.1", 1934 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz", 1935 + "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==", 1906 1936 "cpu": [ 1907 1937 "x64" 1908 1938 ], ··· 1912 1942 "linux" 1913 1943 ], 1914 1944 "engines": { 1915 - "node": ">= 10" 1945 + "node": ">= 20" 1916 1946 } 1917 1947 }, 1918 1948 "node_modules/@tailwindcss/oxide-wasm32-wasi": { 1919 - "version": "4.1.5", 1920 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.5.tgz", 1921 - "integrity": "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==", 1949 + "version": "4.2.1", 1950 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz", 1951 + "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==", 1922 1952 "bundleDependencies": [ 1923 1953 "@napi-rs/wasm-runtime", 1924 1954 "@emnapi/core", ··· 1933 1963 "license": "MIT", 1934 1964 "optional": true, 1935 1965 "dependencies": { 1936 - "@emnapi/core": "^1.4.3", 1937 - "@emnapi/runtime": "^1.4.3", 1938 - "@emnapi/wasi-threads": "^1.0.2", 1939 - "@napi-rs/wasm-runtime": "^0.2.9", 1940 - "@tybys/wasm-util": "^0.9.0", 1941 - "tslib": "^2.8.0" 1966 + "@emnapi/core": "^1.8.1", 1967 + "@emnapi/runtime": "^1.8.1", 1968 + "@emnapi/wasi-threads": "^1.1.0", 1969 + "@napi-rs/wasm-runtime": "^1.1.1", 1970 + "@tybys/wasm-util": "^0.10.1", 1971 + "tslib": "^2.8.1" 1942 1972 }, 1943 1973 "engines": { 1944 1974 "node": ">=14.0.0" 1945 1975 } 1946 1976 }, 1947 1977 "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 1948 - "version": "4.1.5", 1949 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.5.tgz", 1950 - "integrity": "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==", 1978 + "version": "4.2.1", 1979 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz", 1980 + "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==", 1951 1981 "cpu": [ 1952 1982 "arm64" 1953 1983 ], ··· 1957 1987 "win32" 1958 1988 ], 1959 1989 "engines": { 1960 - "node": ">= 10" 1990 + "node": ">= 20" 1961 1991 } 1962 1992 }, 1963 1993 "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 1964 - "version": "4.1.5", 1965 - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.5.tgz", 1966 - "integrity": "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==", 1994 + "version": "4.2.1", 1995 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz", 1996 + "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==", 1967 1997 "cpu": [ 1968 1998 "x64" 1969 1999 ], ··· 1973 2003 "win32" 1974 2004 ], 1975 2005 "engines": { 1976 - "node": ">= 10" 2006 + "node": ">= 20" 1977 2007 } 1978 2008 }, 1979 2009 "node_modules/@tailwindcss/vite": { 1980 - "version": "4.1.5", 1981 - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.5.tgz", 1982 - "integrity": "sha512-FE1stRoqdHSb7RxesMfCXE8icwI1W6zGE/512ae3ZDrpkQYTTYeSyUJPRCjZd8CwVAhpDUbi1YR8pcZioFJQ/w==", 2010 + "version": "4.2.1", 2011 + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz", 2012 + "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==", 1983 2013 "license": "MIT", 1984 2014 "dependencies": { 1985 - "@tailwindcss/node": "4.1.5", 1986 - "@tailwindcss/oxide": "4.1.5", 1987 - "tailwindcss": "4.1.5" 2015 + "@tailwindcss/node": "4.2.1", 2016 + "@tailwindcss/oxide": "4.2.1", 2017 + "tailwindcss": "4.2.1" 1988 2018 }, 1989 2019 "peerDependencies": { 1990 - "vite": "^5.2.0 || ^6" 2020 + "vite": "^5.2.0 || ^6 || ^7" 1991 2021 } 1992 2022 }, 1993 2023 "node_modules/@types/babel__core": { ··· 3479 3509 "license": "MIT" 3480 3510 }, 3481 3511 "node_modules/enhanced-resolve": { 3482 - "version": "5.18.1", 3483 - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", 3484 - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", 3512 + "version": "5.20.0", 3513 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", 3514 + "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", 3485 3515 "license": "MIT", 3486 3516 "dependencies": { 3487 3517 "graceful-fs": "^4.2.4", 3488 - "tapable": "^2.2.0" 3518 + "tapable": "^2.3.0" 3489 3519 }, 3490 3520 "engines": { 3491 3521 "node": ">=10.13.0" ··· 4226 4256 } 4227 4257 }, 4228 4258 "node_modules/jiti": { 4229 - "version": "2.4.2", 4230 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", 4231 - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", 4259 + "version": "2.6.1", 4260 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 4261 + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 4232 4262 "license": "MIT", 4233 4263 "bin": { 4234 4264 "jiti": "lib/jiti-cli.mjs" ··· 4277 4307 } 4278 4308 }, 4279 4309 "node_modules/lightningcss": { 4280 - "version": "1.29.2", 4281 - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", 4282 - "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", 4310 + "version": "1.31.1", 4311 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", 4312 + "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", 4283 4313 "license": "MPL-2.0", 4284 4314 "dependencies": { 4285 4315 "detect-libc": "^2.0.3" ··· 4292 4322 "url": "https://opencollective.com/parcel" 4293 4323 }, 4294 4324 "optionalDependencies": { 4295 - "lightningcss-darwin-arm64": "1.29.2", 4296 - "lightningcss-darwin-x64": "1.29.2", 4297 - "lightningcss-freebsd-x64": "1.29.2", 4298 - "lightningcss-linux-arm-gnueabihf": "1.29.2", 4299 - "lightningcss-linux-arm64-gnu": "1.29.2", 4300 - "lightningcss-linux-arm64-musl": "1.29.2", 4301 - "lightningcss-linux-x64-gnu": "1.29.2", 4302 - "lightningcss-linux-x64-musl": "1.29.2", 4303 - "lightningcss-win32-arm64-msvc": "1.29.2", 4304 - "lightningcss-win32-x64-msvc": "1.29.2" 4325 + "lightningcss-android-arm64": "1.31.1", 4326 + "lightningcss-darwin-arm64": "1.31.1", 4327 + "lightningcss-darwin-x64": "1.31.1", 4328 + "lightningcss-freebsd-x64": "1.31.1", 4329 + "lightningcss-linux-arm-gnueabihf": "1.31.1", 4330 + "lightningcss-linux-arm64-gnu": "1.31.1", 4331 + "lightningcss-linux-arm64-musl": "1.31.1", 4332 + "lightningcss-linux-x64-gnu": "1.31.1", 4333 + "lightningcss-linux-x64-musl": "1.31.1", 4334 + "lightningcss-win32-arm64-msvc": "1.31.1", 4335 + "lightningcss-win32-x64-msvc": "1.31.1" 4336 + } 4337 + }, 4338 + "node_modules/lightningcss-android-arm64": { 4339 + "version": "1.31.1", 4340 + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", 4341 + "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", 4342 + "cpu": [ 4343 + "arm64" 4344 + ], 4345 + "license": "MPL-2.0", 4346 + "optional": true, 4347 + "os": [ 4348 + "android" 4349 + ], 4350 + "engines": { 4351 + "node": ">= 12.0.0" 4352 + }, 4353 + "funding": { 4354 + "type": "opencollective", 4355 + "url": "https://opencollective.com/parcel" 4305 4356 } 4306 4357 }, 4307 4358 "node_modules/lightningcss-darwin-arm64": { 4308 - "version": "1.29.2", 4309 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", 4310 - "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", 4359 + "version": "1.31.1", 4360 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", 4361 + "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", 4311 4362 "cpu": [ 4312 4363 "arm64" 4313 4364 ], ··· 4325 4376 } 4326 4377 }, 4327 4378 "node_modules/lightningcss-darwin-x64": { 4328 - "version": "1.29.2", 4329 - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", 4330 - "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", 4379 + "version": "1.31.1", 4380 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", 4381 + "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", 4331 4382 "cpu": [ 4332 4383 "x64" 4333 4384 ], ··· 4345 4396 } 4346 4397 }, 4347 4398 "node_modules/lightningcss-freebsd-x64": { 4348 - "version": "1.29.2", 4349 - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", 4350 - "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", 4399 + "version": "1.31.1", 4400 + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", 4401 + "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", 4351 4402 "cpu": [ 4352 4403 "x64" 4353 4404 ], ··· 4365 4416 } 4366 4417 }, 4367 4418 "node_modules/lightningcss-linux-arm-gnueabihf": { 4368 - "version": "1.29.2", 4369 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", 4370 - "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", 4419 + "version": "1.31.1", 4420 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", 4421 + "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", 4371 4422 "cpu": [ 4372 4423 "arm" 4373 4424 ], ··· 4385 4436 } 4386 4437 }, 4387 4438 "node_modules/lightningcss-linux-arm64-gnu": { 4388 - "version": "1.29.2", 4389 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", 4390 - "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", 4439 + "version": "1.31.1", 4440 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", 4441 + "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", 4391 4442 "cpu": [ 4392 4443 "arm64" 4393 4444 ], ··· 4405 4456 } 4406 4457 }, 4407 4458 "node_modules/lightningcss-linux-arm64-musl": { 4408 - "version": "1.29.2", 4409 - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", 4410 - "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", 4459 + "version": "1.31.1", 4460 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", 4461 + "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", 4411 4462 "cpu": [ 4412 4463 "arm64" 4413 4464 ], ··· 4425 4476 } 4426 4477 }, 4427 4478 "node_modules/lightningcss-linux-x64-gnu": { 4428 - "version": "1.29.2", 4429 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", 4430 - "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", 4479 + "version": "1.31.1", 4480 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", 4481 + "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", 4431 4482 "cpu": [ 4432 4483 "x64" 4433 4484 ], ··· 4445 4496 } 4446 4497 }, 4447 4498 "node_modules/lightningcss-linux-x64-musl": { 4448 - "version": "1.29.2", 4449 - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", 4450 - "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", 4499 + "version": "1.31.1", 4500 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", 4501 + "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", 4451 4502 "cpu": [ 4452 4503 "x64" 4453 4504 ], ··· 4465 4516 } 4466 4517 }, 4467 4518 "node_modules/lightningcss-win32-arm64-msvc": { 4468 - "version": "1.29.2", 4469 - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", 4470 - "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", 4519 + "version": "1.31.1", 4520 + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", 4521 + "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", 4471 4522 "cpu": [ 4472 4523 "arm64" 4473 4524 ], ··· 4485 4536 } 4486 4537 }, 4487 4538 "node_modules/lightningcss-win32-x64-msvc": { 4488 - "version": "1.29.2", 4489 - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", 4490 - "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", 4539 + "version": "1.31.1", 4540 + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", 4541 + "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", 4491 4542 "cpu": [ 4492 4543 "x64" 4493 4544 ], ··· 5590 5641 ], 5591 5642 "license": "MIT" 5592 5643 }, 5644 + "node_modules/mini-svg-data-uri": { 5645 + "version": "1.4.4", 5646 + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 5647 + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 5648 + "license": "MIT", 5649 + "bin": { 5650 + "mini-svg-data-uri": "cli.js" 5651 + } 5652 + }, 5593 5653 "node_modules/mrmime": { 5594 5654 "version": "2.0.1", 5595 5655 "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", ··· 6579 6639 "url": "https://opencollective.com/svgo" 6580 6640 } 6581 6641 }, 6642 + "node_modules/tailwind-merge": { 6643 + "version": "3.5.0", 6644 + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", 6645 + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", 6646 + "license": "MIT", 6647 + "funding": { 6648 + "type": "github", 6649 + "url": "https://github.com/sponsors/dcastil" 6650 + } 6651 + }, 6652 + "node_modules/tailwind-variants": { 6653 + "version": "3.2.2", 6654 + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz", 6655 + "integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==", 6656 + "license": "MIT", 6657 + "engines": { 6658 + "node": ">=16.x", 6659 + "pnpm": ">=7.x" 6660 + }, 6661 + "peerDependencies": { 6662 + "tailwind-merge": ">=3.0.0", 6663 + "tailwindcss": "*" 6664 + }, 6665 + "peerDependenciesMeta": { 6666 + "tailwind-merge": { 6667 + "optional": true 6668 + } 6669 + } 6670 + }, 6582 6671 "node_modules/tailwindcss": { 6583 - "version": "4.1.5", 6584 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.5.tgz", 6585 - "integrity": "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==", 6672 + "version": "4.2.1", 6673 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", 6674 + "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", 6586 6675 "license": "MIT" 6587 6676 }, 6588 6677 "node_modules/tapable": { 6589 - "version": "2.2.1", 6590 - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 6591 - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 6678 + "version": "2.3.0", 6679 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 6680 + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 6592 6681 "license": "MIT", 6593 6682 "engines": { 6594 6683 "node": ">=6" 6684 + }, 6685 + "funding": { 6686 + "type": "opencollective", 6687 + "url": "https://opencollective.com/webpack" 6595 6688 } 6596 6689 }, 6597 6690 "node_modules/tiny-inflate": { ··· 6671 6764 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 6672 6765 "license": "0BSD", 6673 6766 "optional": true 6767 + }, 6768 + "node_modules/tw-animate-css": { 6769 + "version": "1.4.0", 6770 + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", 6771 + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", 6772 + "license": "MIT", 6773 + "funding": { 6774 + "url": "https://github.com/sponsors/Wombosvideo" 6775 + } 6674 6776 }, 6675 6777 "node_modules/type-fest": { 6676 6778 "version": "4.40.1",
+7 -2
package.json
··· 13 13 "@astrojs/react": "^4.4.2", 14 14 "@lucide/astro": "^0.563.0", 15 15 "@nanostores/react": "^1.0.0", 16 - "@tailwindcss/vite": "^4.1.5", 16 + "@tabler/icons": "^3.37.1", 17 + "@tailwindcss/forms": "^0.5.11", 18 + "@tailwindcss/vite": "^4.2.1", 17 19 "@types/react": "^19.1.12", 18 20 "@types/react-dom": "^19.1.9", 19 21 "astro": "^5.18.0", 20 22 "nanostores": "^1.0.1", 21 23 "react": "^19.1.1", 22 24 "react-dom": "^19.1.1", 23 - "tailwindcss": "^4.1.5" 25 + "tailwind-merge": "^3.5.0", 26 + "tailwind-variants": "^3.2.2", 27 + "tailwindcss": "^4.2.1", 28 + "tw-animate-css": "^1.4.0" 24 29 } 25 30 }
+36
src/components/starwind/separator/Separator.astro
··· 1 + --- 2 + import type { HTMLAttributes } from "astro/types"; 3 + import { tv } from "tailwind-variants"; 4 + 5 + type Props = Omit<HTMLAttributes<"div">, "role" | "aria-orientation"> & { 6 + /** 7 + * The orientation of the separator. 8 + * @default "horizontal" 9 + */ 10 + orientation?: "horizontal" | "vertical"; 11 + }; 12 + 13 + export const separator = tv({ 14 + base: "bg-border shrink-0", 15 + variants: { 16 + orientation: { 17 + horizontal: "h-[1px] w-full", 18 + vertical: "h-full w-[1px]", 19 + }, 20 + }, 21 + defaultVariants: { 22 + orientation: "horizontal", 23 + }, 24 + }); 25 + 26 + const { class: className, orientation = "horizontal", ...rest } = Astro.props; 27 + --- 28 + 29 + <div 30 + role="separator" 31 + aria-orientation={orientation} 32 + class={separator({ orientation, class: className })} 33 + {...rest} 34 + data-slot="separator" 35 + > 36 + </div>
+7
src/components/starwind/separator/index.ts
··· 1 + import Separator, { separator } from "./Separator.astro"; 2 + 3 + const SeparatorVariants = { separator }; 4 + 5 + export { Separator, SeparatorVariants }; 6 + 7 + export default Separator;
+2 -2
src/components/whoami.astro
··· 5 5 6 6 <div class="border border-solid rounded-lg p-6"> 7 7 <div class="flex flex-col md:flex-row gap-6 items-center md:items-start"> 8 - <div class="flex-1 space-y-4"> 8 + <div class="flex-1 space-y-2"> 9 9 <h1 class="text-5xl font-bold">Hi, I'm Dustin!</h1> 10 10 <p class="text-lg"> 11 11 I'm a full stack software engineer from Michigan! ··· 16 16 </p> 17 17 </div> 18 18 <Image 19 - class="rounded-full size-40 md:size-48 flex-shrink-0" 19 + class="rounded-full size-40 flex-shrink-0" 20 20 loading="eager" 21 21 src={me} 22 22 alt="Me smiling in my snowboarding jacket on a sunny winter day"
+1
src/layouts/Layout.astro
··· 1 1 --- 2 + import "@/styles/starwind.css"; 2 3 import "../styles/global.css"; 3 4 import Header from "../components/header.astro"; 4 5 import CommonHead from "../components/commonHead.astro";
+62 -3
src/pages/work.astro
··· 1 1 --- 2 2 import Layout from "../layouts/Layout.astro"; 3 3 4 - 4 + const jobs = [ 5 + { 6 + company: "Zenimax Online Studios", 7 + title: "Applications Engineer", 8 + notes: [ 9 + "Architected and built web app to bring studio knowledge and communication to one place and automate workflows across different teams - React, Fastify, BullMQ, MySQL", 10 + "Worked on web app to search and review both 2D and 3D game assets - React, Fastify, ArangoDB", 11 + "Worked on web app to aggregate in-game market performance data and various BI data - React, Fastify, MySQL", 12 + "Managed and automated deployments for web applications and set up hosting infrastrucure - Ubuntu, Docker, Nginx, Github Actions", 13 + "Worked on UX improvement features in desktop application that automates 3D asset pipeline from 3DS Max to game ready assets - Python, PyQT" 14 + ], 15 + startYear: "2023", 16 + endYear: "Present" 17 + }, 18 + { 19 + company: "Ford Motor Company", 20 + title: "Software Engineer Technical Lead", 21 + notes: [ 22 + "Modernized legacy manufacturing quality software, leading the development effort as the team technical lead", 23 + "Worked with designers and product managers to plan out features in order to meet deliverable expectations", 24 + 25 + ], 26 + startYear: "2022", 27 + endYear: "2023" 28 + }, 29 + { 30 + company: "Ford Motor Company", 31 + title: 'Software Engineer - "Ford College Graduate (FCG)"', 32 + notes: [ 33 + "Helped automate internal application onboarding into various monitoring tools, like Splunk and Dynatrace in a single self-serve web application", 34 + "Worked on FordPass Android application", 35 + "Built various web applications used to train and onboard engineers to company coding standards" 36 + ], 37 + startYear: "2019", 38 + endYear: "2022" 39 + } 40 + ]; 5 41 --- 42 + 6 43 <Layout title="dustycode - work"> 7 - 8 - </Layout> 44 + <div class="flex flex-col gap-3 [&>*]:mx-auto"> 45 + <h1 class="font-semibold text-5xl">Work Experience</h1> 46 + <div class="[&>*]:mb-3"> 47 + { 48 + jobs.map((job) => ( 49 + <div class="border border-solid rounded-lg p-6"> 50 + <h2 class="text-2xl">{job.title}</h2> 51 + <div class="text-lg flex gap-2 items-center"> 52 + {job.company} 53 + <span class="text-gray-0 text-sm"> 54 + {job.startYear} - {job.endYear} 55 + </span> 56 + </div> 57 + <ul class="list-disc ml-3 [&>li]:mb-2 text-md"> 58 + {job.notes.map((note) => ( 59 + <li>{note}</li> 60 + ))} 61 + </ul> 62 + </div> 63 + )) 64 + } 65 + </div> 66 + </div> 67 + </Layout>
+167
src/styles/starwind.css
··· 1 + @import "tailwindcss"; 2 + @import "tw-animate-css"; 3 + @plugin "@tailwindcss/forms"; 4 + @custom-variant dark (&:where(.dark, .dark *)); 5 + 6 + @theme { 7 + --animate-accordion-down: accordion-down 0.2s ease-out; 8 + --animate-accordion-up: accordion-up 0.2s ease-out; 9 + 10 + @keyframes accordion-down { 11 + from { 12 + height: 0; 13 + } 14 + to { 15 + height: var(--starwind-accordion-content-height); 16 + } 17 + } 18 + 19 + @keyframes accordion-up { 20 + from { 21 + height: var(--starwind-accordion-content-height); 22 + } 23 + to { 24 + height: 0; 25 + } 26 + } 27 + } 28 + 29 + @theme inline { 30 + --color-background: var(--background); 31 + --color-foreground: var(--foreground); 32 + --color-card: var(--card); 33 + --color-card-foreground: var(--card-foreground); 34 + --color-popover: var(--popover); 35 + --color-popover-foreground: var(--popover-foreground); 36 + --color-primary: var(--primary); 37 + --color-primary-foreground: var(--primary-foreground); 38 + --color-primary-accent: var(--primary-accent); 39 + --color-secondary: var(--secondary); 40 + --color-secondary-foreground: var(--secondary-foreground); 41 + --color-secondary-accent: var(--secondary-accent); 42 + --color-muted: var(--muted); 43 + --color-muted-foreground: var(--muted-foreground); 44 + --color-accent: var(--accent); 45 + --color-accent-foreground: var(--accent-foreground); 46 + --color-info: var(--info); 47 + --color-info-foreground: var(--info-foreground); 48 + --color-success: var(--success); 49 + --color-success-foreground: var(--success-foreground); 50 + --color-warning: var(--warning); 51 + --color-warning-foreground: var(--warning-foreground); 52 + --color-error: var(--error); 53 + --color-error-foreground: var(--error-foreground); 54 + --color-border: var(--border); 55 + --color-input: var(--input); 56 + --color-outline: var(--outline); 57 + 58 + --radius-xs: calc(var(--radius) - 0.375rem); 59 + --radius-sm: calc(var(--radius) - 0.25rem); 60 + --radius-md: calc(var(--radius) - 0.125rem); 61 + --radius-lg: var(--radius); 62 + --radius-xl: calc(var(--radius) + 0.25rem); 63 + --radius-2xl: calc(var(--radius) + 0.5rem); 64 + --radius-3xl: calc(var(--radius) + 1rem); 65 + 66 + --color-sidebar: var(--sidebar-background); 67 + --color-sidebar-foreground: var(--sidebar-foreground); 68 + --color-sidebar-primary: var(--sidebar-primary); 69 + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); 70 + --color-sidebar-accent: var(--sidebar-accent); 71 + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); 72 + --color-sidebar-border: var(--sidebar-border); 73 + --color-sidebar-outline: var(--sidebar-outline); 74 + } 75 + 76 + :root { 77 + --background: var(--color-white); 78 + --foreground: var(--color-neutral-950); 79 + --card: var(--color-white); 80 + --card-foreground: var(--color-neutral-950); 81 + --popover: var(--color-white); 82 + --popover-foreground: var(--color-neutral-950); 83 + --primary: var(--color-blue-700); 84 + --primary-foreground: var(--color-neutral-50); 85 + --primary-accent: var(--color-blue-700); 86 + --secondary: var(--color-neutral-200); 87 + --secondary-foreground: var(--color-neutral-950); 88 + --secondary-accent: var(--color-neutral-950); 89 + --muted: var(--color-neutral-100); 90 + --muted-foreground: var(--color-neutral-600); 91 + --accent: var(--color-neutral-100); 92 + --accent-foreground: var(--color-neutral-900); 93 + --info: var(--color-sky-300); 94 + --info-foreground: var(--color-sky-950); 95 + --success: var(--color-green-300); 96 + --success-foreground: var(--color-green-950); 97 + --warning: var(--color-amber-300); 98 + --warning-foreground: var(--color-amber-950); 99 + --error: var(--color-red-700); 100 + --error-foreground: var(--color-neutral-50); 101 + --border: var(--color-neutral-200); 102 + --input: var(--color-neutral-200); 103 + --outline: var(--color-neutral-400); 104 + --radius: 0.625rem; 105 + 106 + /* sidebar variables */ 107 + --sidebar-background: var(--color-neutral-50); 108 + --sidebar-foreground: var(--color-neutral-950); 109 + --sidebar-primary: var(--color-blue-700); 110 + --sidebar-primary-foreground: var(--color-neutral-50); 111 + --sidebar-accent: var(--color-neutral-100); 112 + --sidebar-accent-foreground: var(--color-neutral-900); 113 + --sidebar-border: var(--color-neutral-200); 114 + --sidebar-outline: var(--color-neutral-400); 115 + } 116 + 117 + .dark { 118 + --background: var(--color-neutral-950); 119 + --foreground: var(--color-neutral-50); 120 + --card: var(--color-neutral-900); 121 + --card-foreground: var(--color-neutral-50); 122 + --popover: var(--color-neutral-800); 123 + --popover-foreground: var(--color-neutral-50); 124 + --primary: var(--color-blue-700); 125 + --primary-foreground: var(--color-neutral-50); 126 + --primary-accent: var(--color-blue-400); 127 + --secondary: var(--color-neutral-800); 128 + --secondary-foreground: var(--color-neutral-50); 129 + --secondary-accent: var(--color-neutral-50); 130 + --muted: var(--color-neutral-800); 131 + --muted-foreground: var(--color-neutral-400); 132 + --accent: var(--color-neutral-700); 133 + --accent-foreground: var(--color-neutral-100); 134 + --info: var(--color-sky-300); 135 + --info-foreground: var(--color-sky-950); 136 + --success: var(--color-green-300); 137 + --success-foreground: var(--color-green-950); 138 + --warning: var(--color-amber-300); 139 + --warning-foreground: var(--color-amber-950); 140 + --error: var(--color-red-800); 141 + --error-foreground: var(--color-neutral-50); 142 + --border: --alpha(var(--color-neutral-50) / 10%); 143 + --input: --alpha(var(--color-neutral-50) / 15%); 144 + --outline: var(--color-neutral-500); 145 + 146 + /* sidebars variables */ 147 + --sidebar-background: var(--color-neutral-900); 148 + --sidebar-foreground: var(--color-neutral-50); 149 + --sidebar-primary: var(--color-blue-700); 150 + --sidebar-primary-foreground: var(--color-neutral-50); 151 + --sidebar-accent: var(--color-neutral-800); 152 + --sidebar-accent-foreground: var(--color-neutral-100); 153 + --sidebar-border: var(--color-neutral-800); 154 + --sidebar-outline: var(--color-neutral-600); 155 + } 156 + 157 + @layer base { 158 + * { 159 + @apply border-border outline-outline/50; 160 + } 161 + body { 162 + @apply bg-background text-foreground scheme-light dark:scheme-dark; 163 + } 164 + button { 165 + @apply cursor-pointer; 166 + } 167 + }
+16
starwind.config.json
··· 1 + { 2 + "$schema": "https://starwind.dev/config-schema.json", 3 + "tailwind": { 4 + "css": "src/styles/starwind.css", 5 + "baseColor": "neutral", 6 + "cssVariables": true 7 + }, 8 + "componentDir": "src/components", 9 + "utilsDir": "src/lib/utils", 10 + "components": [ 11 + { 12 + "name": "separator", 13 + "version": "1.0.1" 14 + } 15 + ] 16 + }
+8 -2
tsconfig.json
··· 9 9 ], 10 10 "compilerOptions": { 11 11 "jsx": "react-jsx", 12 - "jsxImportSource": "react" 12 + "jsxImportSource": "react", 13 + "baseUrl": ".", 14 + "paths": { 15 + "@/*": [ 16 + "src/*" 17 + ] 18 + } 13 19 } 14 - } 20 + }