The code for darkworld.download darkworld.download

feat: astro

kris.darkworld.download e86f4866 e1bdd67e

verified
+1815 -1705
+7 -2
.gitignore
··· 12 12 13 13 # logs 14 14 logs 15 - _.log 16 - report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 15 + *.log 16 + report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 17 17 18 18 # dotenv environment variable files 19 19 .env ··· 32 32 33 33 # Finder (MacOS) folder config 34 34 .DS_Store 35 + 36 + # astro cache 37 + .astro 38 + 39 + env.d.ts
assets/88x31/kris.png public/assets/88x31/kris.png
assets/88x31/kriswheretfarewe.png public/assets/88x31/kriswheretfarewe.png
assets/depth/depth-blue-final-red.png public/assets/depth/depth-blue-final-red.png
assets/depth/depth-blue-final.png public/assets/depth/depth-blue-final.png
assets/depth/depth-blue-susie.png public/assets/depth/depth-blue-susie.png
assets/depth/depth-blue.png public/assets/depth/depth-blue.png
assets/depth/depth-dark-susie.png public/assets/depth/depth-dark-susie.png
assets/depth/depth-dark.png public/assets/depth/depth-dark.png
assets/depth/depth-darker-new-final-red.png public/assets/depth/depth-darker-new-final-red.png
assets/depth/depth-darker-new-final.png public/assets/depth/depth-darker-new-final.png
assets/depth/depth-darker-new-susie.png public/assets/depth/depth-darker-new-susie.png
assets/depth/depth-darker-new.png public/assets/depth/depth-darker-new.png
assets/depth/depth-text-final-red.png public/assets/depth/depth-text-final-red.png
assets/depth/depth-text-final.png public/assets/depth/depth-text-final.png
assets/depth/depth-text-susie.png public/assets/depth/depth-text-susie.png
assets/depth/depth-text.png public/assets/depth/depth-text.png
assets/depth/depth-yetdarker-new-final-red.png public/assets/depth/depth-yetdarker-new-final-red.png
assets/depth/depth-yetdarker-new-final.png public/assets/depth/depth-yetdarker-new-final.png
assets/depth/depth-yetdarker-new-susie.png public/assets/depth/depth-yetdarker-new-susie.png
assets/depth/depth-yetdarker-new.png public/assets/depth/depth-yetdarker-new.png
assets/depth/depth.png public/assets/depth/depth.png
assets/font/.gitignore public/assets/font/.gitignore
assets/prophecy/atproto.png public/assets/prophecy/atproto.png
assets/prophecy/bluesky.png public/assets/prophecy/bluesky.png
assets/prophecy/deltarune.png public/assets/prophecy/deltarune.png
assets/prophecy/end.png public/assets/prophecy/end.png
assets/prophecy/kris.png public/assets/prophecy/kris.png
assets/prophecy/nix.png public/assets/prophecy/nix.png
assets/prophecy/rude-buster.png public/assets/prophecy/rude-buster.png
assets/prophecy/susie.png public/assets/prophecy/susie.png
+16
astro.config.mjs
··· 1 + import { defineConfig, passthroughImageService } from "astro/config"; 2 + import node from "@astrojs/node"; 3 + import preact from "@astrojs/preact"; 4 + import tailwindcss from "@tailwindcss/vite"; 5 + 6 + export default defineConfig({ 7 + output: "server", 8 + adapter: node({ mode: "standalone" }), 9 + integrations: [preact()], 10 + image: { 11 + service: passthroughImageService(), 12 + }, 13 + vite: { 14 + plugins: [tailwindcss()], 15 + }, 16 + });
-209
build.ts
··· 1 - #!/usr/bin/env bun 2 - import plugin from "bun-plugin-tailwind"; 3 - import { existsSync } from "fs"; 4 - import { mkdir, readdir, readFile, rm, writeFile } from "fs/promises"; 5 - import path from "path"; 6 - 7 - type BuildManifest = { 8 - cssHref: string | null; 9 - islandsScriptHref: string | null; 10 - fullClientScriptHref: string | null; 11 - fullClient: boolean; 12 - builtAt: string; 13 - }; 14 - 15 - const outdir = path.join(process.cwd(), "dist"); 16 - const DIST_PUBLIC_PREFIX = "/.dist"; 17 - const generatedDir = path.join(process.cwd(), "src", "runtime", "generated"); 18 - const generatedLoadersPath = path.join(generatedDir, "island-loaders.ts"); 19 - const manifestPath = path.join(outdir, "build-manifest.json"); 20 - 21 - type DirectiveScanResult = { 22 - useClientModules: string[]; 23 - useIslandModules: string[]; 24 - fullClientModules: string[]; 25 - }; 26 - 27 - function normalizePathForImport(filePath: string): string { 28 - const relative = path.relative(path.join(process.cwd(), "src"), filePath); 29 - return `src/${relative.replaceAll("\\", "/")}`; 30 - } 31 - 32 - async function walkFiles(dir: string): Promise<string[]> { 33 - const entries = await readdir(dir, { withFileTypes: true }); 34 - const files: string[] = []; 35 - 36 - for (const entry of entries) { 37 - if (entry.name.startsWith(".")) { 38 - continue; 39 - } 40 - 41 - const absolute = path.join(dir, entry.name); 42 - if (entry.isDirectory()) { 43 - files.push(...(await walkFiles(absolute))); 44 - continue; 45 - } 46 - 47 - if (/\.(ts|tsx|js|jsx)$/.test(entry.name)) { 48 - files.push(absolute); 49 - } 50 - } 51 - 52 - return files; 53 - } 54 - 55 - function readDirective(source: string): "use client" | "use island" | "use full-client" | null { 56 - const stripped = source 57 - .replace(/^\uFEFF/, "") 58 - .replace(/^\s*\/\*[\s\S]*?\*\//, "") 59 - .replace(/^\s*\/\/.*$/gm, ""); 60 - 61 - const match = stripped.match(/^\s*["'](use client|use island|use full-client)["']\s*;/); 62 - return (match?.[1] as "use client" | "use island" | "use full-client" | undefined) ?? null; 63 - } 64 - 65 - async function scanClientDirectives(): Promise<DirectiveScanResult> { 66 - const srcDir = path.join(process.cwd(), "src"); 67 - const files = await walkFiles(srcDir); 68 - 69 - const useClientModules: string[] = []; 70 - const useIslandModules: string[] = []; 71 - const fullClientModules: string[] = []; 72 - 73 - for (const file of files) { 74 - const source = await readFile(file, "utf8"); 75 - const directive = readDirective(source); 76 - if (!directive) { 77 - continue; 78 - } 79 - 80 - const moduleId = normalizePathForImport(file); 81 - if (directive === "use client") { 82 - useClientModules.push(moduleId); 83 - } else if (directive === "use island") { 84 - useIslandModules.push(moduleId); 85 - } else { 86 - fullClientModules.push(moduleId); 87 - } 88 - } 89 - 90 - return { 91 - useClientModules: useClientModules.sort(), 92 - useIslandModules: useIslandModules.sort(), 93 - fullClientModules: fullClientModules.sort(), 94 - }; 95 - } 96 - 97 - async function writeIslandLoaders(modules: string[]) { 98 - await mkdir(generatedDir, { recursive: true }); 99 - 100 - const lines = [ 101 - "type IslandLoader = () => Promise<Record<string, unknown>>;", 102 - "", 103 - "const generatedIslandLoaders: Record<string, IslandLoader> = {", 104 - ...modules.map((moduleId) => { 105 - const importPath = "../" + path.relative(path.join(process.cwd(), "src", "runtime"), path.join(process.cwd(), moduleId)).replaceAll("\\", "/"); 106 - return `\t${JSON.stringify(moduleId)}: () => import(${JSON.stringify(importPath)}),`; 107 - }), 108 - "};", 109 - "", 110 - "export function getGeneratedIslandLoaders(): Record<string, IslandLoader> {", 111 - "\treturn generatedIslandLoaders;", 112 - "}", 113 - "", 114 - ]; 115 - 116 - await writeFile(generatedLoadersPath, lines.join("\n"), "utf8"); 117 - } 118 - 119 - function outputHref(outputPath: string): string { 120 - const relative = path.relative(outdir, outputPath).replaceAll("\\", "/"); 121 - return `${DIST_PUBLIC_PREFIX}/${relative}`; 122 - } 123 - 124 - async function buildCss(): Promise<string | null> { 125 - const result = await Bun.build({ 126 - entrypoints: [path.resolve("src/index.css")], 127 - outdir, 128 - plugins: [plugin], 129 - target: "browser", 130 - minify: true, 131 - splitting: false, 132 - sourcemap: "linked", 133 - define: { 134 - "process.env.NODE_ENV": JSON.stringify("production"), 135 - }, 136 - }); 137 - 138 - if (!result.success) { 139 - throw new Error("CSS build failed"); 140 - } 141 - 142 - const cssOutput = result.outputs.find((output) => output.path.endsWith(".css")); 143 - return cssOutput ? outputHref(cssOutput.path) : null; 144 - } 145 - 146 - async function buildEntry(entrypoint: string): Promise<string | null> { 147 - const result = await Bun.build({ 148 - entrypoints: [entrypoint], 149 - outdir, 150 - target: "browser", 151 - minify: true, 152 - splitting: true, 153 - sourcemap: "linked", 154 - define: { 155 - "process.env.NODE_ENV": JSON.stringify("production"), 156 - }, 157 - }); 158 - 159 - if (!result.success) { 160 - throw new Error(`JS build failed for ${entrypoint}`); 161 - } 162 - 163 - const jsOutput = result.outputs.find((output) => output.path.endsWith(".js")); 164 - return jsOutput ? outputHref(jsOutput.path) : null; 165 - } 166 - 167 - if (existsSync(outdir)) { 168 - await rm(outdir, { recursive: true, force: true }); 169 - } 170 - 171 - const directives = await scanClientDirectives(); 172 - const islandModules = Array.from( 173 - new Set([...directives.useClientModules, ...directives.useIslandModules]) 174 - ).sort(); 175 - await writeIslandLoaders(islandModules); 176 - 177 - const appModuleId = "src/App.tsx"; 178 - const fullClient = directives.fullClientModules.includes(appModuleId); 179 - const unsupportedFullClient = directives.fullClientModules.filter((id) => id !== appModuleId); 180 - if (unsupportedFullClient.length > 0) { 181 - console.warn("⚠️ use full-client is currently only supported in src/App.tsx"); 182 - for (const moduleId of unsupportedFullClient) { 183 - console.warn(` - ${moduleId}`); 184 - } 185 - } 186 - const cssHref = await buildCss(); 187 - 188 - const islandsScriptHref = 189 - islandModules.length > 0 && !fullClient 190 - ? await buildEntry(path.resolve("src/runtime/islands-client.tsx")) 191 - : null; 192 - const fullClientScriptHref = fullClient 193 - ? await buildEntry(path.resolve("src/runtime/full-client.tsx")) 194 - : null; 195 - 196 - const manifest: BuildManifest = { 197 - cssHref, 198 - islandsScriptHref, 199 - fullClientScriptHref, 200 - fullClient, 201 - builtAt: new Date().toISOString(), 202 - }; 203 - 204 - await writeFile(manifestPath, JSON.stringify(manifest, null, "\t"), "utf8"); 205 - 206 - console.log(`🚀 Built production assets to ${path.relative(process.cwd(), outdir)}`); 207 - console.log(`ℹ️ use client modules: ${directives.useClientModules.length}`); 208 - console.log(`ℹ️ use island modules: ${directives.useIslandModules.length}`); 209 - console.log(`ℹ️ use full-client modules: ${directives.fullClientModules.length}`);
-17
bun-env.d.ts
··· 1 - // Generated by `bun init` 2 - 3 - declare module "*.svg" { 4 - /** 5 - * A path to the SVG file 6 - */ 7 - const path: `${string}.svg`; 8 - export = path; 9 - } 10 - 11 - declare module "*.module.css" { 12 - /** 13 - * A record of class names to their corresponding CSS module classes 14 - */ 15 - const classes: { readonly [key: string]: string }; 16 - export = classes; 17 - }
+978 -10
bun.lock
··· 1 1 { 2 2 "lockfileVersion": 1, 3 + "configVersion": 0, 3 4 "workspaces": { 4 5 "": { 5 6 "name": "bun-react-template", 6 7 "dependencies": { 8 + "@astrojs/node": "^9.0.4", 9 + "@astrojs/preact": "^4.1.3", 7 10 "@atproto/api": "^0.19.3", 11 + "@tailwindcss/vite": "^4.1.11", 12 + "astro": "^5.14.1", 8 13 "bun-plugin-tailwind": "^0.1.2", 9 - "react": "^19", 10 - "react-dom": "^19", 14 + "preact": "^10.28.4", 11 15 "serve-static-bun": "^0.5.3", 12 16 "tailwindcss": "^4.1.11", 13 17 }, 14 18 "devDependencies": { 15 19 "@types/bun": "latest", 16 - "@types/react": "^19", 17 - "@types/react-dom": "^19", 18 20 }, 19 21 }, 20 22 }, 21 23 "packages": { 24 + "@astrojs/compiler": ["@astrojs/compiler@2.13.1", "", {}, "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg=="], 25 + 26 + "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.7.5", "", {}, "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="], 27 + 28 + "@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.10", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.19.0", "smol-toml": "^1.5.2", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A=="], 29 + 30 + "@astrojs/node": ["@astrojs/node@9.5.4", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "send": "^1.2.1", "server-destroy": "^1.0.1" }, "peerDependencies": { "astro": "^5.17.3" } }, "sha512-AbPSZsMGu8hXPR2XxV79RaKy8h6wijhtoqZGeUf4OXg2w1mxXlx4VnIc1D+QvtsgauSz7P5PLhmvf6w/J41GJg=="], 31 + 32 + "@astrojs/preact": ["@astrojs/preact@4.1.3", "", { "dependencies": { "@preact/preset-vite": "^2.10.2", "@preact/signals": "^2.3.1", "preact-render-to-string": "^6.6.1", "vite": "^6.4.1" }, "peerDependencies": { "preact": "^10.6.5" } }, "sha512-Ph416wbgyumkmYr7erZ83l/d+LXdZethlHRRCbgoKEn8wo3Rkq13shKFp0QYXYSDYxVaA6UBdkdimeowy/lMLQ=="], 33 + 34 + "@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="], 35 + 36 + "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], 37 + 22 38 "@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], 23 39 24 40 "@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], ··· 33 49 34 50 "@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], 35 51 52 + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], 53 + 54 + "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], 55 + 56 + "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], 57 + 58 + "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], 59 + 60 + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], 61 + 62 + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], 63 + 64 + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], 65 + 66 + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], 67 + 68 + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], 69 + 70 + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], 71 + 72 + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], 73 + 74 + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], 75 + 76 + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], 77 + 78 + "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], 79 + 80 + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], 81 + 82 + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], 83 + 84 + "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], 85 + 86 + "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], 87 + 88 + "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], 89 + 90 + "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], 91 + 92 + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], 93 + 94 + "@capsizecss/unpack": ["@capsizecss/unpack@4.0.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="], 95 + 96 + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], 97 + 98 + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], 99 + 100 + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], 101 + 102 + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], 103 + 104 + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], 105 + 106 + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], 107 + 108 + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], 109 + 110 + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], 111 + 112 + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], 113 + 114 + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], 115 + 116 + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], 117 + 118 + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], 119 + 120 + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], 121 + 122 + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], 123 + 124 + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], 125 + 126 + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], 127 + 128 + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], 129 + 130 + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], 131 + 132 + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], 133 + 134 + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], 135 + 136 + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], 137 + 138 + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], 139 + 140 + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], 141 + 142 + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], 143 + 144 + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], 145 + 146 + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], 147 + 148 + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], 149 + 150 + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], 151 + 152 + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], 153 + 154 + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], 155 + 156 + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], 157 + 158 + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], 159 + 160 + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], 161 + 162 + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], 163 + 164 + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], 165 + 166 + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], 167 + 168 + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], 169 + 170 + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], 171 + 172 + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], 173 + 174 + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], 175 + 176 + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], 177 + 178 + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], 179 + 180 + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], 181 + 182 + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], 183 + 184 + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], 185 + 186 + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], 187 + 188 + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], 189 + 190 + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], 191 + 192 + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], 193 + 194 + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], 195 + 196 + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], 197 + 198 + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], 199 + 200 + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], 201 + 202 + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], 203 + 204 + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], 205 + 206 + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], 207 + 208 + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], 209 + 210 + "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], 211 + 36 212 "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.3.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-df7smckMWSUfaT5mzwN9Lfpd3ZGkOqo+vmQ8VV2a32gl14v6uZ/qeeo+1RlANXn8M0uzXPWWCkrKZIWSZUR0qw=="], 37 213 38 214 "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.3.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-YiLxfsPzQqaVvT2a+nxH9do0YfUjrlxF3tKP0b1DDgvfgCcVKGsrQH3Wa82qHgL4dnT8h2bqi94JxXESEuPmcA=="], ··· 55 231 56 232 "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.9", "", { "os": "win32", "cpu": "x64" }, "sha512-a/+hSrrDpMD7THyXvE2KJy1skxzAD0cnW4K1WjuI/91VqsphjNzvf5t/ZgxEVL4wb6f+hKrSJ5J3aH47zPr61g=="], 57 233 234 + "@preact/preset-vite": ["@preact/preset-vite@2.10.3", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@prefresh/vite": "^2.4.11", "@rollup/pluginutils": "^5.0.0", "babel-plugin-transform-hook-names": "^1.0.2", "debug": "^4.4.3", "picocolors": "^1.1.1", "vite-prerender-plugin": "^0.5.8" }, "peerDependencies": { "@babel/core": "7.x", "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x" } }, "sha512-1SiS+vFItpkNdBs7q585PSAIln0wBeBdcpJYbzPs1qipsb/FssnkUioNXuRsb8ZnU8YEQHr+3v8+/mzWSnTQmg=="], 235 + 236 + "@preact/signals": ["@preact/signals@2.8.1", "", { "dependencies": { "@preact/signals-core": "^1.13.0" }, "peerDependencies": { "preact": ">= 10.25.0 || >=11.0.0-0" } }, "sha512-wX6U0SpcCukZTJBs5ChljvBZb3XmYzA5gd4vKHgX8wZZKaQCo2WHtmThdLx+mcVvlBa5u3XShC7ffbETJD4BiQ=="], 237 + 238 + "@preact/signals-core": ["@preact/signals-core@1.13.0", "", {}, "sha512-slT6XeTCAbdql61GVLlGU4x7XHI7kCZV5Um5uhE4zLX4ApgiiXc0UYFvVOKq06xcovzp7p+61l68oPi563ARKg=="], 239 + 240 + "@prefresh/babel-plugin": ["@prefresh/babel-plugin@0.5.3", "", {}, "sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ=="], 241 + 242 + "@prefresh/core": ["@prefresh/core@1.5.9", "", { "peerDependencies": { "preact": "^10.0.0 || ^11.0.0-0" } }, "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ=="], 243 + 244 + "@prefresh/utils": ["@prefresh/utils@1.2.1", "", {}, "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw=="], 245 + 246 + "@prefresh/vite": ["@prefresh/vite@2.4.12", "", { "dependencies": { "@babel/core": "^7.22.1", "@prefresh/babel-plugin": "^0.5.2", "@prefresh/core": "^1.5.0", "@prefresh/utils": "^1.2.0", "@rollup/pluginutils": "^4.2.1" }, "peerDependencies": { "preact": "^10.4.0 || ^11.0.0-0", "vite": ">=2.0.0" } }, "sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA=="], 247 + 248 + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], 249 + 250 + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg=="], 251 + 252 + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.59.0", "", { "os": "android", "cpu": "arm64" }, "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q=="], 253 + 254 + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.59.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg=="], 255 + 256 + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.59.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w=="], 257 + 258 + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.59.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA=="], 259 + 260 + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.59.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg=="], 261 + 262 + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw=="], 263 + 264 + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.59.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA=="], 265 + 266 + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA=="], 267 + 268 + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.59.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA=="], 269 + 270 + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg=="], 271 + 272 + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q=="], 273 + 274 + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA=="], 275 + 276 + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.59.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA=="], 277 + 278 + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg=="], 279 + 280 + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.59.0", "", { "os": "linux", "cpu": "none" }, "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg=="], 281 + 282 + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.59.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w=="], 283 + 284 + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg=="], 285 + 286 + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.59.0", "", { "os": "linux", "cpu": "x64" }, "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg=="], 287 + 288 + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.59.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ=="], 289 + 290 + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.59.0", "", { "os": "none", "cpu": "arm64" }, "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA=="], 291 + 292 + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.59.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A=="], 293 + 294 + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.59.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA=="], 295 + 296 + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA=="], 297 + 298 + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.59.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA=="], 299 + 300 + "@shikijs/core": ["@shikijs/core@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA=="], 301 + 302 + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA=="], 303 + 304 + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g=="], 305 + 306 + "@shikijs/langs": ["@shikijs/langs@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg=="], 307 + 308 + "@shikijs/themes": ["@shikijs/themes@3.23.0", "", { "dependencies": { "@shikijs/types": "3.23.0" } }, "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA=="], 309 + 310 + "@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], 311 + 312 + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], 313 + 314 + "@tailwindcss/node": ["@tailwindcss/node@4.2.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.31.1", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.1" } }, "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg=="], 315 + 316 + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.1", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.1", "@tailwindcss/oxide-darwin-arm64": "4.2.1", "@tailwindcss/oxide-darwin-x64": "4.2.1", "@tailwindcss/oxide-freebsd-x64": "4.2.1", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1", "@tailwindcss/oxide-linux-arm64-musl": "4.2.1", "@tailwindcss/oxide-linux-x64-gnu": "4.2.1", "@tailwindcss/oxide-linux-x64-musl": "4.2.1", "@tailwindcss/oxide-wasm32-wasi": "4.2.1", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1", "@tailwindcss/oxide-win32-x64-msvc": "4.2.1" } }, "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw=="], 317 + 318 + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.1", "", { "os": "android", "cpu": "arm64" }, "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg=="], 319 + 320 + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw=="], 321 + 322 + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw=="], 323 + 324 + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA=="], 325 + 326 + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw=="], 327 + 328 + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ=="], 329 + 330 + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ=="], 331 + 332 + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g=="], 333 + 334 + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g=="], 335 + 336 + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.1", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q=="], 337 + 338 + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA=="], 339 + 340 + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ=="], 341 + 342 + "@tailwindcss/vite": ["@tailwindcss/vite@4.2.1", "", { "dependencies": { "@tailwindcss/node": "4.2.1", "@tailwindcss/oxide": "4.2.1", "tailwindcss": "4.2.1" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w=="], 343 + 58 344 "@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="], 59 345 346 + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], 347 + 348 + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], 349 + 350 + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], 351 + 352 + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], 353 + 354 + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], 355 + 356 + "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], 357 + 60 358 "@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="], 61 359 62 - "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], 360 + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], 63 361 64 - "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], 362 + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], 363 + 364 + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], 365 + 366 + "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], 367 + 368 + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], 369 + 370 + "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], 371 + 372 + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], 373 + 374 + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], 375 + 376 + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], 377 + 378 + "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], 379 + 380 + "astro": ["astro@5.18.0", "", { "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", "@astrojs/markdown-remark": "6.3.10", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "acorn": "^8.15.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.3.1", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.1.1", "cssesc": "^3.0.0", "debug": "^4.4.3", "deterministic-object-hash": "^2.0.2", "devalue": "^5.6.2", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", "esbuild": "^0.27.3", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "import-meta-resolve": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.1", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.1", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.3", "shiki": "^3.21.0", "smol-toml": "^1.6.0", "svgo": "^4.0.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.3", "unist-util-visit": "^5.0.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^6.4.1", "vitefu": "^1.1.1", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.3", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.1", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "astro.js" } }, "sha512-CHiohwJIS4L0G6/IzE1Fx3dgWqXBCXus/od0eGUfxrZJD2um2pE7ehclMmgL/fXqbU7NfE1Ze2pq34h2QaA6iQ=="], 65 381 66 382 "await-lock": ["await-lock@2.2.2", "", {}, "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="], 67 383 384 + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], 385 + 386 + "babel-plugin-transform-hook-names": ["babel-plugin-transform-hook-names@1.0.2", "", { "peerDependencies": { "@babel/core": "^7.12.10" } }, "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw=="], 387 + 388 + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], 389 + 390 + "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], 391 + 392 + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], 393 + 394 + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], 395 + 396 + "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], 397 + 398 + "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], 399 + 68 400 "bun": ["bun@1.3.9", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.9", "@oven/bun-darwin-x64": "1.3.9", "@oven/bun-darwin-x64-baseline": "1.3.9", "@oven/bun-linux-aarch64": "1.3.9", "@oven/bun-linux-aarch64-musl": "1.3.9", "@oven/bun-linux-x64": "1.3.9", "@oven/bun-linux-x64-baseline": "1.3.9", "@oven/bun-linux-x64-musl": "1.3.9", "@oven/bun-linux-x64-musl-baseline": "1.3.9", "@oven/bun-windows-x64": "1.3.9", "@oven/bun-windows-x64-baseline": "1.3.9" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-v5hkh1us7sMNjfimWE70flYbD5I1/qWQaqmJ45q2qk5H/7muQVa478LSVRSFyGTBUBog2LsPQnfIRdjyWJRY+A=="], 69 401 70 402 "bun-plugin-tailwind": ["bun-plugin-tailwind@0.1.2", "", { "peerDependencies": { "bun": ">=1.0.0" } }, "sha512-41jNC1tZRSK3s1o7pTNrLuQG8kL/0vR/JgiTmZAJ1eHwe0w5j6HFPKeqEk0WAD13jfrUC7+ULuewFBBCoADPpg=="], 71 403 72 404 "bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="], 73 405 74 - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], 406 + "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], 407 + 408 + "caniuse-lite": ["caniuse-lite@1.0.30001777", "", {}, "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ=="], 409 + 410 + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], 411 + 412 + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], 413 + 414 + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], 415 + 416 + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], 417 + 418 + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], 419 + 420 + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], 421 + 422 + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], 423 + 424 + "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], 425 + 426 + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], 427 + 428 + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], 429 + 430 + "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], 431 + 432 + "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], 433 + 434 + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], 435 + 436 + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], 437 + 438 + "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], 439 + 440 + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], 441 + 442 + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], 443 + 444 + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], 445 + 446 + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], 447 + 448 + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], 449 + 450 + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], 451 + 452 + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 453 + 454 + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], 455 + 456 + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], 457 + 458 + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], 459 + 460 + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], 461 + 462 + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], 463 + 464 + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], 465 + 466 + "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], 467 + 468 + "devalue": ["devalue@5.6.3", "", {}, "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg=="], 469 + 470 + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], 471 + 472 + "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], 473 + 474 + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], 475 + 476 + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], 477 + 478 + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], 479 + 480 + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], 481 + 482 + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], 483 + 484 + "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], 485 + 486 + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], 487 + 488 + "electron-to-chromium": ["electron-to-chromium@1.5.307", "", {}, "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg=="], 489 + 490 + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], 491 + 492 + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], 493 + 494 + "enhanced-resolve": ["enhanced-resolve@5.20.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ=="], 495 + 496 + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], 497 + 498 + "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], 499 + 500 + "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], 501 + 502 + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 503 + 504 + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], 505 + 506 + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], 507 + 508 + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], 509 + 510 + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], 511 + 512 + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], 513 + 514 + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], 515 + 516 + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], 517 + 518 + "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], 519 + 520 + "fontace": ["fontace@0.4.1", "", { "dependencies": { "fontkitten": "^1.0.2" } }, "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw=="], 521 + 522 + "fontkitten": ["fontkitten@1.0.3", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw=="], 523 + 524 + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], 525 + 526 + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 527 + 528 + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], 529 + 530 + "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], 531 + 532 + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], 533 + 534 + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 535 + 536 + "h3": ["h3@1.15.5", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "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" } }, "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg=="], 537 + 538 + "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "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" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], 539 + 540 + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "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" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], 541 + 542 + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], 543 + 544 + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], 545 + 546 + "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], 547 + 548 + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "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" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], 549 + 550 + "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], 551 + 552 + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], 553 + 554 + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], 555 + 556 + "hastscript": ["hastscript@9.0.1", "", { "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" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], 557 + 558 + "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], 559 + 560 + "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], 561 + 562 + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], 563 + 564 + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], 565 + 566 + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], 567 + 568 + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], 569 + 570 + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], 571 + 572 + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], 573 + 574 + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], 575 + 576 + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], 577 + 578 + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], 579 + 580 + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], 581 + 582 + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], 75 583 76 584 "iso-datestring-validator": ["iso-datestring-validator@2.2.2", "", {}, "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="], 77 585 586 + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], 587 + 588 + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 589 + 590 + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], 591 + 592 + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], 593 + 594 + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], 595 + 596 + "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], 597 + 598 + "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], 599 + 600 + "lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], 601 + 602 + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], 603 + 604 + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], 605 + 606 + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], 607 + 608 + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], 609 + 610 + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], 611 + 612 + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], 613 + 614 + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], 615 + 616 + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], 617 + 618 + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], 619 + 620 + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], 621 + 622 + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], 623 + 624 + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], 625 + 626 + "lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], 627 + 628 + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], 629 + 630 + "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], 631 + 632 + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], 633 + 634 + "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], 635 + 636 + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], 637 + 638 + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], 639 + 640 + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], 641 + 642 + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], 643 + 644 + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], 645 + 646 + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], 647 + 648 + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], 649 + 650 + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], 651 + 652 + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], 653 + 654 + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "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" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], 655 + 656 + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], 657 + 658 + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], 659 + 660 + "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], 661 + 662 + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], 663 + 664 + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], 665 + 666 + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], 667 + 668 + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], 669 + 670 + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], 671 + 672 + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], 673 + 674 + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], 675 + 676 + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], 677 + 678 + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], 679 + 680 + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], 681 + 682 + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], 683 + 684 + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], 685 + 686 + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], 687 + 688 + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], 689 + 690 + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], 691 + 692 + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], 693 + 694 + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], 695 + 696 + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], 697 + 698 + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], 699 + 700 + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], 701 + 702 + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], 703 + 704 + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], 705 + 706 + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], 707 + 708 + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], 709 + 710 + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], 711 + 712 + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], 713 + 714 + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], 715 + 716 + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], 717 + 718 + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], 719 + 720 + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], 721 + 722 + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], 723 + 724 + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 725 + 78 726 "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], 79 727 80 - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], 728 + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 729 + 730 + "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], 731 + 732 + "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], 733 + 734 + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], 735 + 736 + "node-html-parser": ["node-html-parser@6.1.13", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg=="], 737 + 738 + "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], 739 + 740 + "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], 741 + 742 + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], 743 + 744 + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], 745 + 746 + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], 747 + 748 + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], 749 + 750 + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], 751 + 752 + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], 753 + 754 + "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], 755 + 756 + "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], 757 + 758 + "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], 759 + 760 + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], 761 + 762 + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], 763 + 764 + "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], 765 + 766 + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], 767 + 768 + "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], 769 + 770 + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 771 + 772 + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], 773 + 774 + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], 775 + 776 + "preact": ["preact@10.28.4", "", {}, "sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ=="], 777 + 778 + "preact-render-to-string": ["preact-render-to-string@6.6.6", "", { "peerDependencies": { "preact": ">=10 || >= 11.0.0-0" } }, "sha512-EfqZJytnjJldV+YaaqhthU2oXsEf5e+6rDv957p+zxAvNfFLQOPfvBOTncscQ+akzu6Wrl7s3Pa0LjUQmWJsGQ=="], 779 + 780 + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], 781 + 782 + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], 783 + 784 + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], 81 785 82 - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], 786 + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], 787 + 788 + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], 83 789 84 - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], 790 + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], 791 + 792 + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], 793 + 794 + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], 795 + 796 + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], 797 + 798 + "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], 799 + 800 + "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], 801 + 802 + "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], 803 + 804 + "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], 805 + 806 + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], 807 + 808 + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], 809 + 810 + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], 811 + 812 + "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], 813 + 814 + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], 815 + 816 + "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], 817 + 818 + "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], 819 + 820 + "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], 821 + 822 + "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], 823 + 824 + "rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="], 825 + 826 + "sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="], 827 + 828 + "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], 829 + 830 + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], 85 831 86 832 "serve-static-bun": ["serve-static-bun@0.5.3", "", {}, "sha512-QlfA/Z30MwZl4XXWM9KevfinJRJjzJMRK8sXABbaY06Y7KTuXtbT1n0e8qdf1PgM59mpgSh/JTUM9Jjsh0E58Q=="], 87 833 834 + "server-destroy": ["server-destroy@1.0.1", "", {}, "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ=="], 835 + 836 + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], 837 + 838 + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], 839 + 840 + "shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], 841 + 842 + "simple-code-frame": ["simple-code-frame@1.3.0", "", { "dependencies": { "kolorist": "^1.6.0" } }, "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w=="], 843 + 844 + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], 845 + 846 + "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="], 847 + 848 + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], 849 + 850 + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 851 + 852 + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], 853 + 854 + "stack-trace": ["stack-trace@1.0.0-pre2", "", {}, "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A=="], 855 + 856 + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], 857 + 858 + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], 859 + 860 + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], 861 + 862 + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], 863 + 864 + "svgo": ["svgo@4.0.1", "", { "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": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="], 865 + 88 866 "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], 89 867 868 + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], 869 + 870 + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], 871 + 872 + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], 873 + 874 + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], 875 + 90 876 "tlds": ["tlds@1.261.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA=="], 91 877 878 + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], 879 + 880 + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], 881 + 882 + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], 883 + 884 + "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], 885 + 92 886 "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 93 887 888 + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 889 + 890 + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], 891 + 892 + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], 893 + 94 894 "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], 95 895 896 + "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], 897 + 898 + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], 899 + 96 900 "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], 97 901 98 902 "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], 99 903 904 + "unified": ["unified@11.0.5", "", { "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" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], 905 + 906 + "unifont": ["unifont@0.7.4", "", { "dependencies": { "css-tree": "^3.1.0", "ofetch": "^1.5.1", "ohash": "^2.0.11" } }, "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg=="], 907 + 908 + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], 909 + 910 + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], 911 + 912 + "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], 913 + 914 + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], 915 + 916 + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], 917 + 918 + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], 919 + 920 + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], 921 + 922 + "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], 923 + 924 + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], 925 + 926 + "unstorage": ["unstorage@1.17.4", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.5", "lru-cache": "^11.2.0", "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" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw=="], 927 + 928 + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], 929 + 930 + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], 931 + 932 + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], 933 + 934 + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], 935 + 936 + "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], 937 + 938 + "vite-prerender-plugin": ["vite-prerender-plugin@0.5.12", "", { "dependencies": { "kolorist": "^1.8.0", "magic-string": "0.x >= 0.26.0", "node-html-parser": "^6.1.12", "simple-code-frame": "^1.3.0", "source-map": "^0.7.4", "stack-trace": "^1.0.0-pre2" }, "peerDependencies": { "vite": "5.x || 6.x || 7.x" } }, "sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g=="], 939 + 940 + "vitefu": ["vitefu@1.1.2", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw=="], 941 + 942 + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], 943 + 944 + "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], 945 + 946 + "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], 947 + 948 + "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], 949 + 950 + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], 951 + 952 + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], 953 + 954 + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], 955 + 956 + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], 957 + 958 + "yocto-spinner": ["yocto-spinner@0.2.3", "", { "dependencies": { "yoctocolors": "^2.1.1" } }, "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ=="], 959 + 960 + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], 961 + 100 962 "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], 963 + 964 + "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], 965 + 966 + "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], 967 + 968 + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], 969 + 970 + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 971 + 972 + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], 973 + 974 + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 975 + 976 + "@prefresh/vite/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], 977 + 978 + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], 979 + 980 + "@tailwindcss/node/tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], 981 + 982 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], 983 + 984 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], 985 + 986 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], 987 + 988 + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], 989 + 990 + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], 991 + 992 + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 993 + 994 + "@tailwindcss/vite/tailwindcss": ["tailwindcss@4.2.1", "", {}, "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw=="], 995 + 996 + "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 997 + 998 + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 999 + 1000 + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], 1001 + 1002 + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], 1003 + 1004 + "vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], 1005 + 1006 + "@prefresh/vite/@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], 1007 + 1008 + "@prefresh/vite/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 1009 + 1010 + "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 1011 + 1012 + "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1013 + 1014 + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], 1015 + 1016 + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], 1017 + 1018 + "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], 1019 + 1020 + "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], 1021 + 1022 + "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], 1023 + 1024 + "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], 1025 + 1026 + "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], 1027 + 1028 + "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], 1029 + 1030 + "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], 1031 + 1032 + "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], 1033 + 1034 + "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], 1035 + 1036 + "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], 1037 + 1038 + "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], 1039 + 1040 + "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], 1041 + 1042 + "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], 1043 + 1044 + "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], 1045 + 1046 + "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], 1047 + 1048 + "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], 1049 + 1050 + "vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], 1051 + 1052 + "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], 1053 + 1054 + "vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], 1055 + 1056 + "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], 1057 + 1058 + "vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], 1059 + 1060 + "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], 1061 + 1062 + "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], 1063 + 1064 + "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], 1065 + 1066 + "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], 1067 + 1068 + "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 101 1069 } 102 1070 }
-4
bunfig.toml
··· 1 - 2 - [serve.static] 3 - plugins = ["bun-plugin-tailwind"] 4 - env = "BUN_PUBLIC_*"
+9 -7
package.json
··· 4 4 "private": true, 5 5 "type": "module", 6 6 "scripts": { 7 - "dev": "bun --hot src/index.tsx", 8 - "start": "NODE_ENV=production bun src/index.tsx", 7 + "dev": "astro dev", 8 + "start": "NODE_ENV=production bun dist/server/entry.mjs", 9 9 "start:built": "bun run build && bun run start", 10 - "build": "bun run build.ts" 10 + "build": "astro build", 11 + "preview": "astro preview" 11 12 }, 12 13 "dependencies": { 14 + "@astrojs/node": "^9.0.4", 15 + "@astrojs/preact": "^4.1.3", 13 16 "@atproto/api": "^0.19.3", 17 + "@tailwindcss/vite": "^4.1.11", 18 + "astro": "^5.14.1", 14 19 "bun-plugin-tailwind": "^0.1.2", 15 - "react": "^19", 16 - "react-dom": "^19", 20 + "preact": "^10.28.4", 17 21 "serve-static-bun": "^0.5.3", 18 22 "tailwindcss": "^4.1.11" 19 23 }, 20 24 "devDependencies": { 21 - "@types/react": "^19", 22 - "@types/react-dom": "^19", 23 25 "@types/bun": "latest" 24 26 } 25 27 }
-163
src/App.tsx
··· 1 - "use full-client"; 2 - 3 - import { ProphecyPanel } from "./components/ProphecyPanel"; 4 - import { GasterClicker } from "./components/GasterClicker"; 5 - import { friends88x31s, general88x31s, our88x31s } from "./lib/88x31"; 6 - import { ATTRIBUTION_COPYRIGHT_NOTICE } from "./lib/DO_NOT_DELETE"; 7 - import { getTitleColorTheme, getTitleColors } from "./lib/currentStateSync"; 8 - import { getTheProphecy } from "./lib/prophecy"; 9 - 10 - const comms = [ 11 - { 12 - label: "bluesky", 13 - href: "https://bsky.app/profile/did:plc:s7cesz7cr6ybltaryy4meb6y", 14 - }, 15 - { 16 - label: "discord", 17 - href: "https://discord.com/users/486147449703104523", 18 - } 19 - ]; 20 - 21 - export function App() { 22 - const titleTheme = getTitleColorTheme(); 23 - const titleColors = getTitleColors(); 24 - const heroProphecy = getTheProphecy().krisOrSusie; 25 - 26 - return ( 27 - <div className="min-h-screen bg-black px-3 py-3 text-white"> 28 - <div className="mx-auto flex w-full max-w-5xl flex-col gap-3"> 29 - <div className="pt-16"> 30 - <div 31 - className="inline-block w-fit rounded-sm" 32 - style={{ 33 - backgroundColor: titleTheme.invertBg ? "#111111" : "transparent", 34 - paddingInline: titleTheme.invertBg ? 2 : 0 35 - }} 36 - > 37 - <h1 className="text-4xl leading-none"> 38 - <span 39 - className="inline-block" 40 - style={ 41 - titleTheme.gradient 42 - ? { 43 - backgroundImage: titleTheme.gradient, 44 - WebkitBackgroundClip: "text", 45 - backgroundClip: "text", 46 - WebkitTextFillColor: "transparent", 47 - color: "transparent", 48 - backgroundSize: "100% 100%", 49 - backgroundRepeat: "no-repeat", 50 - WebkitTextStroke: 51 - titleColors === "enby" ? "1px rgba(255,255,255,0.1)" : undefined 52 - } 53 - : undefined 54 - } 55 - > 56 - hi, i'm kris 57 - </span> 58 - </h1> 59 - </div> 60 - </div> 61 - <p className="whitespace-pre-wrap"> 62 - i am the other kris, not the one from deltarune!{"\n\n"} 63 - However, you could probably guess my favorite character, and if it were to be Kris, you'd be right...{"\n"} 64 - In the meantime... check out this site! 65 - {"\n\n/** TODO: fix this */"} 66 - {"\n<FunGang />"} 67 - {"\n<img src=\"/assets/dancing-kris.gif\" />"} 68 - </p> 69 - 70 - <main className="flex flex-col gap-3"> 71 - <div className="h-8" /> 72 - <ProphecyPanel {...heroProphecy} /> 73 - <GasterClicker /> 74 - <section aria-label="comms"> 75 - <h2>Comms</h2> 76 - <ul className="mt-3 list-disc pl-6"> 77 - {comms.map((link) => ( 78 - <li key={link.href}> 79 - <a className="underline" href={link.href} target="_blank" rel="noreferrer"> 80 - {link.label} 81 - </a> 82 - </li> 83 - ))} 84 - <li> 85 - email: <code>echo a3Jpc0BkYXJrd29ybGQuZG93bmxvYWQK | base64 -d</code> 86 - </li> 87 - </ul> 88 - </section> 89 - </main> 90 - 91 - <footer> 92 - <h3>Friends!!</h3> 93 - <ul className="mt-3 flex flex-wrap gap-2"> 94 - {friends88x31s.map((button) => ( 95 - <li key={button.title}> 96 - <a 97 - href={button.url} 98 - title={button.title} 99 - className="group w-[88px] h-[31px]" 100 - > 101 - <img 102 - src={`/assets/88x31/${button.img}`} 103 - alt={button.title} 104 - width={88} 105 - height={31} 106 - className="absolute transition-opacity group-hover:opacity-25" 107 - style={{ imageRendering: "pixelated" }} 108 - /> 109 - <img 110 - src={`/assets/88x31/${button.img}`} 111 - alt={button.title} 112 - width={88} 113 - height={31} 114 - className="transition-transform group-hover:-translate-y-16 group-hover:scale-200" 115 - style={{ imageRendering: "pixelated" }} 116 - /> 117 - </a> 118 - </li> 119 - ))} 120 - </ul> 121 - <h3>Buttons!</h3> 122 - <ul className="mt-3 flex flex-wrap gap-2"> 123 - {([...our88x31s, ...general88x31s]).map((button) => ( 124 - <li key={button.title}> 125 - <a 126 - href={button.url} 127 - title={button.title} 128 - className="group w-[88px] h-[31px]" 129 - > 130 - <img 131 - src={`/assets/88x31/${button.img}`} 132 - alt={button.title} 133 - width={88} 134 - height={31} 135 - className="absolute transition-opacity group-hover:opacity-25" 136 - style={{ imageRendering: "pixelated" }} 137 - /> 138 - <img 139 - src={`/assets/88x31/${button.img}`} 140 - alt={button.title} 141 - width={88} 142 - height={31} 143 - className="transition-transform group-hover:-translate-y-16 group-hover:scale-200" 144 - style={{ imageRendering: "pixelated" }} 145 - /> 146 - </a> 147 - </li> 148 - ))} 149 - </ul> 150 - <p className="text-lg antialiased pt-6"> 151 - <a href="https://tangled.org/kris.darkworld.download/darkworld" className="underline">source</a> 152 - </p> 153 - {/** IMPORTANT NOTICE DO NOT DELETE THIS (or gaster will come and get u!!!!!!!) */} 154 - <p className="text-xs font-[Comic_Sans_MS,sans] whitespace-pre-wrap" style={{ color: "gray" }}> 155 - {ATTRIBUTION_COPYRIGHT_NOTICE} 156 - </p> 157 - </footer> 158 - </div> 159 - </div> 160 - ); 161 - } 162 - 163 - export default App;
+118
src/components/DevStateWrench.astro
··· 1 + <script> 2 + function mountDevStateWrench() { 3 + if (document.getElementById("dev-state-wrench")) { 4 + return; 5 + } 6 + 7 + const wrapper = document.createElement("div"); 8 + wrapper.id = "dev-state-wrench"; 9 + wrapper.style.position = "fixed"; 10 + wrapper.style.right = "12px"; 11 + wrapper.style.bottom = "12px"; 12 + wrapper.style.zIndex = "99999"; 13 + wrapper.style.fontFamily = "DTMSans, sans-serif"; 14 + 15 + const panel = document.createElement("div"); 16 + panel.style.display = "none"; 17 + panel.style.marginBottom = "8px"; 18 + panel.style.width = "280px"; 19 + panel.style.maxWidth = "calc(100vw - 24px)"; 20 + panel.style.padding = "10px"; 21 + panel.style.border = "1px solid rgba(255,255,255,0.35)"; 22 + panel.style.background = "rgba(0,0,0,0.9)"; 23 + panel.style.color = "#fff"; 24 + panel.style.boxShadow = "0 6px 18px rgba(0,0,0,0.45)"; 25 + panel.style.backdropFilter = "blur(3px)"; 26 + 27 + const title = document.createElement("div"); 28 + title.textContent = "state debug"; 29 + title.style.fontSize = "12px"; 30 + title.style.letterSpacing = "0.08em"; 31 + title.style.marginBottom = "6px"; 32 + 33 + const status = document.createElement("div"); 34 + status.style.fontSize = "11px"; 35 + status.style.opacity = "0.8"; 36 + status.style.marginBottom = "6px"; 37 + status.textContent = "loading..."; 38 + 39 + const body = document.createElement("pre"); 40 + body.style.margin = "0"; 41 + body.style.padding = "8px"; 42 + body.style.border = "1px solid rgba(255,255,255,0.2)"; 43 + body.style.background = "rgba(255,255,255,0.05)"; 44 + body.style.fontSize = "11px"; 45 + body.style.whiteSpace = "pre-wrap"; 46 + body.style.wordBreak = "break-word"; 47 + body.textContent = "{}"; 48 + 49 + const refresh = document.createElement("button"); 50 + refresh.type = "button"; 51 + refresh.textContent = "refresh"; 52 + refresh.style.marginTop = "8px"; 53 + refresh.style.padding = "4px 8px"; 54 + refresh.style.border = "1px solid rgba(255,255,255,0.45)"; 55 + refresh.style.background = "transparent"; 56 + refresh.style.color = "#fff"; 57 + refresh.style.cursor = "pointer"; 58 + 59 + const toggle = document.createElement("button"); 60 + toggle.type = "button"; 61 + toggle.textContent = "🔧"; 62 + toggle.title = "Toggle ATProto state debug"; 63 + toggle.style.width = "36px"; 64 + toggle.style.height = "36px"; 65 + toggle.style.borderRadius = "999px"; 66 + toggle.style.border = "1px solid rgba(255,255,255,0.45)"; 67 + toggle.style.background = "rgba(0,0,0,0.92)"; 68 + toggle.style.color = "#fff"; 69 + toggle.style.cursor = "pointer"; 70 + toggle.style.fontSize = "16px"; 71 + toggle.style.lineHeight = "1"; 72 + 73 + async function refreshState() { 74 + status.textContent = "loading..."; 75 + try { 76 + const response = await fetch("/xrpc/download.darkworld.site.getState", { 77 + method: "GET", 78 + headers: { Accept: "application/json" }, 79 + cache: "no-store", 80 + }); 81 + 82 + if (!response.ok) { 83 + status.textContent = `error: ${response.status}`; 84 + return; 85 + } 86 + 87 + const data = await response.json(); 88 + body.textContent = JSON.stringify(data, null, 2); 89 + status.textContent = `ok - ${new Date().toLocaleTimeString()}`; 90 + } catch (error) { 91 + const message = error instanceof Error ? error.message : String(error); 92 + status.textContent = `error: ${message}`; 93 + } 94 + } 95 + 96 + refresh.addEventListener("click", () => { 97 + void refreshState(); 98 + }); 99 + 100 + toggle.addEventListener("click", () => { 101 + const open = panel.style.display === "block"; 102 + panel.style.display = open ? "none" : "block"; 103 + if (!open) { 104 + void refreshState(); 105 + } 106 + }); 107 + 108 + panel.append(title, status, body, refresh); 109 + wrapper.append(panel, toggle); 110 + document.body.append(wrapper); 111 + } 112 + 113 + if (document.readyState === "loading") { 114 + document.addEventListener("DOMContentLoaded", mountDevStateWrench); 115 + } else { 116 + mountDevStateWrench(); 117 + } 118 + </script>
+7 -13
src/components/GasterClicker.tsx
··· 1 - import { useMemo, useState } from "react"; 1 + import { useMemo, useState } from "preact/hooks"; 2 2 3 - const whispers = [ 4 - "...", 5 - "darker...", 6 - "yet darker...", 7 - "the shadows deepen.", 8 - "ENTRY NUMBER SEVENTEEN" 9 - ]; 3 + const whispers = ["...", "darker...", "yet darker...", "the shadows deepen.", "ENTRY NUMBER SEVENTEEN"]; 10 4 11 - export function GasterClicker() { 5 + export default function GasterClickerIsland() { 12 6 const [clicks, setClicks] = useState(0); 13 7 14 8 const whisper = useMemo(() => { ··· 17 11 }, [clicks]); 18 12 19 13 return ( 20 - <section aria-label="gaster clicker"> 21 - <h2>Gaster Clicker</h2> 14 + <div> 22 15 <button 23 16 type="button" 24 17 onClick={() => setClicks((value) => value + 1)} 25 - className="mt-2 rounded border border-white px-3 py-1 hover:bg-white hover:text-black" 18 + data-gaster-clicker-button 19 + className=" border border-white px-3 py-1 hover:bg-white hover:text-black" 26 20 > 27 21 {clicks} ... {whisper} 28 22 </button> 29 - </section> 23 + </div> 30 24 ); 31 25 }
+143
src/components/ProphecyPanel.astro
··· 1 + --- 2 + import { 3 + BASE_LAYOUT_HEIGHT, 4 + BASE_PANEL_WIDTH, 5 + getAssetPath, 6 + getRedAssetPath, 7 + getStyleName, 8 + ProphecyPanelVariant, 9 + type ProphecyPanelProps, 10 + } from "../lib/prophecyPanel"; 11 + 12 + const { 13 + text, 14 + variant, 15 + image = "/assets/prophecy/deltarune.png", 16 + imageScale = 1, 17 + panelScale = 2, 18 + imageYOffset = 32, 19 + showBackground = false, 20 + } = Astro.props as ProphecyPanelProps; 21 + 22 + const panelText = text.trim().length > 0 ? text : "THE LEGEND OF THIS WORLD.\n< DELTARUNE. >"; 23 + const styleName = getStyleName(variant); 24 + const isFinal = styleName === "final"; 25 + 26 + const depthBlue = getAssetPath("depth-blue", styleName); 27 + const depthText = getAssetPath("depth-text", styleName); 28 + const depthBg = getAssetPath("depth-yetdarker-new", styleName); 29 + 30 + const depthBlueRed = getRedAssetPath("depth-blue"); 31 + const depthTextRed = getRedAssetPath("depth-text"); 32 + const depthBgRed = getRedAssetPath("depth-yetdarker-new"); 33 + 34 + const layoutWidth = BASE_PANEL_WIDTH * panelScale; 35 + const layoutHeight = BASE_LAYOUT_HEIGHT * panelScale; 36 + --- 37 + 38 + <section 39 + class="mx-auto shrink-0 text-white pointer-events-none select-none" 40 + style={{ width: `${layoutWidth}px`, height: `${layoutHeight}px` }} 41 + > 42 + <div class="prophecy-stage"> 43 + <div 44 + class="prophecy-inner" 45 + style={{ 46 + width: `${BASE_PANEL_WIDTH}px`, 47 + height: `${BASE_LAYOUT_HEIGHT}px`, 48 + transform: `translateX(-50%) scale(${panelScale})`, 49 + }} 50 + > 51 + <div class="mx-auto flex h-full w-full flex-col items-center justify-center font-['DTMSans',sans-serif]"> 52 + <div class="relative w-full flex flex-col items-center justify-center bg-transparent"> 53 + <div class="prophecy-text-float relative h-[76px] w-full text-center overflow-hidden"> 54 + <div 55 + class="prophecy-text-tex whitespace-pre-line text-[32px] leading-[1] text-transparent bg-clip-text [-webkit-background-clip:text] [mix-blend-mode:screen]" 56 + style={{ backgroundImage: `url(${depthText})` }} 57 + > 58 + {panelText} 59 + </div> 60 + 61 + { 62 + isFinal && ( 63 + <div 64 + class="prophecy-text-tex pointer-events-none absolute left-0 top-0 z-10 w-full whitespace-pre-line font-['ProphecyType',serif] text-[32px] leading-[1] text-transparent bg-clip-text [-webkit-background-clip:text] [mix-blend-mode:screen]" 65 + style={{ 66 + backgroundImage: `url(${depthTextRed})`, 67 + animation: 68 + "prophecyScroll512 30s linear infinite, prophecyPulse 2s linear infinite", 69 + }} 70 + aria-hidden="true" 71 + > 72 + {panelText} 73 + </div> 74 + ) 75 + } 76 + </div> 77 + 78 + <div 79 + class="relative mt-[8px] aspect-[3.6/1] w-full max-w-[512px]" 80 + style={{ 81 + "--img-mask": `url("${image}")`, 82 + "--p-scale": String(imageScale), 83 + "--p-yoff": `${imageYOffset}px`, 84 + "--bg-tile": `url("${depthBg}")`, 85 + }} 86 + > 87 + {showBackground && <div class="prophecy-bg absolute inset-0 z-0 pointer-events-none" />} 88 + 89 + { 90 + showBackground && 91 + isFinal && ( 92 + <div 93 + class="prophecy-bg absolute inset-0 z-5 pointer-events-none" 94 + style={{ 95 + "--bg-tile": `url("${depthBgRed}")`, 96 + animation: "prophecyPulseBg 2s linear infinite", 97 + opacity: 0, 98 + }} 99 + aria-hidden="true" 100 + /> 101 + ) 102 + } 103 + 104 + <div 105 + class="absolute left-1/2 -translate-x-1/2 -translate-y-1/2" 106 + style={{ 107 + top: "calc(50% - var(--p-yoff))", 108 + width: "calc(256px * var(--p-scale))", 109 + height: "calc(256px * var(--p-scale))", 110 + }} 111 + > 112 + <div class="prophecy-shape prophecy-ghost2" style={{ backgroundImage: `url(${depthBlue})` }} aria-hidden="true" /> 113 + <div class="prophecy-shape prophecy-ghost1" style={{ backgroundImage: `url(${depthBlue})` }} aria-hidden="true" /> 114 + <div class="prophecy-shape" style={{ backgroundImage: `url(${depthBlue})` }} /> 115 + 116 + { 117 + isFinal && ( 118 + <> 119 + <div 120 + class="prophecy-shape prophecy-ghost2 prophecy-pulse-ghost2" 121 + style={{ backgroundImage: `url(${depthBlueRed})`, opacity: 0 }} 122 + aria-hidden="true" 123 + /> 124 + <div 125 + class="prophecy-shape prophecy-ghost1 prophecy-pulse-ghost1" 126 + style={{ backgroundImage: `url(${depthBlueRed})`, opacity: 0 }} 127 + aria-hidden="true" 128 + /> 129 + <div 130 + class="prophecy-shape prophecy-pulse" 131 + style={{ backgroundImage: `url(${depthBlueRed})`, opacity: 0 }} 132 + aria-hidden="true" 133 + /> 134 + </> 135 + ) 136 + } 137 + </div> 138 + </div> 139 + </div> 140 + </div> 141 + </div> 142 + </div> 143 + </section>
-209
src/components/ProphecyPanel.tsx
··· 1 - import React from "react"; 2 - 3 - export enum ProphecyPanelVariant { 4 - DEFAULT = 1, 5 - SUSIE_DARKWORLD = 2, 6 - FINAL_PROPHECY = 3, 7 - } 8 - 9 - export type ProphecyPanelProps = { 10 - text: string; 11 - variant: ProphecyPanelVariant; 12 - image?: string; 13 - imageScale?: number; 14 - panelScale?: number; 15 - imageYOffset?: number; 16 - showBackground?: boolean; 17 - }; 18 - 19 - function getStyleName( 20 - variant: ProphecyPanelVariant 21 - ): "default" | "susie" | "final" { 22 - if (variant === ProphecyPanelVariant.SUSIE_DARKWORLD) return "susie"; 23 - if (variant === ProphecyPanelVariant.FINAL_PROPHECY) return "final"; 24 - return "default"; 25 - } 26 - 27 - function getAssetPath(name: string, style: "default" | "susie" | "final") { 28 - let suffix = ""; 29 - if (style === "susie") suffix = "-susie"; 30 - else if (style === "final") suffix = "-final"; 31 - return `/assets/depth/${name}${suffix}.png`; 32 - } 33 - 34 - function getRedAssetPath(name: string) { 35 - return `/assets/depth/${name}-final-red.png`; 36 - } 37 - 38 - const BASE_PANEL_WIDTH = 512; 39 - const BASE_LAYOUT_HEIGHT = 232; 40 - 41 - export function ProphecyPanel({ 42 - text, 43 - variant, 44 - image = "/assets/prophecy/deltarune.png", 45 - imageScale = 1, 46 - panelScale = 2, 47 - imageYOffset = 32, 48 - showBackground = false, 49 - }: ProphecyPanelProps) { 50 - const panelText = 51 - text.trim().length > 0 52 - ? text 53 - : "THE LEGEND OF THIS WORLD.\n< DELTARUNE. >"; // <-- do not change 54 - const styleName = getStyleName(variant); 55 - const isFinal = styleName === "final"; 56 - 57 - const depthBlue = getAssetPath("depth-blue", styleName); 58 - const depthText = getAssetPath("depth-text", styleName); 59 - const depthBg = getAssetPath("depth-yetdarker-new", styleName); 60 - 61 - const depthBlueRed = getRedAssetPath("depth-blue"); 62 - const depthTextRed = getRedAssetPath("depth-text"); 63 - const depthBgRed = getRedAssetPath("depth-yetdarker-new"); 64 - 65 - const layoutWidth = BASE_PANEL_WIDTH * panelScale; 66 - const layoutHeight = BASE_LAYOUT_HEIGHT * panelScale; 67 - 68 - return ( 69 - <section 70 - className="mx-auto shrink-0 text-white pointer-events-none select-none" 71 - style={{ 72 - width: `${layoutWidth}px`, 73 - height: `${layoutHeight}px`, 74 - }} 75 - > 76 - <div className="prophecy-stage"> 77 - <div 78 - className="prophecy-inner" 79 - style={{ 80 - width: BASE_PANEL_WIDTH, 81 - height: BASE_LAYOUT_HEIGHT, 82 - transform: `translateX(-50%) scale(${panelScale})`, 83 - }} 84 - > 85 - <div className="mx-auto flex h-full w-full flex-col items-center justify-center font-['DTMSans',sans-serif]"> 86 - <div className="relative w-full flex flex-col items-center justify-center bg-transparent"> 87 - <div className="prophecy-text-float relative h-[76px] w-full text-center overflow-hidden"> 88 - <div 89 - className="prophecy-text-tex whitespace-pre-line text-[32px] leading-[1] text-transparent bg-clip-text [-webkit-background-clip:text] [mix-blend-mode:screen]" 90 - style={{ 91 - backgroundImage: `url(${depthText})`, 92 - }} 93 - > 94 - {panelText} 95 - </div> 96 - 97 - {isFinal && ( 98 - <div 99 - className="prophecy-text-tex pointer-events-none absolute left-0 top-0 z-10 w-full whitespace-pre-line font-['ProphecyType',serif] text-[32px] leading-[1] text-transparent bg-clip-text [-webkit-background-clip:text] [mix-blend-mode:screen]" 100 - style={{ 101 - backgroundImage: `url(${depthTextRed})`, 102 - animation: 103 - "prophecyScroll512 30s linear infinite, prophecyPulse 2s linear infinite", 104 - }} 105 - aria-hidden="true" 106 - > 107 - {panelText} 108 - </div> 109 - )} 110 - </div> 111 - 112 - <div 113 - className="relative mt-[8px] aspect-[3.6/1] w-full max-w-[512px]" 114 - style={ 115 - { 116 - "--img-mask": `url("${image}")`, 117 - "--p-scale": String(imageScale), 118 - "--p-yoff": `${imageYOffset}px`, 119 - "--bg-tile": `url("${depthBg}")`, 120 - } as React.CSSProperties 121 - } 122 - > 123 - {showBackground && ( 124 - <div className="prophecy-bg absolute inset-0 z-0 pointer-events-none" /> 125 - )} 126 - 127 - {showBackground && isFinal && ( 128 - <div 129 - className="prophecy-bg absolute inset-0 z-5 pointer-events-none" 130 - style={ 131 - { 132 - "--bg-tile": `url("${depthBgRed}")`, 133 - animation: 134 - "prophecyPulseBg 2s linear infinite", 135 - opacity: 0, 136 - } as React.CSSProperties 137 - } 138 - aria-hidden="true" 139 - /> 140 - )} 141 - 142 - <div 143 - className="absolute left-1/2 -translate-x-1/2 -translate-y-1/2" 144 - style={ 145 - { 146 - top: `calc(50% - var(--p-yoff))`, 147 - width: `calc(256px * var(--p-scale))`, 148 - height: `calc(256px * var(--p-scale))`, 149 - } as React.CSSProperties 150 - } 151 - > 152 - <div 153 - className="prophecy-shape prophecy-ghost2" 154 - style={{ 155 - backgroundImage: `url(${depthBlue})`, 156 - }} 157 - aria-hidden="true" 158 - /> 159 - <div 160 - className="prophecy-shape prophecy-ghost1" 161 - style={{ 162 - backgroundImage: `url(${depthBlue})`, 163 - }} 164 - aria-hidden="true" 165 - /> 166 - <div 167 - className="prophecy-shape" 168 - style={{ 169 - backgroundImage: `url(${depthBlue})`, 170 - }} 171 - /> 172 - 173 - {isFinal && ( 174 - <> 175 - <div 176 - className="prophecy-shape prophecy-ghost2 prophecy-pulse-ghost2" 177 - style={{ 178 - backgroundImage: `url(${depthBlueRed})`, 179 - opacity: 0, 180 - }} 181 - aria-hidden="true" 182 - /> 183 - <div 184 - className="prophecy-shape prophecy-ghost1 prophecy-pulse-ghost1" 185 - style={{ 186 - backgroundImage: `url(${depthBlueRed})`, 187 - opacity: 0, 188 - }} 189 - aria-hidden="true" 190 - /> 191 - <div 192 - className="prophecy-shape prophecy-pulse" 193 - style={{ 194 - backgroundImage: `url(${depthBlueRed})`, 195 - opacity: 0, 196 - }} 197 - aria-hidden="true" 198 - /> 199 - </> 200 - )} 201 - </div> 202 - </div> 203 - </div> 204 - </div> 205 - </div> 206 - </div> 207 - </section> 208 - ); 209 - }
+8
src/content/attribution.ts
··· 1 + export const ATTRIBUTION_COPYRIGHT_NOTICE = [ 2 + "fan creation not affiliated or endorsed by the game/its creators;", 3 + "deltarune, its assets & characters are (c) toby fox;", 4 + "prophecytype by u/relevantad2788;", 5 + "determination sans by haley wakamatsu;", 6 + "", 7 + "remember - kris were not not just an alter ego, they're now a new internet name and handle", 8 + ].join("\n");
+21
src/content/buttons88x31.ts
··· 1 + export type Button88x31 = { 2 + title: string; 3 + url: string; 4 + img: string; 5 + }; 6 + 7 + function btn(title: string, website: string, img: string): Button88x31 { 8 + return { 9 + title, 10 + url: website, 11 + img, 12 + }; 13 + } 14 + 15 + export const our88x31s: Button88x31[] = [btn("Kris", "#", "kris.png")]; 16 + 17 + export const friends88x31s: Button88x31[] = [ 18 + // btn("Fynn", "https://fynn.pet", "fynn.png") // soon 19 + ]; 20 + 21 + export const general88x31s: Button88x31[] = [btn("Kris, where the fuck are we?", "#", "kriswheretfarewe.png")];
-151
src/frontend.tsx
··· 1 - /** 2 - * This file is the entry point for the React app, it sets up the root 3 - * element and renders the App component to the DOM. 4 - * 5 - * It is included in `src/index.html`. 6 - */ 7 - 8 - import { createRoot, hydrateRoot } from "react-dom/client"; 9 - import "./index.css"; 10 - import { App } from "./App"; 11 - import { getLatestState, type State } from "./lib/currentStateSync"; 12 - 13 - type DebugState = State; 14 - 15 - function mountDevStateWrench() { 16 - if (document.getElementById("dev-state-wrench")) { 17 - return; 18 - } 19 - 20 - const wrapper = document.createElement("div"); 21 - wrapper.id = "dev-state-wrench"; 22 - wrapper.style.position = "fixed"; 23 - wrapper.style.right = "12px"; 24 - wrapper.style.bottom = "12px"; 25 - wrapper.style.zIndex = "99999"; 26 - wrapper.style.fontFamily = "DTMSans, sans-serif"; 27 - 28 - const panel = document.createElement("div"); 29 - panel.style.display = "none"; 30 - panel.style.marginBottom = "8px"; 31 - panel.style.width = "280px"; 32 - panel.style.maxWidth = "calc(100vw - 24px)"; 33 - panel.style.padding = "10px"; 34 - panel.style.border = "1px solid rgba(255,255,255,0.35)"; 35 - panel.style.background = "rgba(0,0,0,0.9)"; 36 - panel.style.color = "#fff"; 37 - panel.style.boxShadow = "0 6px 18px rgba(0,0,0,0.45)"; 38 - panel.style.backdropFilter = "blur(3px)"; 39 - 40 - const title = document.createElement("div"); 41 - title.textContent = "state debug"; 42 - title.style.fontSize = "12px"; 43 - title.style.letterSpacing = "0.08em"; 44 - title.style.marginBottom = "6px"; 45 - 46 - const status = document.createElement("div"); 47 - status.style.fontSize = "11px"; 48 - status.style.opacity = "0.8"; 49 - status.style.marginBottom = "6px"; 50 - status.textContent = "loading..."; 51 - 52 - const body = document.createElement("pre"); 53 - body.style.margin = "0"; 54 - body.style.padding = "8px"; 55 - body.style.border = "1px solid rgba(255,255,255,0.2)"; 56 - body.style.background = "rgba(255,255,255,0.05)"; 57 - body.style.fontSize = "11px"; 58 - body.style.whiteSpace = "pre-wrap"; 59 - body.style.wordBreak = "break-word"; 60 - body.textContent = "{}"; 61 - 62 - const refresh = document.createElement("button"); 63 - refresh.type = "button"; 64 - refresh.textContent = "refresh"; 65 - refresh.style.marginTop = "8px"; 66 - refresh.style.padding = "4px 8px"; 67 - refresh.style.border = "1px solid rgba(255,255,255,0.45)"; 68 - refresh.style.background = "transparent"; 69 - refresh.style.color = "#fff"; 70 - refresh.style.cursor = "pointer"; 71 - 72 - const toggle = document.createElement("button"); 73 - toggle.type = "button"; 74 - toggle.textContent = "🔧"; 75 - toggle.title = "Toggle ATProto state debug"; 76 - toggle.style.width = "36px"; 77 - toggle.style.height = "36px"; 78 - toggle.style.borderRadius = "999px"; 79 - toggle.style.border = "1px solid rgba(255,255,255,0.45)"; 80 - toggle.style.background = "rgba(0,0,0,0.92)"; 81 - toggle.style.color = "#fff"; 82 - toggle.style.cursor = "pointer"; 83 - toggle.style.fontSize = "16px"; 84 - toggle.style.lineHeight = "1"; 85 - 86 - async function refreshState() { 87 - status.textContent = "loading..."; 88 - try { 89 - const response = await fetch("/xrpc/download.darkworld.site.getState", { 90 - method: "GET", 91 - headers: { Accept: "application/json" }, 92 - cache: "no-store", 93 - }); 94 - 95 - if (!response.ok) { 96 - status.textContent = `error: ${response.status}`; 97 - return; 98 - } 99 - 100 - const data = (await response.json()) as DebugState; 101 - body.textContent = JSON.stringify(data, null, 2); 102 - status.textContent = `ok - ${new Date().toLocaleTimeString()}`; 103 - } catch (error) { 104 - const message = error instanceof Error ? error.message : String(error); 105 - status.textContent = `error: ${message}`; 106 - } 107 - } 108 - 109 - refresh.addEventListener("click", () => { 110 - void refreshState(); 111 - }); 112 - 113 - toggle.addEventListener("click", () => { 114 - const open = panel.style.display === "block"; 115 - panel.style.display = open ? "none" : "block"; 116 - if (!open) { 117 - void refreshState(); 118 - } 119 - }); 120 - 121 - panel.append(title, status, body, refresh); 122 - wrapper.append(panel, toggle); 123 - document.body.append(wrapper); 124 - } 125 - 126 - async function start() { 127 - const container = document.getElementById("root"); 128 - if (!container) return; 129 - 130 - await getLatestState(); 131 - 132 - const isPrerendered = 133 - container.dataset.ssg === "1" && container.childElementCount > 0; 134 - 135 - if (isPrerendered) { 136 - hydrateRoot(container, <App />); 137 - mountDevStateWrench(); 138 - return; 139 - } 140 - 141 - createRoot(container).render(<App />); 142 - mountDevStateWrench(); 143 - } 144 - 145 - if (document.readyState === "loading") { 146 - document.addEventListener("DOMContentLoaded", () => { 147 - void start(); 148 - }); 149 - } else { 150 - void start(); 151 - }
+1 -1
src/index.css
··· 1 1 @import "tailwindcss"; 2 - @source "./**/*.{ts,tsx,js,jsx,html}"; 2 + @source "./**/*.{astro,ts,tsx,js,jsx,html}"; 3 3 4 4 @font-face { 5 5 font-family: "ProphecyType";
-18
src/index.html
··· 1 - <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <meta charset="UTF-8" /> 5 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 - <meta name="robots" content="noindex, nofollow" /> 7 - <!-- <link rel="icon" type="image/svg+xml" href="./logo.svg" /> --> 8 - <title>DARK WORLD</title> 9 - <meta property="og:title" content="DARKWORLD (download)" /> 10 - <meta property="og:description" content="KRIS, YOU SERIOUSLY NEED DELTARUNE REFERENCES ON ATPROTO?" /> 11 - <meta property="og:locale" content="en_US" /> 12 - <meta property="og:url" content="https://darkworld.download/" /> 13 - </head> 14 - <body> 15 - <div id="root"></div> 16 - <script type="module" src="./frontend.tsx"></script> 17 - </body> 18 - </html>
+12 -4
src/index.template.html src/layouts/BaseLayout.astro
··· 1 + --- 2 + import "../index.css"; 3 + 4 + type Props = { 5 + title?: string; 6 + }; 7 + 8 + const { title = "DARK WORLD" } = Astro.props; 9 + --- 10 + 1 11 <!doctype html> 2 12 <html lang="en"> 3 13 <head> 4 14 <meta charset="UTF-8" /> 5 15 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 16 <meta name="robots" content="noindex, nofollow" /> 7 - <title>DARK WORLD</title> 17 + <title>{title}</title> 8 18 <meta property="og:title" content="DARKWORLD (download)" /> 9 19 <meta property="og:description" content="KRIS, YOU SERIOUSLY NEED DELTARUNE REFERENCES ON ATPROTO?" /> 10 20 <meta property="og:locale" content="en_US" /> 11 21 <meta property="og:url" content="https://darkworld.download/" /> 12 - <!--app-head--> 13 22 </head> 14 23 <body> 15 - <div id="root"><!--app-html--></div> 16 - <!--app-scripts--> 24 + <slot /> 17 25 </body> 18 26 </html>
-148
src/index.tsx
··· 1 - import { serve } from "bun"; 2 - import { existsSync, readFileSync } from "fs"; 3 - import path from "path"; 4 - import index from "./index.html"; 5 - import { getState, primeState } from "./lib/currentStateSync"; 6 - import { renderPage, type BuildManifest } from "./server/renderPage"; 7 - 8 - const isProduction = Bun.env.NODE_ENV === "production"; 9 - const distDir = path.resolve("dist"); 10 - const buildManifestPath = path.join(distDir, "build-manifest.json"); 11 - 12 - function safeRelativePath(pathname: string): string | null { 13 - const relative = pathname.replace(/^\/+/, ""); 14 - if (!relative || relative.includes("..") || relative.includes("\\")) { 15 - return null; 16 - } 17 - return relative; 18 - } 19 - 20 - function safeAssetPath(pathname: string): string | null { 21 - const assetPath = pathname.replace(/^\/assets\//, ""); 22 - if (!assetPath || assetPath.includes("..") || assetPath.includes("\\")) { 23 - return null; 24 - } 25 - return assetPath; 26 - } 27 - 28 - function safeDistPath(pathname: string): string | null { 29 - const distPath = pathname.replace(/^\/\.dist\//, ""); 30 - if (!distPath || distPath.includes("..") || distPath.includes("\\")) { 31 - return null; 32 - } 33 - return distPath; 34 - } 35 - 36 - function isSourceMapPath(filePath: string): boolean { 37 - return filePath.endsWith(".map"); 38 - } 39 - 40 - function loadBuildManifest(): BuildManifest { 41 - if (!isProduction) { 42 - return { 43 - cssHref: null, 44 - islandsScriptHref: null, 45 - fullClientScriptHref: null, 46 - fullClient: false, 47 - }; 48 - } 49 - 50 - if (!existsSync(buildManifestPath)) { 51 - throw new Error("Missing dist/build-manifest.json. Run bun run build first."); 52 - } 53 - 54 - const parsed = JSON.parse(readFileSync(buildManifestPath, "utf8")) as BuildManifest; 55 - return parsed; 56 - } 57 - 58 - const baseRoutes = { 59 - "/assets/*": async (req: Request) => { 60 - const pathname = new URL(req.url).pathname; 61 - const assetPath = safeAssetPath(pathname); 62 - 63 - if (!assetPath) { 64 - return new Response("Not Found", { status: 404 }); 65 - } 66 - 67 - const file = Bun.file(`assets/${assetPath}`); 68 - if (!(await file.exists())) { 69 - return new Response("Not Found", { status: 404 }); 70 - } 71 - 72 - return new Response(file); 73 - }, 74 - ...(isProduction 75 - ? {} 76 - : { 77 - "/xrpc/download.darkworld.site.getState": async () => { 78 - await primeState(); 79 - const body = JSON.stringify(getState()); 80 - return new Response(body, { 81 - headers: { 82 - "Content-Type": "application/json;charset=utf-8", 83 - }, 84 - }); 85 - }, 86 - }), 87 - "/ocbwoy3": new Response("He does not exist."), 88 - "/ip": (req: Request) => new Response(req.headers.get("cf-connecting-ip") || "127.0.0.1"), 89 - "/": isProduction 90 - ? async () => { 91 - const manifest = loadBuildManifest(); 92 - const html = await renderPage(manifest); 93 - return new Response(html, { 94 - headers: { "Content-Type": "text/html;charset=utf-8" }, 95 - }); 96 - } 97 - : index, 98 - }; 99 - 100 - const prodOnlyRoutes = isProduction 101 - ? { 102 - "/.dist/*": async (req: Request) => { 103 - const pathname = new URL(req.url).pathname; 104 - const relative = safeDistPath(pathname); 105 - if (!relative) { 106 - return new Response("Not Found", { status: 404 }); 107 - } 108 - if (isSourceMapPath(relative)) { 109 - return new Response("Not Found", { status: 404 }); 110 - } 111 - 112 - const file = Bun.file(path.join(distDir, relative)); 113 - if (!(await file.exists())) { 114 - return new Response("Not Found", { status: 404 }); 115 - } 116 - 117 - return new Response(file); 118 - }, 119 - "/*": async (req: Request) => { 120 - const pathname = new URL(req.url).pathname; 121 - const relative = safeRelativePath(pathname); 122 - if (!relative) { 123 - return new Response("Not Found", { status: 404 }); 124 - } 125 - if (isSourceMapPath(relative)) { 126 - return new Response("Not Found", { status: 404 }); 127 - } 128 - 129 - const file = Bun.file(path.join(distDir, relative)); 130 - if (!(await file.exists())) { 131 - return new Response("Not Found", { status: 404 }); 132 - } 133 - 134 - return new Response(file); 135 - }, 136 - } 137 - : {}; 138 - 139 - const server = serve({ 140 - routes: { ...baseRoutes, ...prodOnlyRoutes } as any, 141 - reusePort: true, 142 - development: !isProduction && { 143 - hmr: true, 144 - console: true, 145 - }, 146 - }); 147 - 148 - console.log(`ℹ️ Started server on: ${server.url}`);
+1 -23
src/lib/88x31.ts
··· 1 - type a88x31button = { 2 - title: string, 3 - url: string, 4 - img: string 5 - } 6 - 7 - function btn(title: string, website: string, img: string): a88x31button { 8 - return { 9 - title, url: website, img 10 - } 11 - } 12 - 13 - export const our88x31s: a88x31button[] = [ 14 - btn("Kris", "#", "kris.png") 15 - ] 16 - 17 - export const friends88x31s: a88x31button[] = [ 18 - // btn("Fynn", "https://fynn.pet", "fynn.png") // soon 19 - ] 20 - 21 - export const general88x31s: a88x31button[] = [ 22 - btn("Kris, where the fuck are we?", "#", "kriswheretfarewe.png") 23 - ] 1 + export { friends88x31s, general88x31s, our88x31s, type Button88x31 } from "../content/buttons88x31";
+1 -14
src/lib/DO_NOT_DELETE.ts
··· 1 - 2 - /** 3 - * Copyright & Attribution notice 4 - * 5 - * DO NOT DELETE THIS 6 - */ 7 - export const ATTRIBUTION_COPYRIGHT_NOTICE = [ 8 - `fan creation not affiliated or endorsed by the game/its creators;`, 9 - `deltarune, its assets & characters are (c) toby fox;`, 10 - `prophecytype by u/relevantad2788;`, 11 - `determination sans by haley wakamatsu;`, 12 - ``, 13 - `remember - kris were not not just an alter ego, they're now a new internet name and handle` 14 - ].join("\n") 1 + export { ATTRIBUTION_COPYRIGHT_NOTICE } from "../content/attribution";
+16 -340
src/lib/currentStateSync.ts
··· 1 - type TitleColor = "none" | "enby" | "trans" | "pan" | "latvia"; 1 + import { 2 + getState as getServerState, 3 + primeState as primeServerState, 4 + type State, 5 + type TitleColor, 6 + } from "../server/atproto/state"; 2 7 3 8 type TitleColorTheme = { 4 9 invertBg: boolean; 5 10 gradient: string | null; 6 11 }; 7 12 8 - export type State = { 9 - useSusieProphecy: boolean; 10 - titleColors: TitleColor; 11 - favoriteGames: string[]; 12 - favoriteArtists: string[]; 13 - favoriteAlbums: string[]; 14 - favoriteDeltaruneCharacters: string[]; 15 - }; 16 - 17 - declare global { 18 - interface Window { 19 - __DARKWORLD_STATE__?: State; 20 - } 21 - } 22 - 23 - const DEFAULT_STATE: State = { 24 - useSusieProphecy: false, 25 - titleColors: "none", 26 - favoriteGames: [], 27 - favoriteArtists: [], 28 - favoriteAlbums: [], 29 - favoriteDeltaruneCharacters: [], 30 - }; 31 - 32 13 function createStripedGradient(stops: string[]): string { 33 14 const segment = 100 / stops.length; 34 15 const parts: string[] = []; ··· 43 24 return `linear-gradient(180deg, ${parts.join(", ")})`; 44 25 } 45 26 46 - const STATE_TTL_MS = 10_000; 47 - const ENV = 48 - typeof Bun !== "undefined" 49 - ? Bun.env 50 - : typeof process !== "undefined" 51 - ? process.env 52 - : {}; 53 - 54 - const STATE_REPO = ENV.DARKWORLD_STATE_REPO ?? "did:plc:s7cesz7cr6ybltaryy4meb6y"; 55 - const STATE_COLLECTION = ENV.DARKWORLD_STATE_COLLECTION ?? "download.darkworld.state"; 56 - const STATE_RKEY = ENV.DARKWORLD_STATE_RKEY ?? "self"; 57 - const FALLBACK_ATPROTO_SERVICE = "https://lionsmane.us-east.host.bsky.network"; 58 - 59 - let serverState: State = DEFAULT_STATE; 60 - let lastServerSyncMs = 0; 61 - let syncInFlight: Promise<State> | null = null; 62 - let didServiceCache: { did: string; endpoint: string; cachedAtMs: number } | null = null; 63 - let lastSyncError = ""; 64 - 65 - function parseKnownTitleColors(input: unknown): Exclude<TitleColor, "none"> | null { 66 - if (input === "enby" || input === "trans" || input === "pan" || input === "latvia") { 67 - return input; 68 - } 69 - 70 - return null; 71 - } 72 - 73 27 export const titleColorConfigs = { 74 28 // https://www.tumblr.com/chekhovs-cat/674659716796940288 75 29 enby: { 76 30 invertBg: true, 77 - colors: [ 78 - "#fff430", 79 - "#ffffff", 80 - "#9c59d1", 81 - "#000000" 82 - ] 31 + colors: ["#fff430", "#ffffff", "#9c59d1", "#000000"], 83 32 }, 84 33 trans: { 85 34 invertBg: false, 86 - colors: [ 87 - "#55cdfc", 88 - "#f7a8b8", 89 - "#ffffff", 90 - "#55cdfc", 91 - "#f7a8b8", 92 - ] 35 + colors: ["#55cdfc", "#f7a8b8", "#ffffff", "#55cdfc", "#f7a8b8"], 93 36 }, 94 37 pan: { 95 38 invertBg: false, 96 - colors: [ 97 - "#FF1B8D", 98 - "#FFDA00", 99 - "#1BB3FF", 100 - ] 39 + colors: ["#FF1B8D", "#FFDA00", "#1BB3FF"], 101 40 }, 102 41 103 42 // https://en.wikipedia.org/wiki/Flag_of_Latvia#Design 104 43 latvia: { 105 44 invertBg: false, 106 - colors: [ 107 - "#9d2235", 108 - "#9d2235", 109 - "#ffffff", 110 - "#9d2235", 111 - "#9d2235" 112 - ] 113 - } 114 - } 45 + colors: ["#9d2235", "#9d2235", "#ffffff", "#9d2235", "#9d2235"], 46 + }, 47 + }; 115 48 116 49 const TITLE_COLOR_STOPS: Record<Exclude<TitleColor, "none">, string[]> = { 117 50 enby: titleColorConfigs.enby.colors, 118 51 trans: titleColorConfigs.trans.colors, 119 52 pan: titleColorConfigs.pan.colors, 120 - latvia: titleColorConfigs.latvia.colors 53 + latvia: titleColorConfigs.latvia.colors, 121 54 }; 122 55 123 - function parseStringArray(input: unknown): string[] { 124 - if (!Array.isArray(input)) { 125 - return []; 126 - } 127 - 128 - return input.filter((entry): entry is string => typeof entry === "string"); 129 - } 130 - 131 - function parseState(input: unknown): State | null { 132 - if (!input || typeof input !== "object") { 133 - return null; 134 - } 135 - 136 - const value = input as { 137 - useSusieProphecy?: unknown; 138 - titleColors?: unknown; 139 - favoriteGames?: unknown; 140 - favoriteArtists?: unknown; 141 - favoriteAlbums?: unknown; 142 - favoriteDeltaruneCharacters?: unknown; 143 - swapOutKrisWithSusie?: unknown; 144 - site?: { susieProphecy?: unknown; titleColors?: unknown }; 145 - favorite?: { 146 - game?: unknown; 147 - artist?: unknown; 148 - album?: unknown; 149 - deltaruneCharacter?: unknown; 150 - }; 151 - }; 152 - 153 - const useSusieProphecy = 154 - typeof value.useSusieProphecy === "boolean" 155 - ? value.useSusieProphecy 156 - : typeof value.swapOutKrisWithSusie === "boolean" 157 - ? value.swapOutKrisWithSusie 158 - : typeof value.site?.susieProphecy === "boolean" 159 - ? value.site.susieProphecy 160 - : null; 161 - 162 - if (useSusieProphecy === null) { 163 - return null; 164 - } 165 - 166 - const titleColorsFromSite = parseKnownTitleColors(value.site?.titleColors); 167 - 168 - let titleColors: TitleColor = "none"; 169 - if (value.titleColors === "none" 170 - || value.titleColors === "enby" 171 - || value.titleColors === "trans" 172 - || value.titleColors === "pan" 173 - || value.titleColors === "latvia" 174 - ) { 175 - titleColors = value.titleColors; 176 - } else if (titleColorsFromSite) { 177 - titleColors = titleColorsFromSite; 178 - } 179 - 180 - return { 181 - useSusieProphecy, 182 - titleColors, 183 - favoriteGames: parseStringArray(value.favoriteGames ?? value.favorite?.game), 184 - favoriteArtists: parseStringArray(value.favoriteArtists ?? value.favorite?.artist), 185 - favoriteAlbums: parseStringArray(value.favoriteAlbums ?? value.favorite?.album), 186 - favoriteDeltaruneCharacters: parseStringArray( 187 - value.favoriteDeltaruneCharacters ?? value.favorite?.deltaruneCharacter, 188 - ), 189 - }; 190 - } 191 - 192 - function getServerState(): State { 193 - return serverState; 194 - } 195 - 196 - function parseAtprotoStateRecord(input: unknown): State | null { 197 - if (!input || typeof input !== "object") { 198 - return null; 199 - } 200 - 201 - const record = input as { 202 - swapOutKrisWithSusie?: unknown; 203 - site?: { susieProphecy?: unknown; titleColors?: unknown }; 204 - favorite?: { 205 - game?: unknown; 206 - artist?: unknown; 207 - album?: unknown; 208 - deltaruneCharacter?: unknown; 209 - }; 210 - }; 211 - const titleColors = parseKnownTitleColors(record.site?.titleColors) ?? "none"; 212 - 213 - if (typeof record.swapOutKrisWithSusie === "boolean") { 214 - return { 215 - useSusieProphecy: record.swapOutKrisWithSusie, 216 - titleColors, 217 - favoriteGames: parseStringArray(record.favorite?.game), 218 - favoriteArtists: parseStringArray(record.favorite?.artist), 219 - favoriteAlbums: parseStringArray(record.favorite?.album), 220 - favoriteDeltaruneCharacters: parseStringArray(record.favorite?.deltaruneCharacter), 221 - }; 222 - } 223 - 224 - if (typeof record.site?.susieProphecy === "boolean") { 225 - return { 226 - useSusieProphecy: record.site.susieProphecy, 227 - titleColors, 228 - favoriteGames: parseStringArray(record.favorite?.game), 229 - favoriteArtists: parseStringArray(record.favorite?.artist), 230 - favoriteAlbums: parseStringArray(record.favorite?.album), 231 - favoriteDeltaruneCharacters: parseStringArray(record.favorite?.deltaruneCharacter), 232 - }; 233 - } 234 - 235 - return null; 236 - } 237 - 238 - async function fetchStateFromAtproto(): Promise<State> { 239 - const service = await resolveServiceEndpointForRepo(STATE_REPO); 240 - const url = new URL("/xrpc/com.atproto.repo.getRecord", service); 241 - url.searchParams.set("repo", STATE_REPO); 242 - url.searchParams.set("collection", STATE_COLLECTION); 243 - url.searchParams.set("rkey", STATE_RKEY); 244 - 245 - const response = await fetch(url, { 246 - method: "GET", 247 - headers: { 248 - Accept: "application/json", 249 - }, 250 - }); 251 - 252 - if (!response.ok) { 253 - throw new Error(`Record fetch failed with ${response.status}`); 254 - } 255 - 256 - const body = (await response.json()) as { value?: unknown }; 257 - const parsed = parseAtprotoStateRecord(body.value); 258 - if (!parsed) { 259 - throw new Error("State record is missing `site.susieProphecy` or `useSusieProphecy`"); 260 - } 261 - 262 - return parsed; 263 - } 264 - 265 - async function resolveServiceEndpointForRepo(repo: string): Promise<string> { 266 - if (!repo.startsWith("did:plc:")) { 267 - return FALLBACK_ATPROTO_SERVICE; 268 - } 269 - 270 - const now = Date.now(); 271 - if (didServiceCache && didServiceCache.did === repo && now - didServiceCache.cachedAtMs < 300_000) { 272 - return didServiceCache.endpoint; 273 - } 274 - 275 - try { 276 - const response = await fetch(`https://plc.directory/${encodeURIComponent(repo)}`, { 277 - method: "GET", 278 - headers: { 279 - Accept: "application/json", 280 - }, 281 - }); 282 - 283 - if (!response.ok) { 284 - return FALLBACK_ATPROTO_SERVICE; 285 - } 286 - 287 - const doc = (await response.json()) as { 288 - service?: Array<{ type?: string; serviceEndpoint?: string }>; 289 - }; 290 - 291 - const pds = doc.service?.find((entry) => entry.type === "AtprotoPersonalDataServer"); 292 - if (typeof pds?.serviceEndpoint === "string" && pds.serviceEndpoint.startsWith("https://")) { 293 - didServiceCache = { 294 - did: repo, 295 - endpoint: pds.serviceEndpoint, 296 - cachedAtMs: now, 297 - }; 298 - return pds.serviceEndpoint; 299 - } 300 - } catch { 301 - return FALLBACK_ATPROTO_SERVICE; 302 - } 303 - 304 - return FALLBACK_ATPROTO_SERVICE; 305 - } 56 + export type { State, TitleColor, TitleColorTheme }; 306 57 307 58 export async function primeState(force = false): Promise<State> { 308 - if (typeof window !== "undefined") { 309 - return getState(); 310 - } 311 - 312 - const now = Date.now(); 313 - if (!force && now - lastServerSyncMs < STATE_TTL_MS) { 314 - return serverState; 315 - } 316 - 317 - if (!syncInFlight) { 318 - syncInFlight = (async () => { 319 - try { 320 - const nextState = await fetchStateFromAtproto(); 321 - serverState = nextState; 322 - lastServerSyncMs = Date.now(); 323 - lastSyncError = ""; 324 - return nextState; 325 - } catch (error) { 326 - lastServerSyncMs = Date.now(); 327 - const message = error instanceof Error ? error.message : String(error); 328 - if (message !== lastSyncError) { 329 - lastSyncError = message; 330 - console.warn(`[state-sync] Failed to refresh atproto state: ${message}`); 331 - } 332 - return serverState; 333 - } finally { 334 - syncInFlight = null; 335 - } 336 - })(); 337 - } 338 - 339 - return syncInFlight; 59 + return primeServerState(force); 340 60 } 341 61 342 62 export function getState(): State { 343 - if (typeof window === "undefined") { 344 - return getServerState(); 345 - } 346 - 347 - const fromWindow = parseState(window.__DARKWORLD_STATE__); 348 - if (fromWindow) { 349 - return fromWindow; 350 - } 351 - 352 - return DEFAULT_STATE; 63 + return getServerState(); 353 64 } 354 65 355 66 export function getTitleColors(): TitleColor { ··· 367 78 gradient: createStripedGradient(TITLE_COLOR_STOPS[selectedTitleColor]), 368 79 }; 369 80 } 370 - 371 - export async function getLatestState(): Promise<State> { 372 - if (typeof window === "undefined") { 373 - return primeState(true); 374 - } 375 - 376 - const fromWindow = parseState(window.__DARKWORLD_STATE__); 377 - if (fromWindow) { 378 - return fromWindow; 379 - } 380 - 381 - try { 382 - const response = await fetch("/xrpc/download.darkworld.site.getState", { 383 - method: "GET", 384 - headers: { 385 - Accept: "application/json", 386 - }, 387 - cache: "no-store", 388 - }); 389 - 390 - if (!response.ok) { 391 - return getState(); 392 - } 393 - 394 - const parsed = parseState(await response.json()); 395 - if (!parsed) { 396 - return getState(); 397 - } 398 - 399 - window.__DARKWORLD_STATE__ = parsed; 400 - return parsed; 401 - } catch { 402 - return getState(); 403 - } 404 - }
+12 -18
src/lib/prophecy.ts src/content/prophecy.ts
··· 1 - import { ProphecyPanelVariant, type ProphecyPanelProps } from "@/components/ProphecyPanel"; 2 - import { getState } from "./currentStateSync"; 1 + import type { State } from "../lib/currentStateSync"; 2 + import { ProphecyPanelVariant, type ProphecyPanelProps } from "../lib/prophecyPanel"; 3 3 4 4 export function getProphecies(): ProphecyPanelProps[] { 5 - const state = getState(); 6 - 7 5 const propheciesP: Partial<ProphecyPanelProps>[] = [ 8 6 { 9 - text: `THE HOLY TRINITY OF DECENTRALIZATION.\n< AT PROTOCOL. >`, 7 + text: "THE HOLY TRINITY OF DECENTRALIZATION.\n< AT PROTOCOL. >", 10 8 image: "/assets/prophecy/atproto.png", 11 9 }, 12 10 { 13 - text: `BUT LO, ON HOPES AND DREAMS THEY SEND,\nA NEW APP APPEARS.`, 11 + text: "BUT LO, ON HOPES AND DREAMS THEY SEND,\nA NEW APP APPEARS.", 14 12 image: "/assets/prophecy/bluesky.png", 15 13 }, 16 14 { 17 15 image: "/assets/prophecy/nix.png", 18 - text: `FROM FLAKES AND LOCKFILES SHALL ARISE,\nA WORLD WITHOUT IMPURE STATE.`, 16 + text: "FROM FLAKES AND LOCKFILES SHALL ARISE,\nA WORLD WITHOUT IMPURE STATE.", 19 17 variant: ProphecyPanelVariant.FINAL_PROPHECY, 20 18 }, 21 19 { ··· 25 23 variant: ProphecyPanelVariant.FINAL_PROPHECY, 26 24 }, 27 25 { 28 - text: `THE LEGEND OF THIS WORLD.\n< DELTARUNE. >`, 26 + text: "THE LEGEND OF THIS WORLD.\n< DELTARUNE. >", 29 27 variant: ProphecyPanelVariant.FINAL_PROPHECY, 30 28 }, 31 29 ]; 32 30 33 - return propheciesP.map((a) => ({ 31 + return propheciesP.map((entry) => ({ 34 32 variant: ProphecyPanelVariant.DEFAULT, 35 33 panelScale: 2, 36 - ...a, 34 + ...entry, 37 35 })) as ProphecyPanelProps[]; 38 36 } 39 37 ··· 41 39 return getProphecies(); 42 40 } 43 41 44 - export function getTheProphecy() { 45 - const state = getState(); 46 - 42 + export function getTheProphecy(state: State) { 47 43 return { 48 44 legendOfThisWorld: { 49 - text: `THE LEGEND OF THIS WORLD.\n< DELTARUNE. >`, 45 + text: "THE LEGEND OF THIS WORLD.\n< DELTARUNE. >", 50 46 variant: ProphecyPanelVariant.FINAL_PROPHECY, 51 47 panelScale: 2, 52 48 image: "/assets/prophecy/deltarune.png", ··· 54 50 krisOrSusie: { 55 51 text: state.useSusieProphecy 56 52 ? "THE SECOND HERO.\nTHE GIRL, WITH HOPE CROSSED ON HER HEART." 57 - : `THE FIRST HERO.\nTHE CAGE, WITH HUMAN SOUL AND PARTS.`, 58 - image: state.useSusieProphecy 59 - ? "/assets/prophecy/susie.png" 60 - : "/assets/prophecy/kris.png", 53 + : "THE FIRST HERO.\nTHE CAGE, WITH HUMAN SOUL AND PARTS.", 54 + image: state.useSusieProphecy ? "/assets/prophecy/susie.png" : "/assets/prophecy/kris.png", 61 55 variant: state.useSusieProphecy 62 56 ? ProphecyPanelVariant.SUSIE_DARKWORLD 63 57 : ProphecyPanelVariant.DEFAULT,
+37
src/lib/prophecyPanel.ts
··· 1 + export enum ProphecyPanelVariant { 2 + DEFAULT = 1, 3 + SUSIE_DARKWORLD = 2, 4 + FINAL_PROPHECY = 3, 5 + } 6 + 7 + export type ProphecyPanelProps = { 8 + text: string; 9 + variant: ProphecyPanelVariant; 10 + image?: string; 11 + imageScale?: number; 12 + panelScale?: number; 13 + imageYOffset?: number; 14 + showBackground?: boolean; 15 + }; 16 + 17 + export type ProphecyStyleName = "default" | "susie" | "final"; 18 + 19 + export function getStyleName(variant: ProphecyPanelVariant): ProphecyStyleName { 20 + if (variant === ProphecyPanelVariant.SUSIE_DARKWORLD) return "susie"; 21 + if (variant === ProphecyPanelVariant.FINAL_PROPHECY) return "final"; 22 + return "default"; 23 + } 24 + 25 + export function getAssetPath(name: string, style: ProphecyStyleName): string { 26 + let suffix = ""; 27 + if (style === "susie") suffix = "-susie"; 28 + else if (style === "final") suffix = "-final"; 29 + return `/assets/depth/${name}${suffix}.png`; 30 + } 31 + 32 + export function getRedAssetPath(name: string): string { 33 + return `/assets/depth/${name}-final-red.png`; 34 + } 35 + 36 + export const BASE_PANEL_WIDTH = 512; 37 + export const BASE_LAYOUT_HEIGHT = 232;
+164
src/pages/index.astro
··· 1 + --- 2 + export const prerender = false; 3 + 4 + import GasterClicker from "../components/GasterClicker.tsx"; 5 + import ProphecyPanel from "../components/ProphecyPanel.astro"; 6 + import DevStateWrench from "../components/DevStateWrench.astro"; 7 + import BaseLayout from "../layouts/BaseLayout.astro"; 8 + import { friends88x31s, general88x31s, our88x31s } from "../lib/88x31"; 9 + import { ATTRIBUTION_COPYRIGHT_NOTICE } from "../lib/DO_NOT_DELETE"; 10 + import { getState, getTitleColorTheme, getTitleColors, primeState } from "../lib/currentStateSync"; 11 + import { getTheProphecy } from "../content/prophecy"; 12 + 13 + await primeState(); 14 + 15 + const state = getState(); 16 + const titleTheme = getTitleColorTheme(); 17 + const titleColors = getTitleColors(); 18 + const heroProphecy = getTheProphecy(state).krisOrSusie; 19 + 20 + const introText = `i am the other kris, not the one from deltarune! 21 + 22 + However, you could probably guess my favorite character, and if it were to be Kris, you'd be right... 23 + In the meantime... check out this site! 24 + 25 + /** TODO: fix this */ 26 + <FunGang /> 27 + <img src="/assets/dancing-kris.gif" />`; 28 + 29 + const comms = [ 30 + { 31 + label: "bluesky", 32 + href: "https://bsky.app/profile/did:plc:s7cesz7cr6ybltaryy4meb6y", 33 + }, 34 + { 35 + label: "discord", 36 + href: "https://discord.com/users/486147449703104523", 37 + }, 38 + ]; 39 + --- 40 + 41 + <BaseLayout> 42 + <div class="min-h-screen bg-black px-3 py-3 text-white"> 43 + <div class="mx-auto flex w-full max-w-5xl flex-col gap-3"> 44 + <div class="pt-16"> 45 + <div 46 + class="inline-block w-fit rounded-sm" 47 + style={{ 48 + backgroundColor: titleTheme.invertBg ? "#111111" : "transparent", 49 + paddingInline: titleTheme.invertBg ? "2px" : "0", 50 + }} 51 + > 52 + <h1 class="text-4xl leading-none"> 53 + <span 54 + class="inline-block" 55 + style={ 56 + titleTheme.gradient 57 + ? { 58 + backgroundImage: titleTheme.gradient, 59 + WebkitBackgroundClip: "text", 60 + backgroundClip: "text", 61 + WebkitTextFillColor: "transparent", 62 + color: "transparent", 63 + backgroundSize: "100% 100%", 64 + backgroundRepeat: "no-repeat", 65 + WebkitTextStroke: 66 + titleColors === "enby" ? "1px rgba(255,255,255,0.1)" : undefined, 67 + } 68 + : undefined 69 + } 70 + > 71 + hi, i'm kris 72 + </span> 73 + </h1> 74 + </div> 75 + </div> 76 + <p class="whitespace-pre-wrap">{introText}</p> 77 + 78 + <main class="flex flex-col gap-3"> 79 + <div class="h-8" /> 80 + <ProphecyPanel {...heroProphecy} /> 81 + <GasterClicker client:load /> 82 + <section aria-label="comms"> 83 + <h2>Comms</h2> 84 + <ul class="mt-3 list-disc pl-6"> 85 + { 86 + comms.map((link) => ( 87 + <li> 88 + <a class="underline" href={link.href} target="_blank" rel="noreferrer"> 89 + {link.label} 90 + </a> 91 + </li> 92 + )) 93 + } 94 + <li> 95 + email: <code>echo a3Jpc0BkYXJrd29ybGQuZG93bmxvYWQK | base64 -d</code> 96 + </li> 97 + </ul> 98 + </section> 99 + </main> 100 + 101 + <footer> 102 + <h3>Friends!!</h3> 103 + <ul class="mt-3 flex flex-wrap gap-2"> 104 + { 105 + friends88x31s.map((button) => ( 106 + <li> 107 + <a href={button.url} title={button.title} class="group w-[88px] h-[31px]"> 108 + <img 109 + src={`/assets/88x31/${button.img}`} 110 + alt={button.title} 111 + width={88} 112 + height={31} 113 + class="absolute transition-opacity group-hover:opacity-25" 114 + style={{ imageRendering: "pixelated" }} 115 + /> 116 + <img 117 + src={`/assets/88x31/${button.img}`} 118 + alt={button.title} 119 + width={88} 120 + height={31} 121 + class="transition-transform group-hover:-translate-y-16 group-hover:scale-200" 122 + style={{ imageRendering: "pixelated" }} 123 + /> 124 + </a> 125 + </li> 126 + )) 127 + } 128 + </ul> 129 + <h3>Buttons!</h3> 130 + <ul class="mt-3 flex flex-wrap gap-2"> 131 + { 132 + [...our88x31s, ...general88x31s].map((button) => ( 133 + <li> 134 + <a href={button.url} title={button.title} class="group w-[88px] h-[31px]"> 135 + <img 136 + src={`/assets/88x31/${button.img}`} 137 + alt={button.title} 138 + width={88} 139 + height={31} 140 + class="absolute transition-opacity group-hover:opacity-25" 141 + style={{ imageRendering: "pixelated" }} 142 + /> 143 + <img 144 + src={`/assets/88x31/${button.img}`} 145 + alt={button.title} 146 + width={88} 147 + height={31} 148 + class="transition-transform group-hover:-translate-y-16 group-hover:scale-200" 149 + style={{ imageRendering: "pixelated" }} 150 + /> 151 + </a> 152 + </li> 153 + )) 154 + } 155 + </ul> 156 + <p class="text-lg antialiased pt-6"> 157 + <a href="https://tangled.org/kris.darkworld.download/darkworld" class="underline">source</a> 158 + </p> 159 + <p class="text-xs font-[Comic_Sans_MS,sans] whitespace-pre-wrap" style={{ color: "gray" }}>{ATTRIBUTION_COPYRIGHT_NOTICE}</p> 160 + </footer> 161 + </div> 162 + </div> 163 + {import.meta.env.DEV && <DevStateWrench />} 164 + </BaseLayout>
+11
src/pages/ocbwoy3.ts
··· 1 + import type { APIRoute } from "astro"; 2 + 3 + export const prerender = true; 4 + 5 + export const GET: APIRoute = () => { 6 + return new Response("He does not exist.", { 7 + headers: { 8 + "Content-Type": "text/plain;charset=utf-8", 9 + }, 10 + }); 11 + };
+17
src/pages/xrpc/download.darkworld.site.getState.ts
··· 1 + import type { APIRoute } from "astro"; 2 + import { getState, primeState } from "../../lib/currentStateSync"; 3 + 4 + export const prerender = false; 5 + 6 + export const GET: APIRoute = async () => { 7 + if (!import.meta.env.DEV) { 8 + return new Response("Not Found", { status: 404 }); 9 + } 10 + 11 + await primeState(); 12 + return new Response(JSON.stringify(getState()), { 13 + headers: { 14 + "Content-Type": "application/json;charset=utf-8", 15 + }, 16 + }); 17 + };
-22
src/runtime/full-client.tsx
··· 1 - import { createRoot, hydrateRoot } from "react-dom/client"; 2 - import { App } from "../App"; 3 - 4 - function start() { 5 - const container = document.getElementById("root"); 6 - if (!container) { 7 - return; 8 - } 9 - 10 - if (container.childElementCount > 0) { 11 - hydrateRoot(container, <App />); 12 - return; 13 - } 14 - 15 - createRoot(container).render(<App />); 16 - } 17 - 18 - if (document.readyState === "loading") { 19 - document.addEventListener("DOMContentLoaded", start); 20 - } else { 21 - start(); 22 - }
-8
src/runtime/generated/island-loaders.ts
··· 1 - type IslandLoader = () => Promise<Record<string, unknown>>; 2 - 3 - const generatedIslandLoaders: Record<string, IslandLoader> = { 4 - }; 5 - 6 - export function getGeneratedIslandLoaders(): Record<string, IslandLoader> { 7 - return generatedIslandLoaders; 8 - }
-18
src/runtime/island-loaders.ts
··· 1 - import { getGeneratedIslandLoaders } from "./generated/island-loaders"; 2 - 3 - export type IslandLoader = () => Promise<Record<string, unknown>>; 4 - export type IslandLoaders = Record<string, IslandLoader>; 5 - 6 - let cachedIslandLoaders: IslandLoaders | null = null; 7 - 8 - export function getIslandLoaders(): IslandLoaders { 9 - if (!cachedIslandLoaders) { 10 - cachedIslandLoaders = getGeneratedIslandLoaders(); 11 - } 12 - 13 - return cachedIslandLoaders; 14 - } 15 - 16 - export function getIslandLoader(moduleId: string): IslandLoader | undefined { 17 - return getIslandLoaders()[moduleId]; 18 - }
-68
src/runtime/islands-client.tsx
··· 1 - import type { ComponentType } from "react"; 2 - import { hydrateRoot } from "react-dom/client"; 3 - import { decodeJsonProps, type JsonValue } from "./jsonSafe"; 4 - import { islandAttrs } from "./server-islands"; 5 - import { getIslandLoader } from "./island-loaders"; 6 - 7 - type ModuleRecord = Record<string, unknown>; 8 - 9 - async function loadModule(moduleId: string): Promise<ModuleRecord | null> { 10 - const loader = getIslandLoader(moduleId); 11 - if (!loader) { 12 - console.warn(`[islands] Missing loader for module: ${moduleId}`); 13 - return null; 14 - } 15 - 16 - return loader(); 17 - } 18 - 19 - function pickExport(moduleRecord: ModuleRecord, exportName: string): unknown { 20 - if (exportName === "default") { 21 - return moduleRecord.default; 22 - } 23 - return moduleRecord[exportName]; 24 - } 25 - 26 - function getTextAttr(node: Element, key: string): string | null { 27 - const value = node.getAttribute(key); 28 - return value && value.length > 0 ? value : null; 29 - } 30 - 31 - async function hydrateIsland(node: Element): Promise<void> { 32 - const moduleId = getTextAttr(node, islandAttrs.island); 33 - const exportName = getTextAttr(node, islandAttrs.exportName) ?? "default"; 34 - const rawProps = getTextAttr(node, islandAttrs.props) ?? "%7B%7D"; 35 - 36 - if (!moduleId) { 37 - return; 38 - } 39 - 40 - const moduleRecord = await loadModule(moduleId); 41 - if (!moduleRecord) { 42 - return; 43 - } 44 - 45 - const Component = pickExport(moduleRecord, exportName) as 46 - | ComponentType<Record<string, JsonValue>> 47 - | undefined; 48 - if (!Component) { 49 - console.warn(`[islands] Export not found: ${moduleId}#${exportName}`); 50 - return; 51 - } 52 - 53 - const props = decodeJsonProps<Record<string, JsonValue>>(rawProps); 54 - hydrateRoot(node, <Component {...props} />); 55 - } 56 - 57 - async function hydrateAllIslands() { 58 - const nodes = document.querySelectorAll(`[${islandAttrs.island}]`); 59 - await Promise.all(Array.from(nodes).map((node) => hydrateIsland(node))); 60 - } 61 - 62 - if (document.readyState === "loading") { 63 - document.addEventListener("DOMContentLoaded", () => { 64 - void hydrateAllIslands(); 65 - }); 66 - } else { 67 - void hydrateAllIslands(); 68 - }
-98
src/runtime/jsonSafe.ts
··· 1 - export type JsonPrimitive = string | number | boolean | null; 2 - export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }; 3 - 4 - const MAX_DEPTH = 25; 5 - const MAX_KEYS = 5000; 6 - const MAX_SERIALIZED_BYTES = 100_000; 7 - 8 - function isPlainObject(value: unknown): value is Record<string, unknown> { 9 - if (value === null || typeof value !== "object") { 10 - return false; 11 - } 12 - const proto = Object.getPrototypeOf(value); 13 - return proto === Object.prototype || proto === null; 14 - } 15 - 16 - function validateJsonSafe( 17 - value: unknown, 18 - path: string, 19 - depth: number, 20 - seen: Set<unknown>, 21 - stats: { keyCount: number } 22 - ): asserts value is JsonValue { 23 - if (depth > MAX_DEPTH) { 24 - throw new Error(`Island props exceed max depth at ${path}`); 25 - } 26 - 27 - if ( 28 - value === null || 29 - typeof value === "string" || 30 - typeof value === "number" || 31 - typeof value === "boolean" 32 - ) { 33 - return; 34 - } 35 - 36 - if (typeof value === "bigint" || typeof value === "symbol" || typeof value === "function") { 37 - throw new Error(`Island props contain non-serializable value at ${path}`); 38 - } 39 - 40 - if (typeof value === "undefined") { 41 - throw new Error(`Island props contain undefined at ${path}`); 42 - } 43 - 44 - if (value instanceof Date || value instanceof Map || value instanceof Set || value instanceof RegExp) { 45 - throw new Error(`Island props contain unsupported object type at ${path}`); 46 - } 47 - 48 - if (Array.isArray(value)) { 49 - if (seen.has(value)) { 50 - throw new Error(`Island props contain circular reference at ${path}`); 51 - } 52 - seen.add(value); 53 - for (let i = 0; i < value.length; i += 1) { 54 - validateJsonSafe(value[i], `${path}[${i}]`, depth + 1, seen, stats); 55 - } 56 - seen.delete(value); 57 - return; 58 - } 59 - 60 - if (!isPlainObject(value)) { 61 - throw new Error(`Island props contain non-plain object at ${path}`); 62 - } 63 - 64 - if (seen.has(value)) { 65 - throw new Error(`Island props contain circular reference at ${path}`); 66 - } 67 - 68 - seen.add(value); 69 - for (const [key, child] of Object.entries(value)) { 70 - stats.keyCount += 1; 71 - if (stats.keyCount > MAX_KEYS) { 72 - throw new Error("Island props exceed key-count limits"); 73 - } 74 - validateJsonSafe(child, `${path}.${key}`, depth + 1, seen, stats); 75 - } 76 - seen.delete(value); 77 - } 78 - 79 - export function encodeJsonProps(value: unknown): string { 80 - validateJsonSafe(value, "props", 0, new Set(), { keyCount: 0 }); 81 - 82 - const serialized = JSON.stringify(value); 83 - if (serialized === undefined) { 84 - throw new Error("Island props could not be serialized"); 85 - } 86 - 87 - if (serialized.length > MAX_SERIALIZED_BYTES) { 88 - throw new Error("Island props are too large to embed safely"); 89 - } 90 - 91 - return encodeURIComponent(serialized); 92 - } 93 - 94 - export function decodeJsonProps<T extends JsonValue>(raw: string): T { 95 - const value = JSON.parse(decodeURIComponent(raw)); 96 - validateJsonSafe(value, "props", 0, new Set(), { keyCount: 0 }); 97 - return value as T; 98 - }
-58
src/runtime/server-islands.tsx
··· 1 - import type { ComponentType, JSX } from "react"; 2 - import { encodeJsonProps, type JsonValue } from "./jsonSafe"; 3 - 4 - const ISLAND_ATTR = "data-client-island"; 5 - const EXPORT_ATTR = "data-client-export"; 6 - const PROPS_ATTR = "data-client-props"; 7 - 8 - export type JsonProps = Record<string, JsonValue>; 9 - 10 - export type ClientReference<P extends JsonProps = JsonProps> = { 11 - id: string; 12 - exportName: string; 13 - Component: ComponentType<P>; 14 - }; 15 - 16 - function normalizeId(id: string): string { 17 - if (!id.startsWith("src/")) { 18 - throw new Error(`Client component id must start with src/: ${id}`); 19 - } 20 - return id; 21 - } 22 - 23 - export function defineClientComponent<P extends JsonProps>( 24 - id: string, 25 - exportName: string, 26 - Component: ComponentType<P> 27 - ): ClientReference<P> { 28 - return { 29 - id: normalizeId(id), 30 - exportName, 31 - Component, 32 - }; 33 - } 34 - 35 - export function renderIsland<P extends JsonProps>( 36 - ref: ClientReference<P>, 37 - props: P 38 - ): JSX.Element { 39 - const encoded = encodeJsonProps(props); 40 - 41 - return ( 42 - <div 43 - {...{ 44 - [ISLAND_ATTR]: ref.id, 45 - [EXPORT_ATTR]: ref.exportName, 46 - [PROPS_ATTR]: encoded, 47 - }} 48 - > 49 - <ref.Component {...props} /> 50 - </div> 51 - ); 52 - } 53 - 54 - export const islandAttrs = { 55 - island: ISLAND_ATTR, 56 - exportName: EXPORT_ATTR, 57 - props: PROPS_ATTR, 58 - };
+194
src/server/atproto/state.ts
··· 1 + export type TitleColor = "none" | "enby" | "trans" | "pan" | "latvia"; 2 + 3 + export type State = { 4 + useSusieProphecy: boolean; 5 + titleColors: TitleColor; 6 + favoriteGames: string[]; 7 + favoriteArtists: string[]; 8 + favoriteAlbums: string[]; 9 + favoriteDeltaruneCharacters: string[]; 10 + }; 11 + 12 + const DEFAULT_STATE: State = { 13 + useSusieProphecy: false, 14 + titleColors: "none", 15 + favoriteGames: [], 16 + favoriteArtists: [], 17 + favoriteAlbums: [], 18 + favoriteDeltaruneCharacters: [], 19 + }; 20 + 21 + const STATE_TTL_MS = 10_000; 22 + const STATE_REPO = process.env.DARKWORLD_STATE_REPO ?? "did:plc:s7cesz7cr6ybltaryy4meb6y"; 23 + const STATE_COLLECTION = process.env.DARKWORLD_STATE_COLLECTION ?? "download.darkworld.state"; 24 + const STATE_RKEY = process.env.DARKWORLD_STATE_RKEY ?? "self"; 25 + const FALLBACK_ATPROTO_SERVICE = "https://lionsmane.us-east.host.bsky.network"; 26 + 27 + let serverState: State = DEFAULT_STATE; 28 + let lastServerSyncMs = 0; 29 + let syncInFlight: Promise<State> | null = null; 30 + let didServiceCache: { did: string; endpoint: string; cachedAtMs: number } | null = null; 31 + let lastSyncError = ""; 32 + 33 + function parseKnownTitleColors(input: unknown): Exclude<TitleColor, "none"> | null { 34 + if (input === "enby" || input === "trans" || input === "pan" || input === "latvia") { 35 + return input; 36 + } 37 + 38 + return null; 39 + } 40 + 41 + function parseStringArray(input: unknown): string[] { 42 + if (!Array.isArray(input)) { 43 + return []; 44 + } 45 + 46 + return input.filter((entry): entry is string => typeof entry === "string"); 47 + } 48 + 49 + function parseAtprotoStateRecord(input: unknown): State | null { 50 + if (!input || typeof input !== "object") { 51 + return null; 52 + } 53 + 54 + const record = input as { 55 + swapOutKrisWithSusie?: unknown; 56 + site?: { susieProphecy?: unknown; titleColors?: unknown }; 57 + favorite?: { 58 + game?: unknown; 59 + artist?: unknown; 60 + album?: unknown; 61 + deltaruneCharacter?: unknown; 62 + }; 63 + }; 64 + 65 + const titleColors = parseKnownTitleColors(record.site?.titleColors) ?? "none"; 66 + 67 + if (typeof record.swapOutKrisWithSusie === "boolean") { 68 + return { 69 + useSusieProphecy: record.swapOutKrisWithSusie, 70 + titleColors, 71 + favoriteGames: parseStringArray(record.favorite?.game), 72 + favoriteArtists: parseStringArray(record.favorite?.artist), 73 + favoriteAlbums: parseStringArray(record.favorite?.album), 74 + favoriteDeltaruneCharacters: parseStringArray(record.favorite?.deltaruneCharacter), 75 + }; 76 + } 77 + 78 + if (typeof record.site?.susieProphecy === "boolean") { 79 + return { 80 + useSusieProphecy: record.site.susieProphecy, 81 + titleColors, 82 + favoriteGames: parseStringArray(record.favorite?.game), 83 + favoriteArtists: parseStringArray(record.favorite?.artist), 84 + favoriteAlbums: parseStringArray(record.favorite?.album), 85 + favoriteDeltaruneCharacters: parseStringArray(record.favorite?.deltaruneCharacter), 86 + }; 87 + } 88 + 89 + return null; 90 + } 91 + 92 + async function resolveServiceEndpointForRepo(repo: string): Promise<string> { 93 + if (!repo.startsWith("did:plc:")) { 94 + return FALLBACK_ATPROTO_SERVICE; 95 + } 96 + 97 + const now = Date.now(); 98 + if (didServiceCache && didServiceCache.did === repo && now - didServiceCache.cachedAtMs < 300_000) { 99 + return didServiceCache.endpoint; 100 + } 101 + 102 + try { 103 + const response = await fetch(`https://plc.directory/${encodeURIComponent(repo)}`, { 104 + method: "GET", 105 + headers: { Accept: "application/json" }, 106 + }); 107 + 108 + if (!response.ok) { 109 + return FALLBACK_ATPROTO_SERVICE; 110 + } 111 + 112 + const doc = (await response.json()) as { 113 + service?: Array<{ type?: string; serviceEndpoint?: string }>; 114 + }; 115 + 116 + const pds = doc.service?.find((entry) => entry.type === "AtprotoPersonalDataServer"); 117 + if (typeof pds?.serviceEndpoint === "string" && pds.serviceEndpoint.startsWith("https://")) { 118 + didServiceCache = { 119 + did: repo, 120 + endpoint: pds.serviceEndpoint, 121 + cachedAtMs: now, 122 + }; 123 + return pds.serviceEndpoint; 124 + } 125 + } catch { 126 + return FALLBACK_ATPROTO_SERVICE; 127 + } 128 + 129 + return FALLBACK_ATPROTO_SERVICE; 130 + } 131 + 132 + async function fetchStateFromAtproto(): Promise<State> { 133 + const service = await resolveServiceEndpointForRepo(STATE_REPO); 134 + const url = new URL("/xrpc/com.atproto.repo.getRecord", service); 135 + url.searchParams.set("repo", STATE_REPO); 136 + url.searchParams.set("collection", STATE_COLLECTION); 137 + url.searchParams.set("rkey", STATE_RKEY); 138 + 139 + const response = await fetch(url, { 140 + method: "GET", 141 + headers: { Accept: "application/json" }, 142 + }); 143 + 144 + if (!response.ok) { 145 + throw new Error(`Record fetch failed with ${response.status}`); 146 + } 147 + 148 + const body = (await response.json()) as { value?: unknown }; 149 + const parsed = parseAtprotoStateRecord(body.value); 150 + if (!parsed) { 151 + throw new Error("State record is missing `site.susieProphecy` or `useSusieProphecy`"); 152 + } 153 + 154 + return parsed; 155 + } 156 + 157 + export async function primeState(force = false): Promise<State> { 158 + const now = Date.now(); 159 + if (!force && now - lastServerSyncMs < STATE_TTL_MS) { 160 + return serverState; 161 + } 162 + 163 + if (!syncInFlight) { 164 + syncInFlight = (async () => { 165 + try { 166 + const nextState = await fetchStateFromAtproto(); 167 + serverState = nextState; 168 + lastServerSyncMs = Date.now(); 169 + lastSyncError = ""; 170 + return nextState; 171 + } catch (error) { 172 + lastServerSyncMs = Date.now(); 173 + const message = error instanceof Error ? error.message : String(error); 174 + if (message !== lastSyncError) { 175 + lastSyncError = message; 176 + console.warn(`[state-sync] Failed to refresh atproto state: ${message}`); 177 + } 178 + return serverState; 179 + } finally { 180 + syncInFlight = null; 181 + } 182 + })(); 183 + } 184 + 185 + return syncInFlight; 186 + } 187 + 188 + export function getState(): State { 189 + return serverState; 190 + } 191 + 192 + export function getDefaultState(): State { 193 + return DEFAULT_STATE; 194 + }
-47
src/server/renderPage.tsx
··· 1 - import { readFileSync } from "fs"; 2 - import path from "path"; 3 - import { createElement } from "react"; 4 - import { renderToString } from "react-dom/server"; 5 - import { getState, primeState } from "../lib/currentStateSync"; 6 - import { App } from "../App"; 7 - 8 - export type BuildManifest = { 9 - cssHref: string | null; 10 - islandsScriptHref: string | null; 11 - fullClientScriptHref: string | null; 12 - fullClient: boolean; 13 - }; 14 - 15 - const HTML_TEMPLATE = readFileSync(path.resolve("src/index.template.html"), "utf8"); 16 - 17 - function serializeStateForInlineScript(value: unknown): string { 18 - return JSON.stringify(value) 19 - .replace(/</g, "\\u003c") 20 - .replace(/>/g, "\\u003e") 21 - .replace(/\u2028/g, "\\u2028") 22 - .replace(/\u2029/g, "\\u2029"); 23 - } 24 - 25 - export async function renderPage(manifest: BuildManifest): Promise<string> { 26 - await primeState(); 27 - const appMarkup = renderToString(createElement(App)); 28 - const stateScript = `<script>window.__DARKWORLD_STATE__=${serializeStateForInlineScript(getState())};</script>`; 29 - 30 - const headTags: string[] = []; 31 - if (manifest.cssHref) { 32 - headTags.push(`<link rel="stylesheet" href="${manifest.cssHref}" />`); 33 - } 34 - 35 - const scripts: string[] = []; 36 - if (manifest.fullClient && manifest.fullClientScriptHref) { 37 - scripts.push(`<script type="module" src="${manifest.fullClientScriptHref}" async defer></script>`); 38 - } else if (!manifest.fullClient && manifest.islandsScriptHref) { 39 - scripts.push(`<script type="module" src="${manifest.islandsScriptHref}" defer></script>`); 40 - } 41 - scripts.unshift(stateScript); 42 - 43 - return HTML_TEMPLATE 44 - .replace("<!--app-head-->", headTags.join("\n\t\t")) 45 - .replace("<!--app-html-->", appMarkup) 46 - .replace("<!--app-scripts-->", scripts.join("\n\t\t")); 47 - }
+42 -35
tsconfig.json
··· 1 1 { 2 - "compilerOptions": { 3 - // Environment setup & latest features 4 - "lib": ["ESNext", "DOM"], 5 - "target": "ESNext", 6 - "module": "Preserve", 7 - "moduleDetection": "force", 8 - "jsx": "react-jsx", 9 - "allowJs": true, 10 - 11 - // Bundler mode 12 - "moduleResolution": "bundler", 13 - "allowImportingTsExtensions": true, 14 - "verbatimModuleSyntax": true, 15 - "noEmit": true, 16 - 17 - // Best practices 18 - "strict": true, 19 - "skipLibCheck": true, 20 - "noFallthroughCasesInSwitch": true, 21 - "noUncheckedIndexedAccess": true, 22 - "noImplicitOverride": true, 23 - 24 - "baseUrl": ".", 25 - "paths": { 26 - "@/*": ["./src/*"] 27 - }, 28 - 29 - // Some stricter flags (disabled by default) 30 - "noUnusedLocals": false, 31 - "noUnusedParameters": false, 32 - "noPropertyAccessFromIndexSignature": false 33 - }, 34 - 35 - "exclude": ["dist", "node_modules"] 36 - } 2 + "compilerOptions": { 3 + "lib": [ 4 + "ESNext", 5 + "DOM" 6 + ], 7 + "target": "ESNext", 8 + "module": "Preserve", 9 + "moduleDetection": "force", 10 + "jsx": "react-jsx", 11 + "allowJs": true, 12 + "moduleResolution": "bundler", 13 + "allowImportingTsExtensions": true, 14 + "verbatimModuleSyntax": true, 15 + "noEmit": true, 16 + "strict": true, 17 + "skipLibCheck": true, 18 + "noFallthroughCasesInSwitch": true, 19 + "noUncheckedIndexedAccess": true, 20 + "noImplicitOverride": true, 21 + "baseUrl": ".", 22 + "paths": { 23 + "@/*": [ 24 + "./src/*" 25 + ] 26 + }, 27 + "noUnusedLocals": false, 28 + "noUnusedParameters": false, 29 + "noPropertyAccessFromIndexSignature": false, 30 + "types": [ 31 + "astro/client" 32 + ], 33 + "jsxImportSource": "preact" 34 + }, 35 + "include": [ 36 + "src", 37 + "astro.config.mjs" 38 + ], 39 + "exclude": [ 40 + "dist", 41 + "node_modules" 42 + ] 43 + }