From dea9ee838617234fa39195dab8f02b0b68704d62 Mon Sep 17 00:00:00 2001 From: tjb-tech <1193992557@qq.com> Date: Thu, 16 Apr 2026 13:13:35 +0000 Subject: [PATCH] feat(dashboard): redesign autopilot kanban with React + dark cyberpunk theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the inline HTML template with a Vite + React + TypeScript app in autopilot-dashboard/. The new design follows the AnyFS dark theme aesthetic with animated SVG hero background (data streams, constellation nodes, binary rain, scanline), pipeline visualization, glass cards with status-colored glow effects, and JetBrains Mono typography throughout. - autopilot-dashboard/: new Vite+React project, builds to docs/autopilot/ - HeroBackground.tsx: multi-layer SMIL SVG animation - PipelineAnimation.tsx: QUEUE→PREP→RUN→CHECK→MERGE traveling glow - CI workflow updated to build React app before deploying to Pages - Python _render_dashboard_html simplified to a minimal fallback page Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/autopilot-pages.yml | 16 + autopilot-dashboard/.gitignore | 2 + autopilot-dashboard/index.html | 15 + autopilot-dashboard/package-lock.json | 1859 +++++++++++++++++ autopilot-dashboard/package.json | 22 + autopilot-dashboard/public/snapshot.json | 59 + autopilot-dashboard/src/App.tsx | 278 +++ .../src/components/HeroBackground.tsx | 181 ++ .../src/components/PipelineAnimation.tsx | 99 + autopilot-dashboard/src/index.css | 532 +++++ autopilot-dashboard/src/main.tsx | 10 + autopilot-dashboard/src/types.ts | 69 + autopilot-dashboard/src/vite-env.d.ts | 1 + autopilot-dashboard/tsconfig.app.json | 22 + autopilot-dashboard/tsconfig.json | 4 + autopilot-dashboard/vite.config.ts | 11 + docs/autopilot/assets/index-CUSUttvC.css | 1 + docs/autopilot/assets/index-DbmnWBut.js | 49 + docs/autopilot/index.html | 276 +-- src/openharness/autopilot/service.py | 284 +-- 20 files changed, 3280 insertions(+), 510 deletions(-) create mode 100644 autopilot-dashboard/.gitignore create mode 100644 autopilot-dashboard/index.html create mode 100644 autopilot-dashboard/package-lock.json create mode 100644 autopilot-dashboard/package.json create mode 100644 autopilot-dashboard/public/snapshot.json create mode 100644 autopilot-dashboard/src/App.tsx create mode 100644 autopilot-dashboard/src/components/HeroBackground.tsx create mode 100644 autopilot-dashboard/src/components/PipelineAnimation.tsx create mode 100644 autopilot-dashboard/src/index.css create mode 100644 autopilot-dashboard/src/main.tsx create mode 100644 autopilot-dashboard/src/types.ts create mode 100644 autopilot-dashboard/src/vite-env.d.ts create mode 100644 autopilot-dashboard/tsconfig.app.json create mode 100644 autopilot-dashboard/tsconfig.json create mode 100644 autopilot-dashboard/vite.config.ts create mode 100644 docs/autopilot/assets/index-CUSUttvC.css create mode 100644 docs/autopilot/assets/index-DbmnWBut.js diff --git a/.github/workflows/autopilot-pages.yml b/.github/workflows/autopilot-pages.yml index eb0de33..4dfcd20 100644 --- a/.github/workflows/autopilot-pages.yml +++ b/.github/workflows/autopilot-pages.yml @@ -6,6 +6,7 @@ on: - main paths: - "docs/autopilot/**" + - "autopilot-dashboard/**" - ".github/workflows/autopilot-pages.yml" workflow_dispatch: @@ -28,6 +29,21 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + cache-dependency-path: autopilot-dashboard/package-lock.json + + - name: Install dependencies + working-directory: autopilot-dashboard + run: npm ci + + - name: Build dashboard + working-directory: autopilot-dashboard + run: npm run build + - name: Configure Pages uses: actions/configure-pages@v5 with: diff --git a/autopilot-dashboard/.gitignore b/autopilot-dashboard/.gitignore new file mode 100644 index 0000000..f06235c --- /dev/null +++ b/autopilot-dashboard/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/autopilot-dashboard/index.html b/autopilot-dashboard/index.html new file mode 100644 index 0000000..6345d00 --- /dev/null +++ b/autopilot-dashboard/index.html @@ -0,0 +1,15 @@ + + + + + + Autopilot Kanban + + + + + +
+ + + diff --git a/autopilot-dashboard/package-lock.json b/autopilot-dashboard/package-lock.json new file mode 100644 index 0000000..9e15c7a --- /dev/null +++ b/autopilot-dashboard/package-lock.json @@ -0,0 +1,1859 @@ +{ + "name": "autopilot-dashboard", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "autopilot-dashboard", + "version": "0.1.0", + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "typescript": "~5.8.3", + "vite": "^6.3.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz", + "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.339", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.339.tgz", + "integrity": "sha512-Is+0BBHJ4NrdpAYiperrmp53pLywG/yV/6lIMTAnhxvzj/Cmn5Q/ogSHC6AKe7X+8kPLxxFk0cs5oc/3j/fxIg==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "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.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "dev": true, + "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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/autopilot-dashboard/package.json b/autopilot-dashboard/package.json new file mode 100644 index 0000000..01accf2 --- /dev/null +++ b/autopilot-dashboard/package.json @@ -0,0 +1,22 @@ +{ + "name": "autopilot-dashboard", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "typescript": "~5.8.3", + "vite": "^6.3.2" + } +} diff --git a/autopilot-dashboard/public/snapshot.json b/autopilot-dashboard/public/snapshot.json new file mode 100644 index 0000000..179c61d --- /dev/null +++ b/autopilot-dashboard/public/snapshot.json @@ -0,0 +1,59 @@ +{ + "generated_at": 1776338766.0050209, + "repo_name": "OpenHarness-new", + "repo_path": "/home/tangjiabin/OpenHarness-new", + "focus": null, + "counts": { + "queued": 0, + "accepted": 0, + "preparing": 0, + "running": 0, + "verifying": 0, + "pr_open": 0, + "waiting_ci": 0, + "repairing": 0, + "completed": 0, + "merged": 0, + "failed": 0, + "rejected": 0, + "superseded": 0 + }, + "status_order": [ + "queued", + "accepted", + "preparing", + "running", + "verifying", + "pr_open", + "waiting_ci", + "repairing", + "completed", + "merged", + "failed", + "rejected", + "superseded" + ], + "columns": { + "queued": [], + "accepted": [], + "preparing": [], + "running": [], + "verifying": [], + "pr_open": [], + "waiting_ci": [], + "repairing": [], + "completed": [], + "merged": [], + "failed": [], + "rejected": [], + "superseded": [] + }, + "cards": [], + "journal": [], + "policies": { + "autopilot": "/home/tangjiabin/OpenHarness-new/.openharness/autopilot/autopilot_policy.yaml", + "verification": "/home/tangjiabin/OpenHarness-new/.openharness/autopilot/verification_policy.yaml", + "release": "/home/tangjiabin/OpenHarness-new/.openharness/autopilot/release_policy.yaml" + }, + "active_context": "# Active Repo Context\n\nGenerated at: 2026-04-16 11:05:49 UTC\n\n## Current Task Focus\n- No active repo task focus yet.\n\n## In Progress\n- None.\n\n## Next Up\n- No queued items.\n\n## Recently Completed\n- None yet.\n\n## Recent Failures\n- None.\n\n## Recent Repo Journal\n- Journal is empty.\n\n## Policies\n- Autopilot: /home/tangjiabin/OpenHarness-new/.openharness/autopilot/autopilot_policy.yaml\n- Verification: /home/tangjiabin/OpenHarness-new/.openharness/autopilot/verification_policy.yaml\n- Release: /home/tangjiabin/OpenHarness-new/.openharness/autopilot/release_policy.yaml" +} diff --git a/autopilot-dashboard/src/App.tsx b/autopilot-dashboard/src/App.tsx new file mode 100644 index 0000000..7632123 --- /dev/null +++ b/autopilot-dashboard/src/App.tsx @@ -0,0 +1,278 @@ +import { useEffect, useState } from "react"; +import { HeroBackground } from "./components/HeroBackground"; +import { PipelineAnimation } from "./components/PipelineAnimation"; +import type { Snapshot, TaskCard, JournalEntry } from "./types"; +import { STATUS_LABELS, STATUS_COLORS } from "./types"; + +/* ── Helpers ─────────────────────────────────── */ + +function fmtAgo(ts?: number): string { + if (!ts) return "-"; + const delta = Math.max(0, Math.floor(Date.now() / 1000 - ts)); + if (delta < 60) return `${delta}s ago`; + if (delta < 3600) return `${Math.floor(delta / 60)}m ago`; + if (delta < 86400) return `${Math.floor(delta / 3600)}h ago`; + return `${Math.floor(delta / 86400)}d ago`; +} + +function statusBadgeClass(status: string): string { + if (["running", "completed", "merged", "preparing"].includes(status)) return "badge-teal"; + if (["repairing"].includes(status)) return "badge-orange"; + if (["accepted", "pr_open"].includes(status)) return "badge-violet"; + if (["failed", "rejected"].includes(status)) return "badge-red"; + if (["verifying", "waiting_ci"].includes(status)) return "badge-blue"; + if (["superseded"].includes(status)) return "badge-amber"; + return "badge-gray"; +} + +/* ── Card Component ──────────────────────────── */ + +function CardView({ card }: { card: TaskCard }) { + const labels = [...(card.labels || []), card.source_kind].filter(Boolean); + const verification = (card.metadata?.verification_steps || []) + .map((step) => `${step.status} · ${step.command}`) + .slice(0, 2) + .join(" | "); + const borderColor = STATUS_COLORS[card.status] || "#333"; + + return ( +
+
+ {card.id} + + {card.score} + +
+

{card.title}

+ {card.body && ( +

{card.body.slice(0, 260)}

+ )} + {labels.length > 0 && ( +
+ {labels.map((tag, i) => ( + {tag} + ))} +
+ )} +
+
+ updated {fmtAgo(card.updated_at)} + {card.source_ref ? ` · ref ${card.source_ref}` : ""} +
+
{card.metadata?.last_note || "no status note yet"}
+ {(verification || card.metadata?.last_ci_summary || card.metadata?.last_failure_summary || card.metadata?.human_gate_pending) && ( +
+ {verification || card.metadata?.last_ci_summary || card.metadata?.last_failure_summary || + (card.metadata?.human_gate_pending ? "verification passed; human gate pending" : "")} +
+ )} +
+
+ ); +} + +/* ── Column Component ────────────────────────── */ + +function ColumnView({ status, cards }: { status: string; cards: TaskCard[] }) { + const color = STATUS_COLORS[status] || "#666"; + return ( +
+
+

{STATUS_LABELS[status] || status}

+ {cards.length} +
+
+ {cards.length > 0 + ? cards.map((card) => ) + :
No cards in this column.
+ } +
+
+ ); +} + +/* ── Journal Component ───────────────────────── */ + +function JournalView({ entries }: { entries: JournalEntry[] }) { + return ( +
+
+ + // + +

RECENT JOURNAL

+
+
+ {entries.length > 0 + ? entries.slice().reverse().map((entry, i) => ( +
+ +
+ {entry.kind} + {entry.task_id && [{entry.task_id}]} +
+
{entry.summary}
+
+ )) + :
Journal is empty.
+ } +
+
+ ); +} + +/* ── Main App ────────────────────────────────── */ + +export function App() { + const [snapshot, setSnapshot] = useState(null); + const [filter, setFilter] = useState(""); + const [error, setError] = useState(null); + + useEffect(() => { + fetch("./snapshot.json", { cache: "no-store" }) + .then((r) => r.json()) + .then(setSnapshot) + .catch((e) => setError(String(e))); + }, []); + + if (error) { + return ( +
+
Failed to load snapshot.json: {error}
+
+ ); + } + + if (!snapshot) { + return ( +
+
+ LOADING SNAPSHOT... +
+
+ ); + } + + const counts = snapshot.counts || {}; + const order = snapshot.status_order || []; + const normalizedFilter = filter.trim().toLowerCase(); + + const filteredColumns = order.map((status) => { + const cards = (snapshot.columns?.[status] || []).filter((card) => { + if (!normalizedFilter) return true; + const haystack = [ + card.id, card.title, card.body, card.source_kind, card.source_ref, + ...(card.labels || []), ...(card.score_reasons || []), + ].join(" ").toLowerCase(); + return haystack.includes(normalizedFilter); + }); + return { status, cards }; + }).filter(({ cards }) => cards.length > 0 || !normalizedFilter); + + const inProgress = (counts.preparing || 0) + (counts.running || 0) + + (counts.verifying || 0) + (counts.waiting_ci || 0) + + (counts.repairing || 0) + (counts.accepted || 0) + (counts.pr_open || 0); + const completed = (counts.completed || 0) + (counts.merged || 0); + const failed = (counts.failed || 0) + (counts.rejected || 0); + + const generated = new Date((snapshot.generated_at || 0) * 1000) + .toISOString().replace("T", " ").replace(".000Z", " UTC"); + + return ( + <> + {/* ── Hero ─────────────────────────── */} +
+
+ +
+
+
+
// AUTOPILOT_KANBAN
+

+ {snapshot.repo_name || "OpenHarness"}
+ SELF-EVOLUTION +

+

+ A static GitHub Pages view of the repo-local autopilot queue. + Cards come from ohmo requests, GitHub issues and PRs, and + claude-code alignment candidates. +

+
+
// CURRENT_FOCUS
+
+ {snapshot.focus + ? `[${snapshot.focus.status}] ${snapshot.focus.title} · score=${snapshot.focus.score} · ${snapshot.focus.source_kind}` + : "No active task focus yet."} +
+
+
+
+
+ Generated from repo state at {generated} +
+
+ +
+
+
+
+ +
+ {/* ── Stats Bar ──────────────────── */} +
+
+
QUEUED
+
{counts.queued || 0}
+
waiting
+
+
+
IN PROGRESS
+
{inProgress}
+
active pipeline
+
+
+
COMPLETED
+
{completed}
+
merged + done
+
+
+
FAILED
+
{failed}
+
rejected + failed
+
+
+ + {/* ── Toolbar ────────────────────── */} +
+ setFilter(e.target.value)} + /> +
+ Reads snapshot.json — no backend required +
+
+ + {/* ── Kanban Board ───────────────── */} +
+ {filteredColumns.map(({ status, cards }) => ( + + ))} +
+ + {/* ── Journal ────────────────────── */} + +
+ + ); +} diff --git a/autopilot-dashboard/src/components/HeroBackground.tsx b/autopilot-dashboard/src/components/HeroBackground.tsx new file mode 100644 index 0000000..1a5419d --- /dev/null +++ b/autopilot-dashboard/src/components/HeroBackground.tsx @@ -0,0 +1,181 @@ +/** + * CyberHeroBackground — full-bleed animated SVG background for the kanban hero. + * + * Layers (back → front): + * 1. Radial teal glow + * 2. Perspective grid floor + * 3. Horizontal data-stream lines + * 4. Constellation nodes + edges + * 5. Data fragment segments + * 6. Binary / hex rain + * 7. Horizontal scan-line + * + * All SMIL-based — no JS animation loops needed. + */ +export function HeroBackground() { + const glyphs = [ + { x: 45, ch: "0", sz: 11, dur: 14, d: 0 }, + { x: 120, ch: "1", sz: 9, dur: 18, d: 3 }, + { x: 195, ch: "A", sz: 10, dur: 12, d: 7 }, + { x: 290, ch: "F", sz: 8, dur: 16, d: 1 }, + { x: 365, ch: "0", sz: 12, dur: 20, d: 5 }, + { x: 430, ch: "1", sz: 9, dur: 13, d: 9 }, + { x: 510, ch: "D", sz: 10, dur: 17, d: 2 }, + { x: 580, ch: "0", sz: 11, dur: 15, d: 6 }, + { x: 650, ch: "1", sz: 8, dur: 11, d: 4 }, + { x: 720, ch: "B", sz: 10, dur: 19, d: 8 }, + { x: 790, ch: "0", sz: 9, dur: 14, d: 1 }, + { x: 860, ch: "E", sz: 11, dur: 16, d: 10 }, + { x: 930, ch: "1", sz: 10, dur: 12, d: 3 }, + { x: 1000, ch: "C", sz: 8, dur: 18, d: 7 }, + { x: 1070, ch: "0", sz: 12, dur: 15, d: 0 }, + { x: 1140, ch: "7", sz: 9, dur: 13, d: 5 }, + { x: 260, ch: "3", sz: 8, dur: 22, d: 11 }, + { x: 475, ch: "F", sz: 10, dur: 16, d: 4 }, + { x: 690, ch: "8", sz: 9, dur: 20, d: 6 }, + { x: 1020, ch: "1", sz: 11, dur: 14, d: 8 }, + ]; + + const cn = [ + { x: 80, y: 55 }, + { x: 210, y: 30 }, + { x: 355, y: 80 }, + { x: 500, y: 45 }, + { x: 700, y: 68 }, + { x: 850, y: 28 }, + { x: 980, y: 60 }, + { x: 1120, y: 42 }, + { x: 145, y: 140 }, + { x: 420, y: 155 }, + { x: 780, y: 145 }, + { x: 1050, y: 130 }, + ]; + + const ce: [number, number][] = [ + [0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], + [8, 9], [9, 10], [10, 11], + [0, 8], [3, 9], [4, 10], [7, 11], + ]; + + const streams = [ + { y: 90, dash: "4 18", tot: 22, spd: 2.0, op: 0.07 }, + { y: 160, dash: "2 22", tot: 24, spd: 2.8, op: 0.05 }, + { y: 230, dash: "6 14", tot: 20, spd: 1.5, op: 0.08 }, + { y: 300, dash: "3 20", tot: 23, spd: 2.2, op: 0.06 }, + { y: 370, dash: "5 15", tot: 20, spd: 1.8, op: 0.07 }, + ]; + + const frags = [ + { x: 95, y: 120, w: 40 }, + { x: 310, y: 200, w: 30 }, + { x: 540, y: 280, w: 50 }, + { x: 760, y: 130, w: 35 }, + { x: 990, y: 250, w: 45 }, + { x: 180, y: 350, w: 30 }, + { x: 640, y: 380, w: 40 }, + { x: 1080, y: 330, w: 35 }, + ]; + + const gridY = [300, 325, 355, 390, 430]; + const vx = 600; + const vy = 240; + const radials = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]; + + return ( + + ); +} diff --git a/autopilot-dashboard/src/components/PipelineAnimation.tsx b/autopilot-dashboard/src/components/PipelineAnimation.tsx new file mode 100644 index 0000000..ea32df9 --- /dev/null +++ b/autopilot-dashboard/src/components/PipelineAnimation.tsx @@ -0,0 +1,99 @@ +/** + * PipelineAnimation — visualizes the autopilot pipeline stages. + * A data packet travels through: QUEUE → PREPARE → RUN → VERIFY → MERGE + * Communicates the "self-evolution pipeline" idea. + * Uses SMIL animations — no JS loops needed. + */ +export function PipelineAnimation() { + const stages = [ + { x: 30, label: "QUEUE" }, + { x: 95, label: "PREP" }, + { x: 160, label: "RUN" }, + { x: 225, label: "CHECK" }, + { x: 290, label: "MERGE" }, + ]; + + const motionPath = "M 30 50 L 95 50 L 160 50 L 225 50 L 290 50"; + + return ( + + + + + + + + + + {/* Rail */} + + + + + {/* Stage nodes */} + {stages.map((stage, i) => ( + + {/* Node circle */} + + {/* Corner ticks */} + + + + + + + + + {/* Inner dot */} + + + + + {/* Arrival pulse */} + + + + + {/* Label */} + + {stage.label} + + + ))} + + {/* Traveling glow */} + + + + + + + + {/* Caption */} + + AUTOPILOT · PIPELINE + + + ); +} diff --git a/autopilot-dashboard/src/index.css b/autopilot-dashboard/src/index.css new file mode 100644 index 0000000..ed9e899 --- /dev/null +++ b/autopilot-dashboard/src/index.css @@ -0,0 +1,532 @@ +/* ─── AnyFS-inspired dark cyberpunk theme ─────────── */ +:root { + --bg: #0a0a0a; + --bg-surface: #111111; + --bg-elevated: #1a1a1a; + --ink: #ffffff; + --ink-secondary: #888888; + --accent: #00d4aa; + --accent-light: #00f0c0; + --accent-orange: #ff6b35; + --accent-violet: #8b5cf6; + --muted: #666666; + --line: #222222; + --line-bright: #333333; + --success: #00d4aa; + --error: #ff4444; + --warning: #ffaa00; + --mono: "JetBrains Mono", "Fira Code", ui-monospace, "Cascadia Code", monospace; +} + +* { box-sizing: border-box; margin: 0; padding: 0; } + +html { scroll-behavior: smooth; } + +body { + background: var(--bg); + color: var(--ink); + font-family: var(--mono); + font-size: 13px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + min-height: 100vh; +} + +::selection { + background: rgba(0, 212, 170, 0.25); + color: #fff; +} + +/* ─── Scrollbar ──────────────────────────────── */ +::-webkit-scrollbar { width: 4px; height: 4px; } +::-webkit-scrollbar-track { background: transparent; } +::-webkit-scrollbar-thumb { background: #333; border-radius: 2px; } +::-webkit-scrollbar-thumb:hover { background: #555; } + +/* ─── Shell ──────────────────────────────────── */ +.shell { + max-width: 1600px; + margin: 0 auto; + padding: 0 20px 56px; +} + +/* ─── Hero Section ───────────────────────────── */ +.hero { + position: relative; + overflow: hidden; + margin: 0 -20px; + padding: 60px 20px 40px; + min-height: 340px; +} + +.hero-bg { + position: absolute; + inset: 0; + pointer-events: none; +} + +.hero-content { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: 1.4fr 1fr; + gap: 24px; + max-width: 1600px; + margin: 0 auto; +} + +.hero-main { padding: 8px; } + +.eyebrow { + display: inline-flex; + gap: 8px; + align-items: center; + font-size: 10px; + letter-spacing: 3px; + text-transform: uppercase; + color: var(--accent); + font-weight: 700; + margin-bottom: 20px; +} + +.hero h1 { + font-size: clamp(32px, 4.5vw, 56px); + font-weight: 700; + letter-spacing: 2px; + line-height: 1.1; + margin-bottom: 16px; +} + +.hero h1 .accent { color: var(--accent); } + +.hero-sub { + color: var(--muted); + font-size: 12px; + line-height: 1.8; + max-width: 52ch; + margin-bottom: 24px; +} + +.focus-box { + padding: 16px; + border-radius: 6px; + background: rgba(0, 212, 170, 0.06); + border: 1px solid rgba(0, 212, 170, 0.15); +} + +.focus-box .focus-label { + font-size: 10px; + letter-spacing: 2px; + text-transform: uppercase; + color: var(--accent); + font-weight: 700; + margin-bottom: 8px; +} + +.focus-box .focus-text { + font-size: 12px; + color: var(--ink-secondary); + line-height: 1.6; +} + +.hero-side { + display: flex; + flex-direction: column; + gap: 16px; + padding: 8px; +} + +.hero-timestamp { + font-size: 10px; + letter-spacing: 1px; + color: var(--muted); +} + +/* ─── Stats Bar ──────────────────────────────── */ +.stats-bar { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1px; + background: var(--line); + border-radius: 6px; + overflow: hidden; + margin-bottom: 24px; +} + +.stat { + background: var(--bg-surface); + padding: 20px; + text-align: center; + transition: background 0.2s ease; +} + +.stat:hover { + background: var(--bg-elevated); +} + +.stat-label { + font-size: 10px; + letter-spacing: 2px; + text-transform: uppercase; + font-weight: 700; + margin-bottom: 8px; +} + +.stat-label.teal { color: var(--accent); } +.stat-label.orange { color: var(--accent-orange); } +.stat-label.violet { color: var(--accent-violet); } + +.stat-value { + font-size: 32px; + font-weight: 700; + letter-spacing: -1px; + line-height: 1; +} + +.stat-sub { + font-size: 10px; + color: #444; + margin-top: 6px; + letter-spacing: 1px; +} + +/* ─── Toolbar ────────────────────────────────── */ +.toolbar { + display: flex; + gap: 12px; + align-items: center; + justify-content: space-between; + padding: 16px 20px; + margin-bottom: 20px; + background: var(--bg-elevated); + border: 1px solid var(--line); + border-radius: 6px; + flex-wrap: wrap; +} + +.toolbar input { + flex: 1; + min-width: min(400px, 100%); + height: 2.5rem; + padding: 0 14px; + background: var(--bg); + border: 1px solid var(--line-bright); + border-radius: 4px; + font-family: var(--mono); + font-size: 12px; + color: var(--ink); + transition: all 0.2s ease; +} + +.toolbar input::placeholder { color: #444; } + +.toolbar input:focus { + outline: none; + border-color: var(--accent); + box-shadow: 0 0 0 2px rgba(0, 212, 170, 0.1); +} + +.toolbar .hint { + font-size: 11px; + color: var(--muted); + letter-spacing: 0.5px; +} + +.toolbar .hint code { + color: var(--accent); + font-size: 11px; +} + +/* ─── Board ──────────────────────────────────── */ +.board { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 16px; + margin-bottom: 24px; +} + +/* ─── Column ─────────────────────────────────── */ +.column { + background: var(--bg-elevated); + border: 1px solid var(--line); + border-radius: 6px; + padding: 16px; + min-height: 200px; +} + +.column-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 14px; + padding-bottom: 12px; + border-bottom: 1px solid var(--line); +} + +.column-header h2 { + font-size: 12px; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; +} + +.column-count { + font-size: 10px; + font-weight: 600; + letter-spacing: 1px; + padding: 2px 8px; + border-radius: 3px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--line); + color: var(--ink-secondary); +} + +.cards { display: grid; gap: 10px; } + +/* ─── Card ───────────────────────────────────── */ +.card { + background: var(--bg-surface); + border: 1px solid var(--line); + border-radius: 6px; + padding: 14px; + transition: all 0.2s ease; + position: relative; + overflow: hidden; +} + +.card::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 3px; + height: 100%; + background: var(--card-accent, var(--line-bright)); +} + +.card:hover { + border-color: var(--line-bright); + box-shadow: 0 0 20px color-mix(in srgb, var(--card-accent, var(--accent)) 12%, transparent); + transform: translateY(-1px); +} + +.card-meta { + display: flex; + justify-content: space-between; + gap: 8px; + font-size: 10px; + color: var(--muted); + margin-bottom: 8px; + letter-spacing: 0.5px; +} + +.card h3 { + font-size: 13px; + font-weight: 600; + line-height: 1.4; + margin-bottom: 8px; + letter-spacing: 0.3px; +} + +.card-body { + font-size: 11px; + color: var(--muted); + line-height: 1.6; + margin-bottom: 10px; + white-space: pre-wrap; + word-break: break-word; +} + +.card-tags { + display: flex; + gap: 4px; + flex-wrap: wrap; + margin-bottom: 10px; +} + +.tag { + display: inline-flex; + align-items: center; + padding: 2px 8px; + font-size: 9px; + font-weight: 600; + letter-spacing: 1px; + text-transform: uppercase; + border-radius: 3px; + background: rgba(255, 255, 255, 0.04); + color: var(--ink-secondary); + border: 1px solid var(--line); +} + +.card-footer { + border-top: 1px solid var(--line); + padding-top: 10px; + display: grid; + gap: 4px; + font-size: 10px; + color: #555; + letter-spacing: 0.3px; +} + +/* ─── Status badges for column headers ────── */ +.badge { + display: inline-flex; + align-items: center; + padding: 2px 10px; + font-size: 10px; + font-weight: 600; + letter-spacing: 1px; + text-transform: uppercase; + border-radius: 3px; +} + +.badge-teal { + background: rgba(0, 212, 170, 0.1); + color: var(--accent); + border: 1px solid rgba(0, 212, 170, 0.2); +} + +.badge-orange { + background: rgba(255, 107, 53, 0.1); + color: var(--accent-orange); + border: 1px solid rgba(255, 107, 53, 0.2); +} + +.badge-violet { + background: rgba(139, 92, 246, 0.1); + color: var(--accent-violet); + border: 1px solid rgba(139, 92, 246, 0.2); +} + +.badge-red { + background: rgba(255, 68, 68, 0.1); + color: #ff6666; + border: 1px solid rgba(255, 68, 68, 0.2); +} + +.badge-blue { + background: rgba(59, 130, 246, 0.1); + color: #60a5fa; + border: 1px solid rgba(59, 130, 246, 0.2); +} + +.badge-amber { + background: rgba(255, 170, 0, 0.1); + color: #ffaa00; + border: 1px solid rgba(255, 170, 0, 0.2); +} + +.badge-gray { + background: rgba(255, 255, 255, 0.04); + color: #888; + border: 1px solid var(--line); +} + +/* ─── Journal ────────────────────────────────── */ +.journal { + background: var(--bg-elevated); + border: 1px solid var(--line); + border-radius: 6px; + padding: 20px; +} + +.journal-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + padding-bottom: 14px; + border-bottom: 1px solid var(--line); +} + +.journal-header h2 { + font-size: 12px; + font-weight: 700; + letter-spacing: 2px; + text-transform: uppercase; +} + +.journal-list { display: grid; gap: 8px; } + +.journal-item { + padding: 12px 14px; + border-radius: 4px; + border: 1px solid var(--line); + background: var(--bg-surface); + transition: background 0.15s ease; +} + +.journal-item:hover { background: var(--bg-elevated); } + +.journal-item time { + font-size: 10px; + color: var(--muted); + letter-spacing: 0.5px; + display: inline-block; + margin-bottom: 4px; +} + +.journal-item .kind { + font-weight: 700; + color: var(--accent); + font-size: 11px; + letter-spacing: 0.5px; +} + +.journal-item .task-ref { + color: var(--accent-violet); + font-size: 11px; +} + +.journal-item .summary { + font-size: 12px; + color: var(--ink-secondary); + line-height: 1.5; +} + +.empty { + color: var(--muted); + font-style: italic; + padding: 16px 4px; + font-size: 12px; + letter-spacing: 0.5px; +} + +/* ─── Pipeline Animation (hero side) ─────────── */ +.pipeline-viz { + background: var(--bg-elevated); + border: 1px solid var(--line); + border-radius: 6px; + overflow: hidden; + flex: 1; +} + +/* ─── Animations ─────────────────────────────── */ +@keyframes fade-in { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes glow-pulse { + 0%, 100% { box-shadow: 0 0 12px rgba(0, 212, 170, 0.08); } + 50% { box-shadow: 0 0 24px rgba(0, 212, 170, 0.16); } +} + +.animate-fade-in { + animation: fade-in 0.4s ease-out forwards; +} + +/* ─── Responsive ─────────────────────────────── */ +@media (max-width: 1100px) { + .hero-content { grid-template-columns: 1fr; } + .stats-bar { grid-template-columns: repeat(2, 1fr); } +} + +@media (max-width: 760px) { + .shell { padding: 0 12px 36px; } + .hero { padding: 40px 12px 28px; margin: 0 -12px; } + .board { grid-template-columns: 1fr; } + .stats-bar { grid-template-columns: 1fr 1fr; } + .toolbar input { min-width: 100%; } +} diff --git a/autopilot-dashboard/src/main.tsx b/autopilot-dashboard/src/main.tsx new file mode 100644 index 0000000..861daaf --- /dev/null +++ b/autopilot-dashboard/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./index.css"; +import { App } from "./App"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/autopilot-dashboard/src/types.ts b/autopilot-dashboard/src/types.ts new file mode 100644 index 0000000..9e56622 --- /dev/null +++ b/autopilot-dashboard/src/types.ts @@ -0,0 +1,69 @@ +export interface TaskCard { + id: string; + title: string; + body?: string; + status: string; + score: number; + score_reasons?: string[]; + source_kind?: string; + source_ref?: string; + labels?: string[]; + updated_at?: number; + metadata?: { + last_note?: string; + last_ci_summary?: string; + last_failure_summary?: string; + human_gate_pending?: boolean; + verification_steps?: { status: string; command: string }[]; + }; +} + +export interface JournalEntry { + timestamp: number; + kind: string; + task_id?: string; + summary: string; +} + +export interface Snapshot { + generated_at: number; + repo_name: string; + focus?: TaskCard; + counts: Record; + status_order: string[]; + columns: Record; + cards: TaskCard[]; + journal: JournalEntry[]; +} + +export const STATUS_LABELS: Record = { + queued: "Queued", + accepted: "Accepted", + preparing: "Preparing", + running: "Running", + verifying: "Verifying", + pr_open: "PR Open", + waiting_ci: "Waiting CI", + repairing: "Repairing", + completed: "Completed", + merged: "Merged", + failed: "Failed", + rejected: "Rejected", + superseded: "Superseded", +}; + +export const STATUS_COLORS: Record = { + queued: "#64748b", + accepted: "#8b5cf6", + preparing: "#0f766e", + running: "#00d4aa", + verifying: "#3b82f6", + pr_open: "#8b5cf6", + waiting_ci: "#3b82f6", + repairing: "#ff6b35", + completed: "#00d4aa", + merged: "#00d4aa", + failed: "#ff4444", + rejected: "#ff4444", + superseded: "#ffaa00", +}; diff --git a/autopilot-dashboard/src/vite-env.d.ts b/autopilot-dashboard/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/autopilot-dashboard/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/autopilot-dashboard/tsconfig.app.json b/autopilot-dashboard/tsconfig.app.json new file mode 100644 index 0000000..30bc289 --- /dev/null +++ b/autopilot-dashboard/tsconfig.app.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsBuildInfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/autopilot-dashboard/tsconfig.json b/autopilot-dashboard/tsconfig.json new file mode 100644 index 0000000..82a8007 --- /dev/null +++ b/autopilot-dashboard/tsconfig.json @@ -0,0 +1,4 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.app.json" }] +} diff --git a/autopilot-dashboard/vite.config.ts b/autopilot-dashboard/vite.config.ts new file mode 100644 index 0000000..eba981d --- /dev/null +++ b/autopilot-dashboard/vite.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + base: "./", + build: { + outDir: "../docs/autopilot", + emptyOutDir: false, + }, +}); diff --git a/docs/autopilot/assets/index-CUSUttvC.css b/docs/autopilot/assets/index-CUSUttvC.css new file mode 100644 index 0000000..0fbae72 --- /dev/null +++ b/docs/autopilot/assets/index-CUSUttvC.css @@ -0,0 +1 @@ +:root{--bg: #0a0a0a;--bg-surface: #111111;--bg-elevated: #1a1a1a;--ink: #ffffff;--ink-secondary: #888888;--accent: #00d4aa;--accent-light: #00f0c0;--accent-orange: #ff6b35;--accent-violet: #8b5cf6;--muted: #666666;--line: #222222;--line-bright: #333333;--success: #00d4aa;--error: #ff4444;--warning: #ffaa00;--mono: "JetBrains Mono", "Fira Code", ui-monospace, "Cascadia Code", monospace}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--mono);font-size:13px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh}::selection{background:#00d4aa40;color:#fff}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#333;border-radius:2px}::-webkit-scrollbar-thumb:hover{background:#555}.shell{max-width:1600px;margin:0 auto;padding:0 20px 56px}.hero{position:relative;overflow:hidden;margin:0 -20px;padding:60px 20px 40px;min-height:340px}.hero-bg{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.hero-content{position:relative;z-index:1;display:grid;grid-template-columns:1.4fr 1fr;gap:24px;max-width:1600px;margin:0 auto}.hero-main{padding:8px}.eyebrow{display:inline-flex;gap:8px;align-items:center;font-size:10px;letter-spacing:3px;text-transform:uppercase;color:var(--accent);font-weight:700;margin-bottom:20px}.hero h1{font-size:clamp(32px,4.5vw,56px);font-weight:700;letter-spacing:2px;line-height:1.1;margin-bottom:16px}.hero h1 .accent{color:var(--accent)}.hero-sub{color:var(--muted);font-size:12px;line-height:1.8;max-width:52ch;margin-bottom:24px}.focus-box{padding:16px;border-radius:6px;background:#00d4aa0f;border:1px solid rgba(0,212,170,.15)}.focus-box .focus-label{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--accent);font-weight:700;margin-bottom:8px}.focus-box .focus-text{font-size:12px;color:var(--ink-secondary);line-height:1.6}.hero-side{display:flex;flex-direction:column;gap:16px;padding:8px}.hero-timestamp{font-size:10px;letter-spacing:1px;color:var(--muted)}.stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border-radius:6px;overflow:hidden;margin-bottom:24px}.stat{background:var(--bg-surface);padding:20px;text-align:center;transition:background .2s ease}.stat:hover{background:var(--bg-elevated)}.stat-label{font-size:10px;letter-spacing:2px;text-transform:uppercase;font-weight:700;margin-bottom:8px}.stat-label.teal{color:var(--accent)}.stat-label.orange{color:var(--accent-orange)}.stat-label.violet{color:var(--accent-violet)}.stat-value{font-size:32px;font-weight:700;letter-spacing:-1px;line-height:1}.stat-sub{font-size:10px;color:#444;margin-top:6px;letter-spacing:1px}.toolbar{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:16px 20px;margin-bottom:20px;background:var(--bg-elevated);border:1px solid var(--line);border-radius:6px;flex-wrap:wrap}.toolbar input{flex:1;min-width:min(400px,100%);height:2.5rem;padding:0 14px;background:var(--bg);border:1px solid var(--line-bright);border-radius:4px;font-family:var(--mono);font-size:12px;color:var(--ink);transition:all .2s ease}.toolbar input::placeholder{color:#444}.toolbar input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #00d4aa1a}.toolbar .hint{font-size:11px;color:var(--muted);letter-spacing:.5px}.toolbar .hint code{color:var(--accent);font-size:11px}.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-bottom:24px}.column{background:var(--bg-elevated);border:1px solid var(--line);border-radius:6px;padding:16px;min-height:200px}.column-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--line)}.column-header h2{font-size:12px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase}.column-count{font-size:10px;font-weight:600;letter-spacing:1px;padding:2px 8px;border-radius:3px;background:#ffffff0a;border:1px solid var(--line);color:var(--ink-secondary)}.cards{display:grid;gap:10px}.card{background:var(--bg-surface);border:1px solid var(--line);border-radius:6px;padding:14px;transition:all .2s ease;position:relative;overflow:hidden}.card:before{content:"";position:absolute;top:0;left:0;width:3px;height:100%;background:var(--card-accent, var(--line-bright))}.card:hover{border-color:var(--line-bright);box-shadow:0 0 20px color-mix(in srgb,var(--card-accent, var(--accent)) 12%,transparent);transform:translateY(-1px)}.card-meta{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:var(--muted);margin-bottom:8px;letter-spacing:.5px}.card h3{font-size:13px;font-weight:600;line-height:1.4;margin-bottom:8px;letter-spacing:.3px}.card-body{font-size:11px;color:var(--muted);line-height:1.6;margin-bottom:10px;white-space:pre-wrap;word-break:break-word}.card-tags{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:10px}.tag{display:inline-flex;align-items:center;padding:2px 8px;font-size:9px;font-weight:600;letter-spacing:1px;text-transform:uppercase;border-radius:3px;background:#ffffff0a;color:var(--ink-secondary);border:1px solid var(--line)}.card-footer{border-top:1px solid var(--line);padding-top:10px;display:grid;gap:4px;font-size:10px;color:#555;letter-spacing:.3px}.badge{display:inline-flex;align-items:center;padding:2px 10px;font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;border-radius:3px}.badge-teal{background:#00d4aa1a;color:var(--accent);border:1px solid rgba(0,212,170,.2)}.badge-orange{background:#ff6b351a;color:var(--accent-orange);border:1px solid rgba(255,107,53,.2)}.badge-violet{background:#8b5cf61a;color:var(--accent-violet);border:1px solid rgba(139,92,246,.2)}.badge-red{background:#ff44441a;color:#f66;border:1px solid rgba(255,68,68,.2)}.badge-blue{background:#3b82f61a;color:#60a5fa;border:1px solid rgba(59,130,246,.2)}.badge-amber{background:#ffaa001a;color:#fa0;border:1px solid rgba(255,170,0,.2)}.badge-gray{background:#ffffff0a;color:#888;border:1px solid var(--line)}.journal{background:var(--bg-elevated);border:1px solid var(--line);border-radius:6px;padding:20px}.journal-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}.journal-header h2{font-size:12px;font-weight:700;letter-spacing:2px;text-transform:uppercase}.journal-list{display:grid;gap:8px}.journal-item{padding:12px 14px;border-radius:4px;border:1px solid var(--line);background:var(--bg-surface);transition:background .15s ease}.journal-item:hover{background:var(--bg-elevated)}.journal-item time{font-size:10px;color:var(--muted);letter-spacing:.5px;display:inline-block;margin-bottom:4px}.journal-item .kind{font-weight:700;color:var(--accent);font-size:11px;letter-spacing:.5px}.journal-item .task-ref{color:var(--accent-violet);font-size:11px}.journal-item .summary{font-size:12px;color:var(--ink-secondary);line-height:1.5}.empty{color:var(--muted);font-style:italic;padding:16px 4px;font-size:12px;letter-spacing:.5px}.pipeline-viz{background:var(--bg-elevated);border:1px solid var(--line);border-radius:6px;overflow:hidden;flex:1}@keyframes fade-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes glow-pulse{0%,to{box-shadow:0 0 12px #00d4aa14}50%{box-shadow:0 0 24px #00d4aa29}}.animate-fade-in{animation:fade-in .4s ease-out forwards}@media(max-width:1100px){.hero-content{grid-template-columns:1fr}.stats-bar{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.shell{padding:0 12px 36px}.hero{padding:40px 12px 28px;margin:0 -12px}.board{grid-template-columns:1fr}.stats-bar{grid-template-columns:1fr 1fr}.toolbar input{min-width:100%}} diff --git a/docs/autopilot/assets/index-DbmnWBut.js b/docs/autopilot/assets/index-DbmnWBut.js new file mode 100644 index 0000000..96709f9 --- /dev/null +++ b/docs/autopilot/assets/index-DbmnWBut.js @@ -0,0 +1,49 @@ +(function(){const C=document.createElement("link").relList;if(C&&C.supports&&C.supports("modulepreload"))return;for(const B of document.querySelectorAll('link[rel="modulepreload"]'))v(B);new MutationObserver(B=>{for(const V of B)if(V.type==="childList")for(const L of V.addedNodes)L.tagName==="LINK"&&L.rel==="modulepreload"&&v(L)}).observe(document,{childList:!0,subtree:!0});function Y(B){const V={};return B.integrity&&(V.integrity=B.integrity),B.referrerPolicy&&(V.referrerPolicy=B.referrerPolicy),B.crossOrigin==="use-credentials"?V.credentials="include":B.crossOrigin==="anonymous"?V.credentials="omit":V.credentials="same-origin",V}function v(B){if(B.ep)return;B.ep=!0;const V=Y(B);fetch(B.href,V)}})();var ef={exports:{}},Se={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var my;function W1(){if(my)return Se;my=1;var E=Symbol.for("react.transitional.element"),C=Symbol.for("react.fragment");function Y(v,B,V){var L=null;if(V!==void 0&&(L=""+V),B.key!==void 0&&(L=""+B.key),"key"in B){V={};for(var hl in B)hl!=="key"&&(V[hl]=B[hl])}else V=B;return B=V.ref,{$$typeof:E,type:v,key:L,ref:B!==void 0?B:null,props:V}}return Se.Fragment=C,Se.jsx=Y,Se.jsxs=Y,Se}var vy;function $1(){return vy||(vy=1,ef.exports=W1()),ef.exports}var r=$1(),nf={exports:{}},G={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var hy;function k1(){if(hy)return G;hy=1;var E=Symbol.for("react.transitional.element"),C=Symbol.for("react.portal"),Y=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),B=Symbol.for("react.profiler"),V=Symbol.for("react.consumer"),L=Symbol.for("react.context"),hl=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),S=Symbol.for("react.memo"),U=Symbol.for("react.lazy"),j=Symbol.for("react.activity"),ll=Symbol.iterator;function Nl(d){return d===null||typeof d!="object"?null:(d=ll&&d[ll]||d["@@iterator"],typeof d=="function"?d:null)}var nl={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ol=Object.assign,it={};function Sl(d,A,O){this.props=d,this.context=A,this.refs=it,this.updater=O||nl}Sl.prototype.isReactComponent={},Sl.prototype.setState=function(d,A){if(typeof d!="object"&&typeof d!="function"&&d!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,d,A,"setState")},Sl.prototype.forceUpdate=function(d){this.updater.enqueueForceUpdate(this,d,"forceUpdate")};function Dt(){}Dt.prototype=Sl.prototype;function ql(d,A,O){this.props=d,this.context=A,this.refs=it,this.updater=O||nl}var ct=ql.prototype=new Dt;ct.constructor=ql,Ol(ct,Sl.prototype),ct.isPureReactComponent=!0;var pt=Array.isArray;function Ql(){}var k={H:null,A:null,T:null,S:null},Xl=Object.prototype.hasOwnProperty;function Et(d,A,O){var D=O.ref;return{$$typeof:E,type:d,key:A,ref:D!==void 0?D:null,props:O}}function Qa(d,A){return Et(d.type,A,d.props)}function At(d){return typeof d=="object"&&d!==null&&d.$$typeof===E}function Zl(d){var A={"=":"=0",":":"=2"};return"$"+d.replace(/[=:]/g,function(O){return A[O]})}var za=/\/+/g;function Nt(d,A){return typeof d=="object"&&d!==null&&d.key!=null?Zl(""+d.key):A.toString(36)}function St(d){switch(d.status){case"fulfilled":return d.value;case"rejected":throw d.reason;default:switch(typeof d.status=="string"?d.then(Ql,Ql):(d.status="pending",d.then(function(A){d.status==="pending"&&(d.status="fulfilled",d.value=A)},function(A){d.status==="pending"&&(d.status="rejected",d.reason=A)})),d.status){case"fulfilled":return d.value;case"rejected":throw d.reason}}throw d}function z(d,A,O,D,Q){var K=typeof d;(K==="undefined"||K==="boolean")&&(d=null);var al=!1;if(d===null)al=!0;else switch(K){case"bigint":case"string":case"number":al=!0;break;case"object":switch(d.$$typeof){case E:case C:al=!0;break;case U:return al=d._init,z(al(d._payload),A,O,D,Q)}}if(al)return Q=Q(d),al=D===""?"."+Nt(d,0):D,pt(Q)?(O="",al!=null&&(O=al.replace(za,"$&/")+"/"),z(Q,A,O,"",function(_u){return _u})):Q!=null&&(At(Q)&&(Q=Qa(Q,O+(Q.key==null||d&&d.key===Q.key?"":(""+Q.key).replace(za,"$&/")+"/")+al)),A.push(Q)),1;al=0;var Yl=D===""?".":D+":";if(pt(d))for(var bl=0;bl>>1,dl=z[il];if(0>>1;ilB(O,q))DB(Q,O)?(z[il]=Q,z[D]=q,il=D):(z[il]=O,z[A]=q,il=A);else if(DB(Q,q))z[il]=Q,z[D]=q,il=D;else break l}}return _}function B(z,_){var q=z.sortIndex-_.sortIndex;return q!==0?q:z.id-_.id}if(E.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var V=performance;E.unstable_now=function(){return V.now()}}else{var L=Date,hl=L.now();E.unstable_now=function(){return L.now()-hl}}var x=[],S=[],U=1,j=null,ll=3,Nl=!1,nl=!1,Ol=!1,it=!1,Sl=typeof setTimeout=="function"?setTimeout:null,Dt=typeof clearTimeout=="function"?clearTimeout:null,ql=typeof setImmediate<"u"?setImmediate:null;function ct(z){for(var _=Y(S);_!==null;){if(_.callback===null)v(S);else if(_.startTime<=z)v(S),_.sortIndex=_.expirationTime,C(x,_);else break;_=Y(S)}}function pt(z){if(Ol=!1,ct(z),!nl)if(Y(x)!==null)nl=!0,Ql||(Ql=!0,Zl());else{var _=Y(S);_!==null&&St(pt,_.startTime-z)}}var Ql=!1,k=-1,Xl=5,Et=-1;function Qa(){return it?!0:!(E.unstable_now()-Etz&&Qa());){var il=j.callback;if(typeof il=="function"){j.callback=null,ll=j.priorityLevel;var dl=il(j.expirationTime<=z);if(z=E.unstable_now(),typeof dl=="function"){j.callback=dl,ct(z),_=!0;break t}j===Y(x)&&v(x),ct(z)}else v(x);j=Y(x)}if(j!==null)_=!0;else{var d=Y(S);d!==null&&St(pt,d.startTime-z),_=!1}}break l}finally{j=null,ll=q,Nl=!1}_=void 0}}finally{_?Zl():Ql=!1}}}var Zl;if(typeof ql=="function")Zl=function(){ql(At)};else if(typeof MessageChannel<"u"){var za=new MessageChannel,Nt=za.port2;za.port1.onmessage=At,Zl=function(){Nt.postMessage(null)}}else Zl=function(){Sl(At,0)};function St(z,_){k=Sl(function(){z(E.unstable_now())},_)}E.unstable_IdlePriority=5,E.unstable_ImmediatePriority=1,E.unstable_LowPriority=4,E.unstable_NormalPriority=3,E.unstable_Profiling=null,E.unstable_UserBlockingPriority=2,E.unstable_cancelCallback=function(z){z.callback=null},E.unstable_forceFrameRate=function(z){0>z||125il?(z.sortIndex=q,C(S,z),Y(x)===null&&z===Y(S)&&(Ol?(Dt(k),k=-1):Ol=!0,St(pt,q-il))):(z.sortIndex=dl,C(x,z),nl||Nl||(nl=!0,Ql||(Ql=!0,Zl()))),z},E.unstable_shouldYield=Qa,E.unstable_wrapCallback=function(z){var _=ll;return function(){var q=ll;ll=_;try{return z.apply(this,arguments)}finally{ll=q}}}})(sf)),sf}var Sy;function I1(){return Sy||(Sy=1,ff.exports=F1()),ff.exports}var df={exports:{}},Bl={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var by;function P1(){if(by)return Bl;by=1;var E=yf();function C(x){var S="https://react.dev/errors/"+x;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(E)}catch(C){console.error(C)}}return E(),df.exports=P1(),df.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ty;function tm(){if(Ty)return be;Ty=1;var E=I1(),C=yf(),Y=lm();function v(l){var t="https://react.dev/errors/"+l;if(1dl||(l.current=il[dl],il[dl]=null,dl--)}function O(l,t){dl++,il[dl]=l.current,l.current=t}var D=d(null),Q=d(null),K=d(null),al=d(null);function Yl(l,t){switch(O(K,t),O(Q,l),O(D,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?qd(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=qd(t),l=Bd(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}A(D),O(D,l)}function bl(){A(D),A(Q),A(K)}function _u(l){l.memoizedState!==null&&O(al,l);var t=D.current,a=Bd(t,l.type);t!==a&&(O(Q,l),O(D,a))}function Te(l){Q.current===l&&(A(D),A(Q)),al.current===l&&(A(al),ve._currentValue=q)}var Qn,of;function Ta(l){if(Qn===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Qn=t&&t[1]||"",of=-1)":-1e||f[u]!==m[e]){var b=` +`+f[u].replace(" at new "," at ");return l.displayName&&b.includes("")&&(b=b.replace("",l.displayName)),b}while(1<=u&&0<=e);break}}}finally{Xn=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?Ta(a):""}function Ay(l,t){switch(l.tag){case 26:case 27:case 5:return Ta(l.type);case 16:return Ta("Lazy");case 13:return l.child!==t&&t!==null?Ta("Suspense Fallback"):Ta("Suspense");case 19:return Ta("SuspenseList");case 0:case 15:return Zn(l.type,!1);case 11:return Zn(l.type.render,!1);case 1:return Zn(l.type,!0);case 31:return Ta("Activity");default:return""}}function mf(l){try{var t="",a=null;do t+=Ay(l,a),a=l,l=l.return;while(l);return t}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var Ln=Object.prototype.hasOwnProperty,Vn=E.unstable_scheduleCallback,Kn=E.unstable_cancelCallback,_y=E.unstable_shouldYield,Oy=E.unstable_requestPaint,kl=E.unstable_now,My=E.unstable_getCurrentPriorityLevel,vf=E.unstable_ImmediatePriority,hf=E.unstable_UserBlockingPriority,pe=E.unstable_NormalPriority,xy=E.unstable_LowPriority,rf=E.unstable_IdlePriority,Dy=E.log,Ny=E.unstable_setDisableYieldValue,Ou=null,Fl=null;function $t(l){if(typeof Dy=="function"&&Ny(l),Fl&&typeof Fl.setStrictMode=="function")try{Fl.setStrictMode(Ou,l)}catch{}}var Il=Math.clz32?Math.clz32:Hy,Uy=Math.log,jy=Math.LN2;function Hy(l){return l>>>=0,l===0?32:31-(Uy(l)/jy|0)|0}var Ee=256,Ae=262144,_e=4194304;function pa(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Oe(l,t,a){var u=l.pendingLanes;if(u===0)return 0;var e=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=u&134217727;return c!==0?(u=c&~n,u!==0?e=pa(u):(i&=c,i!==0?e=pa(i):a||(a=c&~l,a!==0&&(e=pa(a))))):(c=u&~n,c!==0?e=pa(c):i!==0?e=pa(i):a||(a=u&~l,a!==0&&(e=pa(a)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:e}function Mu(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Cy(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function gf(){var l=_e;return _e<<=1,(_e&62914560)===0&&(_e=4194304),l}function Jn(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function xu(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Ry(l,t,a,u,e,n){var i=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,m=l.hiddenUpdates;for(a=i&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var Xy=/[\n"\\]/g;function st(l){return l.replace(Xy,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function In(l,t,a,u,e,n,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+ft(t)):l.value!==""+ft(t)&&(l.value=""+ft(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?Pn(l,i,ft(t)):a!=null?Pn(l,i,ft(a)):u!=null&&l.removeAttribute("value"),e==null&&n!=null&&(l.defaultChecked=!!n),e!=null&&(l.checked=e&&typeof e!="function"&&typeof e!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+ft(c):l.removeAttribute("name")}function Nf(l,t,a,u,e,n,i,c){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){Fn(l);return}a=a!=null?""+ft(a):"",t=t!=null?""+ft(t):a,c||t===l.value||(l.value=t),l.defaultValue=t}u=u??e,u=typeof u!="function"&&typeof u!="symbol"&&!!u,l.checked=c?l.checked:!!u,l.defaultChecked=!!u,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),Fn(l)}function Pn(l,t,a){t==="number"&&De(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ja(l,t,a,u){if(l=l.options,t){t={};for(var e=0;e"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ei=!1;if(Ht)try{var ju={};Object.defineProperty(ju,"passive",{get:function(){ei=!0}}),window.addEventListener("test",ju,ju),window.removeEventListener("test",ju,ju)}catch{ei=!1}var Ft=null,ni=null,Ue=null;function Bf(){if(Ue)return Ue;var l,t=ni,a=t.length,u,e="value"in Ft?Ft.value:Ft.textContent,n=e.length;for(l=0;l=Ru),Lf=" ",Vf=!1;function Kf(l,t){switch(l){case"keyup":return ro.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Jf(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var ka=!1;function So(l,t){switch(l){case"compositionend":return Jf(t);case"keypress":return t.which!==32?null:(Vf=!0,Lf);case"textInput":return l=t.data,l===Lf&&Vf?null:l;default:return null}}function bo(l,t){if(ka)return l==="compositionend"||!di&&Kf(l,t)?(l=Bf(),Ue=ni=Ft=null,ka=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=u}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=l0(a)}}function a0(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?a0(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function u0(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=De(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=De(l.document)}return t}function mi(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var Mo=Ht&&"documentMode"in document&&11>=document.documentMode,Fa=null,vi=null,Gu=null,hi=!1;function e0(l,t,a){var u=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;hi||Fa==null||Fa!==De(u)||(u=Fa,"selectionStart"in u&&mi(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Gu&&Yu(Gu,u)||(Gu=u,u=_n(vi,"onSelect"),0>=i,e-=i,_t=1<<32-Il(t)+e|a<Z?($=N,N=null):$=N.sibling;var P=h(y,N,o[Z],T);if(P===null){N===null&&(N=$);break}l&&N&&P.alternate===null&&t(y,N),s=n(P,s,Z),I===null?H=P:I.sibling=P,I=P,N=$}if(Z===o.length)return a(y,N),F&&Rt(y,Z),H;if(N===null){for(;ZZ?($=N,N=null):$=N.sibling;var ba=h(y,N,P.value,T);if(ba===null){N===null&&(N=$);break}l&&N&&ba.alternate===null&&t(y,N),s=n(ba,s,Z),I===null?H=ba:I.sibling=ba,I=ba,N=$}if(P.done)return a(y,N),F&&Rt(y,Z),H;if(N===null){for(;!P.done;Z++,P=o.next())P=p(y,P.value,T),P!==null&&(s=n(P,s,Z),I===null?H=P:I.sibling=P,I=P);return F&&Rt(y,Z),H}for(N=u(N);!P.done;Z++,P=o.next())P=g(N,y,Z,P.value,T),P!==null&&(l&&P.alternate!==null&&N.delete(P.key===null?Z:P.key),s=n(P,s,Z),I===null?H=P:I.sibling=P,I=P);return l&&N.forEach(function(w1){return t(y,w1)}),F&&Rt(y,Z),H}function sl(y,s,o,T){if(typeof o=="object"&&o!==null&&o.type===Ol&&o.key===null&&(o=o.props.children),typeof o=="object"&&o!==null){switch(o.$$typeof){case Nl:l:{for(var H=o.key;s!==null;){if(s.key===H){if(H=o.type,H===Ol){if(s.tag===7){a(y,s.sibling),T=e(s,o.props.children),T.return=y,y=T;break l}}else if(s.elementType===H||typeof H=="object"&&H!==null&&H.$$typeof===Xl&&Ha(H)===s.type){a(y,s.sibling),T=e(s,o.props),Ku(T,o),T.return=y,y=T;break l}a(y,s);break}else t(y,s);s=s.sibling}o.type===Ol?(T=xa(o.props.children,y.mode,T,o.key),T.return=y,y=T):(T=Xe(o.type,o.key,o.props,null,y.mode,T),Ku(T,o),T.return=y,y=T)}return i(y);case nl:l:{for(H=o.key;s!==null;){if(s.key===H)if(s.tag===4&&s.stateNode.containerInfo===o.containerInfo&&s.stateNode.implementation===o.implementation){a(y,s.sibling),T=e(s,o.children||[]),T.return=y,y=T;break l}else{a(y,s);break}else t(y,s);s=s.sibling}T=pi(o,y.mode,T),T.return=y,y=T}return i(y);case Xl:return o=Ha(o),sl(y,s,o,T)}if(St(o))return M(y,s,o,T);if(Zl(o)){if(H=Zl(o),typeof H!="function")throw Error(v(150));return o=H.call(o),R(y,s,o,T)}if(typeof o.then=="function")return sl(y,s,We(o),T);if(o.$$typeof===ql)return sl(y,s,Ve(y,o),T);$e(y,o)}return typeof o=="string"&&o!==""||typeof o=="number"||typeof o=="bigint"?(o=""+o,s!==null&&s.tag===6?(a(y,s.sibling),T=e(s,o),T.return=y,y=T):(a(y,s),T=Ti(o,y.mode,T),T.return=y,y=T),i(y)):a(y,s)}return function(y,s,o,T){try{Vu=0;var H=sl(y,s,o,T);return fu=null,H}catch(N){if(N===cu||N===Je)throw N;var I=lt(29,N,null,y.mode);return I.lanes=T,I.return=y,I}finally{}}}var Ra=M0(!0),x0=M0(!1),aa=!1;function Ci(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ri(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function ua(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function ea(l,t,a){var u=l.updateQueue;if(u===null)return null;if(u=u.shared,(tl&2)!==0){var e=u.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),u.pending=t,t=Qe(l),y0(l,null,a),t}return Ge(l,u,t,a),Qe(l)}function Ju(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,bf(l,a)}}function qi(l,t){var a=l.updateQueue,u=l.alternate;if(u!==null&&(u=u.updateQueue,a===u)){var e=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var i={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?e=n=i:n=n.next=i,a=a.next}while(a!==null);n===null?e=n=t:n=n.next=t}else e=n=t;a={baseState:u.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:u.shared,callbacks:u.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var Bi=!1;function wu(){if(Bi){var l=iu;if(l!==null)throw l}}function Wu(l,t,a,u){Bi=!1;var e=l.updateQueue;aa=!1;var n=e.firstBaseUpdate,i=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var f=c,m=f.next;f.next=null,i===null?n=m:i.next=m,i=f;var b=l.alternate;b!==null&&(b=b.updateQueue,c=b.lastBaseUpdate,c!==i&&(c===null?b.firstBaseUpdate=m:c.next=m,b.lastBaseUpdate=f))}if(n!==null){var p=e.baseState;i=0,b=m=f=null,c=n;do{var h=c.lane&-536870913,g=h!==c.lane;if(g?(W&h)===h:(u&h)===h){h!==0&&h===nu&&(Bi=!0),b!==null&&(b=b.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var M=l,R=c;h=t;var sl=a;switch(R.tag){case 1:if(M=R.payload,typeof M=="function"){p=M.call(sl,p,h);break l}p=M;break l;case 3:M.flags=M.flags&-65537|128;case 0:if(M=R.payload,h=typeof M=="function"?M.call(sl,p,h):M,h==null)break l;p=j({},p,h);break l;case 2:aa=!0}}h=c.callback,h!==null&&(l.flags|=64,g&&(l.flags|=8192),g=e.callbacks,g===null?e.callbacks=[h]:g.push(h))}else g={lane:h,tag:c.tag,payload:c.payload,callback:c.callback,next:null},b===null?(m=b=g,f=p):b=b.next=g,i|=h;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;g=c,c=g.next,g.next=null,e.lastBaseUpdate=g,e.shared.pending=null}}while(!0);b===null&&(f=p),e.baseState=f,e.firstBaseUpdate=m,e.lastBaseUpdate=b,n===null&&(e.shared.lanes=0),sa|=i,l.lanes=i,l.memoizedState=p}}function D0(l,t){if(typeof l!="function")throw Error(v(191,l));l.call(t)}function N0(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var i=z.T,c={};z.T=c,ac(l,!1,t,a);try{var f=e(),m=z.S;if(m!==null&&m(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var b=qo(f,u);Fu(l,t,b,nt(l))}else Fu(l,t,u,nt(l))}catch(p){Fu(l,t,{then:function(){},status:"rejected",reason:p},nt())}finally{_.p=n,i!==null&&c.types!==null&&(i.types=c.types),z.T=i}}function Zo(){}function lc(l,t,a,u){if(l.tag!==5)throw Error(v(476));var e=fs(l).queue;cs(l,e,t,q,a===null?Zo:function(){return ss(l),a(u)})}function fs(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:q,baseState:q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Gt,lastRenderedState:q},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Gt,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function ss(l){var t=fs(l);t.next===null&&(t=l.alternate.memoizedState),Fu(l,t.next.queue,{},nt())}function tc(){return Hl(ve)}function ds(){return Tl().memoizedState}function ys(){return Tl().memoizedState}function Lo(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=nt();l=ua(a);var u=ea(t,l,a);u!==null&&($l(u,t,a),Ju(u,t,a)),t={cache:Ni()},l.payload=t;return}t=t.return}}function Vo(l,t,a){var u=nt();a={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},nn(l)?ms(t,a):(a=bi(l,t,a,u),a!==null&&($l(a,l,u),vs(a,t,u)))}function os(l,t,a){var u=nt();Fu(l,t,a,u)}function Fu(l,t,a,u){var e={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(nn(l))ms(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,a);if(e.hasEagerState=!0,e.eagerState=c,Pl(c,i))return Ge(l,t,e,0),yl===null&&Ye(),!1}catch{}finally{}if(a=bi(l,t,e,u),a!==null)return $l(a,l,u),vs(a,t,u),!0}return!1}function ac(l,t,a,u){if(u={lane:2,revertLane:Cc(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},nn(l)){if(t)throw Error(v(479))}else t=bi(l,a,u,2),t!==null&&$l(t,l,2)}function nn(l){var t=l.alternate;return l===X||t!==null&&t===X}function ms(l,t){du=Ie=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function vs(l,t,a){if((a&4194048)!==0){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,bf(l,a)}}var Iu={readContext:Hl,use:tn,useCallback:rl,useContext:rl,useEffect:rl,useImperativeHandle:rl,useLayoutEffect:rl,useInsertionEffect:rl,useMemo:rl,useReducer:rl,useRef:rl,useState:rl,useDebugValue:rl,useDeferredValue:rl,useTransition:rl,useSyncExternalStore:rl,useId:rl,useHostTransitionStatus:rl,useFormState:rl,useActionState:rl,useOptimistic:rl,useMemoCache:rl,useCacheRefresh:rl};Iu.useEffectEvent=rl;var hs={readContext:Hl,use:tn,useCallback:function(l,t){return Gl().memoizedState=[l,t===void 0?null:t],l},useContext:Hl,useEffect:I0,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,un(4194308,4,as.bind(null,t,l),a)},useLayoutEffect:function(l,t){return un(4194308,4,l,t)},useInsertionEffect:function(l,t){un(4,2,l,t)},useMemo:function(l,t){var a=Gl();t=t===void 0?null:t;var u=l();if(qa){$t(!0);try{l()}finally{$t(!1)}}return a.memoizedState=[u,t],u},useReducer:function(l,t,a){var u=Gl();if(a!==void 0){var e=a(t);if(qa){$t(!0);try{a(t)}finally{$t(!1)}}}else e=t;return u.memoizedState=u.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},u.queue=l,l=l.dispatch=Vo.bind(null,X,l),[u.memoizedState,l]},useRef:function(l){var t=Gl();return l={current:l},t.memoizedState=l},useState:function(l){l=$i(l);var t=l.queue,a=os.bind(null,X,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:Ii,useDeferredValue:function(l,t){var a=Gl();return Pi(a,l,t)},useTransition:function(){var l=$i(!1);return l=cs.bind(null,X,l.queue,!0,!1),Gl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var u=X,e=Gl();if(F){if(a===void 0)throw Error(v(407));a=a()}else{if(a=t(),yl===null)throw Error(v(349));(W&127)!==0||q0(u,t,a)}e.memoizedState=a;var n={value:a,getSnapshot:t};return e.queue=n,I0(Y0.bind(null,u,n,l),[l]),u.flags|=2048,ou(9,{destroy:void 0},B0.bind(null,u,n,a,t),null),a},useId:function(){var l=Gl(),t=yl.identifierPrefix;if(F){var a=Ot,u=_t;a=(u&~(1<<32-Il(u)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Pe++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof u.is=="string"?i.createElement("select",{is:u.is}):i.createElement("select"),u.multiple?n.multiple=!0:u.size&&(n.size=u.size);break;default:n=typeof u.is=="string"?i.createElement(e,{is:u.is}):i.createElement(e)}}n[Ul]=t,n[Ll]=u;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(Rl(n,e,u),e){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break l;case"img":u=!0;break l;default:u=!1}u&&Xt(t)}}return ml(t),rc(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==u&&Xt(t);else{if(typeof u!="string"&&t.stateNode===null)throw Error(v(166));if(l=K.current,uu(t)){if(l=t.stateNode,a=t.memoizedProps,u=null,e=jl,e!==null)switch(e.tag){case 27:case 5:u=e.memoizedProps}l[Ul]=t,l=!!(l.nodeValue===a||u!==null&&u.suppressHydrationWarning===!0||Cd(l.nodeValue,a)),l||la(t,!0)}else l=On(l).createTextNode(u),l[Ul]=t,t.stateNode=l}return ml(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(u=uu(t),a!==null){if(l===null){if(!u)throw Error(v(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(v(557));l[Ul]=t}else Da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ml(t),l=!1}else a=Oi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(at(t),t):(at(t),null);if((t.flags&128)!==0)throw Error(v(558))}return ml(t),null;case 13:if(u=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=uu(t),u!==null&&u.dehydrated!==null){if(l===null){if(!e)throw Error(v(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(v(317));e[Ul]=t}else Da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ml(t),e=!1}else e=Oi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(at(t),t):(at(t),null)}return at(t),(t.flags&128)!==0?(t.lanes=a,t):(a=u!==null,l=l!==null&&l.memoizedState!==null,a&&(u=t.child,e=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(e=u.alternate.memoizedState.cachePool.pool),n=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(n=u.memoizedState.cachePool.pool),n!==e&&(u.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),yn(t,t.updateQueue),ml(t),null);case 4:return bl(),l===null&&Yc(t.stateNode.containerInfo),ml(t),null;case 10:return Bt(t.type),ml(t),null;case 19:if(A(zl),u=t.memoizedState,u===null)return ml(t),null;if(e=(t.flags&128)!==0,n=u.rendering,n===null)if(e)le(u,!1);else{if(gl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Fe(l),n!==null){for(t.flags|=128,le(u,!1),l=n.updateQueue,t.updateQueue=l,yn(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)o0(a,l),a=a.sibling;return O(zl,zl.current&1|2),F&&Rt(t,u.treeForkCount),t.child}l=l.sibling}u.tail!==null&&kl()>rn&&(t.flags|=128,e=!0,le(u,!1),t.lanes=4194304)}else{if(!e)if(l=Fe(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,yn(t,l),le(u,!0),u.tail===null&&u.tailMode==="hidden"&&!n.alternate&&!F)return ml(t),null}else 2*kl()-u.renderingStartTime>rn&&a!==536870912&&(t.flags|=128,e=!0,le(u,!1),t.lanes=4194304);u.isBackwards?(n.sibling=t.child,t.child=n):(l=u.last,l!==null?l.sibling=n:t.child=n,u.last=n)}return u.tail!==null?(l=u.tail,u.rendering=l,u.tail=l.sibling,u.renderingStartTime=kl(),l.sibling=null,a=zl.current,O(zl,e?a&1|2:a&1),F&&Rt(t,u.treeForkCount),l):(ml(t),null);case 22:case 23:return at(t),Gi(),u=t.memoizedState!==null,l!==null?l.memoizedState!==null!==u&&(t.flags|=8192):u&&(t.flags|=8192),u?(a&536870912)!==0&&(t.flags&128)===0&&(ml(t),t.subtreeFlags&6&&(t.flags|=8192)):ml(t),a=t.updateQueue,a!==null&&yn(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),u=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(u=t.memoizedState.cachePool.pool),u!==a&&(t.flags|=2048),l!==null&&A(ja),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Bt(pl),ml(t),null;case 25:return null;case 30:return null}throw Error(v(156,t.tag))}function $o(l,t){switch(Ai(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Bt(pl),bl(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Te(t),null;case 31:if(t.memoizedState!==null){if(at(t),t.alternate===null)throw Error(v(340));Da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(at(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(v(340));Da()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return A(zl),null;case 4:return bl(),null;case 10:return Bt(t.type),null;case 22:case 23:return at(t),Gi(),l!==null&&A(ja),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Bt(pl),null;case 25:return null;default:return null}}function Gs(l,t){switch(Ai(t),t.tag){case 3:Bt(pl),bl();break;case 26:case 27:case 5:Te(t);break;case 4:bl();break;case 31:t.memoizedState!==null&&at(t);break;case 13:at(t);break;case 19:A(zl);break;case 10:Bt(t.type);break;case 22:case 23:at(t),Gi(),l!==null&&A(ja);break;case 24:Bt(pl)}}function te(l,t){try{var a=t.updateQueue,u=a!==null?a.lastEffect:null;if(u!==null){var e=u.next;a=e;do{if((a.tag&l)===l){u=void 0;var n=a.create,i=a.inst;u=n(),i.destroy=u}a=a.next}while(a!==e)}}catch(c){el(t,t.return,c)}}function ca(l,t,a){try{var u=t.updateQueue,e=u!==null?u.lastEffect:null;if(e!==null){var n=e.next;u=n;do{if((u.tag&l)===l){var i=u.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,e=t;var f=a,m=c;try{m()}catch(b){el(e,f,b)}}}u=u.next}while(u!==n)}}catch(b){el(t,t.return,b)}}function Qs(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{N0(t,a)}catch(u){el(l,l.return,u)}}}function Xs(l,t,a){a.props=Ba(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(u){el(l,t,u)}}function ae(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var u=l.stateNode;break;case 30:u=l.stateNode;break;default:u=l.stateNode}typeof a=="function"?l.refCleanup=a(u):a.current=u}}catch(e){el(l,t,e)}}function Mt(l,t){var a=l.ref,u=l.refCleanup;if(a!==null)if(typeof u=="function")try{u()}catch(e){el(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(e){el(l,t,e)}else a.current=null}function Zs(l){var t=l.type,a=l.memoizedProps,u=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&u.focus();break l;case"img":a.src?u.src=a.src:a.srcSet&&(u.srcset=a.srcSet)}}catch(e){el(l,l.return,e)}}function gc(l,t,a){try{var u=l.stateNode;g1(u,l.type,a,t),u[Ll]=t}catch(e){el(l,l.return,e)}}function Ls(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&va(l.type)||l.tag===4}function Sc(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Ls(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&va(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function bc(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=jt));else if(u!==4&&(u===27&&va(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(bc(l,t,a),l=l.sibling;l!==null;)bc(l,t,a),l=l.sibling}function on(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(u!==4&&(u===27&&va(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(on(l,t,a),l=l.sibling;l!==null;)on(l,t,a),l=l.sibling}function Vs(l){var t=l.stateNode,a=l.memoizedProps;try{for(var u=l.type,e=t.attributes;e.length;)t.removeAttributeNode(e[0]);Rl(t,u,a),t[Ul]=l,t[Ll]=a}catch(n){el(l,l.return,n)}}var Zt=!1,_l=!1,zc=!1,Ks=typeof WeakSet=="function"?WeakSet:Set,Dl=null;function ko(l,t){if(l=l.containerInfo,Xc=Hn,l=u0(l),mi(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var u=a.getSelection&&a.getSelection();if(u&&u.rangeCount!==0){a=u.anchorNode;var e=u.anchorOffset,n=u.focusNode;u=u.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var i=0,c=-1,f=-1,m=0,b=0,p=l,h=null;t:for(;;){for(var g;p!==a||e!==0&&p.nodeType!==3||(c=i+e),p!==n||u!==0&&p.nodeType!==3||(f=i+u),p.nodeType===3&&(i+=p.nodeValue.length),(g=p.firstChild)!==null;)h=p,p=g;for(;;){if(p===l)break t;if(h===a&&++m===e&&(c=i),h===n&&++b===u&&(f=i),(g=p.nextSibling)!==null)break;p=h,h=p.parentNode}p=g}a=c===-1||f===-1?null:{start:c,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Zc={focusedElem:l,selectionRange:a},Hn=!1,Dl=t;Dl!==null;)if(t=Dl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Dl=l;else for(;Dl!==null;){switch(t=Dl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),Rl(n,u,a),n[Ul]=l,xl(n),u=n;break l;case"link":var i=Fd("link","href",e).get(u+(a.href||""));if(i){for(var c=0;csl&&(i=sl,sl=R,R=i);var y=t0(c,R),s=t0(c,sl);if(y&&s&&(g.rangeCount!==1||g.anchorNode!==y.node||g.anchorOffset!==y.offset||g.focusNode!==s.node||g.focusOffset!==s.offset)){var o=p.createRange();o.setStart(y.node,y.offset),g.removeAllRanges(),R>sl?(g.addRange(o),g.extend(s.node,s.offset)):(o.setEnd(s.node,s.offset),g.addRange(o))}}}}for(p=[],g=c;g=g.parentNode;)g.nodeType===1&&p.push({element:g,left:g.scrollLeft,top:g.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ca?32:a,z.T=null,a=Mc,Mc=null;var n=ya,i=wt;if(Ml=0,gu=ya=null,wt=0,(tl&6)!==0)throw Error(v(331));var c=tl;if(tl|=4,ad(n.current),Ps(n,n.current,i,a),tl=c,fe(0,!1),Fl&&typeof Fl.onPostCommitFiberRoot=="function")try{Fl.onPostCommitFiberRoot(Ou,n)}catch{}return!0}finally{_.p=e,z.T=u,zd(l,t)}}function pd(l,t,a){t=yt(a,t),t=ic(l.stateNode,t,2),l=ea(l,t,2),l!==null&&(xu(l,2),xt(l))}function el(l,t,a){if(l.tag===3)pd(l,l,a);else for(;t!==null;){if(t.tag===3){pd(t,l,a);break}else if(t.tag===1){var u=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(da===null||!da.has(u))){l=yt(a,l),a=Es(2),u=ea(t,a,2),u!==null&&(As(a,u,t,l),xu(u,2),xt(u));break}}t=t.return}}function Uc(l,t,a){var u=l.pingCache;if(u===null){u=l.pingCache=new Po;var e=new Set;u.set(t,e)}else e=u.get(t),e===void 0&&(e=new Set,u.set(t,e));e.has(a)||(Ec=!0,e.add(a),l=e1.bind(null,l,t,a),t.then(l,l))}function e1(l,t,a){var u=l.pingCache;u!==null&&u.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,yl===l&&(W&a)===a&&(gl===4||gl===3&&(W&62914560)===W&&300>kl()-hn?(tl&2)===0&&Su(l,0):Ac|=a,ru===W&&(ru=0)),xt(l)}function Ed(l,t){t===0&&(t=gf()),l=Ma(l,t),l!==null&&(xu(l,t),xt(l))}function n1(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),Ed(l,a)}function i1(l,t){var a=0;switch(l.tag){case 31:case 13:var u=l.stateNode,e=l.memoizedState;e!==null&&(a=e.retryLane);break;case 19:u=l.stateNode;break;case 22:u=l.stateNode._retryCache;break;default:throw Error(v(314))}u!==null&&u.delete(t),Ed(l,a)}function c1(l,t){return Vn(l,t)}var pn=null,zu=null,jc=!1,En=!1,Hc=!1,ma=0;function xt(l){l!==zu&&l.next===null&&(zu===null?pn=zu=l:zu=zu.next=l),En=!0,jc||(jc=!0,s1())}function fe(l,t){if(!Hc&&En){Hc=!0;do for(var a=!1,u=pn;u!==null;){if(l!==0){var e=u.pendingLanes;if(e===0)var n=0;else{var i=u.suspendedLanes,c=u.pingedLanes;n=(1<<31-Il(42|l)+1)-1,n&=e&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,Md(u,n))}else n=W,n=Oe(u,u===yl?n:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(n&3)===0||Mu(u,n)||(a=!0,Md(u,n));u=u.next}while(a);Hc=!1}}function f1(){Ad()}function Ad(){En=jc=!1;var l=0;ma!==0&&b1()&&(l=ma);for(var t=kl(),a=null,u=pn;u!==null;){var e=u.next,n=_d(u,t);n===0?(u.next=null,a===null?pn=e:a.next=e,e===null&&(zu=a)):(a=u,(l!==0||(n&3)!==0)&&(En=!0)),u=e}Ml!==0&&Ml!==5||fe(l),ma!==0&&(ma=0)}function _d(l,t){for(var a=l.suspendedLanes,u=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var b=f.transferSize,p=f.initiatorType;b&&Rd(p)&&(f=f.responseEnd,i+=b*(f"u"?null:document;function wd(l,t,a){var u=Tu;if(u&&typeof t=="string"&&t){var e=st(t);e='link[rel="'+l+'"][href="'+e+'"]',typeof a=="string"&&(e+='[crossorigin="'+a+'"]'),Jd.has(e)||(Jd.add(e),l={rel:l,crossOrigin:a,href:t},u.querySelector(e)===null&&(t=u.createElement("link"),Rl(t,"link",l),xl(t),u.head.appendChild(t)))}}function x1(l){Wt.D(l),wd("dns-prefetch",l,null)}function D1(l,t){Wt.C(l,t),wd("preconnect",l,t)}function N1(l,t,a){Wt.L(l,t,a);var u=Tu;if(u&&l&&t){var e='link[rel="preload"][as="'+st(t)+'"]';t==="image"&&a&&a.imageSrcSet?(e+='[imagesrcset="'+st(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(e+='[imagesizes="'+st(a.imageSizes)+'"]')):e+='[href="'+st(l)+'"]';var n=e;switch(t){case"style":n=pu(l);break;case"script":n=Eu(l)}gt.has(n)||(l=j({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),gt.set(n,l),u.querySelector(e)!==null||t==="style"&&u.querySelector(oe(n))||t==="script"&&u.querySelector(me(n))||(t=u.createElement("link"),Rl(t,"link",l),xl(t),u.head.appendChild(t)))}}function U1(l,t){Wt.m(l,t);var a=Tu;if(a&&l){var u=t&&typeof t.as=="string"?t.as:"script",e='link[rel="modulepreload"][as="'+st(u)+'"][href="'+st(l)+'"]',n=e;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=Eu(l)}if(!gt.has(n)&&(l=j({rel:"modulepreload",href:l},t),gt.set(n,l),a.querySelector(e)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(me(n)))return}u=a.createElement("link"),Rl(u,"link",l),xl(u),a.head.appendChild(u)}}}function j1(l,t,a){Wt.S(l,t,a);var u=Tu;if(u&&l){var e=Va(u).hoistableStyles,n=pu(l);t=t||"default";var i=e.get(n);if(!i){var c={loading:0,preload:null};if(i=u.querySelector(oe(n)))c.loading=5;else{l=j({rel:"stylesheet",href:l,"data-precedence":t},a),(a=gt.get(n))&&$c(l,a);var f=i=u.createElement("link");xl(f),Rl(f,"link",l),f._p=new Promise(function(m,b){f.onload=m,f.onerror=b}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,xn(i,t,u)}i={type:"stylesheet",instance:i,count:1,state:c},e.set(n,i)}}}function H1(l,t){Wt.X(l,t);var a=Tu;if(a&&l){var u=Va(a).hoistableScripts,e=Eu(l),n=u.get(e);n||(n=a.querySelector(me(e)),n||(l=j({src:l,async:!0},t),(t=gt.get(e))&&kc(l,t),n=a.createElement("script"),xl(n),Rl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function C1(l,t){Wt.M(l,t);var a=Tu;if(a&&l){var u=Va(a).hoistableScripts,e=Eu(l),n=u.get(e);n||(n=a.querySelector(me(e)),n||(l=j({src:l,async:!0,type:"module"},t),(t=gt.get(e))&&kc(l,t),n=a.createElement("script"),xl(n),Rl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function Wd(l,t,a,u){var e=(e=K.current)?Mn(e):null;if(!e)throw Error(v(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=pu(a.href),a=Va(e).hoistableStyles,u=a.get(t),u||(u={type:"style",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=pu(a.href);var n=Va(e).hoistableStyles,i=n.get(l);if(i||(e=e.ownerDocument||e,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=e.querySelector(oe(l)))&&!n._p&&(i.instance=n,i.state.loading=5),gt.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},gt.set(l,a),n||R1(e,l,a,i.state))),t&&u===null)throw Error(v(528,""));return i}if(t&&u!==null)throw Error(v(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Eu(a),a=Va(e).hoistableScripts,u=a.get(t),u||(u={type:"script",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(v(444,l))}}function pu(l){return'href="'+st(l)+'"'}function oe(l){return'link[rel="stylesheet"]['+l+"]"}function $d(l){return j({},l,{"data-precedence":l.precedence,precedence:null})}function R1(l,t,a,u){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?u.loading=1:(t=l.createElement("link"),u.preload=t,t.addEventListener("load",function(){return u.loading|=1}),t.addEventListener("error",function(){return u.loading|=2}),Rl(t,"link",a),xl(t),l.head.appendChild(t))}function Eu(l){return'[src="'+st(l)+'"]'}function me(l){return"script[async]"+l}function kd(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var u=l.querySelector('style[data-href~="'+st(a.href)+'"]');if(u)return t.instance=u,xl(u),u;var e=j({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return u=(l.ownerDocument||l).createElement("style"),xl(u),Rl(u,"style",e),xn(u,a.precedence,l),t.instance=u;case"stylesheet":e=pu(a.href);var n=l.querySelector(oe(e));if(n)return t.state.loading|=4,t.instance=n,xl(n),n;u=$d(a),(e=gt.get(e))&&$c(u,e),n=(l.ownerDocument||l).createElement("link"),xl(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),Rl(n,"link",u),t.state.loading|=4,xn(n,a.precedence,l),t.instance=n;case"script":return n=Eu(a.src),(e=l.querySelector(me(n)))?(t.instance=e,xl(e),e):(u=a,(e=gt.get(n))&&(u=j({},a),kc(u,e)),l=l.ownerDocument||l,e=l.createElement("script"),xl(e),Rl(e,"link",u),l.head.appendChild(e),t.instance=e);case"void":return null;default:throw Error(v(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(u=t.instance,t.state.loading|=4,xn(u,a.precedence,l));return t.instance}function xn(l,t,a){for(var u=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),e=u.length?u[u.length-1]:null,n=e,i=0;i title"):null)}function q1(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Pd(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function B1(l,t,a,u){if(a.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var e=pu(u.href),n=t.querySelector(oe(e));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Nn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,xl(n);return}n=t.ownerDocument||t,u=$d(u),(e=gt.get(e))&&$c(u,e),n=n.createElement("link"),xl(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),Rl(n,"link",u),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Nn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var Fc=0;function Y1(l,t){return l.stylesheets&&l.count===0&&jn(l,l.stylesheets),0Fc?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(u),clearTimeout(e)}}:null}function Nn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)jn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Un=null;function jn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Un=new Map,t.forEach(G1,l),Un=null,Nn.call(l))}function G1(l,t){if(!(t.state.loading&4)){var a=Un.get(l);if(a)var u=a.get(null);else{a=new Map,Un.set(l,a);for(var e=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(E)}catch(C){console.error(C)}}return E(),cf.exports=tm(),cf.exports}var um=am();function em(){const E=[{x:45,ch:"0",sz:11,dur:14,d:0},{x:120,ch:"1",sz:9,dur:18,d:3},{x:195,ch:"A",sz:10,dur:12,d:7},{x:290,ch:"F",sz:8,dur:16,d:1},{x:365,ch:"0",sz:12,dur:20,d:5},{x:430,ch:"1",sz:9,dur:13,d:9},{x:510,ch:"D",sz:10,dur:17,d:2},{x:580,ch:"0",sz:11,dur:15,d:6},{x:650,ch:"1",sz:8,dur:11,d:4},{x:720,ch:"B",sz:10,dur:19,d:8},{x:790,ch:"0",sz:9,dur:14,d:1},{x:860,ch:"E",sz:11,dur:16,d:10},{x:930,ch:"1",sz:10,dur:12,d:3},{x:1e3,ch:"C",sz:8,dur:18,d:7},{x:1070,ch:"0",sz:12,dur:15,d:0},{x:1140,ch:"7",sz:9,dur:13,d:5},{x:260,ch:"3",sz:8,dur:22,d:11},{x:475,ch:"F",sz:10,dur:16,d:4},{x:690,ch:"8",sz:9,dur:20,d:6},{x:1020,ch:"1",sz:11,dur:14,d:8}],C=[{x:80,y:55},{x:210,y:30},{x:355,y:80},{x:500,y:45},{x:700,y:68},{x:850,y:28},{x:980,y:60},{x:1120,y:42},{x:145,y:140},{x:420,y:155},{x:780,y:145},{x:1050,y:130}],Y=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[8,9],[9,10],[10,11],[0,8],[3,9],[4,10],[7,11]],v=[{y:90,dash:"4 18",tot:22,spd:2,op:.07},{y:160,dash:"2 22",tot:24,spd:2.8,op:.05},{y:230,dash:"6 14",tot:20,spd:1.5,op:.08},{y:300,dash:"3 20",tot:23,spd:2.2,op:.06},{y:370,dash:"5 15",tot:20,spd:1.8,op:.07}],B=[{x:95,y:120,w:40},{x:310,y:200,w:30},{x:540,y:280,w:50},{x:760,y:130,w:35},{x:990,y:250,w:45},{x:180,y:350,w:30},{x:640,y:380,w:40},{x:1080,y:330,w:35}],V=[300,325,355,390,430],L=600,hl=240,x=[-5,-4,-3,-2,-1,0,1,2,3,4,5];return r.jsxs("svg",{viewBox:"0 0 1200 460",preserveAspectRatio:"xMidYMid slice",style:{width:"100%",height:"100%"},xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[r.jsxs("defs",{children:[r.jsxs("radialGradient",{id:"bg-glow",cx:"50%",cy:"35%",r:"45%",children:[r.jsx("stop",{offset:"0%",stopColor:"#00d4aa",stopOpacity:"0.12"}),r.jsx("stop",{offset:"50%",stopColor:"#00d4aa",stopOpacity:"0.03"}),r.jsx("stop",{offset:"100%",stopColor:"#00d4aa",stopOpacity:"0"})]}),r.jsxs("linearGradient",{id:"bg-vfade",x1:"0",y1:"0",x2:"0",y2:"1",children:[r.jsx("stop",{offset:"0%",stopColor:"white",stopOpacity:"0"}),r.jsx("stop",{offset:"8%",stopColor:"white",stopOpacity:"1"}),r.jsx("stop",{offset:"88%",stopColor:"white",stopOpacity:"1"}),r.jsx("stop",{offset:"100%",stopColor:"white",stopOpacity:"0"})]}),r.jsx("mask",{id:"bg-mask",children:r.jsx("rect",{width:"1200",height:"460",fill:"url(#bg-vfade)"})})]}),r.jsx("rect",{width:"1200",height:"460",fill:"url(#bg-glow)"}),r.jsxs("g",{mask:"url(#bg-mask)",children:[V.map((S,U)=>r.jsx("line",{x1:"50",y1:S,x2:"1150",y2:S,stroke:"#00d4aa",strokeOpacity:.025+U*.012,strokeWidth:"1"},`hg${U}`)),x.map(S=>r.jsx("line",{x1:L,y1:hl,x2:L+S*130,y2:"460",stroke:"#00d4aa",strokeOpacity:"0.025",strokeWidth:"1"},`vg${S}`)),v.map((S,U)=>r.jsx("line",{x1:"0",y1:S.y,x2:"1200",y2:S.y,stroke:"#00d4aa",strokeOpacity:S.op,strokeWidth:"1",strokeDasharray:S.dash,children:r.jsx("animate",{attributeName:"stroke-dashoffset",from:"0",to:`-${S.tot}`,dur:`${S.spd}s`,repeatCount:"indefinite"})},`ds${U}`)),Y.map(([S,U],j)=>r.jsx("line",{x1:C[S].x,y1:C[S].y,x2:C[U].x,y2:C[U].y,stroke:"#00d4aa",strokeOpacity:"0.06",strokeWidth:"1"},`ce${j}`)),C.map((S,U)=>r.jsxs("circle",{cx:S.x,cy:S.y,r:"2",fill:"#00d4aa",children:[r.jsx("animate",{attributeName:"fill-opacity",values:"0.1;0.35;0.1",dur:`${2+U%4*.5}s`,begin:`${U*.3}s`,repeatCount:"indefinite"}),r.jsx("animate",{attributeName:"r",values:"1.5;3.5;1.5",dur:`${2+U%4*.5}s`,begin:`${U*.3}s`,repeatCount:"indefinite"})]},`cn${U}`)),B.map((S,U)=>r.jsx("line",{x1:S.x,y1:S.y,x2:S.x+S.w,y2:S.y,stroke:U%3===0?"#8b5cf6":"#00d4aa",strokeOpacity:"0.08",strokeWidth:"1",strokeLinecap:"round",children:r.jsx("animate",{attributeName:"stroke-opacity",values:"0.04;0.16;0.04",dur:`${2.5+U%3*.7}s`,begin:`${U*.4}s`,repeatCount:"indefinite"})},`fr${U}`)),E.map((S,U)=>r.jsxs("text",{x:S.x,y:-10,fontSize:S.sz,fill:U%7===0?"#8b5cf6":U%11===0?"#ff6b35":"#00d4aa",fillOpacity:"0",fontFamily:"JetBrains Mono, monospace",fontWeight:"600",letterSpacing:"0.6",children:[S.ch,r.jsx("animateTransform",{attributeName:"transform",type:"translate",from:"0 0",to:"0 480",dur:`${S.dur}s`,begin:`${S.d}s`,repeatCount:"indefinite"}),r.jsx("animate",{attributeName:"fill-opacity",values:"0;0.2;0.2;0",keyTimes:"0;0.08;0.85;1",dur:`${S.dur}s`,begin:`${S.d}s`,repeatCount:"indefinite"})]},`gl${U}`)),r.jsxs("line",{x1:"0",y1:"0",x2:"1200",y2:"0",stroke:"#00d4aa",strokeOpacity:"0",strokeWidth:"1",children:[r.jsx("animateTransform",{attributeName:"transform",type:"translate",from:"0 0",to:"0 460",dur:"6s",repeatCount:"indefinite"}),r.jsx("animate",{attributeName:"stroke-opacity",values:"0;0.16;0.16;0",keyTimes:"0;0.04;0.96;1",dur:"6s",repeatCount:"indefinite"})]})]})]})}function nm(){const E=[{x:30,label:"QUEUE"},{x:95,label:"PREP"},{x:160,label:"RUN"},{x:225,label:"CHECK"},{x:290,label:"MERGE"}],C="M 30 50 L 95 50 L 160 50 L 225 50 L 290 50";return r.jsxs("svg",{viewBox:"0 0 320 100",xmlns:"http://www.w3.org/2000/svg","aria-label":"Autopilot pipeline",style:{width:"100%",height:"auto"},children:[r.jsx("defs",{children:r.jsxs("radialGradient",{id:"pipe-glow",cx:"50%",cy:"50%",r:"50%",children:[r.jsx("stop",{offset:"0%",stopColor:"#00d4aa",stopOpacity:"0.8"}),r.jsx("stop",{offset:"50%",stopColor:"#00d4aa",stopOpacity:"0.3"}),r.jsx("stop",{offset:"100%",stopColor:"#00d4aa",stopOpacity:"0"})]})}),r.jsx("line",{x1:"30",y1:"50",x2:"290",y2:"50",stroke:"#00d4aa",strokeOpacity:"0.15",strokeWidth:"1",strokeDasharray:"3 5",children:r.jsx("animate",{attributeName:"stroke-dashoffset",values:"0;-16",dur:"1.5s",repeatCount:"indefinite"})}),E.map((Y,v)=>r.jsxs("g",{transform:`translate(${Y.x}, 50)`,children:[r.jsx("circle",{r:"14",fill:"#0a0a0a",stroke:"#00d4aa",strokeOpacity:"0.4",strokeWidth:"1"}),r.jsx("line",{x1:"-10",y1:"-10",x2:"-7",y2:"-10",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"-10",y1:"-10",x2:"-10",y2:"-7",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"10",y1:"-10",x2:"7",y2:"-10",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"10",y1:"-10",x2:"10",y2:"-7",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"-10",y1:"10",x2:"-7",y2:"10",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"-10",y1:"10",x2:"-10",y2:"7",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"10",y1:"10",x2:"7",y2:"10",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsx("line",{x1:"10",y1:"10",x2:"10",y2:"7",stroke:"#00d4aa",strokeOpacity:"0.6",strokeWidth:"1"}),r.jsxs("circle",{r:"3",fill:"#00d4aa",children:[r.jsx("animate",{attributeName:"r",values:"3;4.5;3",dur:"2.4s",begin:`${v*.5}s`,repeatCount:"indefinite"}),r.jsx("animate",{attributeName:"opacity",values:"0.4;1;0.4",dur:"2.4s",begin:`${v*.5}s`,repeatCount:"indefinite"})]}),r.jsxs("circle",{r:"14",fill:"none",stroke:"#00d4aa",strokeWidth:"1",children:[r.jsx("animate",{attributeName:"r",values:"14;24",dur:"3s",begin:`${v*.8}s`,repeatCount:"indefinite"}),r.jsx("animate",{attributeName:"opacity",values:"0.5;0",dur:"3s",begin:`${v*.8}s`,repeatCount:"indefinite"})]}),r.jsx("text",{x:"0",y:"30",fontSize:"7",fill:"#00d4aa",fillOpacity:"0.6",textAnchor:"middle",fontFamily:"JetBrains Mono, monospace",letterSpacing:"1.5",fontWeight:"600",children:Y.label})]},Y.label)),r.jsx("circle",{r:"14",fill:"url(#pipe-glow)",opacity:"0.7",children:r.jsx("animateMotion",{dur:"4s",repeatCount:"indefinite",path:C,keyPoints:"0;0.24;0.25;0.49;0.5;0.74;0.75;0.99;1",keyTimes:"0;0.18;0.22;0.38;0.42;0.58;0.62;0.78;1",calcMode:"spline",keySplines:"0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1"})}),r.jsx("circle",{r:"4",fill:"#00d4aa",children:r.jsx("animateMotion",{dur:"4s",repeatCount:"indefinite",path:C,keyPoints:"0;0.24;0.25;0.49;0.5;0.74;0.75;0.99;1",keyTimes:"0;0.18;0.22;0.38;0.42;0.58;0.62;0.78;1",calcMode:"spline",keySplines:"0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1;0.4 0 0.6 1;0 0 1 1"})}),r.jsx("text",{x:"160",y:"93",fontSize:"7",fill:"#00d4aa",fillOpacity:"0.45",textAnchor:"middle",fontFamily:"JetBrains Mono, monospace",letterSpacing:"2.5",children:"AUTOPILOT · PIPELINE"})]})}const im={queued:"Queued",accepted:"Accepted",preparing:"Preparing",running:"Running",verifying:"Verifying",pr_open:"PR Open",waiting_ci:"Waiting CI",repairing:"Repairing",completed:"Completed",merged:"Merged",failed:"Failed",rejected:"Rejected",superseded:"Superseded"},Ey={queued:"#64748b",accepted:"#8b5cf6",preparing:"#0f766e",running:"#00d4aa",verifying:"#3b82f6",pr_open:"#8b5cf6",waiting_ci:"#3b82f6",repairing:"#ff6b35",completed:"#00d4aa",merged:"#00d4aa",failed:"#ff4444",rejected:"#ff4444",superseded:"#ffaa00"};function cm(E){if(!E)return"-";const C=Math.max(0,Math.floor(Date.now()/1e3-E));return C<60?`${C}s ago`:C<3600?`${Math.floor(C/60)}m ago`:C<86400?`${Math.floor(C/3600)}h ago`:`${Math.floor(C/86400)}d ago`}function fm(E){return["running","completed","merged","preparing"].includes(E)?"badge-teal":["repairing"].includes(E)?"badge-orange":["accepted","pr_open"].includes(E)?"badge-violet":["failed","rejected"].includes(E)?"badge-red":["verifying","waiting_ci"].includes(E)?"badge-blue":["superseded"].includes(E)?"badge-amber":"badge-gray"}function sm({card:E}){var B,V,L,hl,x,S,U,j;const C=[...E.labels||[],E.source_kind].filter(Boolean),Y=(((B=E.metadata)==null?void 0:B.verification_steps)||[]).map(ll=>`${ll.status} · ${ll.command}`).slice(0,2).join(" | "),v=Ey[E.status]||"#333";return r.jsxs("article",{className:"card",style:{"--card-accent":v},children:[r.jsxs("div",{className:"card-meta",children:[r.jsx("span",{children:E.id}),r.jsx("span",{className:`badge ${fm(E.status)}`,children:E.score})]}),r.jsx("h3",{children:E.title}),E.body&&r.jsx("p",{className:"card-body",children:E.body.slice(0,260)}),C.length>0&&r.jsx("div",{className:"card-tags",children:C.map((ll,Nl)=>r.jsx("span",{className:"tag",children:ll},Nl))}),r.jsxs("div",{className:"card-footer",children:[r.jsxs("div",{children:["updated ",cm(E.updated_at),E.source_ref?` · ref ${E.source_ref}`:""]}),r.jsx("div",{children:((V=E.metadata)==null?void 0:V.last_note)||"no status note yet"}),(Y||((L=E.metadata)==null?void 0:L.last_ci_summary)||((hl=E.metadata)==null?void 0:hl.last_failure_summary)||((x=E.metadata)==null?void 0:x.human_gate_pending))&&r.jsx("div",{children:Y||((S=E.metadata)==null?void 0:S.last_ci_summary)||((U=E.metadata)==null?void 0:U.last_failure_summary)||((j=E.metadata)!=null&&j.human_gate_pending?"verification passed; human gate pending":"")})]})]})}function dm({status:E,cards:C}){const Y=Ey[E]||"#666";return r.jsxs("section",{className:"column",children:[r.jsxs("div",{className:"column-header",children:[r.jsx("h2",{style:{color:Y},children:im[E]||E}),r.jsx("span",{className:"column-count",children:C.length})]}),r.jsx("div",{className:"cards",children:C.length>0?C.map(v=>r.jsx(sm,{card:v},v.id)):r.jsx("div",{className:"empty",children:"No cards in this column."})})]})}function ym({entries:E}){return r.jsxs("section",{className:"journal",children:[r.jsxs("div",{className:"journal-header",children:[r.jsx("span",{style:{color:"var(--accent)",fontSize:10,letterSpacing:2,fontWeight:700},children:"//"}),r.jsx("h2",{children:"RECENT JOURNAL"})]}),r.jsx("div",{className:"journal-list",children:E.length>0?E.slice().reverse().map((C,Y)=>r.jsxs("article",{className:"journal-item",children:[r.jsx("time",{children:new Date(C.timestamp*1e3).toISOString().replace("T"," ").replace(".000Z"," UTC")}),r.jsxs("div",{children:[r.jsx("span",{className:"kind",children:C.kind}),C.task_id&&r.jsxs("span",{className:"task-ref",children:[" [",C.task_id,"]"]})]}),r.jsx("div",{className:"summary",children:C.summary})]},Y)):r.jsx("div",{className:"empty",children:"Journal is empty."})})]})}function om(){const[E,C]=ze.useState(null),[Y,v]=ze.useState(""),[B,V]=ze.useState(null);if(ze.useEffect(()=>{fetch("./snapshot.json",{cache:"no-store"}).then(nl=>nl.json()).then(C).catch(nl=>V(String(nl)))},[]),B)return r.jsx("div",{className:"shell",style:{paddingTop:80},children:r.jsxs("div",{className:"empty",children:["Failed to load snapshot.json: ",B]})});if(!E)return r.jsx("div",{className:"shell",style:{paddingTop:80,textAlign:"center"},children:r.jsx("div",{style:{color:"var(--accent)",fontSize:12,letterSpacing:2},children:"LOADING SNAPSHOT..."})});const L=E.counts||{},hl=E.status_order||[],x=Y.trim().toLowerCase(),S=hl.map(nl=>{var it;const Ol=(((it=E.columns)==null?void 0:it[nl])||[]).filter(Sl=>x?[Sl.id,Sl.title,Sl.body,Sl.source_kind,Sl.source_ref,...Sl.labels||[],...Sl.score_reasons||[]].join(" ").toLowerCase().includes(x):!0);return{status:nl,cards:Ol}}).filter(({cards:nl})=>nl.length>0||!x),U=(L.preparing||0)+(L.running||0)+(L.verifying||0)+(L.waiting_ci||0)+(L.repairing||0)+(L.accepted||0)+(L.pr_open||0),j=(L.completed||0)+(L.merged||0),ll=(L.failed||0)+(L.rejected||0),Nl=new Date((E.generated_at||0)*1e3).toISOString().replace("T"," ").replace(".000Z"," UTC");return r.jsxs(r.Fragment,{children:[r.jsxs("section",{className:"hero",children:[r.jsx("div",{className:"hero-bg",children:r.jsx(em,{})}),r.jsxs("div",{className:"hero-content",children:[r.jsxs("div",{className:"hero-main",children:[r.jsx("div",{className:"eyebrow",children:"// AUTOPILOT_KANBAN"}),r.jsxs("h1",{children:[E.repo_name||"OpenHarness",r.jsx("br",{}),r.jsx("span",{className:"accent",children:"SELF-EVOLUTION"})]}),r.jsx("p",{className:"hero-sub",children:"A static GitHub Pages view of the repo-local autopilot queue. Cards come from ohmo requests, GitHub issues and PRs, and claude-code alignment candidates."}),r.jsxs("div",{className:"focus-box",children:[r.jsx("div",{className:"focus-label",children:"// CURRENT_FOCUS"}),r.jsx("div",{className:"focus-text",children:E.focus?`[${E.focus.status}] ${E.focus.title} · score=${E.focus.score} · ${E.focus.source_kind}`:"No active task focus yet."})]})]}),r.jsxs("div",{className:"hero-side",children:[r.jsxs("div",{className:"hero-timestamp",children:["Generated from repo state at ",Nl]}),r.jsx("div",{className:"pipeline-viz",children:r.jsx(nm,{})})]})]})]}),r.jsxs("div",{className:"shell",children:[r.jsxs("section",{className:"stats-bar",children:[r.jsxs("div",{className:"stat",children:[r.jsx("div",{className:"stat-label teal",children:"QUEUED"}),r.jsx("div",{className:"stat-value",children:L.queued||0}),r.jsx("div",{className:"stat-sub",children:"waiting"})]}),r.jsxs("div",{className:"stat",children:[r.jsx("div",{className:"stat-label orange",children:"IN PROGRESS"}),r.jsx("div",{className:"stat-value",children:U}),r.jsx("div",{className:"stat-sub",children:"active pipeline"})]}),r.jsxs("div",{className:"stat",children:[r.jsx("div",{className:"stat-label teal",children:"COMPLETED"}),r.jsx("div",{className:"stat-value",children:j}),r.jsx("div",{className:"stat-sub",children:"merged + done"})]}),r.jsxs("div",{className:"stat",children:[r.jsx("div",{className:"stat-label",style:{color:"var(--error)"},children:"FAILED"}),r.jsx("div",{className:"stat-value",children:ll}),r.jsx("div",{className:"stat-sub",children:"rejected + failed"})]})]}),r.jsxs("section",{className:"toolbar",children:[r.jsx("input",{type:"search",placeholder:"Filter by title, body, source, label, or task id...",value:Y,onChange:nl=>v(nl.target.value)}),r.jsxs("div",{className:"hint",children:["Reads ",r.jsx("code",{children:"snapshot.json"})," — no backend required"]})]}),r.jsx("section",{className:"board",children:S.map(({status:nl,cards:Ol})=>r.jsx(dm,{status:nl,cards:Ol},nl))}),r.jsx(ym,{entries:E.journal||[]})]})]})}um.createRoot(document.getElementById("root")).render(r.jsx(ze.StrictMode,{children:r.jsx(om,{})})); diff --git a/docs/autopilot/index.html b/docs/autopilot/index.html index cfdcc61..24d8b48 100644 --- a/docs/autopilot/index.html +++ b/docs/autopilot/index.html @@ -1,264 +1,16 @@ - + - - - - OpenHarness-new Autopilot Kanban - - - -
-
-
-
OpenHarness Autopilot
-

OpenHarness-new self-evolution board

-

- A static GitHub Pages view of the repo-local autopilot queue. Cards come from ohmo requests, - GitHub issues and PRs, and claude-code alignment candidates. Service-level verification remains the source of truth. -

-
- Current focus -
Loading latest snapshot…
-
-
- -
-
- -
This page reads snapshot.json and renders a kanban without any backend.
-
-
-
-

Recent repo journal

-
-
-
- - + + + + Autopilot Kanban + + + + + + + +
+ diff --git a/src/openharness/autopilot/service.py b/src/openharness/autopilot/service.py index aadb615..52c84c3 100644 --- a/src/openharness/autopilot/service.py +++ b/src/openharness/autopilot/service.py @@ -1758,6 +1758,14 @@ class RepoAutopilotStore: return order.get(status, 99) def _render_dashboard_html(self, snapshot: dict[str, Any]) -> str: + """Return a minimal fallback HTML page. + + The primary dashboard is now a React + Vite app built from + ``autopilot-dashboard/``. This fallback is only written when + no pre-built ``index.html`` already exists in the output + directory, so local ``snapshot.json`` generation still works + without a Node.js toolchain. + """ repo_name = escape(_safe_text(snapshot.get("repo_name")) or "OpenHarness") generated = time.strftime( "%Y-%m-%d %H:%M:%S UTC", @@ -1769,262 +1777,42 @@ class RepoAutopilotStore: {repo_name} Autopilot Kanban + + +
-
-
-
OpenHarness Autopilot
-

{repo_name} self-evolution board

-

- A static GitHub Pages view of the repo-local autopilot queue. Cards come from ohmo requests, - GitHub issues and PRs, and claude-code alignment candidates. Service-level verification remains the source of truth. -

-
- Current focus -
Loading latest snapshot…
-
-
- -
-
- -
This page reads snapshot.json and renders a kanban without any backend.
-
-
-
-

Recent repo journal

-
-
+

{repo_name} AUTOPILOT

+

+ This is a fallback page. The full React dashboard is built via CI + from autopilot-dashboard/. +

+
+

To view the full dashboard locally, build the React app:

+

cd autopilot-dashboard && npm install && npm run build

+

Then open docs/autopilot/index.html in a browser.

+

Snapshot data: snapshot.json (generated {escape(generated)})

+
+
Generated at {escape(generated)}
- """