diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d33a24b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+node_modules/
+dist/
+.astro/
+.DS_Store
+.claude/
diff --git a/astro.config.mjs b/astro.config.mjs
new file mode 100644
index 0000000..78e1c63
--- /dev/null
+++ b/astro.config.mjs
@@ -0,0 +1,12 @@
+import { defineConfig } from 'astro/config';
+
+// https://astro.build/config
+export default defineConfig({
+ output: 'static',
+ outDir: './dist',
+ vite: {
+ ssr: {
+ external: ['svgo'],
+ },
+ },
+});
diff --git a/css/core.css b/css/core.css
index 80c5e87..f1aeac9 100644
--- a/css/core.css
+++ b/css/core.css
@@ -29,6 +29,13 @@
::-webkit-scrollbar-thumb:hover {
background: var(--core-accent-bright);
}
+
+main {
+ width: 100%;
+ max-width: 70px;
+ margin: 0 auto;
+}
+
.hero-subtitle {
font-size: 1rem;
color: var(--core-text);
diff --git a/css/index.css b/css/index.css
index f249231..b75d2a1 100644
--- a/css/index.css
+++ b/css/index.css
@@ -32,6 +32,12 @@ body {
-webkit-font-smoothing: antialiased;
}
+main {
+ width: 100%;
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
#css-error {
display:none;
}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..f13e23b
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,4957 @@
+{
+ "name": "website",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "devDependencies": {
+ "@types/node": "^26.1.2",
+ "astro": "^7.2.0",
+ "typescript": "^7.0.2"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.3.2.tgz",
+ "integrity": "sha512-8w/9CWmYrAJJ8N0SY3O43ws2BgxoW6u3QsD8u2mE140lMYAlwh+tlNoUeSBq22wVheFuiBbR212l6ixZ2IIgCQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@astrojs/compiler-binding-darwin-arm64": "0.3.2",
+ "@astrojs/compiler-binding-darwin-x64": "0.3.2",
+ "@astrojs/compiler-binding-linux-arm64-gnu": "0.3.2",
+ "@astrojs/compiler-binding-linux-arm64-musl": "0.3.2",
+ "@astrojs/compiler-binding-linux-x64-gnu": "0.3.2",
+ "@astrojs/compiler-binding-linux-x64-musl": "0.3.2",
+ "@astrojs/compiler-binding-wasm32-wasi": "0.3.2",
+ "@astrojs/compiler-binding-win32-arm64-msvc": "0.3.2",
+ "@astrojs/compiler-binding-win32-x64-msvc": "0.3.2"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-arm64": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.3.2.tgz",
+ "integrity": "sha512-MM8tn8CSimcfytaOla4b6acN8mKWiL/rlAA1fpT3/Wl7dNGSE4y8FjTN/zJVNnb63CsLWG5zZwCt01TXtDKh9g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-x64": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.3.2.tgz",
+ "integrity": "sha512-2lXOlzf8xb7jLomRsf/aswh61/NnGusynB2OwFkK6k4pmOtpfXMYnG0PLfXrEvxXYj69NdCnmUYXtHDd+JOOag==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.3.2.tgz",
+ "integrity": "sha512-BmU3kWj7qnLrd4vzm49zFEPJ5oFnn1tCT4Vt9hZbqdU5Cmb8GZl7fn6VFsnNfe7B18a2gIFtVzbLINtYl5kBjQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-musl": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.3.2.tgz",
+ "integrity": "sha512-f0heT9ZZEseSu5bHCeb80eL2DH07ArE6U9xi1WT/PEusNjzPmEr3GJsjG1tRLo5VYUUYX7h3ScaqGmGrMOVGmw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-gnu": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.3.2.tgz",
+ "integrity": "sha512-M8fOUt0itRpqiGyoEA/ij184s8O+hqbCz3+YozRusOOM3osgGljpDThhbKAJjqh82wOo6FioQ4w8PBvU1XMD5Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-musl": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.3.2.tgz",
+ "integrity": "sha512-/Kebk8sO6HnLeSd691JkaAPfN7CqR9/KEXmWvyNPkaKNGmj8rTZ/lf2uXtnPu92Lan84UrKdIKVPy1fSo2encQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-wasm32-wasi": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.3.2.tgz",
+ "integrity": "sha512-pUA6xbcOSB7DhfzIArB8BCAkFfAIqriiR7zl5zOStd6oU2G0kIKj+GUdGnyXyhfiv881Hffyk5tC0mR18sDjDw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.3.2.tgz",
+ "integrity": "sha512-ESruf+6Qkl1trHUFxI6GSf6t52j8yN2kCNSzMWdzt7V/T09tFHrYzrVaJQohb2C9bJUH76pNvX6Zb51+xCQc9Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-x64-msvc": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.3.2.tgz",
+ "integrity": "sha512-wzzVrEbOwbsLWOdEbocskjMRx2aZPxJ7ZbmL+jnpBamFwmigm+2M/wzuM6JWncocgYwLic1csSpalBh96kQKXA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-rs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.3.2.tgz",
+ "integrity": "sha512-xlx/T7JovIKduu4ucbTQUxQ5+Q8wxkHxhLjnZk3VlJbhbQ9RLvvuDk1p2YYFYFQ5y14dVm3FGGO4isQXa4F+Tg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-binding": "0.3.2"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.2.tgz",
+ "integrity": "sha512-yt7fMgPYqSM4Tmr+taTW6Per+hjJ8Pk6lA1PAcDyqzOt8HzJ6Kje5WzCxA2Sd+9wsUW7uhkLeoTMK0cXPwH9rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.3.0",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
+ },
+ "node_modules/@astrojs/markdown-satteri": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.5.tgz",
+ "integrity": "sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/prism": "4.0.2",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.3",
+ "satteri": "^0.9.1"
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz",
+ "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prismjs": "^1.30.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz",
+ "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^4.4.0",
+ "dset": "^3.1.4",
+ "is-docker": "^4.0.0",
+ "package-manager-detector": "^1.6.0"
+ },
+ "engines": {
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.8"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bruits/satteri-darwin-arm64": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.5.tgz",
+ "integrity": "sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-darwin-x64": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.5.tgz",
+ "integrity": "sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-gnu": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.5.tgz",
+ "integrity": "sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-musl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.5.tgz",
+ "integrity": "sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-gnu": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.5.tgz",
+ "integrity": "sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-musl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.5.tgz",
+ "integrity": "sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.5.tgz",
+ "integrity": "sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-win32-arm64-msvc": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.5.tgz",
+ "integrity": "sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@bruits/satteri-win32-x64-msvc": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.5.tgz",
+ "integrity": "sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@capsizecss/unpack": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz",
+ "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@clack/core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz",
+ "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@clack/prompts": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz",
+ "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@clack/core": "1.4.3",
+ "fast-string-width": "^3.0.2",
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
+ "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
+ "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
+ "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
+ "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
+ "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
+ "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
+ "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
+ "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
+ "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
+ "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
+ "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
+ "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
+ "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
+ "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
+ "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
+ "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
+ "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
+ "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
+ "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
+ "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
+ "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
+ "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/colour": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz",
+ "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz",
+ "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-freebsd-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz",
+ "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz",
+ "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz",
+ "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz",
+ "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz",
+ "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz",
+ "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz",
+ "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz",
+ "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz",
+ "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz",
+ "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz",
+ "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz",
+ "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz",
+ "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz",
+ "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz",
+ "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz",
+ "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz",
+ "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz",
+ "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz",
+ "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.2"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz",
+ "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==",
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.1"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-webcontainers-wasm32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz",
+ "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz",
+ "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz",
+ "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz",
+ "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz",
+ "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3",
+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3"
+ }
+ },
+ "node_modules/@oslojs/encoding": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.143.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz",
+ "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz",
+ "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz",
+ "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz",
+ "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz",
+ "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz",
+ "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz",
+ "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz",
+ "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz",
+ "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz",
+ "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz",
+ "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz",
+ "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz",
+ "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz",
+ "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz",
+ "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@shikijs/core": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz",
+ "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/primitive": "4.4.2",
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5",
+ "hast-util-to-html": "^9.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.2.tgz",
+ "integrity": "sha512-MnIkeqWdVPUWsxlx8gKLVCJFTsqrQJgpTPBPpQwaFeJ56lOnJxj5aN2LUFnfxUEcvOQuNocmbaMnVrCEln6rkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.6"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.2.tgz",
+ "integrity": "sha512-GLhowz1+jixjz+wiZ3wMnOn1jTxiFCGl2PkXufivbnwPHKuyw1AYqu5/hbWhZZ2oAb0NP05WUJhYeigY14drnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.2.tgz",
+ "integrity": "sha512-8DfeusD+Zdv/eYIDdXyJTUnSMHt+aAWjAOCXV20HNGAHRlInXpG8wh421v6B91WOm9TFwRLN+b/LG5F2NAIojg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/primitive": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz",
+ "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.2.tgz",
+ "integrity": "sha512-H0CFoL07ddDC2Dd6EdrPYNkRhUR6YCkJlnuYFceYYUJJA5TIm2b5B33qqiDYryBExgbKMndFJPb2u1gTuqO37g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz",
+ "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "26.1.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
+ "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~8.3.0"
+ }
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript/typescript-aix-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
+ "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
+ "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
+ "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
+ "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
+ "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
+ "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-loong64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
+ "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-mips64el": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
+ "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
+ "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-riscv64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
+ "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-s390x": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
+ "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
+ "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-sunos-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
+ "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
+ "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
+ "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/am-i-vibing": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz",
+ "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "process-ancestry": "^0.1.0"
+ },
+ "bin": {
+ "am-i-vibing": "dist/cli.mjs"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/astro": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-7.2.0.tgz",
+ "integrity": "sha512-lLTYzx3fOvCmtwD3JVBLQcbORbIOW1/j0R+3IvJx/XKwMGrk7mFnF0BYSOeRiNw1qHUR5mdA6+hRnyvyDfqrWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-rs": "^0.3.2",
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/markdown-satteri": "0.3.5",
+ "@astrojs/telemetry": "3.3.3",
+ "@capsizecss/unpack": "^4.0.0",
+ "@clack/prompts": "^1.1.0",
+ "@oslojs/encoding": "^1.1.0",
+ "am-i-vibing": "^0.4.0",
+ "aria-query": "^5.3.2",
+ "axobject-query": "^4.1.0",
+ "ci-info": "^4.4.0",
+ "clsx": "^2.1.1",
+ "common-ancestor-path": "^2.0.0",
+ "cookie": "^2.0.1",
+ "devalue": "^5.8.1",
+ "diff": "^8.0.3",
+ "dset": "^3.1.4",
+ "es-module-lexer": "^2.0.0",
+ "esbuild": "^0.28.0",
+ "flattie": "^1.1.1",
+ "fontace": "~0.4.1",
+ "get-tsconfig": "5.0.0-beta.4",
+ "github-slugger": "^2.0.0",
+ "html-escaper": "3.0.3",
+ "http-cache-semantics": "^4.2.0",
+ "js-yaml": "^4.3.0",
+ "jsonc-parser": "^3.3.1",
+ "magic-string": "^1.0.0",
+ "magicast": "^0.5.2",
+ "mrmime": "^2.0.1",
+ "neotraverse": "^1.0.1",
+ "obug": "^2.1.1",
+ "p-limit": "^7.3.0",
+ "p-queue": "^9.1.0",
+ "package-manager-detector": "^1.6.0",
+ "piccolore": "^0.1.3",
+ "picomatch": "^4.0.4",
+ "semver": "^7.7.4",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "svgo": "^4.0.1",
+ "tinyclip": "^0.1.12",
+ "tinyexec": "^1.0.4",
+ "tinyglobby": "^0.2.15",
+ "ultrahtml": "^1.6.0",
+ "unifont": "~0.7.4",
+ "unstorage": "^1.17.5",
+ "vite": "^8.0.13",
+ "vitefu": "^1.1.2",
+ "xxhash-wasm": "^1.1.0",
+ "yargs-parser": "^22.0.0",
+ "zod": "^4.3.6"
+ },
+ "bin": {
+ "astro": "bin/astro.mjs"
+ },
+ "engines": {
+ "node": ">=22.12.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/astrodotbuild"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.34.0 || ^0.35.0"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "7.2.2"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz",
+ "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz",
+ "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=22"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cookie-es": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz",
+ "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/crossws": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
+ "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.27.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/defu": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/destr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.0.tgz",
+ "integrity": "sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/diff": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
+ "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dset": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+ "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz",
+ "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
+ "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.1",
+ "@esbuild/android-arm": "0.28.1",
+ "@esbuild/android-arm64": "0.28.1",
+ "@esbuild/android-x64": "0.28.1",
+ "@esbuild/darwin-arm64": "0.28.1",
+ "@esbuild/darwin-x64": "0.28.1",
+ "@esbuild/freebsd-arm64": "0.28.1",
+ "@esbuild/freebsd-x64": "0.28.1",
+ "@esbuild/linux-arm": "0.28.1",
+ "@esbuild/linux-arm64": "0.28.1",
+ "@esbuild/linux-ia32": "0.28.1",
+ "@esbuild/linux-loong64": "0.28.1",
+ "@esbuild/linux-mips64el": "0.28.1",
+ "@esbuild/linux-ppc64": "0.28.1",
+ "@esbuild/linux-riscv64": "0.28.1",
+ "@esbuild/linux-s390x": "0.28.1",
+ "@esbuild/linux-x64": "0.28.1",
+ "@esbuild/netbsd-arm64": "0.28.1",
+ "@esbuild/netbsd-x64": "0.28.1",
+ "@esbuild/openbsd-arm64": "0.28.1",
+ "@esbuild/openbsd-x64": "0.28.1",
+ "@esbuild/openharmony-arm64": "0.28.1",
+ "@esbuild/sunos-x64": "0.28.1",
+ "@esbuild/win32-arm64": "0.28.1",
+ "@esbuild/win32-ia32": "0.28.1",
+ "@esbuild/win32-x64": "0.28.1"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-string-truncated-width": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
+ "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-string-width": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
+ "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-truncated-width": "^3.0.2"
+ }
+ },
+ "node_modules/fast-wrap-ansi": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
+ "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-width": "^3.0.2"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fontace": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz",
+ "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.2"
+ }
+ },
+ "node_modules/fontkitten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
+ "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tiny-inflate": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "5.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz",
+ "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=20.20.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/h3": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
+ "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cookie-es": "^1.2.3",
+ "crossws": "^0.3.5",
+ "defu": "^6.1.6",
+ "destr": "^2.0.5",
+ "iron-webcrypto": "^1.2.1",
+ "node-mock-http": "^1.0.4",
+ "radix3": "^1.1.2",
+ "ufo": "^1.6.3",
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/hast-util-from-html": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
+ "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "devlop": "^1.1.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "parse5": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "property-information": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/iron-webcrypto": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+ "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/brc-dd"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
+ "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lightningcss": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.5.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+ "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.1.0.tgz",
+ "integrity": "sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/magicast": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz",
+ "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.17",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz",
+ "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/neotraverse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz",
+ "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-fetch-native": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-mock-http": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz",
+ "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/obug": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz",
+ "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/ofetch": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
+ "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "destr": "^2.0.5",
+ "node-fetch-native": "^1.6.7",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.2",
+ "regex": "^6.1.0",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz",
+ "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz",
+ "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^5.0.4",
+ "p-timeout": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz",
+ "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-manager-detector": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz",
+ "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/piccolore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+ "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.17",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/process-ancestry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz",
+ "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/radix3": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+ "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz",
+ "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+ "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rolldown": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz",
+ "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "=0.143.0",
+ "@rolldown/pluginutils": "^1.0.0"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm64": "1.2.3",
+ "@rolldown/binding-darwin-arm64": "1.2.3",
+ "@rolldown/binding-darwin-x64": "1.2.3",
+ "@rolldown/binding-freebsd-x64": "1.2.3",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.3",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.3",
+ "@rolldown/binding-linux-arm64-musl": "1.2.3",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.3",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.3",
+ "@rolldown/binding-linux-x64-gnu": "1.2.3",
+ "@rolldown/binding-linux-x64-musl": "1.2.3",
+ "@rolldown/binding-openharmony-arm64": "1.2.3",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.3",
+ "@rolldown/binding-win32-x64-msvc": "1.2.3"
+ }
+ },
+ "node_modules/satteri": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.5.tgz",
+ "integrity": "sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.5",
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "@types/unist": "^3.0.3"
+ },
+ "optionalDependencies": {
+ "@bruits/satteri-darwin-arm64": "0.9.5",
+ "@bruits/satteri-darwin-x64": "0.9.5",
+ "@bruits/satteri-linux-arm64-gnu": "0.9.5",
+ "@bruits/satteri-linux-arm64-musl": "0.9.5",
+ "@bruits/satteri-linux-x64-gnu": "0.9.5",
+ "@bruits/satteri-linux-x64-musl": "0.9.5",
+ "@bruits/satteri-wasm32-wasi": "0.9.5",
+ "@bruits/satteri-win32-arm64-msvc": "0.9.5",
+ "@bruits/satteri-win32-x64-msvc": "0.9.5"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+ "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz",
+ "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/colour": "^1.1.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.8.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.35.3",
+ "@img/sharp-darwin-x64": "0.35.3",
+ "@img/sharp-freebsd-wasm32": "0.35.3",
+ "@img/sharp-libvips-darwin-arm64": "1.3.2",
+ "@img/sharp-libvips-darwin-x64": "1.3.2",
+ "@img/sharp-libvips-linux-arm": "1.3.2",
+ "@img/sharp-libvips-linux-arm64": "1.3.2",
+ "@img/sharp-libvips-linux-ppc64": "1.3.2",
+ "@img/sharp-libvips-linux-riscv64": "1.3.2",
+ "@img/sharp-libvips-linux-s390x": "1.3.2",
+ "@img/sharp-libvips-linux-x64": "1.3.2",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.2",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.2",
+ "@img/sharp-linux-arm": "0.35.3",
+ "@img/sharp-linux-arm64": "0.35.3",
+ "@img/sharp-linux-ppc64": "0.35.3",
+ "@img/sharp-linux-riscv64": "0.35.3",
+ "@img/sharp-linux-s390x": "0.35.3",
+ "@img/sharp-linux-x64": "0.35.3",
+ "@img/sharp-linuxmusl-arm64": "0.35.3",
+ "@img/sharp-linuxmusl-x64": "0.35.3",
+ "@img/sharp-webcontainers-wasm32": "0.35.3",
+ "@img/sharp-win32-arm64": "0.35.3",
+ "@img/sharp-win32-ia32": "0.35.3",
+ "@img/sharp-win32-x64": "0.35.3"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/shiki": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.2.tgz",
+ "integrity": "sha512-P8F/dFhRevaw2uSdeIYlq/5SXZNY85DPtmXQ947gD1Zj2JqO5AkNvVVBar0Me9JkFx3uzVud/qOtP5ek9NEQGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "4.4.2",
+ "@shikijs/engine-javascript": "4.4.2",
+ "@shikijs/engine-oniguruma": "4.4.2",
+ "@shikijs/langs": "4.4.2",
+ "@shikijs/themes": "4.4.2",
+ "@shikijs/types": "4.4.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/smol-toml": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
+ "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz",
+ "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.5.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyclip": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz",
+ "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^16.14.0 || >= 17.3.0"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz",
+ "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/typescript": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
+ "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc"
+ },
+ "engines": {
+ "node": ">=16.20.0"
+ },
+ "optionalDependencies": {
+ "@typescript/typescript-aix-ppc64": "7.0.2",
+ "@typescript/typescript-darwin-arm64": "7.0.2",
+ "@typescript/typescript-darwin-x64": "7.0.2",
+ "@typescript/typescript-freebsd-arm64": "7.0.2",
+ "@typescript/typescript-freebsd-x64": "7.0.2",
+ "@typescript/typescript-linux-arm": "7.0.2",
+ "@typescript/typescript-linux-arm64": "7.0.2",
+ "@typescript/typescript-linux-loong64": "7.0.2",
+ "@typescript/typescript-linux-mips64el": "7.0.2",
+ "@typescript/typescript-linux-ppc64": "7.0.2",
+ "@typescript/typescript-linux-riscv64": "7.0.2",
+ "@typescript/typescript-linux-s390x": "7.0.2",
+ "@typescript/typescript-linux-x64": "7.0.2",
+ "@typescript/typescript-netbsd-arm64": "7.0.2",
+ "@typescript/typescript-netbsd-x64": "7.0.2",
+ "@typescript/typescript-openbsd-arm64": "7.0.2",
+ "@typescript/typescript-openbsd-x64": "7.0.2",
+ "@typescript/typescript-sunos-x64": "7.0.2",
+ "@typescript/typescript-win32-arm64": "7.0.2",
+ "@typescript/typescript-win32-x64": "7.0.2"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ultrahtml": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz",
+ "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uncrypto": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
+ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
+ "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unifont": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz",
+ "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.1.0",
+ "ofetch": "^1.5.1",
+ "ohash": "^2.0.11"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unstorage": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz",
+ "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^3.1.3",
+ "chokidar": "^5.0.0",
+ "destr": "^2.0.5",
+ "h3": "^1.15.10",
+ "lru-cache": "^11.2.7",
+ "node-fetch-native": "^1.6.7",
+ "ofetch": "^1.5.1",
+ "ufo": "^1.6.3"
+ },
+ "peerDependencies": {
+ "@azure/app-configuration": "^1.8.0",
+ "@azure/cosmos": "^4.2.0",
+ "@azure/data-tables": "^13.3.0",
+ "@azure/identity": "^4.6.0",
+ "@azure/keyvault-secrets": "^4.9.0",
+ "@azure/storage-blob": "^12.26.0",
+ "@capacitor/preferences": "^6 || ^7 || ^8",
+ "@deno/kv": ">=0.9.0",
+ "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0",
+ "@planetscale/database": "^1.19.0",
+ "@upstash/redis": "^1.34.3",
+ "@vercel/blob": ">=0.27.1",
+ "@vercel/functions": "^2.2.12 || ^3.0.0",
+ "@vercel/kv": "^1 || ^2 || ^3",
+ "aws4fetch": "^1.0.20",
+ "db0": ">=0.2.1",
+ "idb-keyval": "^6.2.1",
+ "ioredis": "^5.4.2",
+ "uploadthing": "^7.4.4"
+ },
+ "peerDependenciesMeta": {
+ "@azure/app-configuration": {
+ "optional": true
+ },
+ "@azure/cosmos": {
+ "optional": true
+ },
+ "@azure/data-tables": {
+ "optional": true
+ },
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/keyvault-secrets": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@capacitor/preferences": {
+ "optional": true
+ },
+ "@deno/kv": {
+ "optional": true
+ },
+ "@netlify/blobs": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/blob": {
+ "optional": true
+ },
+ "@vercel/functions": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "aws4fetch": {
+ "optional": true
+ },
+ "db0": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "uploadthing": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz",
+ "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.5",
+ "postcss": "^8.5.25",
+ "rolldown": "~1.2.1",
+ "tinyglobby": "^0.2.17"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.4.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
+ "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*",
+ "tests/projects/workspace/packages/*"
+ ],
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs-parser": {
+ "version": "22.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
+ "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=23"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
+ "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..f57bfb7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "danielmorrisey.com",
+ "version": "1.0.0",
+ "description": "My website, built with Astro",
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview",
+ "astro": "astro"
+ },
+ "keywords": [
+ "astro",
+ "portfolio",
+ "personal-website"
+ ],
+ "author": "Daniel Morrisey",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/node": "^26.1.2",
+ "astro": "^7.2.0",
+ "typescript": "^7.0.2"
+ }
+}
diff --git a/public/css/alx911.css b/public/css/alx911.css
new file mode 100644
index 0000000..d06b208
--- /dev/null
+++ b/public/css/alx911.css
@@ -0,0 +1,381 @@
+/* ── Form Layout & Controls ── */
+
+.alx-form {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.5rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+}
+
+.form-group {
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
+}
+
+.form-group label {
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text);
+}
+
+.form-group label .required {
+ color: var(--accent);
+}
+
+.form-group input[type="text"],
+.form-group textarea {
+ width: 100%;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 6px;
+ padding: 0.65rem 0.85rem;
+ font-family: var(--font-sans);
+ font-size: 0.9375rem;
+ color: var(--text);
+ transition: border-color var(--transition);
+}
+
+.form-group input[type="text"]:focus,
+.form-group textarea:focus {
+ outline: none;
+ border-color: var(--accent);
+}
+
+.field-hint {
+ font-size: 0.75rem;
+ color: var(--text-dim);
+}
+
+.form-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 1rem;
+}
+
+/* ── Custom File Dropzones ── */
+
+.file-dropzone {
+ position: relative;
+ border: 2px dashed var(--border);
+ border-radius: 6px;
+ background: var(--bg-raised);
+ padding: 1.25rem 1rem;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.35rem;
+ cursor: pointer;
+ transition: border-color var(--transition), background var(--transition);
+}
+
+.file-dropzone:hover,
+.file-dropzone.dragover {
+ border-color: var(--accent);
+ background: var(--accent-dim);
+}
+
+.file-dropzone i {
+ font-size: 1.5rem;
+ color: var(--accent);
+}
+
+.file-dropzone .file-label {
+ font-size: 0.84rem;
+ font-weight: 500;
+ color: var(--text);
+}
+
+.file-dropzone .file-subtext {
+ font-size: 0.72rem;
+ color: var(--text-dim);
+}
+
+.file-dropzone input[type="file"] {
+ position: absolute;
+ inset: 0;
+ opacity: 0;
+ cursor: pointer;
+}
+
+/* ── Submit & Buttons ── */
+
+.turnstile-container {
+ display: flex;
+ justify-content: center;
+ margin: 0.5rem 0;
+}
+
+.submit-btn,
+.load-more-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ background: var(--accent);
+ color: var(--bg-deep);
+ font-family: var(--font-mono);
+ font-size: 0.875rem;
+ font-weight: 600;
+ padding: 0.75rem 1.25rem;
+ border: none;
+ border-radius: 6px;
+ cursor: pointer;
+ transition: background var(--transition), transform var(--transition);
+}
+
+.submit-btn:hover,
+.load-more-btn:hover {
+ background: var(--accent-bright);
+ transform: translateY(-1px);
+}
+
+.submit-btn:disabled,
+.load-more-btn:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ transform: none;
+}
+
+.load-more-wrapper {
+ display: flex;
+ justify-content: center;
+ margin-top: 1.5rem;
+}
+
+.load-more-btn {
+ background: var(--bg-card);
+ color: var(--text-muted);
+ border: 1px solid var(--border);
+}
+
+.load-more-btn:hover {
+ border-color: var(--accent);
+ color: var(--accent);
+}
+
+/* ── Alerts ── */
+
+.alert {
+ padding: 0.75rem 1rem;
+ border-radius: 6px;
+ font-size: 0.875rem;
+}
+
+.alert-error {
+ background: rgba(224, 86, 86, 0.15);
+ border: 1px solid #e05656;
+ color: #f88;
+}
+
+.alert-success {
+ background: rgba(86, 224, 132, 0.15);
+ border: 1px solid #56e084;
+ color: #8ff8b8;
+}
+
+.hidden {
+ display: none !important;
+}
+
+/* ── Calls List & Feed Cards ── */
+
+.calls-list {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
+
+.call-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.25rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+ transition: border-color var(--transition);
+}
+
+.call-card:hover {
+ border-color: var(--border-hover);
+}
+
+.call-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: 1rem;
+}
+
+.call-title {
+ font-family: var(--font-serif);
+ font-size: 1.1rem;
+ color: var(--text);
+ margin: 0;
+}
+
+.call-date {
+ font-family: var(--font-mono);
+ font-size: 0.75rem;
+ color: var(--text-dim);
+ white-space: nowrap;
+}
+
+.call-desc {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.6;
+ white-space: pre-wrap;
+}
+
+.call-media-player {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ margin-top: 0.25rem;
+}
+
+.call-media-player audio,
+.call-media-player video {
+ width: 100%;
+ border-radius: 6px;
+ background: var(--bg-deep);
+}
+
+.call-media-player video {
+ max-height: 360px;
+ object-fit: contain;
+}
+
+@media (max-width: 600px) {
+ .form-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .call-header {
+ flex-direction: column;
+ gap: 0.25rem;
+ }
+}
+/* User Status Bar */
+.user-auth-bar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ padding: 0.75rem 1rem;
+ border-radius: var(--radius);
+ margin-bottom: 1.5rem;
+ font-size: 0.875rem;
+}
+
+.auth-btn {
+ background: var(--bg-raised);
+ color: var(--text);
+ border: 1px solid var(--border);
+ padding: 0.4rem 0.8rem;
+ border-radius: 6px;
+ cursor: pointer;
+}
+
+.auth-btn:hover {
+ border-color: var(--accent);
+ color: var(--accent);
+}
+
+/* Call Card Delete Button */
+.call-author-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 0.75rem;
+ color: var(--text-dim);
+ margin-bottom: 0.25rem;
+}
+
+.delete-btn {
+ background: rgba(224, 86, 86, 0.15);
+ color: #f88;
+ border: 1px solid #e05656;
+ border-radius: 4px;
+ padding: 0.2rem 0.5rem;
+ cursor: pointer;
+ font-size: 0.75rem;
+}
+
+.delete-btn:hover {
+ background: #e05656;
+ color: #fff;
+}
+
+/* Modal Styling */
+.modal {
+ position: fixed;
+ inset: 0;
+ background: rgba(0,0,0,0.8);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+}
+
+.modal-content {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.5rem;
+ width: 100%;
+ max-width: 360px;
+ position: relative;
+}
+
+.modal-close {
+ position: absolute;
+ top: 0.75rem;
+ right: 0.75rem;
+ background: none;
+ border: none;
+ color: var(--text-dim);
+ font-size: 1.25rem;
+ cursor: pointer;
+}
+
+.modal-tabs {
+ display: flex;
+ gap: 0.5rem;
+ margin-bottom: 1rem;
+ border-bottom: 1px solid var(--border);
+ padding-bottom: 0.5rem;
+}
+
+.tab-btn {
+ background: none;
+ border: none;
+ color: var(--text-dim);
+ cursor: pointer;
+ font-weight: 600;
+}
+
+.tab-btn.active {
+ color: var(--accent);
+}
+
+.auth-form {
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.auth-form input {
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ color: var(--text);
+ padding: 0.6rem;
+ border-radius: 6px;
+}
\ No newline at end of file
diff --git a/public/css/cdn.css b/public/css/cdn.css
new file mode 100644
index 0000000..6b8db74
--- /dev/null
+++ b/public/css/cdn.css
@@ -0,0 +1,772 @@
+/* ── Design Tokens ── */
+:root {
+ --bg-deep: #100b09;
+ --bg: #1c1310;
+ --bg-raised: #251a15;
+ --bg-card: #2e2018;
+ --border: #3d2b1f;
+ --border-hover: #5c3d28;
+ --text: #f4deb8;
+ --text-muted: #e8c28a;
+ --text-dim: #b37a48;
+ --accent: #d4975c;
+ --accent-bright:#e8c28a;
+ --accent-dim: rgba(212, 151, 92, 0.14);
+ --accent-glow: rgba(212, 151, 92, 0.08);
+ --green: #4caf7d;
+ --red: #e06c6c;
+ --font-serif: 'Lota', Georgia, 'Times New Roman', serif;
+ --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace;
+ --font-sans: 'DM Sans', system-ui, sans-serif;
+ --radius: 10px;
+ --transition: 0.2s ease;
+ --max-w: 680px;
+}
+
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { scroll-behavior: smooth; }
+
+body {
+ font-family: var(--font-serif);
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--text);
+ background-color: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ── Typography ── */
+
+h1, h2, h3 {
+ font-family: var(--font-mono);
+ font-weight: 600;
+ line-height: 1.2;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+a:hover { opacity: 0.75; }
+
+code {
+ font-family: var(--font-mono);
+ font-size: 0.875em;
+ background: var(--bg-raised);
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+ color: var(--accent);
+ word-break: break-all;
+}
+
+/* ── Header ── */
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--bg);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border);
+}
+
+.nav-container {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0.875rem 1.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.nav-logo {
+ font-family: var(--font-serif);
+ font-style: italic;
+ font-size: 1.25rem;
+ color: var(--text);
+}
+.nav-logo:hover { opacity: 0.6; }
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.nav-menu a {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+}
+.nav-menu a:hover { color: var(--text); opacity: 1; }
+
+.nav-dropdown {
+ position: relative;
+}
+.nav-dropdown details {
+ position: relative;
+}
+.nav-dropdown summary {
+ list-style: none;
+ cursor: pointer;
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+.nav-dropdown summary::-webkit-details-marker { display: none; }
+.nav-dropdown summary:hover,
+.nav-dropdown details[open] summary {
+ color: var(--text);
+}
+.nav-dropdown .dropdown-menu {
+ position: absolute;
+ left: 0;
+ top: calc(100% + 0.5rem);
+ min-width: 220px;
+ margin: 0;
+ padding: 0.5rem 0;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 0.75rem;
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.08);
+ list-style: none;
+ z-index: 200;
+ display: none;
+}
+.nav-dropdown details[open] .dropdown-menu { display: block; }
+.nav-dropdown .dropdown-menu li { white-space: nowrap; }
+.nav-dropdown .dropdown-menu a,
+.nav-dropdown .dropdown-disabled {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: var(--text-muted);
+ font-size: 0.875rem;
+}
+.nav-dropdown .dropdown-menu a:hover {
+ background: rgba(255,255,255,0.04);
+ color: var(--text);
+}
+.nav-dropdown .dropdown-disabled { cursor: default; color: var(--text-dim); }
+.nav-dropdown summary:focus { outline: none; }
+@media (max-width: 600px) {
+ .nav-dropdown .dropdown-menu {
+ position: static;
+ box-shadow: none;
+ border: none;
+ }
+}
+
+/* ── Main ── */
+
+.main-content {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+/* ── Hero ── */
+
+.hero {
+ padding: 4rem 0 3rem;
+}
+
+.hero-eyebrow {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.25rem;
+ letter-spacing: 0.04em;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 3.5rem);
+ color: var(--text);
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.02em;
+}
+
+.hero-bio {
+ font-size: 1.0625rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+ max-width: 560px;
+ margin-bottom: 1.5rem;
+}
+
+.hero-bio a {
+ color: var(--accent);
+ border-bottom: 1px solid var(--accent-dim);
+ transition: border-color var(--transition), opacity var(--transition);
+}
+.hero-bio a:hover {
+ opacity: 1;
+ border-bottom-color: var(--accent);
+}
+
+/* ── Sections ── */
+
+.content-section {
+ padding: 2.5rem 0;
+ border-top: 1px solid var(--border);
+}
+
+.section-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ color: var(--text-dim);
+ margin-bottom: 1.25rem;
+}
+
+/* ── Stats ── */
+
+.stats-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 0.75rem;
+ margin-bottom: 0.75rem;
+}
+
+.stat-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1rem;
+ text-align: center;
+ transition: border-color var(--transition);
+}
+.stat-card:hover { border-color: var(--border-hover); }
+
+.stat-icon {
+ font-size: 1.1rem;
+ color: var(--accent);
+ opacity: 0.7;
+ margin-bottom: 0.375rem;
+}
+
+.stat-value {
+ font-family: var(--font-mono);
+ font-size: 1.375rem;
+ color: var(--text);
+ letter-spacing: -0.02em;
+ line-height: 1.2;
+}
+
+.stat-value.loading {
+ color: var(--text-dim);
+ animation: pulse 1.6s ease-in-out infinite;
+}
+
+@keyframes pulse { 0%,100% { opacity: .4; } 50% { opacity: .8; } }
+
+.stat-label {
+ font-family: var(--font-sans);
+ font-size: 0.7rem;
+ color: var(--text-dim);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ margin-top: 0.2rem;
+}
+
+.storage-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1rem 1.25rem;
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ transition: border-color var(--transition);
+}
+.storage-card:hover { border-color: var(--border-hover); }
+.storage-card .stat-icon { margin-bottom: 0; font-size: 1.25rem; flex-shrink: 0; }
+.storage-card .stat-value { font-size: 1.25rem; }
+
+/* ── Tabs ── */
+
+.tab-bar {
+ display: flex;
+ gap: 0;
+ border-bottom: 1px solid var(--border);
+ overflow-x: auto;
+ scrollbar-width: none;
+ margin-bottom: 2rem;
+}
+.tab-bar::-webkit-scrollbar { display: none; }
+
+.tab-btn {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text-muted);
+ background: none;
+ border: none;
+ border-bottom: 2px solid transparent;
+ padding: 0.75rem 1.125rem;
+ cursor: pointer;
+ white-space: nowrap;
+ margin-bottom: -1px;
+ transition: color var(--transition), border-color var(--transition);
+ letter-spacing: 0.01em;
+}
+.tab-btn:hover { color: var(--text); }
+.tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }
+.tab-btn i { margin-right: 0.375rem; }
+
+.tab-pane { display: none; padding-bottom: 4rem; }
+.tab-pane.active { display: block; }
+
+/* ── Upload tab ── */
+
+.drop-zone {
+ display: block;
+ border: 1px dashed var(--border-hover);
+ border-radius: var(--radius);
+ padding: 3rem 1.5rem;
+ text-align: center;
+ cursor: pointer;
+ color: var(--text-muted);
+ transition: border-color var(--transition), background var(--transition);
+ margin-bottom: 0.875rem;
+}
+.drop-zone:hover {
+ border-color: var(--accent);
+ background: var(--accent-glow);
+}
+.drop-zone.drag-over {
+ border-color: var(--green);
+ background: rgba(76, 175, 125, 0.05);
+}
+.drop-zone i {
+ font-size: 2rem;
+ color: var(--accent);
+ opacity: 0.6;
+ display: block;
+ margin-bottom: 0.75rem;
+}
+.drop-zone input { display: none; }
+
+#file-name {
+ font-size: 0.875rem;
+ display: block;
+ margin-top: 0.25rem;
+ font-family: var(--font-sans);
+ color: var(--text-muted);
+}
+
+.file-info {
+ display: none;
+ margin-bottom: 0.875rem;
+ padding: 0.75rem 1rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ font-size: 0.8125rem;
+ font-family: var(--font-sans);
+ color: var(--text-muted);
+}
+.file-info.show { display: block; }
+
+.progress-wrap { display: none; margin-bottom: 0.875rem; }
+.progress-wrap.show { display: block; }
+
+.progress-track {
+ height: 4px;
+ background: var(--bg-raised);
+ border-radius: 999px;
+ overflow: hidden;
+}
+.progress-fill {
+ height: 100%;
+ width: 0%;
+ background: linear-gradient(90deg, var(--accent), var(--green));
+ border-radius: 999px;
+ transition: width 0.2s ease;
+}
+.progress-label {
+ text-align: right;
+ font-size: 0.75rem;
+ font-family: var(--font-mono);
+ color: var(--text-dim);
+ margin-top: 0.3rem;
+}
+
+.turnstile-wrap {
+ margin-bottom: 0.75rem;
+}
+
+.cf-turnstile {
+ display: flex;
+ justify-content: center;
+}
+
+.upload-btn {
+ display: block;
+ width: 100%;
+ padding: 0.875rem 1.5rem;
+ background: var(--accent);
+ color: var(--bg-deep);
+ border: none;
+ border-radius: 999px;
+ font-family: var(--font-sans);
+ font-size: 0.9375rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: opacity var(--transition), transform var(--transition);
+ letter-spacing: 0.01em;
+}
+.upload-btn:hover { opacity: 0.85; transform: translateY(-1px); }
+.upload-btn:active { transform: scale(0.99); }
+.upload-btn:disabled { opacity: 0.35; cursor: not-allowed; transform: none; }
+
+.status-msg {
+ text-align: center;
+ margin-top: 0.75rem;
+ font-size: 0.875rem;
+ font-family: var(--font-sans);
+ min-height: 1.3em;
+ color: var(--accent);
+}
+
+.result-box {
+ display: none;
+ margin-top: 1.25rem;
+ padding: 1.25rem;
+ background: var(--bg-card);
+ border: 1px solid var(--green);
+ border-radius: var(--radius);
+ animation: slideIn 0.25s ease;
+}
+.result-box.show { display: block; }
+
+@keyframes slideIn {
+ from { opacity: 0; transform: translateY(-6px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+.result-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ text-transform: uppercase;
+ letter-spacing: 0.06em;
+ color: var(--text-dim);
+ margin-bottom: 0.625rem;
+}
+
+.result-url {
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ padding: 0.625rem 0.875rem;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 6px;
+ word-break: break-all;
+ color: var(--text);
+ margin-bottom: 0.875rem;
+ line-height: 1.5;
+}
+
+.result-actions { display: flex; gap: 0.625rem; flex-wrap: wrap; }
+
+.copy-btn,
+.open-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.4rem;
+ padding: 0.5rem 1rem;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ color: var(--text-muted);
+ font-family: var(--font-sans);
+ font-size: 0.8125rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: border-color var(--transition), color var(--transition);
+ text-decoration: none;
+}
+.copy-btn:hover,
+.open-btn:hover { border-color: var(--accent); color: var(--accent); opacity: 1; }
+.copy-btn.copied { background: var(--green); border-color: var(--green); color: var(--bg-deep); }
+
+/* ── About / Prose ── */
+
+.prose {
+ font-size: 0.9375rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+}
+.prose p + p { margin-top: 1rem; }
+.prose a { color: var(--accent); border-bottom: 1px solid var(--accent-dim); }
+.prose a:hover { border-bottom-color: var(--accent); opacity: 1; }
+.prose strong { color: var(--text); font-weight: 600; }
+
+/* ── Steps (How it Works) ── */
+
+.steps {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 2rem;
+}
+
+.step {
+ display: flex;
+ gap: 1rem;
+ padding: 1rem 0;
+ border-bottom: 1px solid var(--border);
+}
+.step:last-child { border-bottom: none; }
+
+.step-num {
+ flex-shrink: 0;
+ width: 1.75rem;
+ height: 1.75rem;
+ border-radius: 50%;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: var(--accent);
+ margin-top: 0.1rem;
+ font-family: var(--font-mono);
+}
+
+.step-body h3 {
+ font-family: var(--font-serif);
+ font-size: 0.9375rem;
+ font-weight: 400;
+ color: var(--text);
+ margin-bottom: 0.2rem;
+}
+.step-body p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.7;
+}
+
+/* ── How-it-works feature grid ── */
+
+.how-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0.75rem;
+}
+
+.how-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.125rem;
+ transition: border-color var(--transition);
+}
+.how-card:hover { border-color: var(--border-hover); }
+
+.how-card i {
+ font-size: 1.125rem;
+ color: var(--accent);
+ opacity: 0.8;
+ margin-bottom: 0.625rem;
+ display: block;
+}
+
+.how-card h3 {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text);
+ margin-bottom: 0.375rem;
+}
+
+.how-card p {
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ line-height: 1.6;
+}
+
+/* ── Limits ── */
+
+.limits-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0.75rem;
+ margin-bottom: 1.25rem;
+}
+
+.limit-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.25rem;
+ text-align: center;
+ transition: border-color var(--transition);
+}
+.limit-card:hover { border-color: var(--border-hover); }
+
+.limit-card i {
+ font-size: 1.25rem;
+ color: var(--accent);
+ opacity: 0.7;
+ margin-bottom: 0.625rem;
+ display: block;
+}
+
+.limit-value {
+ font-family: var(--font-mono);
+ font-size: 1.375rem;
+ color: var(--text);
+ letter-spacing: -0.02em;
+ margin-bottom: 0.25rem;
+ line-height: 1.2;
+}
+
+.limit-label {
+ font-family: var(--font-sans);
+ font-size: 0.7rem;
+ color: var(--text-dim);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ font-weight: 500;
+}
+
+.limit-note {
+ font-family: var(--font-sans);
+ font-size: 0.7rem;
+ color: var(--text-dim);
+ margin-top: 0.25rem;
+ opacity: 0.7;
+}
+
+.limits-note {
+ padding: 0.875rem 1.125rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ font-family: var(--font-sans);
+ font-size: 0.8375rem;
+ color: var(--text-muted);
+ line-height: 1.65;
+ margin-bottom: 1.75rem;
+}
+.limits-note strong { color: var(--text); }
+.limits-note a { color: var(--accent); }
+.limits-note p { margin-top: 0.375rem; }
+
+/* ── Usage bars ── */
+
+.usage-section { margin-top: 1.5rem; }
+
+.usage-item { margin-bottom: 1.25rem; }
+
+.usage-row {
+ display: flex;
+ justify-content: space-between;
+ font-family: var(--font-sans);
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ margin-bottom: 0.5rem;
+}
+.usage-row span:first-child { color: var(--text); font-weight: 500; }
+
+.usage-track {
+ height: 5px;
+ background: var(--bg-raised);
+ border-radius: 999px;
+ overflow: hidden;
+}
+.usage-fill {
+ height: 100%;
+ border-radius: 999px;
+ background: linear-gradient(90deg, var(--accent), var(--green));
+ transition: width 0.6s cubic-bezier(.4, 0, .2, 1);
+}
+.usage-fill.warn { background: linear-gradient(90deg, #c47a30, #d48a40); }
+.usage-fill.danger { background: linear-gradient(90deg, var(--red), #c05050); }
+
+.usage-loading {
+ font-family: var(--font-sans);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ font-style: italic;
+}
+
+.divider { border: none; border-top: 1px solid var(--border); margin: 1.75rem 0; }
+
+.file-types {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+}
+.file-types strong { color: var(--text); }
+
+/* ── Code Blocks ── */
+
+.code-block {
+ margin: 1.5rem 0;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ background: var(--bg-card);
+ overflow: hidden;
+}
+
+.code-label {
+ font-family: var(--font-mono);
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ color: var(--text-dim);
+ background: var(--bg-raised);
+ padding: 0.5rem 1rem;
+ border-bottom: 1px solid var(--border);
+ letter-spacing: 0.05em;
+}
+
+.code-block pre {
+ margin: 0;
+ padding: 1rem;
+ overflow-x: auto;
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ line-height: 1.6;
+ color: var(--text-muted);
+}
+
+.code-block code {
+ background: none;
+ padding: 0;
+ color: inherit;
+}
+
+/* ── Footer ── */
+
+.site-footer {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 2.5rem 1.5rem 3rem;
+ border-top: 1px solid var(--border);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ line-height: 1.8;
+}
+
+.site-footer a { color: var(--text-muted); }
+.site-footer a:hover { color: var(--text); opacity: 1; }
+
+/* ── Responsive ── */
+
+@media (max-width: 600px) {
+ .hero { padding: 2.5rem 0 2rem; }
+ .stats-grid { grid-template-columns: repeat(2, 1fr); }
+ .how-grid,
+ .limits-grid { grid-template-columns: 1fr; }
+ .nav-menu { display: none; }
+}
\ No newline at end of file
diff --git a/public/css/core.css b/public/css/core.css
new file mode 100644
index 0000000..80c5e87
--- /dev/null
+++ b/public/css/core.css
@@ -0,0 +1,373 @@
+:root {
+ --core-bg: #1c1310;
+ --core-bg-raised: #251a15;
+ --core-bg-card: #2e2018;
+ --core-border: #3d2b1f;
+ --core-border-hover: #5c3d28;
+ --core-text: #f4deb8;
+ --core-text-muted: #e8c28a;
+ --core-text-dim: #b37a48;
+ --core-accent: #d4975c;
+ --core-accent-bright: #e8c28a;
+ --core-radius: 10px;
+ --core-transition: 0.2s ease;
+ --core-max-w: 720px;
+}
+
+::-webkit-scrollbar {
+ width: 6px;
+ height: 6pxpx;
+}
+::-webkit-scrollbar-track {
+ background: var(--core-bg);
+ border-radius: 6px;
+}
+::-webkit-scrollbar-thumb {
+ background: var(--core-accent);
+ border-radius: 0px;
+}
+::-webkit-scrollbar-thumb:hover {
+ background: var(--core-accent-bright);
+}
+.hero-subtitle {
+ font-size: 1rem;
+ color: var(--core-text);
+ margin: 0.5rem 0 1.75rem;
+ line-height: 1.6;
+ letter-spacing: 0.01em;
+ max-width: 560px;
+}
+p {
+ color: var(--text-muted)
+}
+h1, h2, h3 {
+ font-family: var(--font-mono);
+ font-weight: 600;
+ line-height: 1.2;
+ color: var(--core-accent);
+}
+hr {
+ border: 0;
+ border-top: 1px solid var(--core-accent);
+ margin: 2rem 0;
+ opacity: 0.8;
+}
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--core-bg);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--core-border);
+}
+
+.site-announcement {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 0.75rem 1.5rem;
+ background: rgba(212, 151, 92, 0.12);
+ color: var(--core-text);
+ border-bottom: 1px solid rgba(212, 151, 92, 0.18);
+ font-size: 0.95rem;
+ text-align: center;
+}
+
+.site-announcement p {
+ margin: 0;
+ max-width: 820px;
+}
+
+.nav-container {
+ max-width: var(--core-max-w);
+ margin: 0 auto;
+ padding: 0.875rem 1.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.nav-logo {
+ font-family: 'Lota', Georgia, 'Times New Roman', serif;
+ font-style: italic;
+ font-size: 1.25rem;
+ color: var(--core-text);
+}
+
+.nav-logo:hover {
+ opacity: 0.6;
+}
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.nav-toggle {
+ display: none;
+ background: transparent;
+ border: 1px solid var(--core-border);
+ border-radius: 8px;
+ color: var(--core-text-muted);
+ font-size: 1rem;
+ line-height: 1;
+ padding: 0.5rem 0.65rem;
+ cursor: pointer;
+ transition: color var(--core-transition), border-color var(--core-transition);
+}
+
+.nav-toggle:hover {
+ color: var(--core-text);
+ border-color: var(--core-border-hover);
+}
+
+.nav-menu a {
+ font-size: 0.875rem;
+ color: var(--core-text-muted);
+ letter-spacing: 0.01em;
+}
+
+.nav-menu a:hover {
+ color: var(--core-text);
+ opacity: 1;
+}
+
+.nav-dropdown {
+ position: relative;
+}
+
+.nav-dropdown details {
+ position: relative;
+}
+
+.nav-dropdown summary {
+ list-style: none;
+ cursor: pointer;
+ font-size: 0.875rem;
+ color: var(--core-text-muted);
+ letter-spacing: 0.01em;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+
+.nav-dropdown summary::-webkit-details-marker {
+ display: none;
+}
+
+.nav-dropdown summary:hover,
+.nav-dropdown:hover summary,
+.nav-dropdown:focus-within summary,
+.nav-dropdown details[open] summary {
+ color: var(--core-text);
+}
+
+.nav-dropdown .dropdown-menu {
+ position: absolute;
+ left: 0;
+ top: calc(100% + 0.5rem);
+ min-width: 220px;
+ margin: 0;
+ padding: 0.5rem 0;
+ background: var(--core-bg);
+ border: 1px solid var(--core-border);
+ border-radius: 0.75rem;
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.08);
+ list-style: none;
+ z-index: 200;
+ display: none;
+}
+
+.nav-dropdown:hover .dropdown-menu,
+.nav-dropdown:focus-within .dropdown-menu,
+.nav-dropdown details[open] .dropdown-menu {
+ display: block;
+}
+
+.nav-dropdown .dropdown-menu li {
+ white-space: nowrap;
+}
+
+.nav-dropdown .dropdown-menu a,
+.nav-dropdown .dropdown-disabled {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: var(--core-text-muted);
+ font-size: 0.875rem;
+}
+
+.nav-dropdown .dropdown-menu a:hover {
+ background: rgba(255, 255, 255, 0.04);
+ color: var(--core-text);
+}
+
+.nav-dropdown .dropdown-disabled {
+ cursor: default;
+ color: var(--core-text-dim);
+}
+
+.nav-dropdown summary:focus {
+ outline: none;
+}
+
+.site-footer {
+ max-width: var(--core-max-w);
+ margin: 0 auto;
+ padding: 2.5rem 1.5rem 3rem;
+ border-top: 1px solid var(--core-border);
+ font-size: 0.8125rem;
+ color: var(--core-text-muted);
+ line-height: 1.8;
+}
+
+.site-footer a {
+ color: var(--core-text-dim);
+}
+
+.site-footer a:hover {
+ color: var(--core-dim);
+ opacity: 1;
+}
+
+.privacy-notice {
+ position: fixed;
+ bottom: 1.5rem;
+ right: 1.5rem;
+ max-width: 320px;
+ background: var(--core-bg-card);
+ border: 1px solid var(--core-border);
+ border-radius: var(--core-radius);
+ padding: 1rem 1.25rem;
+ z-index: 150;
+ animation: coreSlideUp 0.3s ease;
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.24);
+}
+
+.privacy-notice p {
+ font-size: 0.8125rem;
+ color: var(--core-text-muted);
+ line-height: 1.6;
+ margin: 0;
+}
+
+.privacy-notice a {
+ color: var(--core-accent);
+ text-decoration: underline;
+}
+
+.privacy-notice a:hover {
+ opacity: 0.75;
+}
+
+.privacy-close {
+ position: absolute;
+ top: 0.5rem;
+ right: 0.5rem;
+ background: transparent;
+ border: none;
+ color: var(--core-text-dim);
+ font-size: 1rem;
+ cursor: pointer;
+ padding: 0.25rem 0.5rem;
+ transition: color var(--core-transition);
+}
+
+.privacy-close:hover {
+ color: var(--core-accent);
+}
+
+.privacy-notice.hidden {
+ display: none;
+}
+
+@keyframes coreSlideUp {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@media (max-width: 600px) {
+ .nav-toggle {
+ display: inline-flex;
+ }
+
+ /* the whole nav collapses into one panel below the logo row */
+ .nav-container {
+ flex-wrap: wrap;
+ }
+
+ .nav-menu {
+ display: none;
+ flex-basis: 100%;
+ flex-direction: column;
+ gap: 0;
+ margin-top: 0.875rem;
+ padding: 0.5rem 0;
+ border-top: 1px solid var(--core-border);
+ /* the panel lives in a sticky header, so cap it to the viewport and
+ scroll internally once the dropdowns are expanded */
+ max-height: calc(100vh - 10rem);
+ max-height: calc(100dvh - 10rem);
+ overflow-y: auto;
+ overscroll-behavior: contain;
+ -webkit-overflow-scrolling: touch;
+ }
+
+ .nav-menu.open {
+ display: flex;
+ }
+
+ /* keep rows at full height so the panel scrolls instead of squashing them */
+ .nav-menu > li {
+ flex-shrink: 0;
+ }
+
+ .nav-menu > li > a,
+ .nav-dropdown summary {
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ padding: 0.625rem 0.25rem;
+ }
+
+ .nav-dropdown summary > a {
+ display: block;
+ width: 100%;
+ }
+
+ /* hover must not open sections here — only the tapped one expands */
+ .nav-dropdown:hover .dropdown-menu,
+ .nav-dropdown:focus-within .dropdown-menu {
+ display: none;
+ }
+
+ .nav-dropdown .dropdown-menu {
+ position: static;
+ min-width: 0;
+ box-shadow: none;
+ border: none;
+ background: transparent;
+ padding: 0 0 0.375rem 0.75rem;
+ }
+
+ .nav-dropdown details[open] .dropdown-menu {
+ display: block;
+ }
+
+ .nav-dropdown .dropdown-menu a,
+ .nav-dropdown .dropdown-disabled {
+ padding: 0.5rem 0.25rem;
+ }
+
+ .privacy-notice {
+ bottom: 1rem;
+ right: 1rem;
+ }
+}
diff --git a/public/css/favfinder.css b/public/css/favfinder.css
new file mode 100644
index 0000000..ae3fc4e
--- /dev/null
+++ b/public/css/favfinder.css
@@ -0,0 +1,511 @@
+:root {
+ --bg-deep: #100b09;
+ --bg: #1c1310;
+ --bg-raised: #251a15;
+ --bg-card: #2e2018;
+ --border: #3d2b1f;
+ --border-hover:#5c3d28;
+ --text: #f4deb8;
+ --text-muted: #e8c28a;
+ --text-dim: #b37a48;
+ --accent: #d4975c;
+ --accent-bright:#e8c28a;
+ --accent-dim: rgba(212, 151, 92, 0.14);
+ --green: #4caf7d;
+ --red: #e06c6c;
+ --font-serif: 'Lota', Georgia, 'Times New Roman', serif;
+ --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace;
+ --font-sans: 'DM Sans', system-ui, sans-serif;
+ --radius: 10px;
+ --transition: 0.2s ease;
+ --max-w: 680px;
+}
+
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { scroll-behavior: smooth; }
+
+body {
+ font-family: var(--font-serif);
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--text);
+ background-color: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ── Typography ── */
+
+h1, h2, h3 {
+ font-family: var(--font-mono);
+ font-weight: 600;
+ line-height: 1.2;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+a:hover { opacity: 0.75; }
+
+code {
+ font-family: var(--font-mono);
+ font-size: 0.875em;
+ background: var(--bg-raised);
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+ color: var(--accent);
+ word-break: break-all;
+}
+
+/* ── Header ── */
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--bg);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border);
+}
+
+.nav-container {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0.875rem 1.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.nav-logo {
+ font-family: var(--font-serif);
+ font-style: italic;
+ font-size: 1.25rem;
+ color: var(--text);
+}
+.nav-logo:hover { opacity: 0.6; }
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.nav-menu a {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+}
+.nav-menu a:hover { color: var(--text); opacity: 1; }
+
+.nav-dropdown {
+ position: relative;
+}
+.nav-dropdown details {
+ position: relative;
+}
+.nav-dropdown summary {
+ list-style: none;
+ cursor: pointer;
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+.nav-dropdown summary::-webkit-details-marker { display: none; }
+.nav-dropdown summary:hover,
+.nav-dropdown details[open] summary {
+ color: var(--text);
+}
+.nav-dropdown .dropdown-menu {
+ position: absolute;
+ left: 0;
+ top: calc(100% + 0.5rem);
+ min-width: 220px;
+ margin: 0;
+ padding: 0.5rem 0;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 0.75rem;
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.08);
+ list-style: none;
+ z-index: 200;
+ display: none;
+}
+.nav-dropdown details[open] .dropdown-menu { display: block; }
+.nav-dropdown .dropdown-menu li { white-space: nowrap; }
+.nav-dropdown .dropdown-menu a,
+.nav-dropdown .dropdown-disabled {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: var(--text-muted);
+ font-size: 0.875rem;
+}
+.nav-dropdown .dropdown-menu a:hover {
+ background: rgba(255,255,255,0.04);
+ color: var(--text);
+}
+.nav-dropdown .dropdown-disabled { cursor: default; color: var(--text-dim); }
+.nav-dropdown summary:focus { outline: none; }
+@media (max-width: 600px) {
+ .nav-dropdown .dropdown-menu {
+ position: static;
+ box-shadow: none;
+ border: none;
+ }
+}
+
+/* ── Main ── */
+
+.main-content {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+/* ── Hero ── */
+
+.hero {
+ padding: 4rem 0 3rem;
+}
+
+.hero-eyebrow {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.25rem;
+ letter-spacing: 0.04em;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 3.5rem);
+ color: var(--text);
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.02em;
+}
+
+.hero-bio {
+ font-size: 1.0625rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+ max-width: 560px;
+ margin-bottom: 1.5rem;
+}
+
+.hero-bio a {
+ color: var(--accent);
+ border-bottom: 1px solid var(--accent-dim);
+ transition: border-color var(--transition), opacity var(--transition);
+}
+.hero-bio a:hover {
+ opacity: 1;
+ border-bottom-color: var(--accent);
+}
+
+/* ── Sections ── */
+
+.content-section {
+ padding: 2.5rem 0;
+ border-top: 1px solid var(--border);
+}
+
+.section-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ color: var(--text-dim);
+ margin-bottom: 1.25rem;
+}
+
+/* ── Try it card ── */
+
+.try-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ overflow: hidden;
+}
+
+.try-card-body { padding: 1.25rem; }
+
+.url-row {
+ display: flex;
+ gap: 0.5rem;
+ align-items: center;
+}
+
+.url-input {
+ flex: 1;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ padding: 0.6rem 1rem;
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ color: var(--text);
+ outline: none;
+ transition: border-color var(--transition);
+}
+.url-input::placeholder { color: var(--text-dim); }
+.url-input:focus { border-color: var(--accent); }
+
+/* ── Larger toggle ── */
+
+.larger-toggle {
+ display: flex;
+ align-items: center;
+ gap: 0.375rem;
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ cursor: pointer;
+ white-space: nowrap;
+ flex-shrink: 0;
+ user-select: none;
+ transition: color var(--transition);
+}
+.larger-toggle:hover { color: var(--text-muted); }
+
+.larger-toggle input[type="checkbox"] {
+ accent-color: var(--accent);
+ width: 0.875rem;
+ height: 0.875rem;
+ cursor: pointer;
+}
+
+.try-btn {
+ background: var(--accent);
+ color: var(--bg);
+ border: none;
+ border-radius: 999px;
+ padding: 0.6rem 1.25rem;
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ cursor: pointer;
+ white-space: nowrap;
+ transition: opacity var(--transition);
+ flex-shrink: 0;
+}
+.try-btn:hover { opacity: 0.85; }
+.try-btn:disabled { opacity: 0.4; cursor: not-allowed; }
+
+.try-result {
+ display: none;
+ margin-top: 1rem;
+}
+.try-result.show { display: block; }
+
+/* ── Favicon result preview ── */
+
+.result-favicon-wrap {
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ background: var(--bg-raised);
+ padding: 1.25rem;
+ margin-bottom: 0.875rem;
+ display: flex;
+ align-items: center;
+ gap: 2rem;
+}
+
+.favicon-sizes {
+ display: flex;
+ align-items: flex-end;
+ gap: 1.25rem;
+ flex-shrink: 0;
+}
+
+.favicon-size-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.375rem;
+}
+
+.favicon-size-item span {
+ font-family: var(--font-mono);
+ font-size: 0.625rem;
+ color: var(--text-dim);
+ letter-spacing: 0.04em;
+}
+
+.favicon-size-item img {
+ display: block;
+ image-rendering: auto;
+ border-radius: 3px;
+ background: var(--bg-card);
+}
+
+.favicon-size-large img {
+ width: 64px;
+ height: 64px;
+ object-fit: contain;
+}
+
+/* ── Result URL row ── */
+
+.result-url-row {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.result-url-box {
+ flex: 1;
+ font-family: var(--font-mono);
+ font-size: 0.775rem;
+ padding: 0.5rem 0.875rem;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ color: var(--text-muted);
+ word-break: break-all;
+ line-height: 1.5;
+}
+
+.copy-btn {
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ padding: 0.5rem 1rem;
+ font-family: var(--font-sans);
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ cursor: pointer;
+ white-space: nowrap;
+ transition: border-color var(--transition), color var(--transition);
+ flex-shrink: 0;
+}
+.copy-btn:hover { border-color: var(--accent); color: var(--accent); }
+.copy-btn.copied { background: var(--green); border-color: var(--green); color: var(--bg); }
+
+.try-error {
+ display: none;
+ font-size: 0.875rem;
+ color: var(--red);
+ margin-top: 0.75rem;
+}
+.try-error.show { display: block; }
+
+.try-card-meta {
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ padding: 0.75rem 1.25rem;
+ border-top: 1px solid var(--border);
+}
+
+/* ── Usage examples ── */
+
+.usage-list {
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+}
+
+.usage-item h3 {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text);
+ margin-bottom: 0.375rem;
+}
+
+.usage-item p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.5rem;
+ line-height: 1.6;
+}
+
+.code-block {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 0.875rem 1rem;
+ font-family: var(--font-mono);
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ overflow-x: auto;
+ line-height: 1.7;
+ white-space: pre;
+}
+
+.code-block .hl { color: var(--accent); }
+
+/* ── How it works ── */
+
+.steps {
+ display: flex;
+ flex-direction: column;
+}
+
+.step {
+ display: flex;
+ gap: 1rem;
+ padding: 1rem 0;
+ border-bottom: 1px solid var(--border);
+}
+.step:last-child { border-bottom: none; }
+
+.step-num {
+ flex-shrink: 0;
+ width: 1.75rem;
+ height: 1.75rem;
+ border-radius: 50%;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: var(--accent);
+ margin-top: 0.1rem;
+ font-family: var(--font-mono);
+}
+
+.step-body h3 {
+ font-family: var(--font-serif);
+ font-size: 0.9375rem;
+ font-weight: 400;
+ color: var(--text);
+ margin-bottom: 0.2rem;
+}
+.step-body p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.7;
+}
+
+/* ── Footer ── */
+
+.site-footer {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 2.5rem 1.5rem 3rem;
+ border-top: 1px solid var(--border);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ line-height: 1.8;
+}
+
+.site-footer a { color: var(--text-muted); }
+.site-footer a:hover { color: var(--text); opacity: 1; }
+
+/* ── Responsive ── */
+
+@media (max-width: 600px) {
+ .hero { padding: 2.5rem 0 2rem; }
+ .url-row { flex-wrap: wrap; }
+ .larger-toggle { order: 3; width: 100%; padding-left: 0.25rem; }
+ .try-btn { border-radius: var(--radius); }
+ .nav-menu { display: none; }
+ .result-favicon-wrap { flex-direction: column; align-items: flex-start; gap: 1rem; }
+ .favicon-sizes { gap: 1rem; }
+}
\ No newline at end of file
diff --git a/public/css/imrs.css b/public/css/imrs.css
new file mode 100644
index 0000000..340d53e
--- /dev/null
+++ b/public/css/imrs.css
@@ -0,0 +1,455 @@
+:root {
+ --bg-deep: #100b09;
+ --bg: #1c1310;
+ --bg-raised: #251a15;
+ --bg-card: #2e2018;
+ --border: #3d2b1f;
+ --border-hover:#5c3d28;
+ --text: #f4deb8;
+ --text-muted: #e8c28a;
+ --text-dim: #b37a48;
+ --accent: #d4975c;
+ --accent-bright:#e8c28a;
+ --accent-dim: rgba(212, 151, 92, 0.14);
+ --green: #4caf7d;
+ --red: #e06c6c;
+ --font-serif: 'Lota', Georgia, 'Times New Roman', serif;
+ --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace;
+ --font-sans: 'DM Sans', system-ui, sans-serif;
+ --radius: 10px;
+ --transition: 0.2s ease;
+ --max-w: 680px;
+}
+
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { scroll-behavior: smooth; }
+
+body {
+ font-family: var(--font-serif);
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--text);
+ background-color: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ── Typography ── */
+
+h1, h2, h3 {
+ font-family: var(--font-mono);
+ font-weight: 600;
+ line-height: 1.2;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+a:hover { opacity: 0.75; }
+
+code {
+ font-family: var(--font-mono);
+ font-size: 0.875em;
+ background: var(--bg-raised);
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+ color: var(--accent);
+ word-break: break-all;
+}
+
+/* ── Header ── */
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--bg);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border);
+}
+
+.nav-container {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0.875rem 1.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.nav-logo {
+ font-family: var(--font-serif);
+ font-style: italic;
+ font-size: 1.25rem;
+ color: var(--text);
+}
+.nav-logo:hover { opacity: 0.6; }
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.nav-menu a {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+}
+.nav-menu a:hover { color: var(--text); opacity: 1; }
+
+.nav-dropdown {
+ position: relative;
+}
+.nav-dropdown details {
+ position: relative;
+}
+.nav-dropdown summary {
+ list-style: none;
+ cursor: pointer;
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+.nav-dropdown summary::-webkit-details-marker { display: none; }
+.nav-dropdown summary:hover,
+.nav-dropdown details[open] summary {
+ color: var(--text);
+}
+.nav-dropdown .dropdown-menu {
+ position: absolute;
+ left: 0;
+ top: calc(100% + 0.5rem);
+ min-width: 220px;
+ margin: 0;
+ padding: 0.5rem 0;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 0.75rem;
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.08);
+ list-style: none;
+ z-index: 200;
+ display: none;
+}
+.nav-dropdown details[open] .dropdown-menu { display: block; }
+.nav-dropdown .dropdown-menu li { white-space: nowrap; }
+.nav-dropdown .dropdown-menu a,
+.nav-dropdown .dropdown-disabled {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: var(--text-muted);
+ font-size: 0.875rem;
+}
+.nav-dropdown .dropdown-menu a:hover {
+ background: rgba(255,255,255,0.04);
+ color: var(--text);
+}
+.nav-dropdown .dropdown-disabled { cursor: default; color: var(--text-dim); }
+.nav-dropdown summary:focus { outline: none; }
+@media (max-width: 600px) {
+ .nav-dropdown .dropdown-menu {
+ position: static;
+ box-shadow: none;
+ border: none;
+ }
+}
+
+/* ── Main ── */
+
+.main-content {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+/* ── Hero ── */
+
+.hero {
+ padding: 4rem 0 3rem;
+}
+
+.hero-eyebrow {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.25rem;
+ letter-spacing: 0.04em;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 3.5rem);
+ color: var(--text);
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.02em;
+}
+
+.hero-bio {
+ font-size: 1.0625rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+ max-width: 560px;
+ margin-bottom: 1.5rem;
+}
+
+.hero-bio a {
+ color: var(--accent);
+ border-bottom: 1px solid var(--accent-dim);
+ transition: border-color var(--transition), opacity var(--transition);
+}
+.hero-bio a:hover {
+ opacity: 1;
+ border-bottom-color: var(--accent);
+}
+
+/* ── Sections ── */
+
+.content-section {
+ padding: 2.5rem 0;
+ border-top: 1px solid var(--border);
+}
+
+.section-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ color: var(--text-dim);
+ margin-bottom: 1.25rem;
+}
+
+/* ── Try it card ── */
+
+.try-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ overflow: hidden;
+}
+
+.try-card-body { padding: 1.25rem; }
+
+.url-row {
+ display: flex;
+ gap: 0.5rem;
+}
+
+.url-input {
+ flex: 1;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ padding: 0.6rem 1rem;
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ color: var(--text);
+ outline: none;
+ transition: border-color var(--transition);
+}
+.url-input::placeholder { color: var(--text-dim); }
+.url-input:focus { border-color: var(--accent); }
+
+.try-btn {
+ background: var(--accent);
+ color: var(--bg);
+ border: none;
+ border-radius: 999px;
+ padding: 0.6rem 1.25rem;
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ cursor: pointer;
+ white-space: nowrap;
+ transition: opacity var(--transition);
+ flex-shrink: 0;
+}
+.try-btn:hover { opacity: 0.85; }
+.try-btn:disabled { opacity: 0.4; cursor: not-allowed; }
+
+.try-result {
+ display: none;
+ margin-top: 1rem;
+}
+.try-result.show { display: block; }
+
+.result-img-wrap {
+ border-radius: 8px;
+ overflow: hidden;
+ border: 1px solid var(--border);
+ margin-bottom: 0.875rem;
+ background: var(--bg-raised);
+ min-height: 120px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.result-img-wrap img {
+ width: 100%;
+ height: auto;
+ max-height: 360px;
+ object-fit: contain;
+ display: block;
+}
+
+.result-url-row {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.result-url-box {
+ flex: 1;
+ font-family: var(--font-mono);
+ font-size: 0.775rem;
+ padding: 0.5rem 0.875rem;
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ color: var(--text-muted);
+ word-break: break-all;
+ line-height: 1.5;
+}
+
+.copy-btn {
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ padding: 0.5rem 1rem;
+ font-family: var(--font-sans);
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ cursor: pointer;
+ white-space: nowrap;
+ transition: border-color var(--transition), color var(--transition);
+ flex-shrink: 0;
+}
+.copy-btn:hover { border-color: var(--accent); color: var(--accent); }
+.copy-btn.copied { background: var(--green); border-color: var(--green); color: var(--bg); }
+
+.try-error {
+ display: none;
+ font-size: 0.875rem;
+ color: var(--red);
+ margin-top: 0.75rem;
+}
+.try-error.show { display: block; }
+
+.try-card-meta {
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ padding: 0.75rem 1.25rem;
+ border-top: 1px solid var(--border);
+}
+
+/* ── Usage examples ── */
+
+.usage-list {
+ display: flex;
+ flex-direction: column;
+ gap: 1.25rem;
+}
+
+.usage-item h3 {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text);
+ margin-bottom: 0.375rem;
+}
+
+.usage-item p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.5rem;
+ line-height: 1.6;
+}
+
+.code-block {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 0.875rem 1rem;
+ font-family: var(--font-mono);
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ overflow-x: auto;
+ line-height: 1.7;
+ white-space: pre;
+}
+
+.code-block .hl { color: var(--accent); }
+
+/* ── How it works ── */
+
+.steps {
+ display: flex;
+ flex-direction: column;
+}
+
+.step {
+ display: flex;
+ gap: 1rem;
+ padding: 1rem 0;
+ border-bottom: 1px solid var(--border);
+}
+.step:last-child { border-bottom: none; }
+
+.step-num {
+ flex-shrink: 0;
+ width: 1.75rem;
+ height: 1.75rem;
+ border-radius: 50%;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: var(--accent);
+ margin-top: 0.1rem;
+ font-family: var(--font-mono);
+}
+
+.step-body h3 {
+ font-family: var(--font-serif);
+ font-size: 0.9375rem;
+ font-weight: 400;
+ color: var(--text);
+ margin-bottom: 0.2rem;
+}
+.step-body p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.7;
+}
+
+/* ── Footer ── */
+
+.site-footer {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 2.5rem 1.5rem 3rem;
+ border-top: 1px solid var(--border);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ line-height: 1.8;
+}
+
+.site-footer a { color: var(--text-muted); }
+.site-footer a:hover { color: var(--text); opacity: 1; }
+
+/* ── Responsive ── */
+
+@media (max-width: 600px) {
+ .hero { padding: 2.5rem 0 2rem; }
+ .info-grid { grid-template-columns: 1fr; }
+ .url-row { flex-direction: column; }
+ .try-btn { border-radius: var(--radius); }
+ .nav-menu { display: none; }
+}
\ No newline at end of file
diff --git a/public/css/index.css b/public/css/index.css
new file mode 100644
index 0000000..f249231
--- /dev/null
+++ b/public/css/index.css
@@ -0,0 +1,571 @@
+:root {
+ --bg-deep: #100b09; /* espresso — deepest bg */
+ --bg: #1c1310; /* dark roast — page bg */
+ --bg-raised: #251a15; /* raised surface */
+ --bg-card: #2e2018; /* card bg */
+ --border: #3d2b1f; /* default border */
+ --border-hover:#5c3d28; /* hover border */
+ --text: #f4deb8; /* cream — primary text */
+ --text-muted: #e8c28a; /* latte — secondary text */
+ --text-dim: #b37a48; /* placeholder / disabled */
+ --accent: #d4975c; /* caramel — primary accent*/
+ --accent-bright:#e8c28a; /* accent hover/focus */
+ --accent-dim: rgba(212, 151, 92, 0.14);
+ --font-serif: 'Lota', Georgia, 'Times New Roman', serif;
+ --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace;
+ --font-sans: 'DM Sans', system-ui, sans-serif;
+ --radius: 10px;
+ --transition: 0.2s ease;
+ --max-w: 720px;
+}
+
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { scroll-behavior: smooth; }
+
+body {
+ font-family: var(--font-serif);
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--text);
+ background-color: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+#css-error {
+ display:none;
+}
+/* ── Typography ── */
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+a:hover { opacity: 0.75; }
+
+code {
+ font-family: var(--font-mono);
+ font-size: 0.875em;
+ background: var(--bg-raised);
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+}
+
+/* ── Main ── */
+
+.main-content {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+/* ── Hero ── */
+
+.hero {
+ padding: 4rem 0 3rem;
+}
+
+.hero-eyebrow {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.25rem;
+ letter-spacing: 0.04em;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 3.5rem);
+ color: var(--text);
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.02em;
+}
+
+.hero-bio {
+ font-size: 1.0625rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+ max-width: 560px;
+ margin-bottom: 1.5rem;
+}
+
+.hero-bio a {
+ color: var(--accent);
+ border-bottom: 1px solid var(--accent-dim);
+ transition: border-color var(--transition), opacity var(--transition);
+}
+.hero-bio a:hover {
+ opacity: 1;
+ border-bottom-color: var(--accent);
+}
+
+.visitor-badge {
+ display: inline-block;
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ background: var(--bg-raised);
+ border: 1px solid var(--border);
+ padding: 0.25rem 0.875rem;
+ border-radius: 999px;
+ letter-spacing: 0.01em;
+}
+
+
+
+/* ── Sections ── */
+
+.content-section {
+ padding: 2.5rem 0;
+ border-top: 1px solid var(--border);
+}
+
+.section-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ color: var(--text-dim);
+ margin-bottom: 1.25rem;
+}
+
+.note {
+ font-size: 0.75rem;
+ color: var(--text-dim);
+ margin-bottom: 1rem;
+ font-style: italic;
+}
+
+/* ── Skills ── */
+
+.skills-container {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.skills-icons {
+ height: auto;
+ display: block;
+}
+
+/* ── Cards ── */
+
+.card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ overflow: hidden;
+ transition: border-color var(--transition);
+}
+.card:hover { border-color: var(--border-hover); }
+
+.card-inner {
+ display: flex;
+ align-items: flex-start;
+ gap: 1rem;
+ padding: 1.25rem;
+}
+
+.card-icon {
+ font-size: 1.25rem;
+ color: var(--accent);
+ flex-shrink: 0;
+ margin-top: 0.1rem;
+}
+
+.card-text {
+ flex: 1;
+ font-size: 0.9375rem;
+ color: var(--text-muted);
+ padding: 1.25rem;
+ line-height: 1.75;
+}
+
+/* when card-text is inside card-inner, don't double-pad */
+.card-inner .card-text {
+ padding: 0;
+}
+
+.card-meta {
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ padding: 0.75rem 1.25rem;
+ border-top: 1px solid var(--border);
+}
+
+.card-text a {
+ color: var(--accent);
+}
+
+.loading-text {
+ color: var(--text-dim);
+ font-style: italic;
+}
+
+/* Music card specifics */
+.track-name {
+ display: block;
+ font-family: var(--font-serif);
+ font-size: 1.0625rem;
+ color: var(--text);
+ margin-bottom: 0.2rem;
+}
+
+.track-artist {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+}
+
+/* Post images and styling */
+
+#post-media {
+ border-top: 1px solid var(--border);
+}
+
+/* Image grid layouts */
+.post-media-grid {
+ display: grid;
+ gap: 0.25rem;
+}
+
+.post-media-grid.grid-1 {
+ grid-template-columns: 1fr;
+}
+
+.post-media-grid.grid-2 {
+ grid-template-columns: repeat(2, 1fr);
+}
+
+.post-media-grid.grid-3 {
+ grid-template-columns: repeat(2, 1fr);
+}
+
+.post-media-grid.grid-3 > :nth-child(1) {
+ grid-column: span 2;
+}
+
+.post-media-grid.grid-4 {
+ grid-template-columns: repeat(2, 1fr);
+}
+
+.post-media-item {
+ width: 100%;
+ height: auto;
+ display: block;
+ border: 1px solid var(--border);
+ border-radius: 4px;
+ aspect-ratio: 16 / 10;
+ object-fit: cover;
+}
+
+/* Post text and rich text elements */
+.post-text {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ line-height: 1.6;
+ margin-bottom: 0.75rem;
+}
+
+.post-mention,
+.post-link,
+.post-tag {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+
+.post-mention:hover,
+.post-link:hover,
+.post-tag:hover {
+ opacity: 0.75;
+}
+
+.post-mention {
+ font-weight: 500;
+}
+
+.post-tag {
+ font-weight: 500;
+}
+
+.post-link-cta {
+ display: inline-block;
+ font-size: 0.8125rem;
+ opacity: 0.6;
+ transition: opacity var(--transition);
+ margin-top: 0.5rem;
+}
+
+.post-link-cta:hover {
+ opacity: 1;
+}
+
+/* ── Social list ── */
+
+.social-list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 0.125rem;
+}
+
+.social-item {
+ display: flex;
+ align-items: center;
+ gap: 0.875rem;
+ padding: 0.875rem 1rem;
+ border-radius: var(--radius);
+ color: var(--text);
+ transition: background var(--transition), color var(--transition);
+ text-decoration: none;
+ border: 1px solid transparent;
+}
+.social-item:hover {
+ background: var(--bg-card);
+ border-color: var(--border);
+ opacity: 1;
+}
+
+.social-item i {
+ font-size: 1.125rem;
+ color: var(--accent);
+ width: 1.5rem;
+ text-align: center;
+ flex-shrink: 0;
+}
+
+.social-item > span:first-of-type {
+ font-size: 0.9375rem;
+ font-weight: 500;
+ color: var(--text);
+ min-width: 5rem;
+}
+
+.social-handle {
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ margin-left: auto;
+ font-family: var(--font-mono);
+}
+
+/* ── Link grid ── */
+
+.link-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 0.75rem;
+}
+
+.grid-link {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 1.125rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ text-decoration: none;
+ transition: border-color var(--transition), transform var(--transition);
+}
+.grid-link:hover {
+ border-color: var(--accent);
+ transform: translateY(-1px);
+ opacity: 1;
+}
+
+.grid-link-title {
+ font-family: var(--font-serif);
+ font-size: 1rem;
+ color: #d4a574;
+ line-height: 1.3;
+}
+
+.grid-link-desc {
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ line-height: 1.4;
+}
+
+/* ── Footer ── */
+
+.footer-tor { margin-top: 0.25rem; }
+
+/* ── Responsive ── */
+
+@media (max-width: 600px) {
+ .hero { padding: 2.5rem 0 2rem; }
+
+ .link-grid { grid-template-columns: 1fr; }
+
+ .social-handle { display: none; }
+}
+
+/* ── Section label "more" link ── */
+
+.section-label {
+ display: flex;
+ align-items: baseline;
+ gap: 0.75rem;
+}
+
+.section-more {
+ font-size: 0.75rem;
+ color: var(--text-dim);
+ font-weight: 400;
+ letter-spacing: 0.02em;
+ text-transform: none;
+ border-bottom: 1px solid transparent;
+ transition: color var(--transition), border-color var(--transition);
+}
+.section-more:hover {
+ color: var(--accent);
+ border-bottom-color: var(--accent);
+ opacity: 1;
+}
+
+/* ── Blog post list ── */
+
+.blog-post-list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+
+.blog-post-link {
+ display: flex;
+ flex-direction: column;
+ gap: 0.2rem;
+ padding: 1rem 1.125rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ text-decoration: none;
+ transition: border-color var(--transition), transform var(--transition);
+ color: inherit;
+}
+.blog-post-link:hover {
+ border-color: var(--accent);
+ transform: translateY(-1px);
+ opacity: 1;
+}
+
+.blog-post-title {
+ font-family: var(--font-serif);
+ font-size: 0.9375rem;
+ color: var(--text);
+ line-height: 1.4;
+}
+
+.blog-post-desc {
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ line-height: 1.45;
+}
+
+.blog-post-date {
+ font-family: var(--font-mono);
+ font-size: 0.75rem;
+ color: var(--text-dim);
+ margin-top: 0.15rem;
+}
+
+/* ── Home photo strip ── */
+
+.photo-strip {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0.5rem;
+}
+
+.photo-strip-item {
+ aspect-ratio: 1 / 1;
+ overflow: hidden;
+ border-radius: 6px;
+ border: 1px solid var(--border);
+ cursor: pointer;
+ background: var(--bg-card);
+ transition: border-color var(--transition), transform var(--transition);
+}
+.photo-strip-item:hover {
+ border-color: var(--accent);
+ transform: scale(1.02);
+}
+
+.photo-strip-item img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ display: block;
+ transition: opacity var(--transition);
+}
+
+/* ── Photo modal ── */
+
+.photo-modal {
+ position: fixed;
+ inset: 0;
+ z-index: 200;
+ background: rgba(10, 9, 8, 0.92);
+ backdrop-filter: blur(8px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 1.5rem;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.2s ease;
+}
+.photo-modal.active {
+ opacity: 1;
+ pointer-events: all;
+}
+
+.modal-img {
+ max-width: 100%;
+ max-height: 90vh;
+ border-radius: 8px;
+ object-fit: contain;
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
+}
+
+.modal-close {
+ position: absolute;
+ top: 1.25rem;
+ right: 1.25rem;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 50%;
+ width: 2.25rem;
+ height: 2.25rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--text-muted);
+ font-size: 0.875rem;
+ cursor: pointer;
+ transition: border-color var(--transition), color var(--transition);
+}
+.modal-close:hover {
+ border-color: var(--accent);
+ color: var(--accent);
+}
+
+@media (max-width: 600px) {
+ .photo-strip {
+ grid-template-columns: repeat(3, 1fr);
+ }
+
+ /* Stack all grid images on mobile */
+ .post-media-grid.grid-2,
+ .post-media-grid.grid-3,
+ .post-media-grid.grid-4 {
+ grid-template-columns: 1fr;
+ }
+
+ .post-media-grid.grid-3 > :nth-child(1) {
+ grid-column: span 1;
+ }
+}
\ No newline at end of file
diff --git a/public/css/luna.css b/public/css/luna.css
new file mode 100644
index 0000000..b89bf8b
--- /dev/null
+++ b/public/css/luna.css
@@ -0,0 +1,438 @@
+/* ── Design Tokens ── */
+:root {
+ --bg-deep: #100b09; /* espresso — deepest bg */
+ --bg: #1c1310; /* dark roast — page bg */
+ --bg-raised: #251a15; /* raised surface */
+ --bg-card: #2e2018; /* card bg */
+ --border: #3d2b1f; /* default border */
+ --border-hover: #5c3d28; /* hover border */
+ --text: #f4deb8; /* cream — primary text */
+ --text-muted: #e8c28a; /* latte — secondary text */
+ --text-dim: #b37a48; /* placeholder / disabled */
+ --accent: #d4975c; /* caramel — primary accent*/
+ --accent-bright:#e8c28a; /* accent hover/focus */
+ --accent-dim: rgba(212, 151, 92, 0.14);
+ --accent-glow: rgba(212, 151, 92, 0.08);
+ --green: #4caf7d;
+ --red: #e06c6c;
+ --font-serif: 'Lota', Georgia, 'Times New Roman', serif;
+ --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace;
+ --font-sans: 'DM Sans', system-ui, sans-serif;
+ --radius: 10px;
+ --transition: 0.2s ease;
+ --max-w: 720px;
+}
+
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { scroll-behavior: smooth; }
+
+body {
+ font-family: var(--font-serif);
+ font-size: 16px;
+ line-height: 1.7;
+ color: var(--text);
+ background-color: var(--bg);
+ -webkit-font-smoothing: antialiased;
+}
+
+/* ── Typography ── */
+
+h1, h2, h3 {
+ font-family: var(--font-mono);
+ font-weight: 600;
+ line-height: 1.2;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity var(--transition);
+}
+a:hover { opacity: 0.75; }
+
+code {
+ font-family: var(--font-mono);
+ font-size: 0.875em;
+ background: var(--bg-raised);
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+ color: var(--accent);
+ word-break: break-all;
+}
+
+/* ── Header ── */
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--bg);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border);
+}
+
+.nav-container {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0.875rem 1.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.nav-logo {
+ font-family: var(--font-serif);
+ font-style: italic;
+ font-size: 1.25rem;
+ color: var(--text);
+}
+.nav-logo:hover { opacity: 0.6; }
+
+.nav-menu {
+ list-style: none;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.nav-menu a {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+}
+.nav-menu a:hover { color: var(--text); opacity: 1; }
+
+.nav-dropdown {
+ position: relative;
+}
+.nav-dropdown details {
+ position: relative;
+}
+.nav-dropdown summary {
+ list-style: none;
+ cursor: pointer;
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ letter-spacing: 0.01em;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+.nav-dropdown summary::-webkit-details-marker { display: none; }
+.nav-dropdown summary:hover,
+.nav-dropdown details[open] summary {
+ color: var(--text);
+}
+.nav-dropdown .dropdown-menu {
+ position: absolute;
+ left: 0;
+ top: calc(100% + 0.5rem);
+ min-width: 220px;
+ margin: 0;
+ padding: 0.5rem 0;
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 0.75rem;
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.3);
+ list-style: none;
+ z-index: 200;
+ display: none;
+}
+.nav-dropdown details[open] .dropdown-menu { display: block; }
+.nav-dropdown .dropdown-menu li { white-space: nowrap; }
+.nav-dropdown .dropdown-menu a,
+.nav-dropdown .dropdown-disabled {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: var(--text-muted);
+ font-size: 0.875rem;
+}
+.nav-dropdown .dropdown-menu a:hover {
+ background: rgba(255,255,255,0.04);
+ color: var(--text);
+}
+.nav-dropdown .dropdown-disabled { cursor: default; color: var(--text-dim); }
+.nav-dropdown summary:focus { outline: none; }
+@media (max-width: 600px) {
+ .nav-dropdown .dropdown-menu {
+ position: static;
+ box-shadow: none;
+ border: none;
+ }
+}
+
+/* ── Main ── */
+
+.main-content {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+/* ── Hero ── */
+
+.hero {
+ padding: 4rem 0 3rem;
+}
+
+.hero-eyebrow {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ margin-bottom: 0.25rem;
+ letter-spacing: 0.04em;
+}
+
+.hero-title {
+ font-size: clamp(2.5rem, 6vw, 3.5rem);
+ color: var(--text);
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.02em;
+}
+
+.hero-bio {
+ font-size: 1.0625rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+ max-width: 560px;
+ margin-bottom: 1.5rem;
+}
+
+.hero-bio a {
+ color: var(--accent);
+ border-bottom: 1px solid var(--accent-dim);
+ transition: border-color var(--transition), opacity var(--transition);
+}
+.hero-bio a:hover {
+ opacity: 1;
+ border-bottom-color: var(--accent);
+}
+
+/* ── Sections ── */
+
+.content-section {
+ padding: 2.5rem 0;
+ border-top: 1px solid var(--border);
+}
+
+.section-label {
+ font-family: var(--font-sans);
+ font-size: 0.75rem;
+ font-weight: 500;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ color: var(--text-dim);
+ margin-bottom: 1.25rem;
+}
+
+/* ── Feature Cards ── */
+
+.feature-cards {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 0.75rem;
+}
+
+.feature-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 1.25rem;
+ transition: border-color var(--transition), transform var(--transition);
+}
+.feature-card:hover {
+ border-color: var(--border-hover);
+ transform: translateY(-1px);
+}
+
+.feature-card .feature-icon {
+ font-size: 1.5rem;
+ color: var(--accent);
+ opacity: 0.8;
+ margin-bottom: 0.75rem;
+ display: block;
+}
+
+.feature-card h3 {
+ font-family: var(--font-sans);
+ font-size: 0.9375rem;
+ font-weight: 600;
+ color: var(--text);
+ margin-bottom: 0.5rem;
+}
+
+.feature-card p {
+ font-size: 0.8125rem;
+ color: var(--text-muted);
+ line-height: 1.6;
+}
+
+/* ── Tabs ── */
+
+.tab-bar {
+ display: flex;
+ gap: 0;
+ border-bottom: 1px solid var(--border);
+ overflow-x: auto;
+ scrollbar-width: none;
+ margin-bottom: 2rem;
+}
+.tab-bar::-webkit-scrollbar { display: none; }
+
+.tab-btn {
+ font-family: var(--font-sans);
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--text-muted);
+ background: none;
+ border: none;
+ border-bottom: 2px solid transparent;
+ padding: 0.75rem 1.125rem;
+ cursor: pointer;
+ white-space: nowrap;
+ margin-bottom: -1px;
+ transition: color var(--transition), border-color var(--transition);
+ letter-spacing: 0.01em;
+}
+.tab-btn:hover { color: var(--text); }
+.tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }
+.tab-btn i { margin-right: 0.375rem; }
+
+.tab-pane { display: none; padding-bottom: 4rem; }
+.tab-pane.active { display: block; }
+
+/* ── About / Prose ── */
+
+.prose {
+ font-size: 0.9375rem;
+ color: var(--text-muted);
+ line-height: 1.8;
+}
+.prose p + p { margin-top: 1rem; }
+.prose a { color: var(--accent); border-bottom: 1px solid var(--accent-dim); }
+.prose a:hover { border-bottom-color: var(--accent); opacity: 1; }
+.prose strong { color: var(--text); font-weight: 600; }
+.prose h3 {
+ font-family: var(--font-serif);
+ font-size: 1rem;
+ font-weight: 400;
+ color: var(--text);
+ margin-top: 1.5rem;
+ margin-bottom: 0.75rem;
+}
+.prose ul, .prose ol {
+ margin-left: 1.25rem;
+ margin-top: 0.75rem;
+ margin-bottom: 0.75rem;
+}
+.prose li {
+ margin-bottom: 0.5rem;
+ color: var(--text-muted);
+}
+.prose li strong { color: var(--text); }
+
+/* ── Steps (How it Works) ── */
+
+.steps {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 2rem;
+}
+
+.step {
+ display: flex;
+ gap: 1rem;
+ padding: 1rem 0;
+ border-bottom: 1px solid var(--border);
+}
+.step:last-child { border-bottom: none; }
+
+.step-num {
+ flex-shrink: 0;
+ width: 1.75rem;
+ height: 1.75rem;
+ border-radius: 50%;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: var(--accent);
+ margin-top: 0.1rem;
+ font-family: var(--font-mono);
+}
+
+.step-body h3 {
+ font-family: var(--font-serif);
+ font-size: 0.9375rem;
+ font-weight: 400;
+ color: var(--text);
+ margin-bottom: 0.2rem;
+}
+.step-body p {
+ font-size: 0.875rem;
+ color: var(--text-muted);
+ line-height: 1.7;
+}
+
+/* ── Code Blocks ── */
+
+.code-block {
+ margin: 1.5rem 0;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ background: var(--bg-card);
+ overflow: hidden;
+}
+
+.code-label {
+ font-family: var(--font-mono);
+ font-size: 0.75rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ color: var(--text-dim);
+ background: var(--bg-raised);
+ padding: 0.5rem 1rem;
+ border-bottom: 1px solid var(--border);
+ letter-spacing: 0.05em;
+}
+
+.code-block pre {
+ margin: 0;
+ padding: 1rem;
+ overflow-x: auto;
+ font-family: var(--font-mono);
+ font-size: 0.8125rem;
+ line-height: 1.6;
+ color: var(--text-muted);
+}
+
+.code-block code {
+ background: none;
+ padding: 0;
+ color: inherit;
+}
+
+/* ── Footer ── */
+
+.site-footer {
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 2.5rem 1.5rem 3rem;
+ border-top: 1px solid var(--border);
+ font-size: 0.8125rem;
+ color: var(--text-dim);
+ line-height: 1.8;
+}
+
+.site-footer a { color: var(--text-muted); }
+.site-footer a:hover { color: var(--text); opacity: 1; }
+
+/* ── Responsive ── */
+
+@media (max-width: 600px) {
+ .hero { padding: 2.5rem 0 2rem; }
+ .feature-cards { grid-template-columns: 1fr; }
+ .nav-menu { display: none; }
+}
diff --git a/public/css/privo-api.css b/public/css/privo-api.css
new file mode 100644
index 0000000..3f23270
--- /dev/null
+++ b/public/css/privo-api.css
@@ -0,0 +1,199 @@
+:root {
+ --bg: #1c1310;
+ --surface: #2e2018;
+ --text: #f4deb8;
+ --muted: #e8c28a;
+ --accent: #d4975c;
+ --accent-hover: #e8c28a;
+ --error: #ef4444;
+ --code-bg: #150f0d;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
+ background: var(--bg);
+ color: var(--text);
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 2rem;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: none;
+ transition: opacity 0.2s;
+}
+
+a:hover {
+ opacity: 0.8;
+}
+
+/* Wider than the home page (520px) to suit documentation content */
+.container {
+ max-width: 900px;
+ width: 100%;
+}
+
+header {
+ text-align: left;
+ margin-bottom: 3rem;
+ padding-bottom: 1.5rem;
+ border-bottom: 1px solid rgba(212, 151, 92, 0.2);
+}
+
+h1 {
+ font-size: 2.5rem;
+ letter-spacing: -0.02em;
+ margin-bottom: 0.5rem;
+}
+
+.tagline {
+ color: var(--muted);
+ font-size: 1.1rem;
+}
+
+h2 {
+ font-size: 1.75rem;
+ color: var(--accent);
+ margin-top: 2.5rem;
+ margin-bottom: 1rem;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+h3 {
+ font-size: 1.25rem;
+ margin-top: 1.5rem;
+ margin-bottom: 0.75rem;
+ color: var(--text);
+}
+
+p,
+li {
+ line-height: 1.6;
+ margin-bottom: 0.75rem;
+ color: var(--muted);
+}
+
+ul {
+ margin-left: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+/* Code blocks */
+pre {
+ background: var(--code-bg);
+ border: 1px solid rgba(212, 151, 92, 0.3);
+ border-radius: 10px;
+ padding: 1.25rem;
+ overflow-x: auto;
+ margin-bottom: 1.5rem;
+ font-family: 'SF Mono', 'Fira Code', monospace;
+ font-size: 0.9rem;
+ color: #fff;
+}
+
+code {
+ font-family: 'SF Mono', 'Fira Code', monospace;
+}
+
+/* Inline code */
+p code,
+li code {
+ background: var(--surface);
+ padding: 0.2rem 0.4rem;
+ border-radius: 6px;
+ color: var(--accent);
+ font-size: 0.9em;
+}
+
+/* Tables */
+table {
+ width: 100%;
+ border-collapse: collapse;
+ margin: 1.5rem 0;
+ background: var(--surface);
+ border-radius: 10px;
+ overflow: hidden;
+}
+
+th,
+td {
+ padding: 0.75rem 1rem;
+ text-align: left;
+ border-bottom: 1px solid rgba(212, 151, 92, 0.2);
+}
+
+th {
+ background: rgba(212, 151, 92, 0.1);
+ color: var(--accent);
+ font-weight: 600;
+}
+
+tr:last-child td {
+ border-bottom: none;
+}
+
+/* Method badges */
+.method {
+ display: inline-block;
+ padding: 0.2rem 0.6rem;
+ border-radius: 6px;
+ font-size: 0.75rem;
+ font-weight: bold;
+ text-transform: uppercase;
+ margin-right: 0.5rem;
+}
+
+.get {
+ background: #2563eb;
+ color: white;
+}
+
+.post {
+ background: #16a34a;
+ color: white;
+}
+
+footer {
+ margin-top: auto;
+ padding-top: 3rem;
+ color: var(--muted);
+ font-size: 0.85rem;
+ text-align: center;
+}
+
+/* Back-to-home link, styled like the site's buttons */
+.nav-link {
+ display: inline-block;
+ margin-bottom: 2rem;
+ padding: 0.5rem 1rem;
+ background: var(--surface);
+ border: 1px solid var(--accent);
+ border-radius: 10px;
+ color: var(--accent);
+ font-weight: 500;
+}
+
+.nav-link:hover {
+ background: rgba(212, 151, 92, 0.15);
+}
+
+@media (max-width: 480px) {
+ body {
+ padding: 1.25rem;
+ }
+
+ h1 {
+ font-size: 2rem;
+ }
+}
diff --git a/public/css/privo.css b/public/css/privo.css
new file mode 100644
index 0000000..ea80772
--- /dev/null
+++ b/public/css/privo.css
@@ -0,0 +1,194 @@
+:root {
+ --bg: #1c1310;
+ --surface: #2e2018;
+ --text: #f4deb8;
+ --muted: #e8c28a;
+ --accent: #d4975c;
+ --accent-hover: #e8c28a;
+ --error: #ef4444;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
+ background: var(--bg);
+ color: var(--text);
+ min-height: 100vh;
+ padding: 0;
+}
+
+main {
+ padding: 2rem 1rem;
+}
+
+a {
+ color: #d4975c;
+ text-decoration: none;
+ transition: opacity 0.2s;
+}
+
+a:hover {
+ opacity: 0.8;
+}
+
+.container {
+ max-width: 520px;
+ width: 100%;
+ margin: 0 auto;
+ text-align: center;
+}
+
+.hero h1 {
+ font-size: 2.5rem;
+ margin-bottom: 0.25rem;
+ letter-spacing: -0.02em;
+}
+
+.logo-accent {
+ color: var(--accent);
+}
+
+.hero span {
+ color: var(--accent);
+}
+
+.tagline {
+ color: var(--muted);
+ font-size: 1rem;
+ margin-bottom: 2rem;
+}
+
+.input-group {
+ display: flex;
+ gap: 0.5rem;
+ margin-bottom: 1rem;
+}
+
+input {
+ flex: 1;
+ padding: 0.875rem 1rem;
+ border-radius: 10px;
+ border: 1px solid #d4975c;
+ background: var(--surface);
+ color: var(--text);
+ font-size: 1rem;
+ transition: border-color 0.2s;
+}
+
+input:focus {
+ outline: none;
+ border-color: var(--accent);
+}
+
+input::placeholder {
+ color: var(--muted);
+}
+
+button {
+ padding: 0.875rem 1.75rem;
+ border-radius: 10px;
+ border: none;
+ background: var(--accent);
+ color: white;
+ font-weight: 600;
+ font-size: 1rem;
+ cursor: pointer;
+ transition: background 0.2s, transform 0.1s;
+}
+
+button:hover {
+ background: var(--accent-hover);
+}
+
+button:active {
+ transform: scale(0.98);
+}
+
+button:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
+
+.result-area {
+ margin-top: 1.5rem;
+ display: none;
+}
+
+.result-box {
+ background: var(--surface);
+ padding: 1rem 1.25rem;
+ border-radius: 10px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 1rem;
+}
+
+.short-link {
+ font-family: 'SF Mono', 'Fira Code', monospace;
+ color: var(--accent);
+ word-break: break-all;
+ text-align: left;
+}
+
+.copy-btn {
+ padding: 0.5rem 1rem;
+ font-size: 0.875rem;
+ background: transparent;
+ border: 1px solid var(--accent);
+}
+
+.copy-btn:hover {
+ background: rgba(212, 151, 92, 0.15);
+}
+
+.message {
+ margin-top: 0.75rem;
+ font-size: 0.9rem;
+ color: var(--muted);
+}
+
+.error-msg {
+ color: var(--error);
+ margin-top: 0.75rem;
+ font-size: 0.9rem;
+ display: none;
+}
+
+footer {
+ margin-top: 2rem;
+ color: var(--muted);
+ font-size: 0.85rem;
+ line-height: 1.5;
+}
+
+.badge {
+ display: inline-block;
+ background: rgba(16, 185, 129, 0.15);
+ color: var(--accent);
+ padding: 0.25rem 0.5rem;
+ border-radius: 6px;
+ font-size: 0.75rem;
+ margin-left: 0.5rem;
+ vertical-align: middle;
+}
+
+@media (max-width: 480px) {
+ .input-group {
+ flex-direction: column;
+ }
+
+ button {
+ width: 100%;
+ }
+
+ .result-box {
+ flex-direction: column;
+ text-align: center;
+ }
+}
diff --git a/src/components/BlueskyPost.astro b/src/components/BlueskyPost.astro
new file mode 100644
index 0000000..ab49d7a
--- /dev/null
+++ b/src/components/BlueskyPost.astro
@@ -0,0 +1,89 @@
+---
+// Fetches and displays the latest Bluesky post from the user
+---
+
+
+
+
+
+
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
new file mode 100644
index 0000000..3806967
--- /dev/null
+++ b/src/components/Footer.astro
@@ -0,0 +1,52 @@
+---
+const currentYear = new Date().getFullYear();
+---
+
+
+
+
+
+
diff --git a/src/components/Header.astro b/src/components/Header.astro
new file mode 100644
index 0000000..23de2fe
--- /dev/null
+++ b/src/components/Header.astro
@@ -0,0 +1,336 @@
+---
+const isHome = Astro.url.pathname === '/';
+---
+
+
+
+
+
+
diff --git a/src/components/MusicCard.astro b/src/components/MusicCard.astro
new file mode 100644
index 0000000..f7a741b
--- /dev/null
+++ b/src/components/MusicCard.astro
@@ -0,0 +1,125 @@
+---
+// Fetches and displays recent music listening data from teal.fm
+---
+
+
+
+
+
+
diff --git a/src/components/PhotoStrip.astro b/src/components/PhotoStrip.astro
new file mode 100644
index 0000000..9966936
--- /dev/null
+++ b/src/components/PhotoStrip.astro
@@ -0,0 +1,203 @@
+---
+const PHOTOS = [
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/20240622_235041500_iOS.avif',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/DSC_3773.avif',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/DSC_3766.avif',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/DSC_3765.avif',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-1.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-2.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-3.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-4.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-5.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-6.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-7.jpg',
+ },
+ {
+ src: 'https://imrs.danielmorrisey.com/https://danielmorrisey.com/media/images/grain-drop-8.jpg',
+ },
+];
+---
+
+
+ {PHOTOS.map((photo) => (
+
+
+
+ ))}
+
+
+
+
✕
+
+
+
+
+
+
diff --git a/src/components/PrivacyNotice.astro b/src/components/PrivacyNotice.astro
new file mode 100644
index 0000000..7369774
--- /dev/null
+++ b/src/components/PrivacyNotice.astro
@@ -0,0 +1,87 @@
+---
+// Privacy notice that can be dismissed and remembers the user's choice
+---
+
+
+
+
+
+
diff --git a/src/env.d.ts b/src/env.d.ts
new file mode 100644
index 0000000..fc4d43c
--- /dev/null
+++ b/src/env.d.ts
@@ -0,0 +1,11 @@
+///
+
+declare global {
+ namespace NodeJS {
+ interface ProcessEnv {
+ readonly PUBLIC_DOMAIN: string;
+ }
+ }
+}
+
+export {};
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
new file mode 100644
index 0000000..f1777ee
--- /dev/null
+++ b/src/layouts/BaseLayout.astro
@@ -0,0 +1,131 @@
+---
+import Header from '../components/Header.astro';
+import Footer from '../components/Footer.astro';
+import PrivacyNotice from '../components/PrivacyNotice.astro';
+
+interface Props {
+ title: string;
+ description: string;
+ image?: string;
+ canonical: string;
+ ogType?: string;
+ twitterCard?: string;
+ pageClass?: string;
+}
+
+const {
+ title,
+ description,
+ image = '/media/images/seo/canva-design-site-banner.png',
+ canonical,
+ ogType = 'website',
+ twitterCard = 'summary_large_image',
+ pageClass = '',
+} = Astro.props;
+
+const fullTitle = `${title} - danielmorrisey.com`;
+---
+
+
+
+
+
+
+ {fullTitle}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/404.astro b/src/pages/404.astro
new file mode 100644
index 0000000..0a523b8
--- /dev/null
+++ b/src/pages/404.astro
@@ -0,0 +1,80 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ 404
+ Page Not Found
+ Sorry, the page you're looking for doesn't exist or has been moved.
+ ← Go back home
+
+
+
+
+
diff --git a/src/pages/alx911.astro b/src/pages/alx911.astro
new file mode 100644
index 0000000..13d6c45
--- /dev/null
+++ b/src/pages/alx911.astro
@@ -0,0 +1,44 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/alx911
+ Ualx911
+ Project details coming soon...
+
+
+
+
+
diff --git a/src/pages/cdn.astro b/src/pages/cdn.astro
new file mode 100644
index 0000000..6774cdf
--- /dev/null
+++ b/src/pages/cdn.astro
@@ -0,0 +1,444 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+
+ danielmorrisey.com/cdn
+ MBD CDN
+
+ A simple, fast, free CDN powered by Cloudflare R2, D1, and Workers. Upload almost anything in seconds, serve it forever. Free for life.
+
+ Experiencing Issues? Check our Status Page .
+
+
+
+
+
+ what's been uploaded
+
+
+
+
+
+
+
+
+ Upload
+
+
+ About
+
+
+ How it Works
+
+
+ Build
+
+
+ Limits
+
+
+
+
+
+
+
+ Click to select or drag a file here
+
+
+
+
+
+ ·
+ ·
+
+
+
+
+
+
+
+ Upload to MBD CDN
+
+
+
+
+
+
✓ Your file is live
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/danny4mayor.astro b/src/pages/danny4mayor.astro
new file mode 100644
index 0000000..36ba518
--- /dev/null
+++ b/src/pages/danny4mayor.astro
@@ -0,0 +1,44 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/danny4mayor
+ Udanny4mayor
+ Project details coming soon...
+
+
+
+
+
diff --git a/src/pages/favfinder.astro b/src/pages/favfinder.astro
new file mode 100644
index 0000000..8b9fc2c
--- /dev/null
+++ b/src/pages/favfinder.astro
@@ -0,0 +1,44 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/favfinder
+ Ufavfinder
+ Project details coming soon...
+
+
+
+
+
diff --git a/src/pages/imrs.astro b/src/pages/imrs.astro
new file mode 100644
index 0000000..b133288
--- /dev/null
+++ b/src/pages/imrs.astro
@@ -0,0 +1,65 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/imrs
+ IMRS
+
+ Transform images on the edge to WebP & AVIF to improve loading times and lower bandwidth.
+
+
+
+
+ How it Works
+ IMRS automatically converts your images to modern formats for faster loading and better performance.
+
+
+
+
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 0000000..ed874e9
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,400 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+import MusicCard from '../components/MusicCard.astro';
+import BlueskyPost from '../components/BlueskyPost.astro';
+import PhotoStrip from '../components/PhotoStrip.astro';
+
+const title = "Daniel's Corner";
+const description = "My tiny corner of the world wide web";
+const canonical = "https://danielmorrisey.com";
+---
+
+
+
+
FAILED TO REACH CSS STYLE SHEET, PLEASE MAKE SURE THE CSS FILE IS ACCESSIBLE AND YOU HAVE CSS ENABLED IN YOUR BROWSER
+
+
+
+ {title}
+ Daniel Morrisey
+ Welcome to my site
+
+ Hello World! I'm Daniel Morrisey, also known as @madebydanny_uk or Danny, welcome to my corner of the Internet , and when I'm not doing that, I'm probably playing video games.
+ I'm a front-end web developer and a Bluesky /AT Protocol nerd, who spends too much time on Bluesky and listening to Hamilton.
+
+
+
+
+
+
+
+
+
+
+
+ latest post from bluesky
+
+
+
+
+ recent blog posts
+ powered by document finder for Standard Site
+
+
+
+
+
+
+
+
+
+
+
+
+ contact me
+ ranked on how likely I am to check
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/luna.astro b/src/pages/luna.astro
new file mode 100644
index 0000000..064d60e
--- /dev/null
+++ b/src/pages/luna.astro
@@ -0,0 +1,44 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/luna
+ Uluna
+ Project details coming soon...
+
+
+
+
+
diff --git a/src/pages/pages/blank.astro b/src/pages/pages/blank.astro
new file mode 100644
index 0000000..95f2403
--- /dev/null
+++ b/src/pages/pages/blank.astro
@@ -0,0 +1,49 @@
+---
+import BaseLayout from '../../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/pages/blank
+ /blank
+
+
+
+ Slash page content coming soon...
+
+
+
+
+
diff --git a/src/pages/pages/changelog.astro b/src/pages/pages/changelog.astro
new file mode 100644
index 0000000..05a22b7
--- /dev/null
+++ b/src/pages/pages/changelog.astro
@@ -0,0 +1,49 @@
+---
+import BaseLayout from '../../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/pages/changelog
+ /changelog
+
+
+
+ Slash page content coming soon...
+
+
+
+
+
diff --git a/src/pages/pages/chipotle.astro b/src/pages/pages/chipotle.astro
new file mode 100644
index 0000000..f86d9f0
--- /dev/null
+++ b/src/pages/pages/chipotle.astro
@@ -0,0 +1,49 @@
+---
+import BaseLayout from '../../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/pages/chipotle
+ /chipotle
+
+
+
+ Slash page content coming soon...
+
+
+
+
+
diff --git a/src/pages/pages/hello.astro b/src/pages/pages/hello.astro
new file mode 100644
index 0000000..8883ca5
--- /dev/null
+++ b/src/pages/pages/hello.astro
@@ -0,0 +1,49 @@
+---
+import BaseLayout from '../../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/pages/hello
+ /hello
+
+
+
+ Slash page content coming soon...
+
+
+
+
+
diff --git a/src/pages/pages/index.astro b/src/pages/pages/index.astro
new file mode 100644
index 0000000..0bf5959
--- /dev/null
+++ b/src/pages/pages/index.astro
@@ -0,0 +1,75 @@
+---
+import BaseLayout from '../../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/pages
+ Slash Pages
+ My personal slash pages collection.
+
+
+
+
+ /changelog - Project changelog
+ /blank - Blank page
+ /chipotle - Chipotle tracker
+ /hello - Hello page
+
+
+
+
+
+
diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro
new file mode 100644
index 0000000..e8ad0ac
--- /dev/null
+++ b/src/pages/privacy.astro
@@ -0,0 +1,115 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ Privacy
+ Privacy Policy
+
+
+
+ Analytics
+ This website uses Umami and Statcounter for anonymous analytics purposes. These services collect non-personally identifiable information about how visitors interact with the website.
+
+ Cookies
+ This website uses minimal cookies. The only cookies stored are:
+
+ privacy_notice_dismissed - Used to remember if you've closed the privacy notice
+
+
+ External Services
+ This website may embed content from external services:
+
+ Google Fonts - Fonts are loaded from Google's CDN
+ FontAwesome - Icons are loaded from FontAwesome's CDN
+ Bluesky API - Posts and profile data from Bluesky
+ teal.fm API - Music listening data
+ Grain.social - Photo data
+
+ Please review the privacy policies of these services for more information.
+
+ Contact
+ If you have questions about this privacy policy, please contact me at hello@danielmorrisey.com .
+
+ Last updated: August 2026
+
+
+
+
+
diff --git a/src/pages/privo.astro b/src/pages/privo.astro
new file mode 100644
index 0000000..d9748a8
--- /dev/null
+++ b/src/pages/privo.astro
@@ -0,0 +1,44 @@
+---
+import BaseLayout from '../layouts/BaseLayout.astro';
+---
+
+
+
+
+ danielmorrisey.com/privo
+ Uprivo
+ Project details coming soon...
+
+
+
+
+
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..f19d8ba
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "astro/tsconfigs/strict",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"]
+ },
+ "lib": ["ES2020", "DOM", "DOM.Iterable"]
+ }
+}