Public Sector
-Procurement cycles, oversight, offline verification.
- Public Sector → -diff --git a/ifttt-src/.gitignore b/ifttt-src/.gitignore
new file mode 100644
index 0000000..5c5b6f3
--- /dev/null
+++ b/ifttt-src/.gitignore
@@ -0,0 +1,18 @@
+node_modules/
+.astro/
+
+# build output (written to ../ifttt)
+dist/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# env
+.env
+.env.*
+
+# OS/editor
+.DS_Store
diff --git a/ifttt-src/astro.config.mjs b/ifttt-src/astro.config.mjs
new file mode 100644
index 0000000..c1a63b1
--- /dev/null
+++ b/ifttt-src/astro.config.mjs
@@ -0,0 +1,14 @@
+import tailwindcss from "@tailwindcss/vite";
+import { defineConfig } from "astro/config";
+
+export default defineConfig({
+ site: "https://infrafabric.io",
+ output: "static",
+ outDir: "../ifttt",
+ build: {
+ assets: "assets/_astro",
+ },
+ vite: {
+ plugins: [tailwindcss()],
+ },
+});
diff --git a/ifttt-src/package-lock.json b/ifttt-src/package-lock.json
new file mode 100644
index 0000000..dbaf7e5
--- /dev/null
+++ b/ifttt-src/package-lock.json
@@ -0,0 +1,6264 @@
+{
+ "name": "iftrace-site",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "iftrace-site",
+ "dependencies": {
+ "@tailwindcss/vite": "^4.1.14",
+ "astro": "^5.16.6",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "lucide-static": "^0.546.0",
+ "sharp": "^0.34.5",
+ "tailwind-merge": "^3.3.1",
+ "tailwindcss": "^4.1.14",
+ "tw-animate-css": "^1.4.0"
+ },
+ "devDependencies": {
+ "@types/node": "^24.8.1",
+ "typescript": "^5.9.3"
+ }
+ },
+ "node_modules/@astrojs/compiler": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz",
+ "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==",
+ "license": "MIT"
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz",
+ "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==",
+ "license": "MIT"
+ },
+ "node_modules/@astrojs/markdown-remark": {
+ "version": "6.3.10",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz",
+ "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==",
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz",
+ "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prismjs": "^1.30.0"
+ },
+ "engines": {
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
+ "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
+ "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.5"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
+ "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@capsizecss/unpack": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-3.0.1.tgz",
+ "integrity": "sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkit": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
+ "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/colour": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",
+ "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
+ "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
+ "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
+ "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
+ "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
+ "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
+ "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
+ "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
+ "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
+ "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
+ "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
+ "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
+ "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
+ "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
+ "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
+ "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
+ "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
+ "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
+ "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
+ "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
+ "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
+ "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.7.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
+ "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
+ "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
+ "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@oslojs/encoding": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+ "license": "MIT"
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz",
+ "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz",
+ "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz",
+ "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz",
+ "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz",
+ "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz",
+ "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz",
+ "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz",
+ "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz",
+ "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz",
+ "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz",
+ "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz",
+ "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz",
+ "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz",
+ "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz",
+ "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz",
+ "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz",
+ "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz",
+ "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz",
+ "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz",
+ "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz",
+ "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz",
+ "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@shikijs/core": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.20.0.tgz",
+ "integrity": "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.20.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.5"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.20.0.tgz",
+ "integrity": "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.20.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.4"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz",
+ "integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.20.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.20.0.tgz",
+ "integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.20.0"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.20.0.tgz",
+ "integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.20.0"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.20.0.tgz",
+ "integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.18",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz",
+ "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz",
+ "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.4",
+ "enhanced-resolve": "^5.18.3",
+ "jiti": "^2.6.1",
+ "lightningcss": "1.30.2",
+ "magic-string": "^0.30.21",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.1.18"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz",
+ "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.1.18",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.18",
+ "@tailwindcss/oxide-darwin-x64": "4.1.18",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.18",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.18",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.18",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.18",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.18",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.18"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz",
+ "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz",
+ "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz",
+ "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz",
+ "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz",
+ "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz",
+ "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz",
+ "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz",
+ "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz",
+ "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz",
+ "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1",
+ "@emnapi/wasi-threads": "^1.1.0",
+ "@napi-rs/wasm-runtime": "^1.1.0",
+ "@tybys/wasm-util": "^0.10.1",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz",
+ "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz",
+ "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz",
+ "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==",
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.1.18",
+ "@tailwindcss/oxide": "4.1.18",
+ "tailwindcss": "4.1.18"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6 || ^7"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "license": "MIT"
+ },
+ "node_modules/@types/fontkit": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz",
+ "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "24.10.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz",
+ "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "license": "ISC"
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/ansi-align/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-iterate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
+ "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/astro": {
+ "version": "5.16.6",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.6.tgz",
+ "integrity": "sha512-6mF/YrvwwRxLTu+aMEa5pwzKUNl5ZetWbTyZCs9Um0F12HUmxUiF5UHiZPy4rifzU3gtpM3xP2DfdmkNX9eZRg==",
+ "license": "MIT",
+ "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": "^3.0.1",
+ "@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.0.2",
+ "cssesc": "^3.0.0",
+ "debug": "^4.4.3",
+ "deterministic-object-hash": "^2.0.2",
+ "devalue": "^5.5.0",
+ "diff": "^5.2.0",
+ "dlv": "^1.1.3",
+ "dset": "^3.1.4",
+ "es-module-lexer": "^1.7.0",
+ "esbuild": "^0.25.0",
+ "estree-walker": "^3.0.3",
+ "flattie": "^1.1.1",
+ "fontace": "~0.3.1",
+ "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.5.0",
+ "piccolore": "^0.1.3",
+ "picomatch": "^4.0.3",
+ "prompts": "^2.4.2",
+ "rehype": "^13.0.2",
+ "semver": "^7.7.3",
+ "shiki": "^3.15.0",
+ "smol-toml": "^1.5.2",
+ "svgo": "^4.0.0",
+ "tinyexec": "^1.0.2",
+ "tinyglobby": "^0.2.15",
+ "tsconfck": "^3.1.6",
+ "ultrahtml": "^1.6.0",
+ "unifont": "~0.6.0",
+ "unist-util-visit": "^5.0.0",
+ "unstorage": "^1.17.3",
+ "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.0",
+ "zod-to-ts": "^1.2.0"
+ },
+ "bin": {
+ "astro": "astro.js"
+ },
+ "engines": {
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/astrodotbuild"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.34.0"
+ }
+ },
+ "node_modules/astro/node_modules/vite": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
+ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
+ "license": "MIT",
+ "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"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "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"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "license": "ISC"
+ },
+ "node_modules/boxen": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
+ "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brotli": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+ "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.1.2"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
+ "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
+ "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
+ "license": "ISC"
+ },
+ "node_modules/cookie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
+ "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cookie-es": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz",
+ "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==",
+ "license": "MIT"
+ },
+ "node_modules/crossws": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
+ "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+ "license": "MIT",
+ "dependencies": {
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/defu": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
+ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/destr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/deterministic-object-hash": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
+ "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "base-64": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz",
+ "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==",
+ "license": "MIT"
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/dfa": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
+ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
+ "license": "MIT"
+ },
+ "node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "license": "MIT"
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dset": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+ "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.4",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
+ "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "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"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "license": "MIT"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fontace": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.1.tgz",
+ "integrity": "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/fontkit": "^2.0.8",
+ "fontkit": "^2.0.4"
+ }
+ },
+ "node_modules/fontkit": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
+ "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@swc/helpers": "^0.5.12",
+ "brotli": "^1.3.2",
+ "clone": "^2.1.2",
+ "dfa": "^1.2.0",
+ "fast-deep-equal": "^3.1.3",
+ "restructure": "^3.0.0",
+ "tiny-inflate": "^1.0.3",
+ "unicode-properties": "^1.4.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
+ "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "license": "ISC"
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/h3": {
+ "version": "1.15.4",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz",
+ "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==",
+ "license": "MIT",
+ "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.2",
+ "radix3": "^1.1.2",
+ "ufo": "^1.6.1",
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/hast-util-from-html": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
+ "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "devlop": "^1.1.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "parse5": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "property-information": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-raw": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
+ "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "license": "MIT"
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+ "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/iron-webcrypto": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+ "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/brc-dd"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
+ "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.30.2",
+ "lightningcss-darwin-arm64": "1.30.2",
+ "lightningcss-darwin-x64": "1.30.2",
+ "lightningcss-freebsd-x64": "1.30.2",
+ "lightningcss-linux-arm-gnueabihf": "1.30.2",
+ "lightningcss-linux-arm64-gnu": "1.30.2",
+ "lightningcss-linux-arm64-musl": "1.30.2",
+ "lightningcss-linux-x64-gnu": "1.30.2",
+ "lightningcss-linux-x64-musl": "1.30.2",
+ "lightningcss-win32-arm64-msvc": "1.30.2",
+ "lightningcss-win32-x64-msvc": "1.30.2"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz",
+ "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz",
+ "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz",
+ "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz",
+ "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz",
+ "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz",
+ "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz",
+ "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz",
+ "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz",
+ "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz",
+ "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz",
+ "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/lucide-static": {
+ "version": "0.546.0",
+ "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.546.0.tgz",
+ "integrity": "sha512-9nZdgIRqLVsoqbSpSf+tRUbieA/y1eVvsN20ecBI8MKDay7XC4fy0MsNFXhiOddk419s7IgtEOvlf+nFWWPqoA==",
+ "license": "ISC"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/magicast": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz",
+ "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
+ "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/neotraverse": {
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+ "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-fetch-native": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
+ "license": "MIT"
+ },
+ "node_modules/node-mock-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz",
+ "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==",
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/ofetch": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
+ "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
+ "license": "MIT",
+ "dependencies": {
+ "destr": "^2.0.5",
+ "node-fetch-native": "^1.6.7",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+ "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz",
+ "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==",
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.1",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
+ "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz",
+ "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^5.0.1",
+ "p-timeout": "^6.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
+ "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-manager-detector": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
+ "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
+ "license": "MIT"
+ },
+ "node_modules/pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+ "license": "MIT"
+ },
+ "node_modules/parse-latin": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
+ "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/piccolore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+ "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+ "license": "ISC"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/radix3": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+ "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
+ "node_modules/rehype": {
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz",
+ "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "rehype-parse": "^9.0.0",
+ "rehype-stringify": "^10.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz",
+ "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-from-html": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-stringify": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
+ "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-to-html": "^9.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-smartypants": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
+ "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
+ "license": "MIT",
+ "dependencies": {
+ "retext": "^9.0.0",
+ "retext-smartypants": "^6.0.0",
+ "unified": "^11.0.4",
+ "unist-util-visit": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/restructure": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz",
+ "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==",
+ "license": "MIT"
+ },
+ "node_modules/retext": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
+ "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "retext-latin": "^4.0.0",
+ "retext-stringify": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-latin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
+ "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "parse-latin": "^7.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+ "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
+ "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.54.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz",
+ "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.54.0",
+ "@rollup/rollup-android-arm64": "4.54.0",
+ "@rollup/rollup-darwin-arm64": "4.54.0",
+ "@rollup/rollup-darwin-x64": "4.54.0",
+ "@rollup/rollup-freebsd-arm64": "4.54.0",
+ "@rollup/rollup-freebsd-x64": "4.54.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.54.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.54.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.54.0",
+ "@rollup/rollup-linux-arm64-musl": "4.54.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.54.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.54.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.54.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.54.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.54.0",
+ "@rollup/rollup-linux-x64-gnu": "4.54.0",
+ "@rollup/rollup-linux-x64-musl": "4.54.0",
+ "@rollup/rollup-openharmony-arm64": "4.54.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.54.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.54.0",
+ "@rollup/rollup-win32-x64-gnu": "4.54.0",
+ "@rollup/rollup-win32-x64-msvc": "4.54.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz",
+ "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.34.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
+ "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@img/colour": "^1.0.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.7.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "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"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.20.0.tgz",
+ "integrity": "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "3.20.0",
+ "@shikijs/engine-javascript": "3.20.0",
+ "@shikijs/engine-oniguruma": "3.20.0",
+ "@shikijs/langs": "3.20.0",
+ "@shikijs/themes": "3.20.0",
+ "@shikijs/types": "3.20.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "license": "MIT"
+ },
+ "node_modules/smol-toml": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz",
+ "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.4.1"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz",
+ "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "4.1.18",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz",
+ "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==",
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
+ "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/tsconfck": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
+ "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+ "license": "MIT",
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/tw-animate-css": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz",
+ "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Wombosvideo"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ufo": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
+ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+ "license": "MIT"
+ },
+ "node_modules/ultrahtml": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz",
+ "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==",
+ "license": "MIT"
+ },
+ "node_modules/uncrypto": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
+ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
+ },
+ "node_modules/unicode-properties": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
+ "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/unicode-trie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
+ "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unifont": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.6.0.tgz",
+ "integrity": "sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.0.0",
+ "ofetch": "^1.4.1",
+ "ohash": "^2.0.0"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-modify-children": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+ "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "array-iterate": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-children": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+ "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unstorage": {
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.3.tgz",
+ "integrity": "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^3.1.3",
+ "chokidar": "^4.0.3",
+ "destr": "^2.0.5",
+ "h3": "^1.15.4",
+ "lru-cache": "^10.4.3",
+ "node-fetch-native": "^1.6.7",
+ "ofetch": "^1.5.1",
+ "ufo": "^1.6.1"
+ },
+ "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.0.3 || ^7.0.0",
+ "@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.0.1",
+ "aws4fetch": "^1.0.20",
+ "db0": ">=0.2.1",
+ "idb-keyval": "^6.2.1",
+ "ioredis": "^5.4.2",
+ "uploadthing": "^7.4.4"
+ },
+ "peerDependenciesMeta": {
+ "@azure/app-configuration": {
+ "optional": true
+ },
+ "@azure/cosmos": {
+ "optional": true
+ },
+ "@azure/data-tables": {
+ "optional": true
+ },
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/keyvault-secrets": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@capacitor/preferences": {
+ "optional": true
+ },
+ "@deno/kv": {
+ "optional": true
+ },
+ "@netlify/blobs": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/blob": {
+ "optional": true
+ },
+ "@vercel/functions": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "aws4fetch": {
+ "optional": true
+ },
+ "db0": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "uploadthing": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz",
+ "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
+ "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/vite/node_modules/esbuild": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.2",
+ "@esbuild/android-arm": "0.27.2",
+ "@esbuild/android-arm64": "0.27.2",
+ "@esbuild/android-x64": "0.27.2",
+ "@esbuild/darwin-arm64": "0.27.2",
+ "@esbuild/darwin-x64": "0.27.2",
+ "@esbuild/freebsd-arm64": "0.27.2",
+ "@esbuild/freebsd-x64": "0.27.2",
+ "@esbuild/linux-arm": "0.27.2",
+ "@esbuild/linux-arm64": "0.27.2",
+ "@esbuild/linux-ia32": "0.27.2",
+ "@esbuild/linux-loong64": "0.27.2",
+ "@esbuild/linux-mips64el": "0.27.2",
+ "@esbuild/linux-ppc64": "0.27.2",
+ "@esbuild/linux-riscv64": "0.27.2",
+ "@esbuild/linux-s390x": "0.27.2",
+ "@esbuild/linux-x64": "0.27.2",
+ "@esbuild/netbsd-arm64": "0.27.2",
+ "@esbuild/netbsd-x64": "0.27.2",
+ "@esbuild/openbsd-arm64": "0.27.2",
+ "@esbuild/openbsd-x64": "0.27.2",
+ "@esbuild/openharmony-arm64": "0.27.2",
+ "@esbuild/sunos-x64": "0.27.2",
+ "@esbuild/win32-arm64": "0.27.2",
+ "@esbuild/win32-ia32": "0.27.2",
+ "@esbuild/win32-x64": "0.27.2"
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz",
+ "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*",
+ "tests/projects/workspace/packages/*"
+ ],
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/which-pm-runs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
+ "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
+ "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+ "license": "MIT"
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
+ "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yocto-spinner": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz",
+ "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "yoctocolors": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=18.19"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yoctocolors": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
+ "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.25.1",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz",
+ "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.25 || ^4"
+ }
+ },
+ "node_modules/zod-to-ts": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
+ "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
+ "peerDependencies": {
+ "typescript": "^4.9.4 || ^5.0.2",
+ "zod": "^3"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/ifttt-src/package.json b/ifttt-src/package.json
new file mode 100644
index 0000000..2400f88
--- /dev/null
+++ b/ifttt-src/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "iftrace-site",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview"
+ },
+ "dependencies": {
+ "@tailwindcss/vite": "^4.1.14",
+ "astro": "^5.16.6",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "lucide-static": "^0.546.0",
+ "sharp": "^0.34.5",
+ "tailwind-merge": "^3.3.1",
+ "tailwindcss": "^4.1.14",
+ "tw-animate-css": "^1.4.0"
+ },
+ "devDependencies": {
+ "@types/node": "^24.8.1",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/ifttt-src/public/assets/eyes-only-dave.png b/ifttt-src/public/assets/eyes-only-dave.png
new file mode 100644
index 0000000..5454cc4
Binary files /dev/null and b/ifttt-src/public/assets/eyes-only-dave.png differ
diff --git a/ifttt-src/public/assets/fonts/inter/InterVariable-Italic.woff2 b/ifttt-src/public/assets/fonts/inter/InterVariable-Italic.woff2
new file mode 100644
index 0000000..f22ec25
Binary files /dev/null and b/ifttt-src/public/assets/fonts/inter/InterVariable-Italic.woff2 differ
diff --git a/ifttt-src/public/assets/fonts/inter/InterVariable.woff2 b/ifttt-src/public/assets/fonts/inter/InterVariable.woff2
new file mode 100644
index 0000000..22a12b0
Binary files /dev/null and b/ifttt-src/public/assets/fonts/inter/InterVariable.woff2 differ
diff --git a/ifttt-src/public/assets/fonts/inter/LICENSE.txt b/ifttt-src/public/assets/fonts/inter/LICENSE.txt
new file mode 100644
index 0000000..9b2ca37
--- /dev/null
+++ b/ifttt-src/public/assets/fonts/inter/LICENSE.txt
@@ -0,0 +1,92 @@
+Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION AND CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/ifttt-src/public/assets/if-logo-simple.svg b/ifttt-src/public/assets/if-logo-simple.svg
new file mode 100644
index 0000000..342886f
--- /dev/null
+++ b/ifttt-src/public/assets/if-logo-simple.svg
@@ -0,0 +1,60 @@
+
+
+
diff --git a/ifttt-src/public/assets/ifttt-quotes.json b/ifttt-src/public/assets/ifttt-quotes.json
new file mode 100644
index 0000000..498d627
--- /dev/null
+++ b/ifttt-src/public/assets/ifttt-quotes.json
@@ -0,0 +1,72 @@
+[
+ {
+ "text": "Footnotes aren't decorations. They're load-bearing walls.",
+ "source": "IF.Trace paper (v2.3)",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "If there's no IF.Trace trace, it didn't happen—or shouldn't be trusted.",
+ "source": "IF.Trace doctrine",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "No trace, no trust. Simple as that.",
+ "source": "IF.Trace doctrine",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "Trust isn't claimed. It's proven.",
+ "source": "IF.Trace paper (v2.3)",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "We don’t claim trust. We publish receipts.",
+ "source": "IF.Trace stance",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "Your auditor shouldn’t need your credentials.",
+ "source": "IF.Trace public receipts",
+ "href": "https://infrafabric.io/static/hosted/ifttt/"
+ },
+ {
+ "text": "Third parties verify. We just publish the math.",
+ "source": "IF.Trace posture",
+ "href": "https://infrafabric.io/static/hosted/ifttt/"
+ },
+ {
+ "text": "Receipts must be readable and verifiable without credentials.",
+ "source": "IF.Trace public receipt surface",
+ "href": "https://infrafabric.io/static/hosted/ifttt/"
+ },
+ {
+ "text": "Design constraint: black/white clarity. No “maybe”.",
+ "source": "IF.Trace ops (full stack)",
+ "href": "https://infrafabric.io/static/hosted/ifttt/api/"
+ },
+ {
+ "text": "We do not claim “quantum-secure”. We claim “quantum-ready”.",
+ "source": "IF.Trace tech stack",
+ "href": "https://infrafabric.io/static/hosted/ifttt/api/"
+ },
+ {
+ "text": "The stenographer doesn't make the therapy cold. The stenographer makes it accountable.",
+ "source": "IF.emotion on IF.Trace",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "That's the moat.",
+ "source": "IF.Trace paper (v2.3)",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "The moat is not the AI. The moat is the proof.",
+ "source": "IF.Trace paper (v2.3)",
+ "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
+ },
+ {
+ "text": "If it’s not verifiable, label it as a gap. Do not endorse it.",
+ "source": "IF.Trace stance",
+ "href": "https://infrafabric.io/static/hosted/ifttt/"
+ }
+]
diff --git a/ifttt-src/public/assets/red-team-doc-1024-559.jpg b/ifttt-src/public/assets/red-team-doc-1024-559.jpg
new file mode 100644
index 0000000..1ce43da
Binary files /dev/null and b/ifttt-src/public/assets/red-team-doc-1024-559.jpg differ
diff --git a/ifttt-src/public/assets/red-team-stamp-600.png b/ifttt-src/public/assets/red-team-stamp-600.png
new file mode 100644
index 0000000..d394146
Binary files /dev/null and b/ifttt-src/public/assets/red-team-stamp-600.png differ
diff --git a/ifttt-src/public/review/index.md b/ifttt-src/public/review/index.md
new file mode 100644
index 0000000..dd6fd6b
--- /dev/null
+++ b/ifttt-src/public/review/index.md
@@ -0,0 +1,66 @@
+# IF.Trace Website — External Review Packet
+
+- Generated: `2025-12-30`
+- Owner: Danny Stocker (`ds@infrafabric.io`)
+
+This packet is for external reviewers to evaluate the IF.Trace website (copy, structure, and claims) without needing to crawl or guess context.
+
+## What this is
+
+- A public-facing explanation of IF.Trace: “confidential documents → open verification”.
+- A set of pages that describe who this is for, how verification works, and what the proof does/does not claim.
+- A request for critical feedback on clarity, honesty, and missing pieces.
+
+## What this is not
+
+- Not a claim that IF.Trace guarantees compliance, intent, or correctness of interpretation.
+- Not a request for marketing language or hype.
+- Not a request to “agree” or be supportive — please be direct.
+
+## Response metadata (required)
+
+Please include:
+
+- `llm_name`:
+- `probable_model`:
+- `cutoff_date`:
+- `response_date_utc`:
+- `web_access_used`: yes/no (list any URLs you relied on)
+
+## Live entry points
+
+- https://infrafabric.io/
+- https://infrafabric.io/verticals/
+- https://infrafabric.io/pricing/
+- https://infrafabric.io/api/
+- https://infrafabric.io/whitepaper/
+- https://infrafabric.io/about/
+- https://infrafabric.io/governance/
+- https://infrafabric.io/fr/
+
+## Core demo links (used throughout)
+
+- https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n
+- https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n
+- https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n.md
+- https://infrafabric.io/static/hosted/review/trace-bundles/b6547c03/index.html
+- https://infrafabric.io/static/hosted/iftrace.html
+- https://infrafabric.io/static/hosted/iftrace.py
+- https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html
+
+## Questions for reviewers
+
+1. In your own words: what does IF.Trace do?
+2. What feels unclear, hand-wavy, or like “compliance theater”?
+3. Where do we over-claim (even accidentally)?
+4. What is missing to make a third party comfortable verifying a claim?
+5. Which page is strongest? Which page is weakest?
+6. Does the site make it obvious what is verified vs not verified?
+7. What would you remove to make it more honest?
+8. What would you add to make it more useful for real reviewers (audit/legal/security/research)?
+
+## Bias notice
+
+This packet intentionally avoids conversion stats, testimonials, and “success stories”.
+Please focus on falsifiability, clarity, and what a skeptical third party would challenge.
+
diff --git a/ifttt-src/src/components/blocks/article-1.astro b/ifttt-src/src/components/blocks/article-1.astro
new file mode 100644
index 0000000..e93ccac
--- /dev/null
+++ b/ifttt-src/src/components/blocks/article-1.astro
@@ -0,0 +1,64 @@
+---
+import { Avatar, AvatarImage } from "@/components/ui/avatar"
+import { Image } from "@/components/ui/image"
+import {
+ Item,
+ ItemContent,
+ ItemDescription,
+ ItemMedia,
+ ItemTitle,
+} from "@/components/ui/item"
+import {
+ Section,
+ SectionContent,
+ SectionMedia,
+ SectionProse,
+} from "@/components/ui/section"
+
+interface Props {
+ class?: string
+ id?: string
+ title?: string
+ description?: string
+ item?: {
+ image?: {
+ src: string
+ alt: string
+ }
+ title?: string
+ description?: string
+ }
+ image?: {
+ src: string
+ alt: string
+ }
+}
+
+const { class: className, id, title, description, image, item } = Astro.props
+---
+
+ {description} {description} {description} {description} {description} {description} {price} {price} {description}{title}
}
+ {description && {title}
}
+ {description && {title}
}
+ {description &&
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+ {title}
}
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+ {title}
}
+ {description &&
+ {list?.map((item) => (
+
+
+ {list?.map((item) => (
+
+
+ {list?.map((item) => (
+
+ {title}
}
+ {description &&
+ {
+ list?.map((item) => (
+
+
+ {list?.map((item) => (
+
+
+ {list?.map((item) => (
+
+
+ {list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+
+
+
+ {
+ list?.map((item) => (
+
+
+ {
+ list?.map((item) => (
+
+ {title}
}
+ {description &&
+
+
+
a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className
+ )}
+ {...props}
+ >
+
+ © {`${new Date().getFullYear()} `}
+
+
a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className
+ )}
+ {...props}
+ >
+
+
+
Why this exists
++ Most systems produce answers and call that “governance”. IF.Trace starts + earlier: it produces receipts that a third party can verify without + joining your internal world. +
+Who / Why / What / Where / When / How
+source_sha256 ↔ output_sha256 under a trace receipt.
+ Traps
+These are common ways “open verification” quietly becomes theater.
+shareId is public; trace_id is chain‑of‑custody. Don’t swap them.
+ Scope
+Public receipt surface (no login)
++ IF.Trace is intentionally boring from a developer perspective: compute + hashes, publish receipts, and keep the proof surface stable. The system is + designed for third parties who are not inside your network. +
+What “VERIFIED” means (black/white)
+Share surface
+These URLs are stable by design so review packs remain checkable later.
++https://infrafabric.io/static/trace/<shareId> +https://infrafabric.io/static/dossier/<shareId> +https://infrafabric.io/static/dossier/<shareId>/download +https://infrafabric.io/static/pack/<shareId>.md +https://infrafabric.io/static/review/<shareId>.md +https://infrafabric.io/static/marketing/<shareId>.md +https://infrafabric.io/static/source/<source_sha256>.pdf ++
HTML fallback
++ Some external review environments can load HTML but reject downloadable binaries or raw markdown. For those, we publish HTML views alongside the raw assets. +
++/static/pack/<shareId>.md +/static/review/<shareId>.md +/static/marketing/<shareId>.md ++
+/static/pack/<shareId> +/static/review/<shareId> +/static/marketing/<shareId> ++
Offline verification
+Download a bundle (light/standard/full) and verify without relying on the live site.
+
+ Note: some “web fetchers” reject .tar.gz even when browsers/curl succeed. Use HTML views and download bundles locally.
+
+curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py' +python3 iftrace.py verify trace_bundle_<id>_standard.tar.gz --expected-sha256 <sha256> ++
If hashes match, the receipt’s integrity claim is satisfied.
+Docs
+Use the paper update as a reviewer-friendly packet.
+Gouvernance ouverte
++ Une “gouvernance” qui ne se lit qu’en interne n’est pas une preuve. + IF.Trace publie des reçus stables, accessibles sans login, pour que des + tiers puissent vérifier l’intégrité sans entrer dans votre réseau. +
+La stack
+IF.Transparent > IF.Traceable > IF.Trustworthy
+Vérification ouverte pour des documents confidentiels.
+Des reçus que des tiers peuvent vérifier sans login.
+Open governance
++ “Governance” fails when it’s only legible inside your network. IF.Trace moves + the proof outside: stable, no‑login receipts that third parties can verify + without joining your internal world. +
+Black/white
+The governance stack
+Receipts don’t replace governance. They remove ambiguity from it.
++/static/trace/<shareId> +/static/dossier/<shareId> +/static/dossier/<shareId>/download +/static/pack/<shareId>.md +/static/review/<shareId>.md +/static/marketing/<shareId>.md +/static/source/<source_sha256>.pdf ++
For whom (and who will hate it)
+A constitutional framing: the goal is external verifiability, not internal comfort.
+Charters
+Plain Markdown docs: readable, linkable, easy to critique.
+Live example
++ “VERIFIED” means the published bytes hash to what the receipt says. “QUANTUM READY” means a post‑quantum signature receipt exists (additive; integrity hashes still stand). +
+IF.Transparent > IF.Traceable > IF.Trustworthy
+Confidential documents > open verification.
+3rd party unfalsifiable audit trails — without publishing the source.
+What IF.Trace is
++ IF.Trace doesn’t “solve compliance.” It solves the universal problem + underneath compliance: third parties demanding proof without joining your + internal world. +
+How it works
++ The output can be public while the source stays confidential. The proof + surface stays boring and stable. +
+A simple model, on purpose
+If you need audit‑ready verification, we price by risk and responsibility.
+Early access
++ Setup + governance configuration, integration support, and proof-surface + hardening. Third-party checking should stay cheap. +
+External review
++ Raw markdown: /review/index.md +
+{md}
+ {vertical.kicker}
+{vertical.lede}
+Third‑party pressure
++ The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
+What IF.Trace provides
+
+{vertical.handToReviewer.join("\n")}
+
+ Same mechanism, different pressure
++ IF.Trace doesn’t “solve compliance.” It solves the universal problem + underneath compliance: third parties demanding proof without joining your + internal world. +
+Browse by sector
+The same receipts, different pressure.
+Browse by industry
+Regulation, data, and dispute pressure.
+More pressure profiles
+Same mechanism, different stakes.
+Long-form spec + receipts
++ “Trustworthy” can’t be a vibe. This paper documents the receipt‑first sequence: + hash the source → hash the output → publish a trace → share no‑login receipts → optional offline bundles. +
+Included artifacts
+No login
++ Optional. If you prefer, drop an email and we’ll reply with stable links + (no “demo call” bait). +
++ If your environment blocks downloads (common for some web fetchers), use the + HTML version. The receipts are still verifiable. +
+Stable links
+These are the boring, audit-safe URLs.
+Thank you
+We’ll reply with the stable, no‑login links.
+Why this exists
-- Most systems produce answers and call that “governance”. IF.Trace starts earlier: it produces receipts that a third party can verify without - joining your internal world. -
- -source_sha256 ↔ output_sha256 under a trace receipt.Why this exists
+Most systems produce answers and call that “governance”. IF.Trace starts + earlier: it produces receipts that a third party can verify without + joining your internal world. +
Who / Why / What / Where / When / How
+InfraFabric operators shipping public, no‑login verification artifacts. +
+Because “trust us” fails the moment a reviewer asks for proof. +
+Bind source_sha256 ↔ output_sha256 under a trace receipt.
+
+On a stable public share surface (no login): trace, dossier, packs, and source. +
+At publication time: the receipt is generated and can be verified later during disputes. +
+Hashes + receipts + optional offline bundles; nothing magical, just opposable proof. +
Traps
These are common ways “open verification” quietly becomes theater.
shareId is public; trace_id is chain‑of‑custody. Don’t swap them.
+Scope
Public receipt surface (no login)
-- IF.Trace is intentionally boring from a developer perspective: compute hashes, publish receipts, and keep the proof surface stable. The - system is designed for third parties who are not inside your network. -
-Offline verification
Download a bundle (light/standard/full) and verify without relying on the live site.
+Note: some “web fetchers” reject .tar.gz even when browsers/curl succeed. Use HTML views and download bundles locally.
+
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py' +python3 iftrace.py verify trace_bundle_<id>_standard.tar.gz --expected-sha256 <sha256> +
If hashes match, the receipt’s integrity claim is satisfied.
Docs
Use the paper update as a reviewer-friendly packet.
Gouvernance ouverte
-- Une “gouvernance” qui ne se lit qu’en interne n’est pas une preuve. IF.Trace publie des reçus stables, accessibles sans login, pour que des - tiers puissent vérifier l’intégrité sans entrer dans votre réseau. -
- -Lisible pour des tiers : le but n’est pas le confort interne, mais la vérifiabilité externe.
- -Gouvernance ouverte
+Une “gouvernance” qui ne se lit qu’en interne n’est pas une preuve. + IF.Trace publie des reçus stables, accessibles sans login, pour que des + tiers puissent vérifier l’intégrité sans entrer dans votre réseau. +
La stack
Vérification ouverte pour des documents confidentiels.
-Des reçus que des tiers peuvent vérifier sans login.
-IF.Transparent > IF.Traceable > IF.Trustworthy
Vérification ouverte pour des documents confidentiels.
Des reçus que des tiers peuvent vérifier sans login.
Open governance
-- “Governance” fails when it’s only legible inside your network. IF.Trace moves the proof outside: stable, no‑login receipts that third parties - can verify without joining your internal world. -
- -Receipts don’t replace governance. They remove ambiguity from it.
-For whom (and who will hate it)
A constitutional framing: the goal is external verifiability, not internal comfort.
Charters
Plain Markdown docs: readable, linkable, easy to critique.
Live example
+“VERIFIED” means the published bytes hash to what the receipt says. “QUANTUM READY” means a post‑quantum signature receipt exists (additive; integrity hashes still stand). +
Confidential documents > open verification
-3rd party unfalsifiable audit trails.
- - -No login. Anyone can download the bytes and verify they match the receipt hashes.
- -IF.Transparent > IF.Traceable > IF.Trustworthy
Confidential documents > open verification.
3rd party unfalsifiable audit trails — without publishing the source.
What IF.Trace is
+IF.Trace doesn’t “solve compliance.” It solves the universal problem + underneath compliance: third parties demanding proof without joining your + internal world. +
Stable URLs that any third party can verify without accounts or access.
Triage bundles (light/standard/full) for review environments that cannot rely on the live site.
If bytes hash to the receipt values, it’s verified. We don’t over-claim correctness.
Some reviewers can load HTML but reject downloads — we publish both.
Bind a confidential source to its derived output so the debate stays grounded.
Proof that survives vendors, contractors, handoffs, and time.
How it works
+The output can be public while the source stays confidential. The proof + surface stays boring and stable. +
A simple model, on purpose.
-If you need audit‑ready verification, we price by risk and responsibility.
- -A simple model, on purpose
If you need audit‑ready verification, we price by risk and responsibility.
Early access
+Setup + governance configuration, integration support, and proof-surface + hardening. Third-party checking should stay cheap. +
Proof surface for one workflow.
Governance patterns + rollout support.
High-stakes deployment support.
# IF.Trace Website — External Review Packet
-
- Website external review pack (single file)
- This is the HTML fallback. The canonical source is the Markdown file:
-
- Generated: 2025-12-29 09:47 UTC
-
-
- Full pack content (Markdown)
- # IF.TTT Website — External Review Pack (Single File)
-
-- Generated: `2025-12-29 09:47 UTC`
+- Generated: `2025-12-30`
- Owner: Danny Stocker (`ds@infrafabric.io`)
-This file contains the full current IF.TTT website content (page tree + full HTML per page + key text assets) so external reviewers can evaluate copy, structure, and claims without needing to crawl.
+This packet is for external reviewers to evaluate the IF.Trace website (copy, structure, and claims) without needing to crawl or guess context.
-## How To Review (Quick)
-- Audience split: Home is PM/exec-first; `Developers` lives under `/api/`.
-- Goal: black/white clarity — what is verified vs what is not.
-- Please flag: confusing terms, overclaims, missing steps, weak “why”, and anything that feels like marketing cosplay.
+## What this is
+
+- A public-facing explanation of IF.Trace: “confidential documents → open verification”.
+- A set of pages that describe who this is for, how verification works, and what the proof does/does not claim.
+- A request for critical feedback on clarity, honesty, and missing pieces.
+
+## What this is not
+
+- Not a claim that IF.Trace guarantees compliance, intent, or correctness of interpretation.
+- Not a request for marketing language or hype.
+- Not a request to “agree” or be supportive — please be direct.
+
+## Response metadata (required)
+
+Please include:
-## Response Metadata (Required)
- `llm_name`:
- `probable_model`:
- `cutoff_date`:
- `response_date_utc`:
-- `web_access_used`: yes/no (list URLs relied on)
+- `web_access_used`: yes/no (list any URLs you relied on)
+
+## Live entry points
-## Live Entry Points
- https://infrafabric.io/
- https://infrafabric.io/verticals/
-- https://infrafabric.io/governance/
+- https://infrafabric.io/pricing/
- https://infrafabric.io/api/
- https://infrafabric.io/whitepaper/
- https://infrafabric.io/about/
+- https://infrafabric.io/governance/
- https://infrafabric.io/fr/
-## Core Demo Links (Used Throughout)
+## Core demo links (used throughout)
+
- https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n
- https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n
- https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n.md
@@ -79,5246 +51,20 @@ This file contains the full current IF.TTT website content (page tree + full HTM
- https://infrafabric.io/static/hosted/iftrace.py
- https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html
-## Page Tree
+## Questions for reviewers
-- /about/ (https://infrafabric.io/about/)
-- /api/ (https://infrafabric.io/api/)
-- /fr/governance/ (https://infrafabric.io/fr/governance/)
-- /fr/ (https://infrafabric.io/fr/)
-- /governance/ (https://infrafabric.io/governance/)
-- / (https://infrafabric.io/)
-- /verticals/ai/ (https://infrafabric.io/verticals/ai/)
-- /verticals/enterprise/ (https://infrafabric.io/verticals/enterprise/)
-- /verticals/finance/ (https://infrafabric.io/verticals/finance/)
-- /verticals/government/ (https://infrafabric.io/verticals/government/)
-- /verticals/healthcare/ (https://infrafabric.io/verticals/healthcare/)
-- /verticals/ (https://infrafabric.io/verticals/)
-- /verticals/legal/ (https://infrafabric.io/verticals/legal/)
-- /verticals/professional-services/ (https://infrafabric.io/verticals/professional-services/)
-- /verticals/public-sector/ (https://infrafabric.io/verticals/public-sector/)
-- /verticals/research/ (https://infrafabric.io/verticals/research/)
-- /verticals/saas/ (https://infrafabric.io/verticals/saas/)
-- /verticals/sciences/ (https://infrafabric.io/verticals/sciences/)
-- /verticals/secops/ (https://infrafabric.io/verticals/secops/)
-- /verticals/supply-chain/ (https://infrafabric.io/verticals/supply-chain/)
-- /whitepaper/ (https://infrafabric.io/whitepaper/)
-- /whitepaper/thanks/ (https://infrafabric.io/whitepaper/thanks/)
+1. In your own words: what does IF.Trace do?
+2. What feels unclear, hand-wavy, or like “compliance theater”?
+3. Where do we over-claim (even accidentally)?
+4. What is missing to make a third party comfortable verifying a claim?
+5. Which page is strongest? Which page is weakest?
+6. Does the site make it obvious what is verified vs not verified?
+7. What would you remove to make it more honest?
+8. What would you add to make it more useful for real reviewers (audit/legal/security/research)?
-## Text Assets
+## Bias notice
-- `app.js` — https://infrafabric.io/static/hosted/ifttt/app.js
-- `style.css` — https://infrafabric.io/static/hosted/ifttt/style.css
-- `assets/if-logo-simple.svg` — https://infrafabric.io/static/hosted/ifttt/assets/if-logo-simple.svg
-- `assets/ifttt-quotes.json` — https://infrafabric.io/static/hosted/ifttt/assets/ifttt-quotes.json
+This packet intentionally avoids conversion stats, testimonials, and “success stories”.
+Please focus on falsifiability, clarity, and what a skeptical third party would challenge.
-## Binary Assets (Referenced by Pages)
-
-| File | Size | URL |
-|---|---:|---|
-| `assets/eyes-only-dave.png` | 1,522 KB | https://infrafabric.io/static/hosted/ifttt/assets/eyes-only-dave.png |
-| `assets/red-team-doc-1024-559.jpg` | 122 KB | https://infrafabric.io/static/hosted/ifttt/assets/red-team-doc-1024-559.jpg |
-| `assets/red-team-stamp-600.png` | 561 KB | https://infrafabric.io/static/hosted/ifttt/assets/red-team-stamp-600.png |
-
----
-
-# Pages (Full HTML)
-
-## /about/
-- URL: https://infrafabric.io/about/
-- Static: https://infrafabric.io/static/hosted/ifttt/about/
-- Source: `ifttt/about/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — About</title>
- <meta
- name="description"
- content="IF.TTT is a receipt-first governance protocol: traceable, transparent, trustworthy. This page explains the who/why/what/where/when/how and the traps that break open verification."
- />
- <link rel="stylesheet" href="../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">About</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../#how">How</a>
- <a href="../#trust">Trust</a>
- <a href="../#verify">Verify</a>
- <a href="../governance/">Governance</a>
- <a href="../verticals/">Verticals</a>
- <a href="../whitepaper/">Whitepaper</a>
- <a href="../api/">Developers</a>
- <a class="lang" href="../fr/" aria-label="French">FR</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Why this exists</p>
- <h1>We built the skeleton first.</h1>
- <p class="lede">
- Most systems produce answers and call that “governance”. IF.TTT starts earlier: it produces receipts that a third party can verify without
- joining your internal world.
- </p>
-
- <div class="panel">
- <h3>Who / Why / What / Where / When / How</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Who</div>
- <div class="bw__v">InfraFabric operators shipping public, no‑login verification artifacts.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Why</div>
- <div class="bw__v">Because “trust us” fails the moment a reviewer asks for proof.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">What</div>
- <div class="bw__v">A receipt‑first protocol: bind <code>source_sha256</code> ↔ <code>output_sha256</code> under a trace receipt.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Where</div>
- <div class="bw__v">On a stable public share surface (no login): trace, dossier, packs, and source.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">When</div>
- <div class="bw__v">At publication time: the receipt is generated and can be verified later during disputes.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">How</div>
- <div class="bw__v">Hashes + receipts + optional offline bundles; nothing magical, just opposable proof.</div>
- </div>
- </div>
- </div>
-
- <div class="cta" style="margin-top: 12px">
- <a class="btn btn--primary" href="../#verify">Try a live trace</a>
- <a class="btn" href="../api/">Developer surface</a>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Traps to avoid">
- <div class="card">
- <div class="card__hdr">
- <div class="badge badge--ok">TRAPS</div>
- <div class="badge">HOW RECEIPTS BREAK</div>
- </div>
- <div class="card__body">
- <ul class="list" style="margin: 0; padding-left: 18px">
- <li><strong>Broken share surface:</strong> moving URLs or forcing login turns receipts into theater.</li>
- <li><strong>Mixing identifiers:</strong> <code>shareId</code> is public; <code>trace_id</code> is chain‑of‑custody. Don’t swap them.</li>
- <li><strong>“Compliance” claims:</strong> receipts support audits; they do not guarantee program scope or behavior.</li>
- <li><strong>Unverifiable artifacts:</strong> screenshots and PDFs are not gates unless bound to machine‑checkable signals.</li>
- <li><strong>WAF surprises:</strong> some clients can fetch HTML but reject binary downloads—publish HTML views.</li>
- </ul>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>What a receipt proves (and what it doesn’t)</h2>
- <div class="grid2">
- <div class="panel">
- <h3>Proves</h3>
- <ul class="list">
- <li>Integrity binding: the published bytes match the hashes on the receipt.</li>
- <li>Traceability: a reviewer can point to a stable, no‑login receipt.</li>
- <li>Replay: verification still works during disputes (offline bundles when needed).</li>
- </ul>
- </div>
- <div class="panel">
- <h3>Does not prove</h3>
- <ul class="list">
- <li>Intent, interpretation, or “correctness” of a narrative.</li>
- <li>That a control is effective—only that the evidence exists and is bound to the record.</li>
- <li>Compliance scope (people, policy, contracts); receipts are inputs to governance.</li>
- </ul>
- </div>
- </div>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Read the paper (and verify the examples)</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">IF.TTT: The Skeleton of Everything (review pack)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • IF.TTT receipts are designed to be legible to the governed.</div>
- <div class="muted">
- <a href="../">IF.TTT</a> · <a href="../governance/">Governance</a> · <a href="../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../verticals/public-sector/">Public Sector</a>
- <a href="../verticals/enterprise/">Enterprise</a>
- <a href="../verticals/research/">Research</a>
- <a href="../verticals/professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../verticals/healthcare/">Healthcare</a>
- <a href="../verticals/finance/">Financial</a>
- <a href="../verticals/legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /api/
-- URL: https://infrafabric.io/api/
-- Static: https://infrafabric.io/static/hosted/ifttt/api/
-- Source: `ifttt/api/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Developers / API</title>
- <meta
- name="description"
- content="Developer-facing overview of the IF.TTT public receipt surface: stable no-login URLs, HTML fallbacks for sandboxes, and offline verification bundles."
- />
- <link rel="stylesheet" href="../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Developers / API</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../#verify">Verify</a>
- <a href="../verticals/">Verticals</a>
- <a href="../governance/">Governance</a>
- <a href="../whitepaper/">Whitepaper</a>
- <a href="../about/">About</a>
- <a class="lang" href="../fr/" aria-label="French">FR</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Public receipt surface (no login)</p>
- <h1>Stable URLs, predictable verification.</h1>
- <p class="lede">
- IF.TTT is intentionally boring from a developer perspective: compute hashes, publish receipts, and keep the proof surface stable. The
- system is designed for third parties who are not inside your network.
- </p>
- <div class="panel">
- <h3>What “VERIFIED” means (black/white)</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Verified</div>
- <div class="bw__v">The bytes you can download hash to the same values shown on the trace receipt.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Quantum ready</div>
- <div class="bw__v">A post‑quantum signature receipt exists (additive; integrity hashes still stand).</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Not implied</div>
- <div class="bw__v">Compliance, intent, or correctness of interpretation.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Share surface reference">
- <div class="card">
- <div class="card__media">
- <img src="../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">SHARE SURFACE</div>
- <div class="badge">NO‑LOGIN</div>
- </div>
- <div class="card__body">
- <pre class="code"><code>https://infrafabric.io/static/trace/<shareId>
-https://infrafabric.io/static/dossier/<shareId>
-https://infrafabric.io/static/dossier/<shareId>/download
-https://infrafabric.io/static/pack/<shareId>.md
-https://infrafabric.io/static/review/<shareId>.md
-https://infrafabric.io/static/marketing/<shareId>.md
-https://infrafabric.io/static/source/<source_sha256>.pdf</code></pre>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>HTML fallback (for sandboxed reviewers)</h2>
- <p class="sub">
- Some external review environments can load HTML but reject downloadable binaries or raw markdown. For those, we publish HTML views alongside
- the raw assets.
- </p>
- <div class="grid2">
- <div class="panel">
- <h3>Raw</h3>
- <pre class="code"><code>/static/pack/<shareId>.md
-/static/review/<shareId>.md
-/static/marketing/<shareId>.md</code></pre>
- </div>
- <div class="panel">
- <h3>HTML view</h3>
- <pre class="code"><code>/static/pack/<shareId>
-/static/review/<shareId>
-/static/marketing/<shareId></code></pre>
- </div>
- </div>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Offline verification (triage bundles)</h2>
- <p class="sub">Download a bundle (lightweight/standard/full) and verify without relying on the live site.</p>
- <div class="verify">
- <div class="panel">
- <h3>Bundle selector (demo)</h3>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Triage selector (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/iftrace.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Verifier (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/iftrace.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/iftrace.py" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Verifier (download)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/iftrace.py</span>
- </a>
- </div>
- <p class="fine">
- Note: some “web fetchers” reject <code>.tar.gz</code> with a client-side error even when browsers/curl succeed. Use the HTML views and
- download bundles locally.
- </p>
- </div>
- <div class="panel">
- <h3>Verify (CLI)</h3>
- <pre class="code"><code>curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
-python3 iftrace.py verify trace_bundle_<id>_standard.tar.gz --expected-sha256 <sha256></code></pre>
- <p class="fine">If hashes match, the receipt’s integrity claim is satisfied.</p>
- </div>
- </div>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Docs</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">IF.TTT paper update (review pack)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • IF.TTT receipts are designed to be legible to the governed.</div>
- <div class="muted">
- <a href="../">IF.TTT</a> · <a href="../governance/">Governance</a> · <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../verticals/public-sector/">Public Sector</a>
- <a href="../verticals/enterprise/">Enterprise</a>
- <a href="../verticals/research/">Research</a>
- <a href="../verticals/professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../verticals/healthcare/">Healthcare</a>
- <a href="../verticals/finance/">Financial</a>
- <a href="../verticals/legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /fr/governance/
-- URL: https://infrafabric.io/fr/governance/
-- Static: https://infrafabric.io/static/hosted/ifttt/fr/governance/
-- Source: `ifttt/fr/governance/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="fr">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Gouvernance ouverte</title>
- <meta
- name="description"
- content="La gouvernance ouverte signifie qu’un tiers peut vérifier ce qui s’est passé sans login. IF.TTT est l’ossature de reçus : trace, liens stables, bundles hors‑ligne."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT accueil">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Gouvernance ouverte</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Navigation">
- <a href="../../#how">Process</a>
- <a href="../../#trust">Confiance</a>
- <a href="../../#verify">Vérifier</a>
- <a href="../../verticals/">Verticaux</a>
- <a href="../../whitepaper/">Livre blanc</a>
- <a href="../../api/">Développeurs</a>
- <a href="../../about/">À propos</a>
- <a class="lang" href="../../governance/" aria-label="English">EN</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Gouvernance ouverte</p>
- <h1>Lisible par les gouvernés.</h1>
- <p class="lede">
- Une “gouvernance” qui ne se lit qu’en interne n’est pas une preuve. IF.TTT publie des reçus stables, accessibles sans login, pour que des
- tiers puissent vérifier l’intégrité sans entrer dans votre réseau.
- </p>
-
- <div class="panel">
- <h3>Ce que cela prouve (et ce que cela ne prouve pas)</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Prouve</div>
- <div class="bw__v">Liaison d’intégrité (hashes), reçus de publication, bundles hors‑ligne.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Ne prouve pas</div>
- <div class="bw__v">L’intention, l’interprétation, ou “la conformité atteinte”.</div>
- </div>
- </div>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>La “stack” de gouvernance</h3>
- <ul class="list">
- <li><strong>IF.TTT (reçus) :</strong> source_sha256 ↔ output_sha256, trace_id, shareId.</li>
- <li><strong>Revue :</strong> packs de revue externes, critiques, disputes.</li>
- <li><strong>Contrôles :</strong> gates/stop‑conditions qui consomment ces reçus.</li>
- </ul>
- </div>
-
- <div class="cta" style="margin-top: 12px">
- <a class="btn btn--primary" href="../../#verify">Voir une trace</a>
- <a class="btn" href="../../api/">Surface publique</a>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Charters">
- <div class="card">
- <div class="card__hdr">
- <div class="badge badge--ok">CHARTERS</div>
- <div class="badge">PUBLICS</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/TRIAGE.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Politique de triage</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/TRIAGE.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/PANEL.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Panel / revue externe</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/PANEL.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/WITNESS.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Modèle “witness”</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/WITNESS.md</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Pour qui (et qui va détester)</h2>
- <p class="sub">Lisible pour des tiers : le but n’est pas le confort interne, mais la vérifiabilité externe.</p>
-
- <div class="grid2">
- <div class="panel">
- <h3>Pour</h3>
- <ul class="list">
- <li><strong>GRC / audit</strong> (SOC 2 / ISO) : preuves exportables.</li>
- <li><strong>Architecture sécurité</strong> : contrôles mesurables, pas d’attestations.</li>
- <li><strong>Juridique / conformité</strong> : chaîne de possession en cas de litige.</li>
- <li><strong>Produits IA</strong> : “pourquoi le modèle a dit ça ?”</li>
- <li><strong>Secteur public / défense</strong> : vérification hors‑ligne et environnements verrouillés.</li>
- </ul>
- </div>
-
- <div class="panel">
- <h3>Pas pour</h3>
- <ul class="list">
- <li>Ceux qui veulent un “badge” sans publier d’artefacts vérifiables.</li>
- <li>Les workflows où rien ne peut sortir du réseau (pas de surface publique).</li>
- <li>Les organisations qui préfèrent l’ambiguïté : IF.TTT rend les trous visibles.</li>
- </ul>
- </div>
- </div>
-
- <div class="cta" style="margin-top: 12px">
- <a class="btn btn--primary" href="../../whitepaper/">Lire le livre blanc</a>
- <a class="btn" href="../../verticals/">Voir les verticaux</a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • Gouvernance ouverte = preuve sans login.</div>
- <div class="muted"><a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> · Danny Stocker</div>
- </div>
- </footer>
- </body>
-</html>
-```
-
-</details>
-
-## /fr/
-- URL: https://infrafabric.io/fr/
-- Static: https://infrafabric.io/static/hosted/ifttt/fr/
-- Source: `ifttt/fr/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="fr">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Vérification ouverte pour la gouvernance IA</title>
- <meta
- name="description"
- content="IF.TTT (Traceable, Transparent, Trustworthy) est une couche de gouvernance “receipt-first” : relier une source à un output via une trace vérifiable, des liens publics sans login et des bundles hors‑ligne."
- />
- <meta property="og:title" content="IF.TTT — Vérification ouverte pour la gouvernance IA" />
- <meta
- property="og:description"
- content="Des reçus, pas des opinions. IF.TTT relie une source à un output avec des traces vérifiables, des liens publics sans login, et des bundles hors‑ligne."
- />
- <meta property="og:type" content="website" />
- <meta property="og:image" content="https://infrafabric.io/static/hosted/ifttt/assets/red-team-doc-1024-559.jpg" />
- <meta name="twitter:card" content="summary_large_image" />
- <meta name="theme-color" content="#111827" />
- <link rel="icon" href="../assets/if-logo-simple.svg" type="image/svg+xml" />
- <link rel="stylesheet" href="../style.css" />
- <script src="../app.js" defer></script>
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT accueil">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Traceable • Transparent • Trustworthy</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Navigation">
- <a href="../#how">Process</a>
- <a href="../#trust">Confiance</a>
- <a href="../#verify">Vérifier</a>
- <a href="../verticals/">Verticaux</a>
- <a href="./governance/">Gouvernance</a>
- <a href="../whitepaper/">Livre blanc</a>
- <a href="../api/">Développeurs</a>
- <a href="../about/">À propos</a>
- <a class="lang" href="../" aria-label="English">EN</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Gouvernance ouverte, lisible par des tiers</p>
- <h1>Des reçus, pas des opinions.</h1>
- <div class="type" aria-label="Animation de saisie">
- <span class="type__prefix">if.</span><span id="typeword"></span><span class="type__suffix">></span
- ><span class="type__caret" aria-hidden="true"></span>
- </div>
- <div class="quote" aria-live="polite" aria-label="Citation tournante">
- <div class="quote__text" id="quoteText"></div>
- <div class="quote__meta" id="quoteMeta"></div>
- </div>
- <p class="lede">
- IF.TTT est une couche de gouvernance “receipt‑first”. Elle relie un <strong>artefact source</strong> à un <strong>output</strong> via une
- <strong>page de trace</strong>, des <strong>liens publics sans login</strong>, et des <strong>bundles hors‑ligne</strong> vérifiables.
- </p>
-
- <div class="pillrow" role="list" aria-label="Propriétés clés">
- <div class="pill" role="listitem">
- <span class="pill__k">Sans login</span>
- <span class="pill__v">Surface publique</span>
- </div>
- <div class="pill" role="listitem">
- <span class="pill__k">Hors‑ligne</span>
- <span class="pill__v">Bundles de triage</span>
- </div>
- <div class="pill" role="listitem">
- <span class="pill__k">Noir/blanc</span>
- <span class="pill__v">Vérifié vs non‑vérifié</span>
- </div>
- </div>
-
- <div class="cta">
- <a class="btn btn--primary" href="../#verify">Voir une trace</a>
- <a class="btn" href="../verticals/">Voir les verticaux</a>
- </div>
-
- <p class="note">
- Nous ne “vendons” pas la conformité. Nous aidons les audits en produisant des <em>reçus vérifiables</em> que des tiers peuvent contrôler
- sans vos identifiants.
- </p>
- </div>
-
- <aside class="hero__card" aria-label="Exemple de page trace">
- <div class="card">
- <div class="card__media">
- <img
- src="../assets/red-team-doc-1024-559.jpg"
- alt="Couverture de dossier InfraFabric Red Team avec tampon “EYES ONLY // DAVE”"
- loading="lazy"
- />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">VERIFIED</div>
- <div class="badge">QUANTUM READY (optionnel)</div>
- </div>
- <div class="card__body">
- <div class="mini">
- <div class="mini__k">Promesse</div>
- <div class="mini__v">“Téléchargez. Hashez. Comparez. Optionnellement vérifiez hors‑ligne.”</div>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • Reçus IF.TTT conçus pour être “lisibles par les gouvernés”.</div>
- <div class="muted"><a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> · Danny Stocker</div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Liens rapides">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Secteurs</span>
- <a href="../verticals/public-sector/">Secteur public</a>
- <a href="../verticals/enterprise/">Entreprise</a>
- <a href="../verticals/research/">Recherche</a>
- <a href="../verticals/professional-services/">Services pro</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../verticals/healthcare/">Santé</a>
- <a href="../verticals/finance/">Finance</a>
- <a href="../verticals/legal/">Juridique</a>
- </div>
- <div class="bottombar__right">
- <a href="../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /governance/
-- URL: https://infrafabric.io/governance/
-- Static: https://infrafabric.io/static/hosted/ifttt/governance/
-- Source: `ifttt/governance/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Open Governance</title>
- <meta
- name="description"
- content="Open governance means third parties can verify what happened without your login. IF.TTT is the receipt backbone: trace pages, stable no-login links, and offline bundles."
- />
- <link rel="stylesheet" href="../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Open governance</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../#how">How</a>
- <a href="../#trust">Trust</a>
- <a href="../#verify">Verify</a>
- <a href="../verticals/">Verticals</a>
- <a href="../whitepaper/">Whitepaper</a>
- <a href="../api/">Developers</a>
- <a href="../about/">About</a>
- <a class="lang" href="../fr/governance/" aria-label="French">FR</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Open governance</p>
- <h1>Legible to the governed.</h1>
- <p class="lede">
- “Governance” fails when it’s only legible inside your network. IF.TTT moves the proof outside: stable, no‑login receipts that third parties
- can verify without joining your internal world.
- </p>
-
- <div class="panel">
- <h3>What this page is (black/white)</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Goal</div>
- <div class="bw__v">Make third‑party verification possible without credentials.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Mechanism</div>
- <div class="bw__v">Hashes + trace receipts + stable URLs + optional offline bundles.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Not implied</div>
- <div class="bw__v">“Compliance achieved” or “correctness of interpretation”.</div>
- </div>
- </div>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>The governance stack (where IF.TTT sits)</h3>
- <ul class="list">
- <li><strong>Receipt layer (IF.TTT):</strong> integrity binding + chain‑of‑custody IDs + share surface.</li>
- <li><strong>Review layer:</strong> external review packs, panel critique, dispute workflows.</li>
- <li><strong>Enforcement layer:</strong> gates/stop‑conditions that consume receipts (CI, access, runtime).</li>
- </ul>
- <p class="fine">Receipts don’t replace governance. They remove ambiguity from it.</p>
- </div>
-
- <div class="cta" style="margin-top: 12px">
- <a class="btn btn--primary" href="../#verify">Try a live trace</a>
- <a class="btn" href="../api/">Public share surface</a>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Public artifacts">
- <div class="card">
- <div class="card__media">
- <img src="../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">PUBLIC</div>
- <div class="badge">NO‑LOGIN</div>
- </div>
- <div class="card__body">
- <div class="mini">
- <div class="mini__k">Stable receipt surface</div>
- <div class="mini__v">These URLs are designed to be shareable in procurement, audits, and disputes.</div>
- </div>
- <pre class="code"><code>/static/trace/<shareId>
-/static/dossier/<shareId>
-/static/dossier/<shareId>/download
-/static/pack/<shareId>.md
-/static/review/<shareId>.md
-/static/marketing/<shareId>.md
-/static/source/<source_sha256>.pdf</code></pre>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>For whom (and who will hate it)</h2>
- <p class="sub">A constitutional framing: the goal is legibility to outsiders, not internal comfort.</p>
-
- <div class="grid2">
- <div class="panel">
- <h3>For</h3>
- <ul class="list">
- <li><strong>GRC / Audit leads</strong> drowning in evidence requests (SOC 2 / ISO 27001 / vendor due diligence).</li>
- <li><strong>Security architects</strong> who need “proof of what ran” without adding manual theater.</li>
- <li><strong>Legal / compliance</strong> teams who need chain‑of‑custody that survives disputes.</li>
- <li><strong>AI product teams</strong> facing “why did it say that?” questions from customers and regulators.</li>
- <li><strong>Gov/defense contractors</strong> who must verify artifacts offline or across locked‑down environments.</li>
- </ul>
- </div>
-
- <div class="panel">
- <h3>Not for</h3>
- <ul class="list">
- <li>Teams seeking a “compliance badge” without publishing verifiable artifacts.</li>
- <li>Workflows where evidence cannot leave the internal network (no share surface, no external verification).</li>
- <li>Organizations that want to hide uncertainty: IF.TTT makes gaps visible by design.</li>
- <li>Anyone who needs governance to remain ambiguous (receipts reduce wiggle room).</li>
- </ul>
- </div>
- </div>
-
- <div class="cta" style="margin-top: 12px">
- <a class="btn btn--primary" href="../whitepaper/">Read the paper</a>
- <a class="btn" href="../verticals/">Browse vertical fit</a>
- </div>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Charters (how we keep it honest)</h2>
- <p class="sub">These are plain Markdown docs: readable, linkable, and easy to critique.</p>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/TRIAGE.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Triage policy</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/TRIAGE.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/PANEL.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Panel / external review process</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/PANEL.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/WITNESS.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Witness model</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/WITNESS.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/gov/QUESTIONS.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Third‑party questions we expect</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/gov/QUESTIONS.md</span>
- </a>
- </div>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <p class="sub">A real trace receipt you can verify right now.</p>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- <p class="fine">
- “VERIFIED” means the published bytes hash to what the receipt says. “QUANTUM READY” means a post‑quantum signature receipt exists (additive;
- integrity hashes still stand).
- </p>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • Open governance is “proof without login”.</div>
- <div class="muted">
- <a href="../">IF.TTT</a> · <a href="../api/">Developers</a> · <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../verticals/public-sector/">Public Sector</a>
- <a href="../verticals/enterprise/">Enterprise</a>
- <a href="../verticals/research/">Research</a>
- <a href="../verticals/professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../verticals/healthcare/">Healthcare</a>
- <a href="../verticals/finance/">Financial</a>
- <a href="../verticals/legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /
-- URL: https://infrafabric.io/
-- Static: https://infrafabric.io/static/hosted/ifttt/
-- Source: `ifttt/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Open Verification for AI Governance</title>
- <meta
- name="description"
- content="IF.TTT (Traceable, Transparent, Trustworthy) is a receipt-first governance layer: bind a source artifact to an output with a verifiable trace, no-login proof links, and optional offline bundles."
- />
- <meta property="og:title" content="IF.TTT — Open Verification for AI Governance" />
- <meta
- property="og:description"
- content="Receipts, not vibes. IF.TTT binds a source artifact to an output with verifiable traces, no-login proof links, and optional offline bundles."
- />
- <meta property="og:type" content="website" />
- <meta property="og:image" content="https://infrafabric.io/static/hosted/ifttt/assets/red-team-doc-1024-559.jpg" />
- <meta name="twitter:card" content="summary_large_image" />
- <meta name="theme-color" content="#111827" />
- <link rel="icon" href="./assets/if-logo-simple.svg" type="image/svg+xml" />
- <link rel="stylesheet" href="./style.css" />
- <script src="./app.js" defer></script>
- </head>
-
- <body class="home">
- <header class="top top--home">
- <div class="wrap top__inner">
- <a class="brand" href="./" aria-label="IF.TTT home">
- <img class="brand__logo" src="./assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Traceable • Transparent • Trustworthy</span>
- </span>
- </a>
-
- <nav class="homeNav" aria-label="Top links">
- <a href="./governance/">Governance</a>
- <a href="./whitepaper/">Whitepaper</a>
- <a href="./api/">Developers</a>
- <a href="./about/">About</a>
- <a class="lang" href="./fr/" aria-label="French">FR</a>
- <span class="homeNav__sep">·</span>
- <a class="homeNav__contact" href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- </nav>
- </div>
- </header>
-
- <main id="top" class="homeMain" aria-label="IF.TTT overview">
- <div class="wrap homeMain__inner">
- <div class="homeCenter">
- <div class="homeBadges" aria-label="Status badges">
- <a
- class="badge badge--ok badge--big"
- href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n"
- target="_blank"
- rel="noreferrer"
- >VERIFIED</a
- >
- <a class="badge badge--big" href="./api/#quantum">QUANTUM READY</a>
- </div>
-
- <div class="type type--home" aria-label="Typing animation">
- <span class="type__prefix">if.</span><span id="typeword"></span><span class="type__suffix">></span
- ><span class="type__caret" aria-hidden="true"></span>
- </div>
-
- <div class="quote quote--home" aria-live="polite" aria-label="Rotating quote">
- <div class="quote__text" id="quoteText"></div>
- <div class="quote__meta" id="quoteMeta"></div>
- </div>
-
- <p class="homeLede">
- Open verification for governance: third parties can verify receipts without your credentials.
- <span class="muted">Artifacts > adjectives.</span>
- </p>
-
- <section id="stepper" class="homeStepper" hidden>
- <h2>How verification works</h2>
- <p class="sub2">Black/white: what the receipt proves vs what it doesn’t.</p>
-
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Bind source ↔ output</div>
- <div class="step__d">Hash the exact source bytes and the exact output bytes.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Publish a trace receipt</div>
- <div class="step__d">A public page that links the hashes, time, and versioning.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">No‑login share surface</div>
- <div class="step__d">Stable URLs keyed by a single <code>shareId</code> (trace, dossier, pack, source).</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">4</div>
- <div class="step__b">
- <div class="step__t">Optional: offline triage bundles</div>
- <div class="step__d">Lightweight/standard/full bundles for constrained environments.</div>
- </div>
- </li>
- </ol>
-
- <div class="homeLinks" aria-label="Live demo links">
- <a class="homeLink" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer"
- >Open a live trace receipt</a
- >
- <a class="homeLink" href="https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n.md" target="_blank" rel="noreferrer"
- >Open the corresponding pack</a
- >
- <a class="homeLink" href="https://infrafabric.io/static/hosted/review/trace-bundles/b6547c03/index.md" target="_blank" rel="noreferrer"
- >Triage bundle selector (offline)</a
- >
- <a class="homeLink" href="https://infrafabric.io/static/hosted/iftrace.py" target="_blank" rel="noreferrer">Download `iftrace.py`</a>
- <a
- class="homeLink"
- href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- target="_blank"
- rel="noreferrer"
- >IF.TTT paper (review pack)</a
- >
- </div>
-
- <p class="note">
- If it’s not verifiable, label it as a gap. Don’t endorse it.
- <span class="muted">This is how you keep governance legible to outsiders.</span>
- </p>
- </section>
-
- <div class="homeMeta" aria-label="Contact">
- Danny Stocker <span class="bottombar__sep">·</span> <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- </div>
- </div>
- </div>
- </main>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="./verticals/public-sector/">Public Sector</a>
- <a href="./verticals/enterprise/">Enterprise</a>
- <a href="./verticals/research/">Research</a>
- <a href="./verticals/professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="./verticals/healthcare/">Healthcare</a>
- <a href="./verticals/finance/">Financial</a>
- <a href="./verticals/legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="./api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="./api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/ai/
-- URL: https://infrafabric.io/verticals/ai/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/ai/
-- Source: `ifttt/verticals/ai/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — AI Products</title>
- <meta name="description" content="IF.TTT for AI product companies: provable provenance for outputs (“why did it say that?”) without giving third parties internal access." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">AI product companies</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#how">How</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">AI product reality</p>
- <h1>“Why did it say that?” becomes a contract clause.</h1>
- <p class="lede">
- Enterprise buyers increasingly require provenance: what source material fed the output, what version produced it, and what can be
- verified after the fact. IF.TTT turns that requirement into a repeatable receipt surface.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Enterprise buyers demand defensible provenance without joining your internal stack.</li>
- <li>Incident responders demand integrity-bound artifacts for “what happened.”</li>
- <li>GRC teams demand a black/white boundary between verified evidence and interpretation.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Receipts</div>
- <div class="bw__v">Trace pages + stable no‑login URLs for outputs and sources.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Disputes</div>
- <div class="bw__v">Offline bundles for verification after access or context changes.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Proves integrity and publication; does not claim intent or correctness.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Example receipt">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">RECEIPTS</div>
- <div class="badge">DISPUTE‑READY</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">The output isn’t the product. The proof is.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/enterprise/
-- URL: https://infrafabric.io/verticals/enterprise/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/enterprise/
-- Source: `ifttt/verticals/enterprise/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Enterprise</title>
- <meta name="description" content="IF.TTT for enterprises: third-party verifiable receipts for audits, vendor reviews, and internal governance without credential sprawl." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Enterprise</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#how">How</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Enterprise reality</p>
- <h1>Audits are a throughput problem.</h1>
- <p class="lede">
- Enterprise trust breaks when proof requires access: screenshots, ticket exports, and “trust me” Slack threads. IF.TTT replaces access
- requirements with receipts—so verification is externalizable.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Auditors and customers ask the same question: “prove it was true at the time.”</li>
- <li>Procurement needs evidence without granting broad credentials.</li>
- <li>Executives need a narrative; security needs reproducible artifacts.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Receipt‑first</div>
- <div class="bw__v">Integrity binding: <code>source_sha256</code> ↔ <code>output_sha256</code>.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">No‑login share</div>
- <div class="bw__v">Public receipt surface for reviewers (with sandbox fallback paths).</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Offline option</div>
- <div class="bw__v">Triage bundles for future disputes and restricted review.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Example receipt links">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">VERIFIABLE</div>
- <div class="badge">BORING</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example pack (Markdown)</span>
- <span class="linkrow__u">https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n.md</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>One sentence you can forward</h2>
- <p class="sub">For stakeholder alignment without overclaiming.</p>
- <div class="panel">
- <p class="sub2">
- IF.TTT supports audits by producing externally verifiable receipts—so reviewers don’t need your internal credentials to verify integrity.
- </p>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Make verification cheap. Keep access expensive.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/finance/
-- URL: https://infrafabric.io/verticals/finance/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/finance/
-- Source: `ifttt/verticals/finance/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Finance</title>
- <meta name="description" content="IF.TTT for fintech and regulated finance: prove provenance, non-repudiation, and dispute-ready receipts for auditors and regulators." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Fintech / regulated finance</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Finance reality</p>
- <h1>Regulators don’t buy narratives. They buy receipts.</h1>
- <p class="lede">
- In regulated finance, the first question after an incident is not “what did the model mean?” It’s “show me the evidence chain: inputs,
- outputs, timestamps, and who approved what.”
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Model risk / validation teams need reproducibility.</li>
- <li>Internal audit needs non‑repudiation and time‑scoped proof.</li>
- <li>Regulators need chain‑of‑custody that survives disputes.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Receipt</div>
- <div class="bw__v">A public trace page binding <code>source_sha256</code> ↔ <code>output_sha256</code>.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Dispute</div>
- <div class="bw__v">Offline bundles for later verification without relying on internal access.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Black/white separation of what’s verified vs what is interpretation.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">PROCESS</div>
- <div class="badge">RECEIPT‑FIRST</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the source</div>
- <div class="step__d">Compute <code>source_sha256</code> of the exact bytes.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash the output</div>
- <div class="step__d">Compute <code>output_sha256</code> of what is published.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Publish the trace</div>
- <div class="step__d">Receipt links hashes + trace id + version.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">4</div>
- <div class="step__b">
- <div class="step__t">Share without login</div>
- <div class="step__d">Stable URLs keyed by <code>shareId</code>.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Artifacts you can hand to third parties</h2>
- <p class="sub">This is the point: reviewers shouldn’t need your VPN.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (rendered): https://infrafabric.io/static/dossier/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Finance isn’t special. The auditors are just earlier.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/government/
-- URL: https://infrafabric.io/verticals/government/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/government/
-- Source: `ifttt/verticals/government/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Government</title>
- <meta
- name="description"
- content="IF.TTT for government and defense contractors: offline verification bundles and unambiguous chain-of-custody for assessors and supply chain reviews."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Government / defense</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Government reality</p>
- <h1>Assurance is an offline problem.</h1>
- <p class="lede">
- In restricted environments, the “can you verify it?” question must be answered without assuming network access, SaaS consoles, or vendor
- portals. IF.TTT treats offline verification as a first‑class requirement.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Assessors demand chain‑of‑custody and unambiguous provenance.</li>
- <li>Procurement wants proof that survives vendor handoffs.</li>
- <li>Security teams need evidence that is portable across networks and time.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Offline bundles</div>
- <div class="bw__v">Triage bundles (lightweight/standard/full) with expected hashes for trustless verification.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Receipt surface</div>
- <div class="bw__v">Stable no‑login URLs for trace + output + source.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Black/white</div>
- <div class="bw__v">Clear statement of what integrity receipts prove—and what they don’t.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Triage bundle selector">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">OFFLINE</div>
- <div class="badge">TRIAGE BUNDLES</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Triage selector (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/trace-bundles/d70ed99a/index.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/iftrace.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Verifier (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/iftrace.html</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>What you can hand to an assessor</h2>
- <p class="sub">No accounts required. No internal consoles required.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
-Verifier: https://infrafabric.io/static/hosted/iftrace.py</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">If it can’t be verified offline, it’s not a control.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/healthcare/
-- URL: https://infrafabric.io/verticals/healthcare/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/healthcare/
-- Source: `ifttt/verticals/healthcare/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Healthcare</title>
- <meta
- name="description"
- content="IF.TTT for healthcare: clear boundaries on what is verified vs inferred, and portable evidence for audits and incident review."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Healthcare</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Healthcare reality</p>
- <h1>Clarity beats confidence.</h1>
- <p class="lede">
- Healthcare environments punish ambiguity. IF.TTT makes “what we can prove” explicit, and forces everything else to be labeled as
- interpretation or review-required.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Compliance wants evidence that is bounded and reviewable.</li>
- <li>Incident reviewers want provenance for outputs and decisions.</li>
- <li>Vendors and partners want proof without access to your internal tooling.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Verified</div>
- <div class="bw__v">Integrity binding (hashes), receipts, optional signatures.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Not verified</div>
- <div class="bw__v">Clinical intent, interpretation, or correctness of conclusions.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Outcome</div>
- <div class="bw__v">Evidence becomes legible to outsiders without pretending it is “the decision.”</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">BLACK/WHITE</div>
- <div class="badge">BOUNDARIES</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash artifacts</div>
- <div class="step__d">Source and output bytes get stable hashes.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Publish receipts</div>
- <div class="step__d">Trace page shows what can be verified.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Export bundles (optional)</div>
- <div class="step__d">For constrained review environments.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Healthcare needs boundaries more than optimism.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/
-- URL: https://infrafabric.io/verticals/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/
-- Source: `ifttt/verticals/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Verticals</title>
- <meta name="description" content="Vertical fit overview for IF.TTT: third-party trust pressure mapped to receipts, bundles, and verification." />
- <link rel="stylesheet" href="../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Vertical fit</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../#how">How</a>
- <a href="../#trust">Trust</a>
- <a href="../#verify">Verify</a>
- <a href="../governance/">Governance</a>
- <a href="../whitepaper/">Whitepaper</a>
- <a href="../about/">About</a>
- <a href="../api/">Developers</a>
- <a class="lang" href="../fr/" aria-label="French">FR</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Same mechanism, different pressure</p>
- <h1>Two axes: who is buying, what is at stake.</h1>
- <p class="lede">
- IF.TTT doesn’t “solve compliance.” It solves the universal problem underneath compliance: third parties demanding proof without joining your
- internal world. The receipts stay the same; the incentives and failure modes change.
- </p>
- <div class="cta">
- <a class="btn btn--primary" href="../#verify">Try a live trace</a>
- <a class="btn" href="../api/">Developer surface</a>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first sequence">
- <div class="card">
- <div class="card__media">
- <img src="../assets/red-team-doc-1024-559.jpg" alt="Red Team dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">RECEIPT‑FIRST</div>
- <div class="badge">NO‑LOGIN</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the source</div>
- <div class="step__d">Compute <code>source_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash the output</div>
- <div class="step__d">Compute <code>output_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Publish the trace</div>
- <div class="step__d">A receipt page binds source ↔ output.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Browse by sector</h2>
- <p class="sub">Who the buyer is. The same receipts, different pressure.</p>
-
- <div class="cards">
- <article class="vcard">
- <h3>Public Sector</h3>
- <p class="vcard__v">Procurement cycles, oversight, offline verification.</p>
- <a class="vcard__more" href="./public-sector/">Public Sector →</a>
- </article>
- <article class="vcard">
- <h3>Enterprise</h3>
- <p class="vcard__v">Audits as throughput; evidence without credential sprawl.</p>
- <a class="vcard__more" href="./enterprise/">Enterprise →</a>
- </article>
- <article class="vcard">
- <h3>Research</h3>
- <p class="vcard__v">Provenance, reproducibility, and external reviewers.</p>
- <a class="vcard__more" href="./research/">Research →</a>
- </article>
- <article class="vcard">
- <h3>Professional Services</h3>
- <p class="vcard__v">Client handoffs, disputes, and custody that holds up later.</p>
- <a class="vcard__more" href="./professional-services/">Professional Services →</a>
- </article>
- </div>
-
- <h2 style="margin-top: 28px">Browse by industry</h2>
- <p class="sub">What domain the risk lives in: regulation, data, and dispute pressure.</p>
-
- <div class="cards">
- <article class="vcard">
- <h3>Healthcare</h3>
- <p class="vcard__v">Audit trails, privacy boundaries, dispute‑ready artifacts.</p>
- <a class="vcard__more" href="./healthcare/">Healthcare →</a>
- </article>
- <article class="vcard">
- <h3>Financial Services</h3>
- <p class="vcard__v">Model risk, non‑repudiation, evidence for regulators.</p>
- <a class="vcard__more" href="./finance/">Financial →</a>
- </article>
- <article class="vcard">
- <h3>Legal</h3>
- <p class="vcard__v">Chain‑of‑custody for drafts, evidence, and decisions.</p>
- <a class="vcard__more" href="./legal/">Legal →</a>
- </article>
- </div>
-
- <h2 style="margin-top: 28px">More pressure profiles</h2>
- <p class="sub">Common governance failure modes that appear across sectors and industries.</p>
-
- <div class="cards">
- <article class="vcard">
- <h3>B2B SaaS (SOC 2 / ISO)</h3>
- <p class="vcard__v">Auditors, procurement, “prove it existed at the time.”</p>
- <a class="vcard__more" href="./saas/">B2B SaaS →</a>
- </article>
- <article class="vcard">
- <h3>SecOps / SOC</h3>
- <p class="vcard__v">Bind summaries to evidence; keep custody intact.</p>
- <a class="vcard__more" href="./secops/">SecOps →</a>
- </article>
- <article class="vcard">
- <h3>AI Product Companies</h3>
- <p class="vcard__v">Provable provenance for outputs: “why did it say that?”</p>
- <a class="vcard__more" href="./ai/">AI products →</a>
- </article>
- <article class="vcard">
- <h3>Industrial / Supply Chain</h3>
- <p class="vcard__v">Traceability that survives vendor and contractor handoffs.</p>
- <a class="vcard__more" href="./supply-chain/">Supply chain →</a>
- </article>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • IF.TTT receipts are designed to be legible to the governed.</div>
- <div class="muted">
- <a href="../">IF.TTT</a> · <a href="../governance/">Governance</a> · <a href="../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="./public-sector/">Public Sector</a>
- <a href="./enterprise/">Enterprise</a>
- <a href="./research/">Research</a>
- <a href="./professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="./healthcare/">Healthcare</a>
- <a href="./finance/">Financial</a>
- <a href="./legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/legal/
-- URL: https://infrafabric.io/verticals/legal/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/legal/
-- Source: `ifttt/verticals/legal/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Legal</title>
- <meta name="description" content="IF.TTT for legal workflows: chain-of-custody for drafts, evidence, and decisions. Receipts, not recollections." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Legal</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Legal reality</p>
- <h1>Courts don’t accept “trust me.” They accept provenance.</h1>
- <p class="lede">
- Legal and compliance teams live in the difference between “we believe this happened” and “we can prove this happened.” IF.TTT is built to
- make that proof portable.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Disputes demand reproducibility: the exact input and the exact output.</li>
- <li>Evidence must be time‑scoped: “what did we know, when did we know it?”</li>
- <li>Chain‑of‑custody must survive handoffs (vendor → customer → counsel → auditor).</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Integrity</div>
- <div class="bw__v">Hash receipts bind the published bytes to what was reviewed.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Portability</div>
- <div class="bw__v">No‑login links and offline bundles for external review.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Explicit “proves / does not prove” framing reduces ambiguity.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">EVIDENCE</div>
- <div class="badge">CHAIN‑OF‑CUSTODY</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Define the artifact</div>
- <div class="step__d">Identify the exact bytes to be relied upon.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash it</div>
- <div class="step__d">Publish <code>sha256</code> as the integrity baseline.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Issue the receipt</div>
- <div class="step__d">Trace page binds source ↔ output with a trace id.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Artifacts that make disputes less expensive</h2>
- <p class="sub">You can hand these to an external reviewer without shipping your internal systems.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Review pack: https://infrafabric.io/static/review/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Legal is just governance with deadlines.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/professional-services/
-- URL: https://infrafabric.io/verticals/professional-services/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/professional-services/
-- Source: `ifttt/verticals/professional-services/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Professional Services</title>
- <meta
- name="description"
- content="IF.TTT for professional services: receipts and chain-of-custody artifacts that hold up across clients, engagements, and disputes."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Professional services</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Services reality</p>
- <h1>The deliverable is the receipt.</h1>
- <p class="lede">
- In professional services, the artifact you hand over becomes evidence: audits, disputes, expert reports, procurement packs. IF.TTT makes
- the handoff verifiable without making you a credential broker.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Clients want proof; opposing counsel wants provenance.</li>
- <li>Auditors need artifacts they can verify without your internal access.</li>
- <li>Engagements outlive inboxes; the evidence must remain stable.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Chain‑of‑custody</div>
- <div class="bw__v">Trace receipt binds source ↔ output, plus IDs and timestamps.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Portable proofs</div>
- <div class="bw__v">Bundles can be archived with the case file and re‑verified later.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">What was verified is shown; interpretation is labeled as interpretation.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Example receipt links">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">EXPORTABLE</div>
- <div class="badge">DISPUTE‑READY</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example pack (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/pack/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Operational trap to avoid</h2>
- <p class="sub">Don’t turn verification into credential distribution.</p>
- <div class="grid2">
- <div class="panel">
- <h3>Bad</h3>
- <p class="sub2">“Log in to our system and we’ll show you.”</p>
- </div>
- <div class="panel">
- <h3>Good</h3>
- <p class="sub2">“Here is the artifact, here is the receipt, verify without us.”</p>
- </div>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">If the reviewer needs your credentials, it’s not verifiable.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/public-sector/
-- URL: https://infrafabric.io/verticals/public-sector/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/public-sector/
-- Source: `ifttt/verticals/public-sector/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Public Sector</title>
- <meta
- name="description"
- content="IF.TTT for the public sector: public receipts, offline verification bundles, and unambiguous chain-of-custody for external reviewers."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Public sector</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Public sector reality</p>
- <h1>Proof must survive procurement.</h1>
- <p class="lede">
- Public accountability is a third‑party problem: reviewers need proof without getting access to your internal systems. IF.TTT turns “trust
- us” into receipts that a stranger can verify.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Assessors need chain‑of‑custody that survives vendor handoffs.</li>
- <li>Procurement and oversight bodies require documentation that outlives staff turnover.</li>
- <li>Some environments must support offline verification by design.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Receipt surface</div>
- <div class="bw__v">Stable, no‑login URLs for trace + output + source.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Offline bundles</div>
- <div class="bw__v">Triage bundles (lightweight/standard/full) with expected hashes.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Black/white</div>
- <div class="bw__v">States what is verified (integrity) and what is not (interpretation).</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Example receipt links">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">OFFLINE</div>
- <div class="badge">RECEIPTS</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a
- class="linkrow"
- href="https://infrafabric.io/static/hosted/review/trace-bundles/b6547c03/index.html"
- target="_blank"
- rel="noreferrer"
- >
- <span class="linkrow__t">Triage selector (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/trace-bundles/b6547c03/index.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/iftrace.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Verifier (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/iftrace.html</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>What you can hand to a reviewer</h2>
- <p class="sub">No accounts required. No internal consoles required.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Public verification is a product requirement.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/research/
-- URL: https://infrafabric.io/verticals/research/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/research/
-- Source: `ifttt/verticals/research/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Research</title>
- <meta name="description" content="IF.TTT for research: provenance and reproducibility for reports, analyses, datasets, and AI outputs." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Research</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#how">How</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Research reality</p>
- <h1>Reproducibility is governance.</h1>
- <p class="lede">
- Research already understands receipts: methods, datasets, citations. IF.TTT applies the same discipline to AI outputs and operational
- decisions: publish what can be verified, label what can’t, and keep the bytes stable.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Peer review demands the ability to reproduce claims.</li>
- <li>Funding/compliance bodies demand provenance for decisions and outputs.</li>
- <li>Collaborators need proof that the artifact they received is the artifact you published.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Integrity</div>
- <div class="bw__v">Hash receipts: same bytes, same hash, independent verification.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Explicitly separates evidence (verified) from interpretation (not verified).</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Portability</div>
- <div class="bw__v">Offline bundles for constrained or future review environments.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">PROCESS</div>
- <div class="badge">PROVENANCE</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the source</div>
- <div class="step__d">Dataset / paper / prompt pack → <code>source_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash the output</div>
- <div class="step__d">The artifact you publish → <code>output_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Publish the trace</div>
- <div class="step__d">Receipt binds source ↔ output, plus verification hooks.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Portable verification artifacts</h2>
- <p class="sub">So reviewers can validate without trusting your infrastructure.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">If it can’t be reproduced, it can’t be governed.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/saas/
-- URL: https://infrafabric.io/verticals/saas/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/saas/
-- Source: `ifttt/verticals/saas/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — B2B SaaS</title>
- <meta name="description" content="IF.TTT for B2B SaaS: auditor-ready receipts, no-login proof surfaces, and dispute-friendly bundles for SOC 2 / ISO programs." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">B2B SaaS (SOC 2 / ISO)</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">SaaS reality</p>
- <h1>Audits are evidence requests with a deadline.</h1>
- <p class="lede">
- In B2B SaaS, the friction isn’t the control design. It’s proving the control existed at the right time, in the right scope, without
- granting auditors full internal access.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Auditors want integrity-bound artifacts (not screenshots in shared drives).</li>
- <li>Enterprise procurement wants reproducible proof without bespoke portals.</li>
- <li>Post‑incident reviewers want “what did it say?” tied to “what did it see?”</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">No‑login</div>
- <div class="bw__v">Stable URLs for trace + output + source, keyed by <code>shareId</code>.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Dispute‑ready</div>
- <div class="bw__v">Offline bundles with expected hashes for later verification.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Black/white</div>
- <div class="bw__v">Explicit “proves / does not prove” framing for auditor conversations.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">RECEIPTS</div>
- <div class="badge">AUDIT‑FRICTION</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the source</div>
- <div class="step__d">Compute <code>source_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash the output</div>
- <div class="step__d">Compute <code>output_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Publish the receipt</div>
- <div class="step__d">Share a trace page with stable no‑login URLs.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Artifacts for auditors</h2>
- <p class="sub">The purpose is to make evidence portable and boring.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Pack (HTML): https://infrafabric.io/static/pack/<shareId></code></pre>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">If the evidence isn’t portable, the audit will be.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/sciences/
-- URL: https://infrafabric.io/verticals/sciences/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/sciences/
-- Source: `ifttt/verticals/sciences/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Sciences</title>
- <meta name="description" content="IF.TTT for science and research: provenance and reproducibility for reports, analyses, and model outputs." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Sciences / research</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#how">How</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Research reality</p>
- <h1>Reproducibility is governance in a lab coat.</h1>
- <p class="lede">
- Scientific workflows already understand receipts: methods, datasets, and citations. IF.TTT is the same idea applied to AI outputs and
- operational decisions: publish what can be verified, and mark what can’t.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Peer reviewers need the ability to reproduce claims.</li>
- <li>Funding/compliance bodies need provenance for decisions and outputs.</li>
- <li>Collaborators need proof that the artifact they received is the artifact you published.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Integrity</div>
- <div class="bw__v">Hash receipts: same bytes, same hash, independent verification.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Explicitly separates evidence (verified) from interpretation (not verified).</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Portability</div>
- <div class="bw__v">Offline bundles for constrained or future review environments.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">PROCESS</div>
- <div class="badge">PROVENANCE</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the source</div>
- <div class="step__d">Dataset / paper / prompt pack → <code>source_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Hash the output</div>
- <div class="step__d">The output you publish → <code>output_sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Publish the trace</div>
- <div class="step__d">Receipt binds source ↔ output with trace id and versions.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Portable verification artifacts</h2>
- <p class="sub">So reviewers can validate without trusting your infrastructure.</p>
- <pre class="code"><code>Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html</code></pre>
- </div>
- </section>
-
- <section class="section">
- <div class="wrap">
- <h2>Live example</h2>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">If it can’t be reproduced, it can’t be governed.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/secops/
-- URL: https://infrafabric.io/verticals/secops/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/secops/
-- Source: `ifttt/verticals/secops/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — SecOps</title>
- <meta name="description" content="IF.TTT for SecOps and SOC: bind AI summaries to evidence; preserve chain-of-custody for investigations and audits." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">SecOps / SOC</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">SecOps reality</p>
- <h1>Bind “what the system said” to “what the system saw.”</h1>
- <p class="lede">
- AI summaries can help, but only if they remain verifiable against raw telemetry. IF.TTT makes the custody chain explicit: source bytes,
- output bytes, and a receipt that can be validated by third parties.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Executives demand a narrative; auditors demand evidence.</li>
- <li>Incident response needs reproducible artifacts, not recollections.</li>
- <li>External assessors need proof without your SIEM credentials.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Trace receipt</div>
- <div class="bw__v">Integrity binding: <code>source_sha256</code> ↔ <code>output_sha256</code>.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Offline proof</div>
- <div class="bw__v">Bundles that can be verified after the fact, offline.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">What’s verified is stated; what’s interpretation is labeled as such.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Example receipt links">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-doc-1024-559.jpg" alt="Dossier cover" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">EVIDENCE</div>
- <div class="badge">REPLAYABLE</div>
- </div>
- <div class="card__body">
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Example trace receipt</span>
- <span class="linkrow__u">https://infrafabric.io/static/trace/6qRgcR01kw_qNo63Dbs_ob9n</span>
- </a>
- </div>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Operational trap to avoid</h2>
- <p class="sub">Do not treat “AI summary” as evidence.</p>
- <div class="grid2">
- <div class="panel">
- <h3>Bad</h3>
- <p class="sub2">“The AI said this was resolved.”</p>
- </div>
- <div class="panel">
- <h3>Good</h3>
- <p class="sub2">“Here is the output, here is the evidence artifact, here is the receipt binding them.”</p>
- </div>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">Summaries don’t hold up. Receipts do.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /verticals/supply-chain/
-- URL: https://infrafabric.io/verticals/supply-chain/
-- Static: https://infrafabric.io/static/hosted/ifttt/verticals/supply-chain/
-- Source: `ifttt/verticals/supply-chain/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Supply Chain</title>
- <meta
- name="description"
- content="IF.TTT for industrial and supply chain environments: change-control receipts that survive contractor handoffs and insurer/auditor review."
- />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Industrial / supply chain</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../">Verticals</a>
- <a href="../../#trust">Trust</a>
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../whitepaper/">Whitepaper</a>
- <a href="../../about/">About</a>
- <a href="../../api/">Developers</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Supply chain reality</p>
- <h1>Handoffs are where proof dies.</h1>
- <p class="lede">
- Industrial systems accumulate contractors, vendors, and integrators. IF.TTT standardizes a receipt surface so chain‑of‑custody doesn’t
- collapse the moment responsibility moves.
- </p>
-
- <div class="panel">
- <h3>Third‑party pressure</h3>
- <ul class="list">
- <li>Customers ask for change control evidence after outages.</li>
- <li>Insurers ask what controls existed at the time of the incident.</li>
- <li>Auditors ask for traceability across organizational boundaries.</li>
- </ul>
- </div>
-
- <div class="panel" style="margin-top: 12px">
- <h3>What IF.TTT provides</h3>
- <div class="bw">
- <div class="bw__row">
- <div class="bw__k">Receipts</div>
- <div class="bw__v">Stable no‑login trace + output + source URLs keyed by <code>shareId</code>.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Offline</div>
- <div class="bw__v">Bundles for verification when networks and portals are unavailable.</div>
- </div>
- <div class="bw__row">
- <div class="bw__k">Clarity</div>
- <div class="bw__v">Integrity binding is verifiable; interpretation remains process-owned.</div>
- </div>
- </div>
- </div>
- </div>
-
- <aside class="hero__card" aria-label="Receipt-first process">
- <div class="card">
- <div class="card__media">
- <img src="../../assets/red-team-stamp-600.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">PROCESS</div>
- <div class="badge">HANDOFF‑SAFE</div>
- </div>
- <div class="card__body">
- <ol class="steps">
- <li class="step">
- <div class="step__n">1</div>
- <div class="step__b">
- <div class="step__t">Hash the artifact</div>
- <div class="step__d">Define the bytes and compute <code>sha256</code>.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">2</div>
- <div class="step__b">
- <div class="step__t">Publish the receipt</div>
- <div class="step__d">Trace page binds source ↔ output.</div>
- </div>
- </li>
- <li class="step">
- <div class="step__n">3</div>
- <div class="step__b">
- <div class="step__t">Export bundles</div>
- <div class="step__d">Carry proof through constrained environments.</div>
- </div>
- </li>
- </ol>
- </div>
- </div>
- </aside>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">When responsibility moves, the receipt shouldn’t.</div>
- <div class="muted">
- <a href="../">Verticals</a> · <a href="../../governance/">Governance</a> · <a href="../../api/">Developers</a> ·
- <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a> <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
-
- <div class="bottombar" aria-label="Quick links">
- <div class="wrap bottombar__inner">
- <div class="bottombar__left">
- <span class="bottombar__label">Sectors</span>
- <a href="../public-sector/">Public Sector</a>
- <a href="../enterprise/">Enterprise</a>
- <a href="../research/">Research</a>
- <a href="../professional-services/">Professional</a>
- <span class="bottombar__sep">·</span>
- <span class="bottombar__label">Industries</span>
- <a href="../healthcare/">Healthcare</a>
- <a href="../finance/">Financial</a>
- <a href="../legal/">Legal</a>
- </div>
- <div class="bottombar__right">
- <a href="../../api/">Developers</a>
- <span class="bottombar__sep">|</span>
- <a href="../../api/">API</a>
- </div>
- </div>
- </div>
- </body>
-</html>
-```
-
-</details>
-
-## /whitepaper/
-- URL: https://infrafabric.io/whitepaper/
-- Static: https://infrafabric.io/static/hosted/ifttt/whitepaper/
-- Source: `ifttt/whitepaper/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Whitepaper</title>
- <meta
- name="description"
- content="Download the IF.TTT whitepaper and proof bundle. IF.TTT is a receipt-first governance layer: trace pages, stable no-login links, and optional offline bundles."
- />
- <link rel="stylesheet" href="../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Whitepaper</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../#how">How</a>
- <a href="../#trust">Trust</a>
- <a href="../#verify">Verify</a>
- <a href="../verticals/">Verticals</a>
- <a href="../governance/">Governance</a>
- <a href="../api/">Developers</a>
- <a href="../about/">About</a>
- <a class="lang" href="../fr/" aria-label="French">FR</a>
- </nav>
- </div>
- </header>
-
- <main id="top">
- <section class="hero">
- <div class="wrap hero__grid">
- <div class="hero__copy">
- <p class="kicker">Long-form spec + receipts</p>
- <h1>The IF.TTT whitepaper.</h1>
- <p class="lede">
- “Trustworthy” can’t be a vibe. This paper documents the receipt‑first sequence: <strong>hash the source</strong> → <strong>hash the output</strong> →
- <strong>publish a trace</strong> → <strong>share no‑login receipts</strong> → <strong>optional offline bundles</strong>.
- </p>
-
- <div class="pillrow" role="list" aria-label="Included artifacts">
- <div class="pill" role="listitem">
- <span class="pill__k">Paper</span>
- <span class="pill__v">HTML + Markdown</span>
- </div>
- <div class="pill" role="listitem">
- <span class="pill__k">Receipts</span>
- <span class="pill__v">Trace + hashes</span>
- </div>
- <div class="pill" role="listitem">
- <span class="pill__k">Offline</span>
- <span class="pill__v">Proof bundle + verifier</span>
- </div>
- </div>
-
- <div class="cta">
- <a
- class="btn btn--primary"
- href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- target="_blank"
- rel="noreferrer"
- >Read the paper now</a
- >
- <a class="btn" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/" target="_blank" rel="noreferrer"
- >Get the full pack</a
- >
- </div>
-
- <p class="note">
- If your environment blocks downloads (common for some web fetchers), use the HTML version. The receipts are still verifiable.
- </p>
- </div>
-
- <aside class="hero__card" aria-label="Request the pack by email">
- <div class="card">
- <div class="card__media">
- <img src="../assets/eyes-only-dave.png" alt="EYES ONLY // DAVE stamp" loading="lazy" />
- </div>
- <div class="card__hdr">
- <div class="badge badge--ok">NO LOGIN</div>
- <div class="badge">EMAIL (OPTIONAL)</div>
- </div>
- <div class="card__body">
- <div class="mini">
- <div class="mini__k">Want the pack in your inbox?</div>
- <div class="mini__v">Drop an email. We’ll reply with the stable links (no “demo call” bait).</div>
- </div>
-
- <form class="form" method="POST" action="https://formsubmit.co/ds@infrafabric.io">
- <input type="hidden" name="_subject" value="IF.TTT whitepaper request" />
- <input type="hidden" name="_template" value="table" />
- <input type="hidden" name="_next" value="https://infrafabric.io/whitepaper/thanks/" />
- <input type="text" name="_honey" class="honeypot" tabindex="-1" autocomplete="off" />
-
- <div class="field">
- <label for="email">Email</label>
- <input id="email" name="email" type="email" required placeholder="you@company.com" autocomplete="email" />
- </div>
-
- <div class="field-row">
- <div class="field">
- <label for="company">Company (optional)</label>
- <input id="company" name="company" type="text" placeholder="Company" autocomplete="organization" />
- </div>
- <div class="field">
- <label for="role">Role (optional)</label>
- <input id="role" name="role" type="text" placeholder="GRC / SecOps / Legal / Product" />
- </div>
- </div>
-
- <div class="field">
- <label for="vertical">Vertical (optional)</label>
- <select id="vertical" name="vertical">
- <option value="">Select…</option>
- <option>Finance</option>
- <option>Healthcare</option>
- <option>Government</option>
- <option>SaaS</option>
- <option>Legal</option>
- <option>Sciences</option>
- <option>Other</option>
- </select>
- </div>
-
- <div class="field">
- <label for="note">What are you trying to prove? (optional)</label>
- <textarea id="note" name="note" rows="3" placeholder="e.g., we need third-party verifiable audit artifacts…"></textarea>
- </div>
-
- <button class="btn btn--primary" type="submit">Send links</button>
- <p class="fine">We only use this to reply with the paper/receipts. No spam, no list rental.</p>
- </form>
- </div>
- </div>
- </aside>
- </div>
- </section>
-
- <section class="section section--alt">
- <div class="wrap">
- <h2>Stable links (copy/paste)</h2>
- <p class="sub">These are the boring, audit-safe entry points.</p>
- <div class="links">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Whitepaper (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.md" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Whitepaper + review pack (Markdown)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.md</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.tar.gz" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Proof bundle (tar.gz)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.tar.gz</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/iftrace.py" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Offline verifier (iftrace.py)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/iftrace.py</span>
- </a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • IF.TTT is “proof without login”.</div>
- <div class="muted">
- <a href="../">IF.TTT</a> · <a href="../governance/">Governance</a> · <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
- </body>
-</html>
-```
-
-</details>
-
-## /whitepaper/thanks/
-- URL: https://infrafabric.io/whitepaper/thanks/
-- Static: https://infrafabric.io/static/hosted/ifttt/whitepaper/thanks/
-- Source: `ifttt/whitepaper/thanks/index.html`
-
-<details>
-<summary>HTML</summary>
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>IF.TTT — Whitepaper request</title>
- <meta name="description" content="Thanks — here are the stable IF.TTT whitepaper links." />
- <link rel="stylesheet" href="../../style.css" />
- </head>
-
- <body>
- <header class="top">
- <div class="wrap top__inner">
- <a class="brand" href="../../" aria-label="IF.TTT home">
- <img class="brand__logo" src="../../assets/if-logo-simple.svg" alt="" aria-hidden="true" />
- <span class="brand__text">
- <span class="brand__title">IF.TTT</span>
- <span class="brand__sub">Whitepaper</span>
- </span>
- </a>
-
- <nav class="nav" aria-label="Primary">
- <a href="../../#verify">Verify</a>
- <a href="../../governance/">Governance</a>
- <a href="../../api/">Developers</a>
- <a href="../../about/">About</a>
- </nav>
- </div>
- </header>
-
- <main>
- <section class="section">
- <div class="wrap">
- <h1 style="margin-top: 0">Received.</h1>
- <p class="sub">If you submitted the form, we’ll reply with the stable links. No pitch deck required.</p>
-
- <div class="panel">
- <h3>Immediate access (no email required)</h3>
- <div class="links" style="margin-top: 10px">
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Read the paper (HTML)</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html</span>
- </a>
- <a class="linkrow" href="https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/" target="_blank" rel="noreferrer">
- <span class="linkrow__t">Full review pack index</span>
- <span class="linkrow__u">https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/</span>
- </a>
- </div>
- <p class="fine">
- Tip: Some sandboxes load <code>text/html</code> but reject downloads. Use the HTML links in that case.
- </p>
- </div>
-
- <div class="cta" style="margin-top: 14px">
- <a class="btn btn--primary" href="../../">Back to IF.TTT</a>
- <a class="btn" href="../">Whitepaper page</a>
- </div>
- </div>
- </section>
- </main>
-
- <footer class="footer">
- <div class="wrap footer__inner">
- <div class="muted">InfraFabric • IF.TTT is “proof without login”.</div>
- <div class="muted">
- <a href="../../">IF.TTT</a> · <a href="../../governance/">Governance</a> · <a href="mailto:ds@infrafabric.io">ds@infrafabric.io</a>
- <span class="bottombar__sep">·</span> Danny Stocker
- </div>
- </div>
- </footer>
- </body>
-</html>
-```
-
-</details>
-
----
-
-# Text Assets (Full)
-
-## `app.js`
-- Source: `ifttt/app.js`
-
-```js
-(() => {
- const typewordEl = document.getElementById("typeword");
- const stepperEl = document.getElementById("stepper");
- const revealStepper = createStepperRevealer(stepperEl);
- if (stepperEl) window.setTimeout(revealStepper, 5200);
-
- if (typewordEl) startTypewriter(typewordEl, { onFirstCycleDone: revealStepper });
-
- const quoteTextEl = document.getElementById("quoteText");
- const quoteMetaEl = document.getElementById("quoteMeta");
- const quoteWrapEl = quoteTextEl?.closest?.(".quote");
- if (quoteTextEl && quoteMetaEl && quoteWrapEl) startQuoteTicker({ quoteWrapEl, quoteTextEl, quoteMetaEl });
-})();
-
-function createStepperRevealer(stepperEl) {
- let shown = false;
- return () => {
- if (shown || !stepperEl) return;
- shown = true;
- stepperEl.hidden = false;
- window.requestAnimationFrame(() => stepperEl.classList.add("homeStepper--show"));
- };
-}
-
-function startTypewriter(typewordEl, opts = {}) {
- const words = ["Transparent", "Traceable", "Trust", "TTT"];
- const typeMs = 42;
- const deleteMs = 26;
- const holdMs = 780;
- const finalHoldMs = 1100;
- const betweenMs = 180;
- const onFirstCycleDone = typeof opts.onFirstCycleDone === "function" ? opts.onFirstCycleDone : null;
-
- let wordIndex = 0;
- let charIndex = 0;
- let isDeleting = false;
- let cycleCount = 0;
-
- const tick = () => {
- const word = words[wordIndex] || "";
- if (!isDeleting) {
- charIndex = Math.min(word.length, charIndex + 1);
- } else {
- charIndex = Math.max(0, charIndex - 1);
- }
-
- typewordEl.textContent = word.slice(0, charIndex);
-
- const atEnd = !isDeleting && charIndex === word.length;
- const atStart = isDeleting && charIndex === 0;
-
- if (atEnd) {
- isDeleting = true;
- const wait = wordIndex === words.length - 1 ? finalHoldMs : holdMs;
- window.setTimeout(tick, wait);
- return;
- }
-
- if (atStart) {
- isDeleting = false;
- wordIndex = (wordIndex + 1) % words.length;
- if (wordIndex === 0) {
- cycleCount += 1;
- if (cycleCount === 1 && onFirstCycleDone) onFirstCycleDone();
- }
- window.setTimeout(tick, betweenMs);
- return;
- }
-
- window.setTimeout(tick, isDeleting ? deleteMs : typeMs);
- };
-
- tick();
-}
-
-async function startQuoteTicker({ quoteWrapEl, quoteTextEl, quoteMetaEl }) {
- const quotes = await loadQuotes();
- if (!Array.isArray(quotes) || quotes.length === 0) return;
-
- quoteWrapEl.classList.add("quote--show");
-
- let idx = Math.floor(Math.random() * quotes.length);
-
- const show = (q) => {
- quoteWrapEl.classList.remove("quote--show");
- quoteWrapEl.classList.add("quote--fade");
-
- window.setTimeout(() => {
- quoteTextEl.textContent = q.text || "";
- renderQuoteMeta({ quoteMetaEl, q });
-
- quoteWrapEl.classList.remove("quote--fade");
- quoteWrapEl.classList.add("quote--show");
- }, 220);
- };
-
- const loop = () => {
- const q = quotes[idx] || {};
- show(q);
- idx = (idx + 1) % quotes.length;
-
- const duration = estimateReadMs(q.text || "");
- window.setTimeout(loop, duration);
- };
-
- loop();
-}
-
-async function loadQuotes() {
- try {
- const resp = await fetch(resolveIfTttUrl("assets/ifttt-quotes.json"), { cache: "no-store" });
- if (resp.ok) {
- const data = await resp.json();
- if (Array.isArray(data)) return data;
- }
- } catch (e) {}
-
- return [
- {
- text: "Footnotes aren't decorations. They're load-bearing walls.",
- source: "IF.TTT paper",
- href: "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html",
- },
- {
- text: "If there's no IF.TTT trace, it didn't happen—or shouldn't be trusted.",
- source: "IF.TTT doctrine",
- href: "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html",
- },
- {
- text: "Trust isn't claimed. It's proven.",
- source: "IF.TTT paper",
- href: "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html",
- },
- ];
-}
-
-function resolveIfTttUrl(path) {
- try {
- const scriptEl = document.querySelector('script[src$="app.js"]');
- const scriptUrl = scriptEl ? new URL(scriptEl.getAttribute("src"), window.location.href) : new URL(window.location.href);
- return new URL(path, scriptUrl).toString();
- } catch (e) {
- return path;
- }
-}
-
-function renderQuoteMeta({ quoteMetaEl, q }) {
- while (quoteMetaEl.firstChild) quoteMetaEl.removeChild(quoteMetaEl.firstChild);
-
- const source = String(q.source || "").trim();
- const href = String(q.href || "").trim();
- if (!source) return;
-
- if (href) {
- const a = document.createElement("a");
- a.href = href;
- a.target = "_blank";
- a.rel = "noreferrer";
- a.textContent = source;
- quoteMetaEl.appendChild(a);
- return;
- }
-
- quoteMetaEl.textContent = source;
-}
-
-function estimateReadMs(text) {
- const cleaned = String(text || "").trim();
- if (!cleaned) return 4000;
-
- const words = cleaned.split(/\s+/).filter(Boolean).length;
- const wpm = 220;
- const ms = (words / wpm) * 60000 + 1200;
- return clamp(ms, 3200, 11000);
-}
-
-function clamp(v, min, max) {
- return Math.max(min, Math.min(max, v));
-}
-```
-
-## `style.css`
-- Source: `ifttt/style.css`
-
-```css
-:root {
- --bg: #fffdf7;
- --bg-alt: #fff9e6;
- --panel: #ffffff;
- --text: #111827;
- --muted: #6b7280;
- --border: #e5e7eb;
- --link: #1d4ed8;
- --accent: #8b0000;
- --ok: #0f5132;
- --ok-bg: #e7f6ee;
- --shadow: 0 1px 0 rgba(0, 0, 0, 0.03);
- --radius: 14px;
-}
-
-* {
- box-sizing: border-box;
-}
-
-html {
- scroll-behavior: smooth;
-}
-
-body {
- margin: 0;
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
- background: var(--bg);
- color: var(--text);
- line-height: 1.5;
- padding-bottom: 62px;
-}
-
-a {
- color: var(--link);
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-code {
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 0.92em;
- background: #f3f4f6;
- padding: 2px 6px;
- border-radius: 8px;
-}
-
-pre.code {
- background: #0b1020;
- color: #e5e7eb;
- border-radius: 12px;
- padding: 12px;
- overflow: auto;
- box-shadow: var(--shadow);
- border: 1px solid rgba(255, 255, 255, 0.06);
-}
-
-pre.code code {
- background: transparent;
- padding: 0;
- border-radius: 0;
- font-size: 12px;
- line-height: 1.45;
-}
-
-.form {
- display: grid;
- gap: 12px;
- margin-top: 12px;
-}
-
-.field label {
- display: block;
- font-size: 12px;
- font-weight: 700;
- color: var(--muted);
- margin: 0 0 6px;
-}
-
-.field input,
-.field select,
-.field textarea {
- width: 100%;
- padding: 10px 12px;
- border-radius: 12px;
- border: 1px solid var(--border);
- background: #ffffff;
- font-size: 14px;
- line-height: 1.2;
-}
-
-.field textarea {
- resize: vertical;
-}
-
-.field input:focus,
-.field select:focus,
-.field textarea:focus {
- outline: none;
- border-color: rgba(29, 78, 216, 0.45);
- box-shadow: 0 0 0 4px rgba(29, 78, 216, 0.12);
-}
-
-.field-row {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 12px;
-}
-
-.honeypot {
- display: none !important;
-}
-
-@media (max-width: 860px) {
- .field-row {
- grid-template-columns: 1fr;
- }
-}
-
-
-.wrap {
- max-width: 1120px;
- margin: 0 auto;
- padding: 0 18px;
-}
-
-.top {
- position: sticky;
- top: 0;
- z-index: 20;
- background: rgba(255, 253, 247, 0.92);
- backdrop-filter: blur(10px);
- border-bottom: 1px solid var(--border);
-}
-
-.top__inner {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 14px 0;
- gap: 14px;
-}
-
-.brand {
- display: inline-flex;
- align-items: center;
- gap: 12px;
- min-width: 220px;
-}
-
-.brand__mark {
- width: 38px;
- height: 38px;
- border-radius: 12px;
- border: 1px solid rgba(139, 0, 0, 0.25);
- background:
- radial-gradient(18px 18px at 30% 30%, rgba(139, 0, 0, 0.18), transparent 60%),
- radial-gradient(18px 18px at 70% 70%, rgba(29, 78, 216, 0.10), transparent 60%),
- #fff;
- box-shadow: var(--shadow);
-}
-
-.brand__logo {
- width: 38px;
- height: 38px;
- display: block;
- border-radius: 12px;
- box-shadow: var(--shadow);
-}
-
-.brand__text {
- display: flex;
- flex-direction: column;
- gap: 2px;
-}
-
-.brand__title {
- font-weight: 800;
- letter-spacing: 0.2px;
-}
-
-.brand__sub {
- font-size: 12px;
- color: var(--muted);
-}
-
-.nav {
- display: flex;
- gap: 14px;
- flex-wrap: wrap;
- justify-content: flex-end;
- font-size: 13px;
-}
-
-.nav a {
- color: var(--muted);
- padding: 6px 8px;
- border-radius: 10px;
-}
-
-.nav a:hover {
- color: var(--text);
- background: #ffffff;
- border: 1px solid var(--border);
- text-decoration: none;
-}
-
-.hero {
- padding: 34px 0 22px;
- background:
- radial-gradient(650px 260px at 20% 0%, rgba(139, 0, 0, 0.08), transparent 60%),
- radial-gradient(700px 300px at 100% 40%, rgba(29, 78, 216, 0.06), transparent 60%),
- linear-gradient(#fffdf7, #fff);
-}
-
-.hero__grid {
- display: grid;
- grid-template-columns: 1.2fr 0.8fr;
- gap: 22px;
- align-items: start;
-}
-
-.kicker {
- font-size: 13px;
- color: var(--muted);
- margin: 0 0 10px;
-}
-
-h1 {
- font-size: 40px;
- line-height: 1.1;
- margin: 0 0 10px;
- letter-spacing: -0.4px;
-}
-
-.type {
- display: inline-flex;
- align-items: center;
- gap: 0;
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 14px;
- color: #374151;
- margin: 0 0 10px;
- user-select: none;
-}
-
-.type__prefix,
-.type__suffix {
- color: #111827;
- font-weight: 700;
-}
-
-.type__caret {
- width: 8px;
- height: 16px;
- margin-left: 6px;
- border-radius: 2px;
- background: rgba(17, 24, 39, 0.65);
- animation: caretblink 1s steps(1, end) infinite;
-}
-
-@keyframes caretblink {
- 50% {
- opacity: 0;
- }
-}
-
-.quote {
- margin: 0 0 12px;
- padding: 10px 12px;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- background: #ffffff;
- box-shadow: var(--shadow);
- max-width: 72ch;
-}
-
-.quote__text {
- font-size: 13px;
- color: #111827;
- font-weight: 650;
-}
-
-.quote__meta {
- margin-top: 6px;
- font-size: 12px;
- color: var(--muted);
-}
-
-.quote__meta a {
- color: var(--muted);
- text-decoration: underline;
- text-underline-offset: 2px;
-}
-
-.quote--fade {
- opacity: 0;
- transition: opacity 250ms ease;
-}
-
-.quote--show {
- opacity: 1;
-}
-
-.lede {
- margin: 0 0 14px;
- color: #374151;
- max-width: 62ch;
-}
-
-.pillrow {
- display: grid;
- grid-template-columns: repeat(3, minmax(0, 1fr));
- gap: 10px;
- margin: 18px 0 16px;
-}
-
-.pill {
- border: 1px solid var(--border);
- background: #ffffff;
- border-radius: var(--radius);
- padding: 10px 10px;
- box-shadow: var(--shadow);
-}
-
-.pill__k {
- font-size: 12px;
- color: var(--muted);
- display: block;
-}
-
-.pill__v {
- font-size: 13px;
- font-weight: 600;
- margin-top: 2px;
- display: block;
-}
-
-.cta {
- display: flex;
- gap: 10px;
- flex-wrap: wrap;
- margin: 14px 0 10px;
-}
-
-.btn {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- padding: 10px 12px;
- border-radius: 12px;
- border: 1px solid var(--border);
- background: #ffffff;
- color: var(--text);
- font-weight: 650;
- font-size: 13px;
- box-shadow: var(--shadow);
- text-decoration: none;
-}
-
-.btn:hover {
- text-decoration: none;
- border-color: rgba(17, 24, 39, 0.22);
-}
-
-.btn--primary {
- background: #111827;
- color: #ffffff;
- border-color: rgba(0, 0, 0, 0.25);
-}
-
-.btn--primary:hover {
- border-color: rgba(0, 0, 0, 0.45);
-}
-
-.note {
- font-size: 12px;
- color: var(--muted);
- margin: 10px 0 0;
-}
-
-.card {
- border: 1px solid var(--border);
- background: #ffffff;
- border-radius: 18px;
- box-shadow: var(--shadow);
- overflow: hidden;
-}
-
-.card__media {
- border-bottom: 1px solid var(--border);
- background: #111827;
-}
-
-.card__media img {
- display: block;
- width: 100%;
- height: 162px;
- object-fit: cover;
- opacity: 0.95;
-}
-
-.card__hdr {
- padding: 12px 12px;
- border-bottom: 1px solid var(--border);
- display: flex;
- gap: 8px;
- flex-wrap: wrap;
- background: #f8fafc;
-}
-
-.badge {
- display: inline-flex;
- align-items: center;
- padding: 4px 10px;
- border-radius: 999px;
- border: 1px solid var(--border);
- font-size: 12px;
- color: var(--muted);
- background: #ffffff;
- white-space: nowrap;
-}
-
-.badge--ok {
- border-color: rgba(15, 81, 50, 0.25);
- background: var(--ok-bg);
- color: var(--ok);
- font-weight: 700;
-}
-
-.card__body {
- padding: 14px 12px 12px;
-}
-
-.kv {
- display: grid;
- grid-template-columns: 90px 1fr;
- gap: 6px 10px;
- font-size: 13px;
-}
-
-.kv__k {
- color: var(--muted);
-}
-
-.kv__v code {
- background: #f3f4f6;
-}
-
-.mini {
- margin-top: 12px;
- border-top: 1px dashed var(--border);
- padding-top: 10px;
- font-size: 13px;
-}
-
-.mini__k {
- color: var(--muted);
- font-weight: 600;
- font-size: 12px;
-}
-
-.mini__v {
- margin-top: 4px;
- color: #374151;
-}
-
-.section {
- padding: 34px 0;
-}
-
-.section--alt {
- background: var(--bg-alt);
- border-top: 1px solid rgba(0, 0, 0, 0.03);
- border-bottom: 1px solid rgba(0, 0, 0, 0.03);
-}
-
-h2 {
- margin: 0 0 8px;
- font-size: 22px;
- letter-spacing: -0.2px;
-}
-
-.sub {
- margin: 0 0 18px;
- color: var(--muted);
- font-size: 14px;
- max-width: 80ch;
-}
-
-.sub2 {
- margin: 0 0 10px;
- color: var(--muted);
- font-size: 13px;
-}
-
-.steps {
- display: grid;
- gap: 10px;
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-.step {
- position: relative;
- display: grid;
- grid-template-columns: 44px 1fr;
- gap: 12px;
- padding: 14px 12px;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- background: #ffffff;
- box-shadow: var(--shadow);
-}
-
-.step::after {
- content: "";
- position: absolute;
- left: 30px;
- top: 54px;
- bottom: -10px;
- width: 2px;
- background: linear-gradient(to bottom, rgba(229, 231, 235, 0.95), rgba(229, 231, 235, 0));
-}
-
-.step:last-child::after {
- display: none;
-}
-
-.step__n {
- width: 36px;
- height: 36px;
- border-radius: 12px;
- background: rgba(139, 0, 0, 0.06);
- border: 1px solid rgba(139, 0, 0, 0.18);
- display: grid;
- place-items: center;
- font-weight: 800;
- color: var(--accent);
-}
-
-.step__t {
- font-weight: 750;
-}
-
-.step__d {
- color: #374151;
- margin-top: 3px;
- font-size: 13px;
-}
-
-.grid2 {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 14px;
-}
-
-.panel {
- background: #ffffff;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- padding: 14px 14px;
- box-shadow: var(--shadow);
-}
-
-.panel h3 {
- margin: 0 0 8px;
- font-size: 15px;
-}
-
-.list {
- margin: 10px 0 0;
- padding-left: 18px;
- color: #374151;
- font-size: 13px;
-}
-
-.bw {
- display: grid;
- gap: 8px;
- font-size: 13px;
-}
-
-.bw__row {
- display: grid;
- grid-template-columns: 130px 1fr;
- gap: 10px;
- padding: 10px 10px;
- border: 1px solid var(--border);
- border-radius: 12px;
- background: #ffffff;
-}
-
-.bw__k {
- color: var(--muted);
- font-weight: 700;
-}
-
-.bw__v {
- color: #374151;
-}
-
-.verify {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 14px;
- align-items: start;
-}
-
-.links {
- display: grid;
- gap: 8px;
- margin-top: 10px;
-}
-
-.linkrow {
- display: grid;
- gap: 4px;
- border: 1px solid var(--border);
- border-radius: 12px;
- padding: 10px 10px;
- background: #ffffff;
- box-shadow: var(--shadow);
-}
-
-.linkrow:hover {
- border-color: rgba(29, 78, 216, 0.35);
- text-decoration: none;
-}
-
-.linkrow__t {
- font-weight: 700;
- font-size: 13px;
- color: var(--text);
-}
-
-.linkrow__u {
- font-size: 12px;
- color: var(--muted);
- overflow-wrap: anywhere;
-}
-
-.fine {
- margin: 12px 0 0;
- color: var(--muted);
- font-size: 12px;
-}
-
-.cards {
- display: grid;
- grid-template-columns: repeat(3, minmax(0, 1fr));
- gap: 12px;
-}
-
-.vcard {
- background: #ffffff;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- padding: 14px 14px;
- box-shadow: var(--shadow);
-}
-
-.vcard__icon {
- width: 44px;
- height: 44px;
- border: 1px solid var(--border);
- border-radius: 14px;
- background: #f8fafc;
- display: grid;
- place-items: center;
- margin-bottom: 10px;
- color: var(--accent);
-}
-
-.vcard__icon svg {
- width: 22px;
- height: 22px;
-}
-
-.vcard h3 {
- margin: 0 0 10px;
- font-size: 15px;
-}
-
-.vcard__k {
- margin: 0;
- font-size: 12px;
- color: var(--muted);
- font-weight: 700;
-}
-
-.vcard__v {
- margin: 4px 0 10px;
- font-size: 13px;
- color: #374151;
-}
-
-.vcard__more {
- display: inline-flex;
- align-items: center;
- gap: 6px;
- font-size: 12px;
- color: var(--muted);
- padding: 6px 10px;
- border: 1px solid var(--border);
- border-radius: 999px;
- background: #ffffff;
-}
-
-.vcard__more:hover {
- color: var(--text);
- border-color: rgba(17, 24, 39, 0.22);
- text-decoration: none;
-}
-
-.faq {
- display: grid;
- gap: 10px;
-}
-
-details {
- background: #ffffff;
- border: 1px solid var(--border);
- border-radius: var(--radius);
- padding: 12px 12px;
- box-shadow: var(--shadow);
-}
-
-summary {
- cursor: pointer;
- font-weight: 750;
- list-style: none;
-}
-
-summary::-webkit-details-marker {
- display: none;
-}
-
-details p {
- margin: 10px 0 0;
- color: #374151;
- font-size: 13px;
-}
-
-.foot {
- margin-top: 18px;
- border-top: 1px solid var(--border);
- padding-top: 14px;
- display: grid;
- gap: 8px;
-}
-
-.foot__row {
- display: grid;
- grid-template-columns: 90px 1fr;
- gap: 12px;
- font-size: 13px;
-}
-
-.foot__k {
- color: var(--muted);
- font-weight: 700;
-}
-
-.footer {
- border-top: 1px solid var(--border);
- padding: 18px 0;
- background: #ffffff;
-}
-
-.footer__inner {
- display: flex;
- justify-content: space-between;
- gap: 12px;
- flex-wrap: wrap;
-}
-
-.muted {
- color: var(--muted);
- font-size: 12px;
-}
-
-.bottombar {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 25;
- background: rgba(255, 253, 247, 0.92);
- backdrop-filter: blur(10px);
- border-top: 1px solid var(--border);
-}
-
-.bottombar__inner {
- display: flex;
- justify-content: space-between;
- gap: 12px;
- align-items: center;
- padding: 10px 0;
- font-size: 12px;
-}
-
-.bottombar__left,
-.bottombar__right {
- display: flex;
- gap: 6px;
- align-items: center;
- flex-wrap: wrap;
-}
-
-.bottombar__label {
- font-size: 11px;
- font-weight: 750;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- color: rgba(107, 114, 128, 0.85);
- padding: 6px 6px;
-}
-
-.bottombar a {
- color: var(--muted);
- padding: 6px 8px;
- border-radius: 10px;
-}
-
-.bottombar a:hover {
- color: var(--text);
- background: #ffffff;
- border: 1px solid var(--border);
- text-decoration: none;
-}
-
-.bottombar__sep {
- color: rgba(107, 114, 128, 0.7);
- margin: 0 2px;
-}
-
-@media (max-width: 980px) {
- .hero__grid {
- grid-template-columns: 1fr;
- }
- .pillrow {
- grid-template-columns: 1fr;
- }
- .grid2 {
- grid-template-columns: 1fr;
- }
- .verify {
- grid-template-columns: 1fr;
- }
- .cards {
- grid-template-columns: 1fr;
- }
- h1 {
- font-size: 34px;
- }
-
- body {
- padding-bottom: 74px;
- }
-}
-
-/* Home (minimal landing; “OK Computer” empty-space bias) */
-body.home {
- background:
- radial-gradient(900px 420px at 15% 0%, rgba(29, 78, 216, 0.06), transparent 60%),
- radial-gradient(900px 420px at 85% 15%, rgba(139, 0, 0, 0.06), transparent 60%),
- linear-gradient(#fffdf7, #ffffff);
-}
-
-body.home .top {
- position: fixed;
- left: 0;
- right: 0;
- background: transparent;
- border-bottom: none;
- backdrop-filter: none;
-}
-
-body.home .top__inner {
- padding: 18px 0;
-}
-
-.homeNav {
- display: flex;
- align-items: center;
- gap: 12px;
- flex-wrap: wrap;
- justify-content: flex-end;
- font-size: 12px;
-}
-
-.homeNav a {
- color: var(--muted);
- padding: 6px 8px;
- border-radius: 10px;
-}
-
-.homeNav a:hover {
- color: var(--text);
- background: #ffffff;
- border: 1px solid var(--border);
- text-decoration: none;
-}
-
-.homeNav__sep {
- color: rgba(107, 114, 128, 0.7);
-}
-
-.homeMain {
- min-height: 100vh;
- display: flex;
- align-items: center;
- padding: 120px 0 90px;
-}
-
-.homeMain__inner {
- width: 100%;
-}
-
-.homeCenter {
- text-align: center;
- max-width: 920px;
- margin: 0 auto;
-}
-
-.homeBadges {
- display: flex;
- justify-content: center;
- align-items: center;
- gap: 10px;
- flex-wrap: wrap;
- margin: 0 0 14px;
-}
-
-.badge--big {
- font-size: 12px;
- padding: 7px 12px;
- border-radius: 999px;
- letter-spacing: 0.08em;
-}
-
-.type--home {
- font-size: clamp(44px, 7vw, 74px);
- line-height: 1.05;
- margin: 0 0 14px;
- color: #111827;
-}
-
-.type--home .type__prefix,
-.type--home .type__suffix {
- font-weight: 800;
-}
-
-.type--home .type__caret {
- width: 0.18em;
- height: 1.05em;
- margin-left: 0.12em;
- border-radius: 0.14em;
- background: rgba(17, 24, 39, 0.65);
-}
-
-.quote--home {
- margin: 0 auto 14px;
-}
-
-.quote--home .quote__text {
- font-size: 14px;
-}
-
-.homeLede {
- margin: 0 auto 0;
- max-width: 78ch;
- color: #374151;
- font-size: 13px;
-}
-
-.homeStepper {
- margin: 18px auto 0;
- max-width: 920px;
- text-align: left;
- opacity: 0;
- transform: translateY(6px);
- transition:
- opacity 420ms ease,
- transform 420ms ease;
-}
-
-.homeStepper.homeStepper--show {
- opacity: 1;
- transform: translateY(0);
-}
-
-.homeLinks {
- display: flex;
- flex-wrap: wrap;
- gap: 10px;
- margin: 14px 0 0;
-}
-
-.homeLink {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- padding: 9px 10px;
- border-radius: 12px;
- border: 1px solid var(--border);
- background: #ffffff;
- color: var(--text);
- font-weight: 650;
- font-size: 12px;
- box-shadow: var(--shadow);
- text-decoration: none;
-}
-
-.homeLink:hover {
- text-decoration: none;
- border-color: rgba(29, 78, 216, 0.35);
- box-shadow:
- var(--shadow),
- 0 0 0 4px rgba(29, 78, 216, 0.10);
-}
-
-.homeMeta {
- margin-top: 14px;
- font-size: 12px;
- color: var(--muted);
-}
-
-@media (max-width: 980px) {
- body.home .top {
- position: sticky;
- background: rgba(255, 253, 247, 0.92);
- border-bottom: 1px solid var(--border);
- backdrop-filter: blur(10px);
- }
-
- .homeMain {
- padding-top: 86px;
- }
-
- .type--home {
- font-size: clamp(38px, 10vw, 54px);
- }
-}
-```
-
-## `assets/if-logo-simple.svg`
-- Source: `ifttt/assets/if-logo-simple.svg`
-
-```svg
-<?xml version="1.0" encoding="UTF-8"?>
-<svg
- xmlns="http://www.w3.org/2000/svg"
- width="1024"
- height="1024"
- viewBox="0 0 512 512"
- role="img"
- aria-labelledby="title desc"
->
- <title id="title">if. mark</title>
- <desc id="desc">Stylized “if.” mark with subtle gradient and shadow.</desc>
-
- <defs>
- <linearGradient id="ifBlue" x1="70" y1="0" x2="440" y2="0" gradientUnits="userSpaceOnUse">
- <stop offset="0" stop-color="#0b253b" />
- <stop offset="0.44" stop-color="#164d7a" />
- <stop offset="0.56" stop-color="#1b5a8e" />
- <stop offset="1" stop-color="#0b253b" />
- </linearGradient>
-
- <filter id="ifShadow" x="-40%" y="-40%" width="180%" height="180%">
- <feOffset in="SourceAlpha" dx="0" dy="14" result="off" />
- <feGaussianBlur in="off" stdDeviation="12" result="blur" />
- <feColorMatrix
- in="blur"
- type="matrix"
- values="0 0 0 0 0
- 0 0 0 0 0
- 0 0 0 0 0
- 0 0 0 0.28 0"
- result="shadow"
- />
- <feMerge>
- <feMergeNode in="shadow" />
- <feMergeNode in="SourceGraphic" />
- </feMerge>
- </filter>
- </defs>
-
- <!--
- Mark group:
- - i (stem + dot)
- - f (stem + top bar + crossbar)
- - period dot
- -->
- <g filter="url(#ifShadow)" transform="translate(75 15)" fill="url(#ifBlue)">
- <!-- i -->
- <circle cx="35" cy="125" r="32" />
- <rect x="0" y="170" width="70" height="220" rx="8" />
-
- <!-- f -->
- <rect x="120" y="140" width="86" height="250" rx="10" />
- <rect x="120" y="110" width="150" height="90" rx="45" />
- <rect x="120" y="240" width="140" height="80" rx="28" />
-
- <!-- . -->
- <circle cx="330" cy="358" r="32" />
- </g>
-</svg>
-```
-
-## `assets/ifttt-quotes.json`
-- Source: `ifttt/assets/ifttt-quotes.json`
-
-```json
-[
- {
- "text": "Footnotes aren't decorations. They're load-bearing walls.",
- "source": "IF.TTT paper (v2.3)",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "If there's no IF.TTT trace, it didn't happen—or shouldn't be trusted.",
- "source": "IF.TTT doctrine",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "No trace, no trust. Simple as that.",
- "source": "IF.TTT doctrine",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "Trust isn't claimed. It's proven.",
- "source": "IF.TTT paper (v2.3)",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "We don’t claim trust. We publish receipts.",
- "source": "IF.TTT stance",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "Your auditor shouldn’t need your credentials.",
- "source": "IF.TTT public receipts",
- "href": "https://infrafabric.io/static/hosted/ifttt/"
- },
- {
- "text": "Third parties verify. We just publish the math.",
- "source": "IF.TTT posture",
- "href": "https://infrafabric.io/static/hosted/ifttt/"
- },
- {
- "text": "Receipts must be readable and verifiable without credentials.",
- "source": "IF.TTT public receipt surface",
- "href": "https://infrafabric.io/static/hosted/ifttt/"
- },
- {
- "text": "Design constraint: black/white clarity. No “maybe”.",
- "source": "IF.TTT ops (full stack)",
- "href": "https://infrafabric.io/static/hosted/ifttt/api/"
- },
- {
- "text": "We do not claim “quantum-secure”. We claim “quantum-ready”.",
- "source": "IF.TTT tech stack",
- "href": "https://infrafabric.io/static/hosted/ifttt/api/"
- },
- {
- "text": "The stenographer doesn't make the therapy cold. The stenographer makes it accountable.",
- "source": "IF.emotion on IF.TTT",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "That's the moat.",
- "source": "IF.TTT paper (v2.3)",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "The moat is not the AI. The moat is the proof.",
- "source": "IF.TTT paper (v2.3)",
- "href": "https://infrafabric.io/static/hosted/review/ifttt-paper-update/2025-12-28/review-pack.html"
- },
- {
- "text": "If it’s not verifiable, label it as a gap. Do not endorse it.",
- "source": "IF.TTT stance",
- "href": "https://infrafabric.io/static/hosted/ifttt/"
- }
-]
-```
-
-
-
-
-
+ Why this exists
-- Most systems produce answers and call that “governance”. IF.TTT starts earlier: it produces receipts that a third party can verify without - joining your internal world. -
- -source_sha256 ↔ output_sha256 under a trace receipt.Public receipt surface (no login)
-- IF.TTT is intentionally boring from a developer perspective: compute hashes, publish receipts, and keep the proof surface stable. The - system is designed for third parties who are not inside your network. -
-- Some external review environments can load HTML but reject downloadable binaries or raw markdown. For those, we publish HTML views alongside - the raw assets. -
-/static/pack/<shareId>.md
-/static/review/<shareId>.md
-/static/marketing/<shareId>.md
- /static/pack/<shareId>
-/static/review/<shareId>
-/static/marketing/<shareId>
- Download a bundle (lightweight/standard/full) and verify without relying on the live site.
-
- Note: some “web fetchers” reject .tar.gz with a client-side error even when browsers/curl succeed. Use the HTML views and
- download bundles locally.
-
curl -fsSL -o iftrace.py 'https://infrafabric.io/static/hosted/iftrace.py'
-python3 iftrace.py verify trace_bundle_<id>_standard.tar.gz --expected-sha256 <sha256>
- If hashes match, the receipt’s integrity claim is satisfied.
-Gouvernance ouverte
-- Une “gouvernance” qui ne se lit qu’en interne n’est pas une preuve. IF.TTT publie des reçus stables, accessibles sans login, pour que des - tiers puissent vérifier l’intégrité sans entrer dans votre réseau. -
- -Lisible pour des tiers : le but n’est pas le confort interne, mais la vérifiabilité externe.
- -Gouvernance ouverte, lisible par des tiers
-- IF.TTT est une couche de gouvernance “receipt‑first”. Elle relie un artefact source à un output via une - page de trace, des liens publics sans login, et des bundles hors‑ligne vérifiables. -
- -- Nous ne “vendons” pas la conformité. Nous aidons les audits en produisant des reçus vérifiables que des tiers peuvent contrôler - sans vos identifiants. -
-Open governance
-- “Governance” fails when it’s only legible inside your network. IF.TTT moves the proof outside: stable, no‑login receipts that third parties - can verify without joining your internal world. -
- -Receipts don’t replace governance. They remove ambiguity from it.
-A constitutional framing: the goal is legibility to outsiders, not internal comfort.
- -These are plain Markdown docs: readable, linkable, and easy to critique.
-A real trace receipt you can verify right now.
- -- “VERIFIED” means the published bytes hash to what the receipt says. “QUANTUM READY” means a post‑quantum signature receipt exists (additive; - integrity hashes still stand). -
-- Open verification for governance: third parties can verify receipts without your credentials. - Artifacts > adjectives. -
- -Black/white: what the receipt proves vs what it doesn’t.
- -shareId (trace, dossier, pack, source).- If it’s not verifiable, label it as a gap. Don’t endorse it. - This is how you keep governance legible to outsiders. -
-AI product reality
-- Enterprise buyers increasingly require provenance: what source material fed the output, what version produced it, and what can be - verified after the fact. IF.TTT turns that requirement into a repeatable receipt surface. -
- -Enterprise reality
-- Enterprise trust breaks when proof requires access: screenshots, ticket exports, and “trust me” Slack threads. IF.TTT replaces access - requirements with receipts—so verification is externalizable. -
- -source_sha256 ↔ output_sha256.For stakeholder alignment without overclaiming.
-- IF.TTT supports audits by producing externally verifiable receipts—so reviewers don’t need your internal credentials to verify integrity. -
-Finance reality
-- In regulated finance, the first question after an incident is not “what did the model mean?” It’s “show me the evidence chain: inputs, - outputs, timestamps, and who approved what.” -
- -source_sha256 ↔ output_sha256.This is the point: reviewers shouldn’t need your VPN.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (rendered): https://infrafabric.io/static/dossier/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Government reality
-- In restricted environments, the “can you verify it?” question must be answered without assuming network access, SaaS consoles, or vendor - portals. IF.TTT treats offline verification as a first‑class requirement. -
- -No accounts required. No internal consoles required.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
-Verifier: https://infrafabric.io/static/hosted/iftrace.py
- Healthcare reality
-- Healthcare environments punish ambiguity. IF.TTT makes “what we can prove” explicit, and forces everything else to be labeled as - interpretation or review-required. -
- -Same mechanism, different pressure
-- IF.TTT doesn’t “solve compliance.” It solves the universal problem underneath compliance: third parties demanding proof without joining your - internal world. The receipts stay the same; the incentives and failure modes change. -
- -Who the buyer is. The same receipts, different pressure.
- -Procurement cycles, oversight, offline verification.
- Public Sector → -Audits as throughput; evidence without credential sprawl.
- Enterprise → -Provenance, reproducibility, and external reviewers.
- Research → -Client handoffs, disputes, and custody that holds up later.
- Professional Services → -What domain the risk lives in: regulation, data, and dispute pressure.
- -Audit trails, privacy boundaries, dispute‑ready artifacts.
- Healthcare → -Model risk, non‑repudiation, evidence for regulators.
- Financial → -Chain‑of‑custody for drafts, evidence, and decisions.
- Legal → -Common governance failure modes that appear across sectors and industries.
- -Auditors, procurement, “prove it existed at the time.”
- B2B SaaS → -Bind summaries to evidence; keep custody intact.
- SecOps → -Provable provenance for outputs: “why did it say that?”
- AI products → -Traceability that survives vendor and contractor handoffs.
- Supply chain → -Legal reality
-- Legal and compliance teams live in the difference between “we believe this happened” and “we can prove this happened.” IF.TTT is built to - make that proof portable. -
- -You can hand these to an external reviewer without shipping your internal systems.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Review pack: https://infrafabric.io/static/review/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Services reality
-- In professional services, the artifact you hand over becomes evidence: audits, disputes, expert reports, procurement packs. IF.TTT makes - the handoff verifiable without making you a credential broker. -
- -Don’t turn verification into credential distribution.
-“Log in to our system and we’ll show you.”
-“Here is the artifact, here is the receipt, verify without us.”
-Public sector reality
-- Public accountability is a third‑party problem: reviewers need proof without getting access to your internal systems. IF.TTT turns “trust - us” into receipts that a stranger can verify. -
- -No accounts required. No internal consoles required.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Research reality
-- Research already understands receipts: methods, datasets, citations. IF.TTT applies the same discipline to AI outputs and operational - decisions: publish what can be verified, label what can’t, and keep the bytes stable. -
- -So reviewers can validate without trusting your infrastructure.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- SaaS reality
-- In B2B SaaS, the friction isn’t the control design. It’s proving the control existed at the right time, in the right scope, without - granting auditors full internal access. -
- -shareId.The purpose is to make evidence portable and boring.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
- Research reality
-- Scientific workflows already understand receipts: methods, datasets, and citations. IF.TTT is the same idea applied to AI outputs and - operational decisions: publish what can be verified, and mark what can’t. -
- -So reviewers can validate without trusting your infrastructure.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- SecOps reality
-- AI summaries can help, but only if they remain verifiable against raw telemetry. IF.TTT makes the custody chain explicit: source bytes, - output bytes, and a receipt that can be validated by third parties. -
- -source_sha256 ↔ output_sha256.Do not treat “AI summary” as evidence.
-“The AI said this was resolved.”
-“Here is the output, here is the evidence artifact, here is the receipt binding them.”
-Supply chain reality
-- Industrial systems accumulate contractors, vendors, and integrators. IF.TTT standardizes a receipt surface so chain‑of‑custody doesn’t - collapse the moment responsibility moves. -
- -shareId.Long-form spec + receipts
-- “Trustworthy” can’t be a vibe. This paper documents the receipt‑first sequence: hash the source → hash the output → - publish a trace → share no‑login receipts → optional offline bundles. -
- -- If your environment blocks downloads (common for some web fetchers), use the HTML version. The receipts are still verifiable. -
-These are the boring, audit-safe entry points.
-If you submitted the form, we’ll reply with the stable links. No pitch deck required.
- -
- Tip: Some sandboxes load text/html but reject downloads. Use the HTML links in that case.
-
AI product reality
-- Enterprise buyers increasingly require provenance: what source material fed the output, what version produced it, and what can be - verified after the fact. IF.Trace turns that requirement into a repeatable receipt surface. -
- -AI trust pressure
When an output is contested (“why did it say that?”), you need provenance. IF.Trace supports verifiable linkage from inputs to outputs.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
A stable proof surface for outputs.
Offline verification options.
Integrity verified; meaning debated separately.
Enterprise reality
-- Enterprise trust breaks when proof requires access: screenshots, ticket exports, and “trust me” Slack threads. IF.Trace replaces access - requirements with receipts—so verification is externalizable. -
- -source_sha256 ↔ output_sha256.For stakeholder alignment without overclaiming.
-- IF.Trace supports audits by producing externally verifiable receipts—so reviewers don’t need your internal credentials to verify integrity. -
-Enterprise pressure
In enterprise environments, audit friction becomes a tax on delivery. IF.Trace provides proof that third parties can verify without joining your internal world.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Receipts that verify without granting access.
Bind source → output so reviews stay grounded.
Works with existing workflows (PRs, tickets, approvals).
Finance reality
-- In regulated finance, the first question after an incident is not “what did the model mean?” It’s “show me the evidence chain: inputs, - outputs, timestamps, and who approved what.” -
- -source_sha256 ↔ output_sha256.This is the point: reviewers shouldn’t need your VPN.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (rendered): https://infrafabric.io/static/dossier/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Financial pressure
Regulated environments need evidence that survives scrutiny. IF.Trace supports verifiable artifacts without fragile internal access dependencies.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Downloadable bytes that match published hashes.
Predictable URLs for audit trails.
Bundles for constrained environments.
Government reality
-- In restricted environments, the “can you verify it?” question must be answered without assuming network access, SaaS consoles, or vendor - portals. IF.Trace treats offline verification as a first‑class requirement. -
- -No accounts required. No internal consoles required.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
-Verifier: https://infrafabric.io/static/hosted/iftrace.py
- Government review reality
When decisions are reviewed months later, the only thing that matters is what you can still prove. IF.Trace produces stable proof surfaces that survive staffing changes, vendors, and audits.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Stable links that can be cited in procurement and audit threads.
Downloadable bundles for offline verification.
Integrity verification without over-claiming correctness.
Healthcare reality
-- Healthcare environments punish ambiguity. IF.Trace makes “what we can prove” explicit, and forces everything else to be labeled as - interpretation or review-required. -
- -Healthcare constraints
Healthcare environments require strict boundaries: privacy, consent, and auditability. IF.Trace supports verification without broad data exposure.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Receipts instead of credentials.
Share proof of integrity, not patient data.
Explicitly scoped claims for reviewers.
Same mechanism, different pressure
-- IF.Trace doesn’t “solve compliance.” It solves the universal problem underneath compliance: third parties demanding proof without joining your - internal world. The receipts stay the same; the incentives and failure modes change. -
- -Who the buyer is. The same receipts, different pressure.
- -Procurement cycles, oversight, offline verification.
- Public Sector → -Audits as throughput; evidence without credential sprawl.
- Enterprise → -Provenance, reproducibility, and external reviewers.
- Research → -Client handoffs, disputes, and custody that holds up later.
- Professional Services → -What domain the risk lives in: regulation, data, and dispute pressure.
- -Audit trails, privacy boundaries, dispute‑ready artifacts.
- Healthcare → -Model risk, non‑repudiation, evidence for regulators.
- Financial → -Chain‑of‑custody for drafts, evidence, and decisions.
- Legal → -Common governance failure modes that appear across sectors and industries.
- -Auditors, procurement, “prove it existed at the time.”
- B2B SaaS → -Bind summaries to evidence; keep custody intact.
- SecOps → -Provable provenance for outputs: “why did it say that?”
- AI products → -Traceability that survives vendor and contractor handoffs.
- Supply chain → -Same mechanism, different pressure
+IF.Trace doesn’t “solve compliance.” It solves the universal problem + underneath compliance: third parties demanding proof without joining your + internal world. +
Browse by sector
The same receipts, different pressure.
Client handoffs, disputes, and custody that holds up later.
Browse by industry
Regulation, data, and dispute pressure.
More pressure profiles
Same mechanism, different stakes.
Legal reality
-- Legal and compliance teams live in the difference between “we believe this happened” and “we can prove this happened.” IF.Trace is built to - make that proof portable. -
- -You can hand these to an external reviewer without shipping your internal systems.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Review pack: https://infrafabric.io/static/review/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Legal reality
Legal work depends on what can be proven. IF.Trace provides a simple, verifiable custody layer for documents and derived outputs.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Bind source and output with trace IDs and hashes.
Integrity verification with clear limits.
Offline bundles and HTML views.
Services reality
-- In professional services, the artifact you hand over becomes evidence: audits, disputes, expert reports, procurement packs. IF.Trace makes - the handoff verifiable without making you a credential broker. -
- -Don’t turn verification into credential distribution.
-“Log in to our system and we’ll show you.”
-“Here is the artifact, here is the receipt, verify without us.”
-Client handoff reality
When advice, drafts, and deliverables become contested, you need custody that holds up. IF.Trace makes your outputs verifiable without exposing your internal process.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Bind drafts and outputs to timestamps and hashes.
Public receipt links for reviewers.
A portable verification kit.
Public sector reality
Public accountability is a third‑party problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust us” into receipts that a stranger can verify.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Stable, no‑login URLs for trace + output + source.
Triage bundles (light/standard/full) with expected hashes.
States what is verified (integrity) and what is not (interpretation).
- -- - -- IF.Trace - --- - - contact - - +Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html +- - ----- - -Public sector reality
-Proof must survive procurement.
-- Public accountability is a third‑party problem: reviewers need proof without getting access to your internal systems. IF.Trace turns “trust - us” into receipts that a stranger can verify. -
- --- -Third‑party pressure
--
-- Assessors need chain‑of‑custody that survives vendor handoffs.
-- Procurement and oversight bodies require documentation that outlives staff turnover.
-- Some environments must support offline verification by design.
---What IF.Trace provides
-----Receipt surface-Stable, no‑login URLs for trace + output + source.---Offline bundles-Triage bundles (lightweight/standard/full) with expected hashes.---Black/white-States what is verified (integrity) and what is not (interpretation).-- - ---What you can hand to a reviewer
-No accounts required. No internal consoles required.
--Trace receipt: https://infrafabric.io/static/trace/<shareId> +Trace receipt: https://infrafabric.io/static/trace/<shareId> Pack (HTML): https://infrafabric.io/static/pack/<shareId> -Bundle selector: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html- ---Live example
- -
Research reality
-- Research already understands receipts: methods, datasets, citations. IF.Trace applies the same discipline to AI outputs and operational - decisions: publish what can be verified, label what can’t, and keep the bytes stable. -
- -So reviewers can validate without trusting your infrastructure.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- External review reality
Research reviewers need proof, not your whole environment. IF.Trace makes it practical to share verifiable outputs while keeping raw data controlled.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Share proof links that survive copy/paste and time.
HTML views and bundles for constrained environments.
Proves integrity, not interpretation.
SaaS reality
-- In B2B SaaS, the friction isn’t the control design. It’s proving the control existed at the right time, in the right scope, without - granting auditors full internal access. -
- -shareId.The purpose is to make evidence portable and boring.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Output (raw): https://infrafabric.io/static/dossier/<shareId>/download
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
- Audit readiness
Compliance is often a third-party proof problem. IF.Trace makes it easier to show audit evidence without turning your internal systems into public surface area.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Receipts for audits and reviews.
Bring-your-own-verification kit.
Integrity ≠ correctness, and we say so.
Research reality
-- Scientific workflows already understand receipts: methods, datasets, and citations. IF.Trace is the same idea applied to AI outputs and - operational decisions: publish what can be verified, and mark what can’t. -
- -So reviewers can validate without trusting your infrastructure.
-Trace receipt: https://infrafabric.io/static/trace/<shareId>
-Pack (raw): https://infrafabric.io/static/pack/<shareId>.md
-Pack (HTML): https://infrafabric.io/static/pack/<shareId>
-Offline bundles: https://infrafabric.io/static/hosted/review/trace-bundles/<id>/index.html
- Scientific review reality
Science is adversarial in the best way: other people must be able to check your work. IF.Trace keeps the proof surface simple and stable.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
A predictable proof surface for citations and review packs.
Clear, black/white integrity checks.
HTML fallbacks and offline bundles.
SecOps reality
-- AI summaries can help, but only if they remain verifiable against raw telemetry. IF.Trace makes the custody chain explicit: source bytes, - output bytes, and a receipt that can be validated by third parties. -
- -source_sha256 ↔ output_sha256.Do not treat “AI summary” as evidence.
-“The AI said this was resolved.”
-“Here is the output, here is the evidence artifact, here is the receipt binding them.”
-Security operations
Security teams summarize fast under pressure. IF.Trace keeps summaries tied to underlying evidence so post-incident review stays grounded.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Link reports to underlying inputs via hashes.
No-login verification for stakeholders.
Portable bundles for review.
Supply chain reality
-- Industrial systems accumulate contractors, vendors, and integrators. IF.Trace standardizes a receipt surface so chain‑of‑custody doesn’t - collapse the moment responsibility moves. -
- -shareId.Supply chain reality
In complex supply chains, custody breaks at handoff points. IF.Trace makes proof portable so verification survives contractor and vendor boundaries.
Third‑party pressure
+The constraint is almost always the same: someone needs proof, but + cannot be onboarded into your internal systems. +
What IF.Trace provides
Receipts and bundles that travel with the work.
Predictable URLs and black/white checks.
Evidence can be attached to existing tickets and docs.
Long-form spec + receipts
-- “Trustworthy” can’t be a vibe. This paper documents the receipt‑first sequence: hash the source → hash the output → - publish a trace → share no‑login receipts → optional offline bundles. -
- -- If your environment blocks downloads (common for some web fetchers), use the HTML version. The receipts are still verifiable. -
-These are the boring, audit-safe entry points.
-Long-form spec + receipts
+“Trustworthy” can’t be a vibe. This paper documents the receipt‑first sequence: + hash the source → hash the output → publish a trace → share no‑login receipts → optional offline bundles. +
Included artifacts
HTML + Markdown.
Trace + hashes.
Proof bundle + verifier.
No login
+Optional. If you prefer, drop an email and we’ll reply with stable links + (no “demo call” bait). +
+If your environment blocks downloads (common for some web fetchers), use the + HTML version. The receipts are still verifiable. +
Stable links
These are the boring, audit-safe URLs.
+https://infrafabric.io/static/dossier/UtriXc5NT2rktoWA0EGvE61G +
+https://infrafabric.io/static/dossier/UtriXc5NT2rktoWA0EGvE61G/download +
+https://infrafabric.io/static/pack/UtriXc5NT2rktoWA0EGvE61G +
+https://infrafabric.io/static/pack/UtriXc5NT2rktoWA0EGvE61G.md +
If you submitted the form, we’ll reply with the stable links. No pitch deck required.
- -
- Tip: Some sandboxes load text/html but reject downloads. Use the HTML links in that case.
-
Thank you
We’ll reply with the stable, no‑login links.