diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..77013c4 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +# 游客服务端小程序的明文 URL Scheme;path 中的斜杠需保持未编码。 +# 未配置时,游客服务端入口会使用 App.tsx 中的同一默认地址。 +VITE_TOURIST_MINIPROGRAM_URL_SCHEME=weixin://dl/business/?appid=wx8531ca7339685eca&path=pages/index/index diff --git a/.gitignore b/.gitignore index 0369e81..248ac23 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ dist/ *.local .env .env.* +!.env.example npm-debug.log* yarn-debug.log* diff --git a/README.md b/README.md new file mode 100644 index 0000000..13a7699 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# NianXX 官网 + +同一仓库包含两个前端入口: + +- `/`:公开官网,包含首页、关于与联系、中英文切换。 +- `/platform/`:智念科技产品平台与行业应用入口。 + +## 本地开发 + +```bash +pnpm install +pnpm dev +``` + +开发服务器启动后访问: + +- 官网:`http://localhost:5173/` +- 产品平台:`http://localhost:5173/platform/` + +## 构建 + +```bash +pnpm build +pnpm preview +``` + +Vite 会同时生成 `dist/index.html` 与 `dist/platform/index.html`。部署时需要保证: + +- `/about` 等官网路径回退到 `/index.html`; +- `/platform/` 回退到 `/platform/index.html`; +- `/assets/` 与协议页按静态文件直接提供。 + +## 鉴权说明 + +产品平台当前只保留原项目的前端演示登录状态,不能作为访问控制。正式保护产品入口前,需要接入后端登录、SSO 或网关鉴权。 diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ce4b58d..0000000 --- a/package-lock.json +++ /dev/null @@ -1,1770 +0,0 @@ -{ - "name": "nianxx-web", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nianxx-web", - "version": "0.1.0", - "dependencies": { - "@gsap/react": "^2.1.2", - "@phosphor-icons/react": "^2.1.10", - "@vitejs/plugin-react": "^5.1.1", - "gsap": "^3.15.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "slot-text": "^0.3.1", - "typescript": "^5.9.3", - "vite": "^7.3.0" - }, - "devDependencies": { - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@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.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "@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.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "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.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", - "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", - "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@gsap/react": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@gsap/react/-/react-2.1.2.tgz", - "integrity": "sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==", - "license": "SEE LICENSE AT https://gsap.com/standard-license", - "peerDependencies": { - "gsap": "^3.12.5", - "react": ">=17" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@phosphor-icons/react": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz", - "integrity": "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">= 16.8", - "react-dom": ">= 16.8" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", - "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", - "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", - "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", - "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", - "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", - "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", - "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", - "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", - "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", - "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", - "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", - "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", - "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", - "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", - "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", - "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", - "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", - "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", - "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", - "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", - "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", - "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", - "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", - "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", - "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", - "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", - "cpu": [ - "x64" - ], - "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==", - "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==", - "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==", - "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==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.17", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", - "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", - "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": "5.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", - "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.29.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.38", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", - "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.28.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", - "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", - "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.38", - "caniuse-lite": "^1.0.30001799", - "electron-to-chromium": "^1.5.376", - "node-releases": "^2.0.48", - "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.30001799", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", - "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", - "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==", - "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==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.378", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.378.tgz", - "integrity": "sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==", - "license": "ISC" - }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "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==", - "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==", - "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==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/gsap": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz", - "integrity": "sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==", - "license": "Standard 'no charge' license: https://gsap.com/standard-license." - }, - "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==", - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "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==", - "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==", - "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==", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", - "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", - "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.49", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.49.tgz", - "integrity": "sha512-f06bl1D+8ZDkn2oOQQKAh5/otFWqVnM1Q5oerA8Pex7UfT66Tx4IPHIqVVFKqFT3FUtaDstdgkM7yT7JWhqxfw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", - "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.12", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", - "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", - "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.7" - } - }, - "node_modules/react-refresh": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", - "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.62.2", - "@rollup/rollup-android-arm64": "4.62.2", - "@rollup/rollup-darwin-arm64": "4.62.2", - "@rollup/rollup-darwin-x64": "4.62.2", - "@rollup/rollup-freebsd-arm64": "4.62.2", - "@rollup/rollup-freebsd-x64": "4.62.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", - "@rollup/rollup-linux-arm-musleabihf": "4.62.2", - "@rollup/rollup-linux-arm64-gnu": "4.62.2", - "@rollup/rollup-linux-arm64-musl": "4.62.2", - "@rollup/rollup-linux-loong64-gnu": "4.62.2", - "@rollup/rollup-linux-loong64-musl": "4.62.2", - "@rollup/rollup-linux-ppc64-gnu": "4.62.2", - "@rollup/rollup-linux-ppc64-musl": "4.62.2", - "@rollup/rollup-linux-riscv64-gnu": "4.62.2", - "@rollup/rollup-linux-riscv64-musl": "4.62.2", - "@rollup/rollup-linux-s390x-gnu": "4.62.2", - "@rollup/rollup-linux-x64-gnu": "4.62.2", - "@rollup/rollup-linux-x64-musl": "4.62.2", - "@rollup/rollup-openbsd-x64": "4.62.2", - "@rollup/rollup-openharmony-arm64": "4.62.2", - "@rollup/rollup-win32-arm64-msvc": "4.62.2", - "@rollup/rollup-win32-ia32-msvc": "4.62.2", - "@rollup/rollup-win32-x64-gnu": "4.62.2", - "@rollup/rollup-win32-x64-msvc": "4.62.2", - "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==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/slot-text": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/slot-text/-/slot-text-0.3.1.tgz", - "integrity": "sha512-gDHfMnFrz4CxqD7H8F3CqWVGYwTbgjpJiIH1bQg1Tj60TzgnLe47vuQDHNeyg4zbhsEAPFvUp05nG7lKsboCVw==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 <20", - "solid-js": ">=1.8 <2", - "svelte": ">=4 <6", - "vue": ">=3.4 <4" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "solid-js": { - "optional": true - }, - "svelte": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "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.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/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==", - "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": "7.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", - "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - } - } -} diff --git a/package.json b/package.json index cc8095e..85a162c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "private": true, "version": "0.1.0", "type": "module", + "packageManager": "pnpm@11.19.0", "scripts": { "dev": "vite --host 0.0.0.0", "build": "tsc -b && vite build", @@ -11,16 +12,16 @@ "dependencies": { "@gsap/react": "^2.1.2", "@phosphor-icons/react": "^2.1.10", - "@vitejs/plugin-react": "^5.1.1", "gsap": "^3.15.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "slot-text": "^0.3.1", - "typescript": "^5.9.3", - "vite": "^7.3.0" + "react": "^19.2.8", + "react-dom": "^19.2.8", + "slot-text": "^0.3.4" }, "devDependencies": { - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3" + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", + "@vitejs/plugin-react": "^6.1.0", + "typescript": "^7.0.2", + "vite": "^8.2.2" } } diff --git a/platform/index.html b/platform/index.html new file mode 100644 index 0000000..266317d --- /dev/null +++ b/platform/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + 智念科技产品平台 + + +
+ + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..f53aac5 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,791 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@gsap/react': + specifier: ^2.1.2 + version: 2.1.2(gsap@3.15.0)(react@19.2.8) + '@phosphor-icons/react': + specifier: ^2.1.10 + version: 2.1.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + gsap: + specifier: ^3.15.0 + version: 3.15.0 + react: + specifier: ^19.2.8 + version: 19.2.8 + react-dom: + specifier: ^19.2.8 + version: 19.2.8(react@19.2.8) + slot-text: + specifier: ^0.3.4 + version: 0.3.4(react@19.2.8) + devDependencies: + '@types/react': + specifier: ^19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: ^19.2.4 + version: 19.2.4(@types/react@19.2.18) + '@vitejs/plugin-react': + specifier: ^6.1.0 + version: 6.1.0(vite@8.2.2) + typescript: + specifier: ^7.0.2 + version: 7.0.2 + vite: + specifier: ^8.2.2 + version: 8.2.2 + +packages: + + '@gsap/react@2.1.2': + resolution: {integrity: sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==} + peerDependencies: + gsap: ^3.12.5 + react: '>=17' + + '@oxc-project/types@0.146.0': + resolution: {integrity: sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==} + + '@phosphor-icons/react@2.1.10': + resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8' + react-dom: '>= 16.8' + + '@rolldown/binding-android-arm-eabi@1.2.5': + resolution: {integrity: sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.5': + resolution: {integrity: sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.5': + resolution: {integrity: sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.5': + resolution: {integrity: sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.5': + resolution: {integrity: sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.5': + resolution: {integrity: sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.5': + resolution: {integrity: sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.5': + resolution: {integrity: sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.5': + resolution: {integrity: sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.5': + resolution: {integrity: sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.5': + resolution: {integrity: sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.5': + resolution: {integrity: sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.5': + resolution: {integrity: sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.5': + resolution: {integrity: sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.5': + resolution: {integrity: sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@vitejs/plugin-react@6.1.0': + resolution: {integrity: sha512-qd2BzUBehkov86WFhg0JkEFEYyCLG9uPCe6qWTY/kRlss9OvJrOF2UbIWT7p+8IzZHkEu0DNGHc4HSv+JdDLsw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + oxc-transform-react: ^0.145.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + oxc-transform-react: + optional: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gsap@3.15.0: + resolution: {integrity: sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==} + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + engines: {node: ^10 || ^12 || >=14} + + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + + rolldown@1.2.5: + resolution: {integrity: sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + slot-text@0.3.4: + resolution: {integrity: sha512-C3FTc0cAx/6FywK9yvE93FdEc3hQXfzeQSvJH8SioWHyHcxLfU9tgkoqnUChPR2Q4Kh9j/sHgkpcNe2m5UCpnA==} + peerDependencies: + react: '>=18 <20' + solid-js: '>=1.8 <2' + svelte: '>=4 <6' + vue: '>=3.4 <4' + peerDependenciesMeta: + react: + optional: true + solid-js: + optional: true + svelte: + optional: true + vue: + optional: true + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + + vite@8.2.2: + resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.4.0 || ^0.5.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + +snapshots: + + '@gsap/react@2.1.2(gsap@3.15.0)(react@19.2.8)': + dependencies: + gsap: 3.15.0 + react: 19.2.8 + + '@oxc-project/types@0.146.0': {} + + '@phosphor-icons/react@2.1.10(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@rolldown/binding-android-arm-eabi@1.2.5': + optional: true + + '@rolldown/binding-android-arm64@1.2.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.5': + optional: true + + '@rolldown/binding-darwin-x64@1.2.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.2.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.2.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.2.5': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.2.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.5': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@types/react-dom@19.2.4(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@vitejs/plugin-react@6.1.0(vite@8.2.2)': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 8.2.2 + + csstype@3.2.3: {} + + detect-libc@2.1.2: {} + + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + + fsevents@2.3.3: + optional: true + + gsap@3.15.0: {} + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + nanoid@3.3.18: {} + + picocolors@1.1.1: {} + + picomatch@4.0.5: {} + + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react@19.2.8: {} + + rolldown@1.2.5: + dependencies: + '@oxc-project/types': 0.146.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.5 + '@rolldown/binding-android-arm64': 1.2.5 + '@rolldown/binding-darwin-arm64': 1.2.5 + '@rolldown/binding-darwin-x64': 1.2.5 + '@rolldown/binding-freebsd-x64': 1.2.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.5 + '@rolldown/binding-linux-arm64-gnu': 1.2.5 + '@rolldown/binding-linux-arm64-musl': 1.2.5 + '@rolldown/binding-linux-ppc64-gnu': 1.2.5 + '@rolldown/binding-linux-s390x-gnu': 1.2.5 + '@rolldown/binding-linux-x64-gnu': 1.2.5 + '@rolldown/binding-linux-x64-musl': 1.2.5 + '@rolldown/binding-openharmony-arm64': 1.2.5 + '@rolldown/binding-win32-arm64-msvc': 1.2.5 + '@rolldown/binding-win32-x64-msvc': 1.2.5 + + scheduler@0.27.0: {} + + slot-text@0.3.4(react@19.2.8): + optionalDependencies: + react: 19.2.8 + + source-map-js@1.2.1: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + + vite@8.2.2: + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.5 + postcss: 8.5.26 + rolldown: 1.2.5 + tinyglobby: 0.2.17 + optionalDependencies: + fsevents: 2.3.3 diff --git a/public/assets/brand/nianxx-logo.webp b/public/assets/brand/nianxx-logo.webp new file mode 100644 index 0000000..ebb22e3 Binary files /dev/null and b/public/assets/brand/nianxx-logo.webp differ diff --git a/public/assets/products/capability-agent.jpg b/public/assets/products/capability-agent.jpg new file mode 100644 index 0000000..b2031a1 Binary files /dev/null and b/public/assets/products/capability-agent.jpg differ diff --git a/public/assets/products/capability-aigc.jpg b/public/assets/products/capability-aigc.jpg new file mode 100644 index 0000000..b68b470 Binary files /dev/null and b/public/assets/products/capability-aigc.jpg differ diff --git a/public/assets/products/capability-billing.jpg b/public/assets/products/capability-billing.jpg new file mode 100644 index 0000000..4711729 Binary files /dev/null and b/public/assets/products/capability-billing.jpg differ diff --git a/public/assets/products/capability-hardware.jpg b/public/assets/products/capability-hardware.jpg new file mode 100644 index 0000000..d94b6d0 Binary files /dev/null and b/public/assets/products/capability-hardware.jpg differ diff --git a/public/assets/products/capability-information.jpg b/public/assets/products/capability-information.jpg new file mode 100644 index 0000000..97a5662 Binary files /dev/null and b/public/assets/products/capability-information.jpg differ diff --git a/public/assets/products/data-knowledge-graph-map.png b/public/assets/products/data-knowledge-graph-map.png new file mode 100644 index 0000000..9deb06d Binary files /dev/null and b/public/assets/products/data-knowledge-graph-map.png differ diff --git a/public/assets/products/data-knowledge-graph.jpg b/public/assets/products/data-knowledge-graph.jpg new file mode 100644 index 0000000..e235587 Binary files /dev/null and b/public/assets/products/data-knowledge-graph.jpg differ diff --git a/public/assets/products/data-wiki.jpg b/public/assets/products/data-wiki.jpg new file mode 100644 index 0000000..88a1b02 Binary files /dev/null and b/public/assets/products/data-wiki.jpg differ diff --git a/public/assets/products/scene-education.jpg b/public/assets/products/scene-education.jpg new file mode 100644 index 0000000..922a499 Binary files /dev/null and b/public/assets/products/scene-education.jpg differ diff --git a/public/assets/products/scene-government.jpg b/public/assets/products/scene-government.jpg new file mode 100644 index 0000000..5e415f9 Binary files /dev/null and b/public/assets/products/scene-government.jpg differ diff --git a/public/assets/products/scene-hotel.jpg b/public/assets/products/scene-hotel.jpg new file mode 100644 index 0000000..ee22b20 Binary files /dev/null and b/public/assets/products/scene-hotel.jpg differ diff --git a/public/assets/products/scene-scenic.jpg b/public/assets/products/scene-scenic.jpg new file mode 100644 index 0000000..a4088ac Binary files /dev/null and b/public/assets/products/scene-scenic.jpg differ diff --git a/public/assets/products/scene-travel.jpg b/public/assets/products/scene-travel.jpg new file mode 100644 index 0000000..76f67f8 Binary files /dev/null and b/public/assets/products/scene-travel.jpg differ diff --git a/public/assets/scenarios/ai-education.jpg b/public/assets/scenarios/ai-education.jpg new file mode 100644 index 0000000..e1a018b Binary files /dev/null and b/public/assets/scenarios/ai-education.jpg differ diff --git a/public/assets/scenarios/ai-government.jpg b/public/assets/scenarios/ai-government.jpg new file mode 100644 index 0000000..3cbf351 Binary files /dev/null and b/public/assets/scenarios/ai-government.jpg differ diff --git a/public/assets/scenarios/ai-hotel.jpg b/public/assets/scenarios/ai-hotel.jpg new file mode 100644 index 0000000..d2ded56 Binary files /dev/null and b/public/assets/scenarios/ai-hotel.jpg differ diff --git a/public/assets/scenarios/ai-scenic.jpg b/public/assets/scenarios/ai-scenic.jpg new file mode 100644 index 0000000..2dd034f Binary files /dev/null and b/public/assets/scenarios/ai-scenic.jpg differ diff --git a/public/assets/scenarios/ai-travel-agency.jpg b/public/assets/scenarios/ai-travel-agency.jpg new file mode 100644 index 0000000..9eb24df Binary files /dev/null and b/public/assets/scenarios/ai-travel-agency.jpg differ diff --git a/public/assets/scenarios/cards/education-home.webp b/public/assets/scenarios/cards/education-home.webp new file mode 100644 index 0000000..3a22069 Binary files /dev/null and b/public/assets/scenarios/cards/education-home.webp differ diff --git a/public/assets/scenarios/cards/government-command.webp b/public/assets/scenarios/cards/government-command.webp new file mode 100644 index 0000000..b1938fb Binary files /dev/null and b/public/assets/scenarios/cards/government-command.webp differ diff --git a/public/assets/scenarios/cards/hotel-oms.webp b/public/assets/scenarios/cards/hotel-oms.webp new file mode 100644 index 0000000..100362e Binary files /dev/null and b/public/assets/scenarios/cards/hotel-oms.webp differ diff --git a/public/assets/scenarios/cards/scenic-guide-home.webp b/public/assets/scenarios/cards/scenic-guide-home.webp new file mode 100644 index 0000000..d7b9182 Binary files /dev/null and b/public/assets/scenarios/cards/scenic-guide-home.webp differ diff --git a/public/assets/scenarios/cards/travel-workbench.webp b/public/assets/scenarios/cards/travel-workbench.webp new file mode 100644 index 0000000..f59bf2a Binary files /dev/null and b/public/assets/scenarios/cards/travel-workbench.webp differ diff --git a/public/assets/scenarios/education-home-soft.webp b/public/assets/scenarios/education-home-soft.webp new file mode 100644 index 0000000..00fd77a Binary files /dev/null and b/public/assets/scenarios/education-home-soft.webp differ diff --git a/public/assets/scenarios/education-home.jpg b/public/assets/scenarios/education-home.jpg new file mode 100644 index 0000000..6906831 Binary files /dev/null and b/public/assets/scenarios/education-home.jpg differ diff --git a/public/assets/scenarios/education-projects-soft.webp b/public/assets/scenarios/education-projects-soft.webp new file mode 100644 index 0000000..9b099e4 Binary files /dev/null and b/public/assets/scenarios/education-projects-soft.webp differ diff --git a/public/assets/scenarios/education-projects.jpg b/public/assets/scenarios/education-projects.jpg new file mode 100644 index 0000000..cef2250 Binary files /dev/null and b/public/assets/scenarios/education-projects.jpg differ diff --git a/public/assets/scenarios/full/education-community.webp b/public/assets/scenarios/full/education-community.webp new file mode 100644 index 0000000..e85f380 Binary files /dev/null and b/public/assets/scenarios/full/education-community.webp differ diff --git a/public/assets/scenarios/full/education-home.webp b/public/assets/scenarios/full/education-home.webp new file mode 100644 index 0000000..30147a4 Binary files /dev/null and b/public/assets/scenarios/full/education-home.webp differ diff --git a/public/assets/scenarios/full/education-projects.webp b/public/assets/scenarios/full/education-projects.webp new file mode 100644 index 0000000..99bae0d Binary files /dev/null and b/public/assets/scenarios/full/education-projects.webp differ diff --git a/public/assets/scenarios/full/government-command.webp b/public/assets/scenarios/full/government-command.webp new file mode 100644 index 0000000..2b5beba Binary files /dev/null and b/public/assets/scenarios/full/government-command.webp differ diff --git a/public/assets/scenarios/full/hotel-concierge.webp b/public/assets/scenarios/full/hotel-concierge.webp new file mode 100644 index 0000000..7722dd7 Binary files /dev/null and b/public/assets/scenarios/full/hotel-concierge.webp differ diff --git a/public/assets/scenarios/full/hotel-line-ai.webp b/public/assets/scenarios/full/hotel-line-ai.webp new file mode 100644 index 0000000..d38351a Binary files /dev/null and b/public/assets/scenarios/full/hotel-line-ai.webp differ diff --git a/public/assets/scenarios/full/hotel-oms.webp b/public/assets/scenarios/full/hotel-oms.webp new file mode 100644 index 0000000..5a3b0c4 Binary files /dev/null and b/public/assets/scenarios/full/hotel-oms.webp differ diff --git a/public/assets/scenarios/full/scenic-guide-home.webp b/public/assets/scenarios/full/scenic-guide-home.webp new file mode 100644 index 0000000..e1cfd3d Binary files /dev/null and b/public/assets/scenarios/full/scenic-guide-home.webp differ diff --git a/public/assets/scenarios/full/scenic-guide-plan.webp b/public/assets/scenarios/full/scenic-guide-plan.webp new file mode 100644 index 0000000..d0cfce6 Binary files /dev/null and b/public/assets/scenarios/full/scenic-guide-plan.webp differ diff --git a/public/assets/scenarios/full/scenic-market.webp b/public/assets/scenarios/full/scenic-market.webp new file mode 100644 index 0000000..2291a23 Binary files /dev/null and b/public/assets/scenarios/full/scenic-market.webp differ diff --git a/public/assets/scenarios/full/travel-agency-console.png b/public/assets/scenarios/full/travel-agency-console.png new file mode 100644 index 0000000..4cec0d5 Binary files /dev/null and b/public/assets/scenarios/full/travel-agency-console.png differ diff --git a/public/assets/scenarios/full/travel-chat.webp b/public/assets/scenarios/full/travel-chat.webp new file mode 100644 index 0000000..6a2cd53 Binary files /dev/null and b/public/assets/scenarios/full/travel-chat.webp differ diff --git a/public/assets/scenarios/full/travel-leads.webp b/public/assets/scenarios/full/travel-leads.webp new file mode 100644 index 0000000..26216b6 Binary files /dev/null and b/public/assets/scenarios/full/travel-leads.webp differ diff --git a/public/assets/scenarios/full/travel-market.webp b/public/assets/scenarios/full/travel-market.webp new file mode 100644 index 0000000..4fe5516 Binary files /dev/null and b/public/assets/scenarios/full/travel-market.webp differ diff --git a/public/assets/scenarios/full/travel-workbench.webp b/public/assets/scenarios/full/travel-workbench.webp new file mode 100644 index 0000000..f0d6d98 Binary files /dev/null and b/public/assets/scenarios/full/travel-workbench.webp differ diff --git a/public/assets/scenarios/government-command-soft.webp b/public/assets/scenarios/government-command-soft.webp new file mode 100644 index 0000000..19a66e3 Binary files /dev/null and b/public/assets/scenarios/government-command-soft.webp differ diff --git a/public/assets/scenarios/government-command.jpg b/public/assets/scenarios/government-command.jpg new file mode 100644 index 0000000..43dbb56 Binary files /dev/null and b/public/assets/scenarios/government-command.jpg differ diff --git a/public/assets/scenarios/government-metrics-soft.webp b/public/assets/scenarios/government-metrics-soft.webp new file mode 100644 index 0000000..ff931b2 Binary files /dev/null and b/public/assets/scenarios/government-metrics-soft.webp differ diff --git a/public/assets/scenarios/government-metrics.jpg b/public/assets/scenarios/government-metrics.jpg new file mode 100644 index 0000000..3fc7251 Binary files /dev/null and b/public/assets/scenarios/government-metrics.jpg differ diff --git a/public/assets/scenarios/hotel-config-soft.webp b/public/assets/scenarios/hotel-config-soft.webp new file mode 100644 index 0000000..afd531e Binary files /dev/null and b/public/assets/scenarios/hotel-config-soft.webp differ diff --git a/public/assets/scenarios/hotel-config.jpg b/public/assets/scenarios/hotel-config.jpg new file mode 100644 index 0000000..e69a59a Binary files /dev/null and b/public/assets/scenarios/hotel-config.jpg differ diff --git a/public/assets/scenarios/hotel-trace-soft.webp b/public/assets/scenarios/hotel-trace-soft.webp new file mode 100644 index 0000000..b519265 Binary files /dev/null and b/public/assets/scenarios/hotel-trace-soft.webp differ diff --git a/public/assets/scenarios/hotel-trace.jpg b/public/assets/scenarios/hotel-trace.jpg new file mode 100644 index 0000000..d2556da Binary files /dev/null and b/public/assets/scenarios/hotel-trace.jpg differ diff --git a/public/assets/scenarios/scenic-guide-home-soft.webp b/public/assets/scenarios/scenic-guide-home-soft.webp new file mode 100644 index 0000000..71aaf8f Binary files /dev/null and b/public/assets/scenarios/scenic-guide-home-soft.webp differ diff --git a/public/assets/scenarios/scenic-guide-home.jpg b/public/assets/scenarios/scenic-guide-home.jpg new file mode 100644 index 0000000..c7af90b Binary files /dev/null and b/public/assets/scenarios/scenic-guide-home.jpg differ diff --git a/public/assets/scenarios/scenic-guide-plan-soft.webp b/public/assets/scenarios/scenic-guide-plan-soft.webp new file mode 100644 index 0000000..78cad35 Binary files /dev/null and b/public/assets/scenarios/scenic-guide-plan-soft.webp differ diff --git a/public/assets/scenarios/scenic-guide-plan.jpg b/public/assets/scenarios/scenic-guide-plan.jpg new file mode 100644 index 0000000..60b3a96 Binary files /dev/null and b/public/assets/scenarios/scenic-guide-plan.jpg differ diff --git a/public/assets/scenarios/scenic-market-soft.webp b/public/assets/scenarios/scenic-market-soft.webp new file mode 100644 index 0000000..dfa671f Binary files /dev/null and b/public/assets/scenarios/scenic-market-soft.webp differ diff --git a/public/assets/scenarios/scenic-market.jpg b/public/assets/scenarios/scenic-market.jpg new file mode 100644 index 0000000..0780f58 Binary files /dev/null and b/public/assets/scenarios/scenic-market.jpg differ diff --git a/public/assets/scenarios/travel-chat-soft.webp b/public/assets/scenarios/travel-chat-soft.webp new file mode 100644 index 0000000..d2ea620 Binary files /dev/null and b/public/assets/scenarios/travel-chat-soft.webp differ diff --git a/public/assets/scenarios/travel-chat.jpg b/public/assets/scenarios/travel-chat.jpg new file mode 100644 index 0000000..728fe19 Binary files /dev/null and b/public/assets/scenarios/travel-chat.jpg differ diff --git a/public/assets/scenarios/travel-market-soft.webp b/public/assets/scenarios/travel-market-soft.webp new file mode 100644 index 0000000..afefb28 Binary files /dev/null and b/public/assets/scenarios/travel-market-soft.webp differ diff --git a/public/assets/scenarios/travel-market.jpg b/public/assets/scenarios/travel-market.jpg new file mode 100644 index 0000000..70d25a3 Binary files /dev/null and b/public/assets/scenarios/travel-market.jpg differ diff --git a/public/assets/scenarios/travel-workbench-soft.webp b/public/assets/scenarios/travel-workbench-soft.webp new file mode 100644 index 0000000..5e04209 Binary files /dev/null and b/public/assets/scenarios/travel-workbench-soft.webp differ diff --git a/public/assets/scenarios/travel-workbench.jpg b/public/assets/scenarios/travel-workbench.jpg new file mode 100644 index 0000000..747e0f2 Binary files /dev/null and b/public/assets/scenarios/travel-workbench.jpg differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..77a8e43 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,15 @@ + + 智念科技 NIAN + + + + + + + + + + + + + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..c2a49f4 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/src/components/SiteHeader.tsx b/src/components/SiteHeader.tsx index 0686f54..2a3dc1b 100644 --- a/src/components/SiteHeader.tsx +++ b/src/components/SiteHeader.tsx @@ -73,6 +73,13 @@ export function SiteHeader({ ); })} + + {content.header.platformLabel} +
{languageOptions.map((option) => ( + ); +} + +type SceneProductRailProps = { + products: Product[]; + openScene: string | null; + onToggleScene: (product: Product) => void; + onOpenEndpoint: (product: Product, endpoint: SceneEndpoint) => void; +}; + +function SceneProductRail({ products, openScene, onToggleScene, onOpenEndpoint }: SceneProductRailProps) { + const railRef = useRef(null); + const cardRefs = useRef(new Map()); + const [canScrollBack, setCanScrollBack] = useState(false); + const [canScrollForward, setCanScrollForward] = useState(false); + const [popoverPosition, setPopoverPosition] = useState<{ scene: string; style: CSSProperties } | null>(null); + + useEffect(() => { + const rail = railRef.current; + if (!rail) return; + + const cards = rail.querySelectorAll(".scene-product-wrap"); + const firstCard = cards[0]; + const lastCard = cards[cards.length - 1]; + if (!firstCard || !lastCard) return; + + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.target === firstCard) setCanScrollBack(!entry.isIntersecting); + if (entry.target === lastCard) setCanScrollForward(!entry.isIntersecting); + }); + }, + { root: rail, threshold: 0.98 }, + ); + + observer.observe(firstCard); + observer.observe(lastCard); + return () => observer.disconnect(); + }, [products.length]); + + useLayoutEffect(() => { + if (!openScene) { + setPopoverPosition(null); + return; + } + + const updatePopoverPosition = () => { + const anchor = cardRefs.current.get(openScene); + const product = products.find((item) => item.name === openScene); + if (!anchor || !product) return; + + const viewportMargin = window.innerWidth < 640 ? 10 : 24; + const preferredWidth = getScenePopoverWidth(product); + const width = Math.min(preferredWidth, window.innerWidth - viewportMargin * 2); + const anchorRect = anchor.getBoundingClientRect(); + const preferredLeft = anchorRect.left + anchorRect.width / 2; + const left = Math.min( + window.innerWidth - viewportMargin - width / 2, + Math.max(viewportMargin + width / 2, preferredLeft), + ); + const top = anchorRect.bottom + 11; + + setPopoverPosition({ + scene: openScene, + style: { + top, + left, + width, + maxHeight: Math.max(120, window.innerHeight - top - viewportMargin), + }, + }); + }; + + updatePopoverPosition(); + const rail = railRef.current; + rail?.addEventListener("scroll", updatePopoverPosition, { passive: true }); + window.addEventListener("resize", updatePopoverPosition); + window.addEventListener("scroll", updatePopoverPosition, true); + + return () => { + rail?.removeEventListener("scroll", updatePopoverPosition); + window.removeEventListener("resize", updatePopoverPosition); + window.removeEventListener("scroll", updatePopoverPosition, true); + }; + }, [openScene, products]); + + const scrollRail = (direction: -1 | 1) => { + const rail = railRef.current; + if (!rail) return; + + const firstCard = rail.querySelector(".scene-product-wrap"); + const railStyles = window.getComputedStyle(rail); + const gap = Number.parseFloat(railStyles.columnGap || railStyles.gap) || 0; + const distance = (firstCard?.offsetWidth ?? rail.clientWidth * 0.8) + gap; + const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; + + rail.scrollBy({ + left: direction * distance, + behavior: reducedMotion ? "auto" : "smooth", + }); + }; + + return ( +
+
+ + +
+ +
+ {products.map((product, productIndex) => { + const endpoints = product.endpoints ?? []; + const isOpen = openScene === product.name; + const popoverId = `scene-product-${productIndex}-entries`; + + return ( +
{ + if (element) cardRefs.current.set(product.name, element); + else cardRefs.current.delete(product.name); + }} + > + + + {isOpen && popoverPosition?.scene === product.name && createPortal( + , + document.body, + )} +
+ ); + })} +
+
+ ); +} + +type LayerRowProps = { + layer: ProductLayer; + focusedLayer: ProductLayerId | null; + openScene: string | null; + onOpen: (product: Product) => void; + onFocusLayer: (layerId: ProductLayerId) => void; + onToggleScene: (product: Product) => void; + onOpenEndpoint: (product: Product, endpoint: SceneEndpoint) => void; +}; + +function LayerRow({ layer, focusedLayer, openScene, onOpen, onFocusLayer, onToggleScene, onOpenEndpoint }: LayerRowProps) { + const LayerIcon = layer.icon; + const isFocused = focusedLayer === layer.id; + const focusState = focusedLayer === null ? "idle" : isFocused ? "active" : "muted"; + const productsId = `${layer.id}-products`; + + return ( +
{ + if (focusedLayer === null || isFocused) return; + + event.preventDefault(); + event.stopPropagation(); + onFocusLayer(layer.id); + }} + > +
+ +
+ +
+ {layer.id === "scene" ? ( + + ) : ( +
+ {layer.products.map((product) => ( + + ))} +
+ )} +
+
+ ); +} + +function getDisplayName(identifier: string) { + const localPart = identifier.includes("@") ? identifier.split("@")[0] : identifier.replace(/\D/g, "").slice(-4); + const displayName = localPart || "用户"; + return displayName.length > 14 ? `${displayName.slice(0, 14)}…` : displayName; +} + +function readStoredUser(): AuthUser | null { + if (typeof window === "undefined") return null; + + try { + const rawUser = window.localStorage.getItem(AUTH_STORAGE_KEY); + if (!rawUser) return null; + + const parsedUser = JSON.parse(rawUser) as Partial; + if (typeof parsedUser.email !== "string" || typeof parsedUser.displayName !== "string") return null; + + return { + email: parsedUser.email, + displayName: parsedUser.displayName, + }; + } catch { + return null; + } +} + +type LoginDialogProps = { + initialIdentifier?: string; + standalone?: boolean; + onClose: () => void; + onRequestHelp: () => void; + onSubmit: (payload: LoginPayload) => void; +}; + +function LoginDialog({ initialIdentifier = "", standalone = false, onClose, onRequestHelp, onSubmit }: LoginDialogProps) { + const [identifier, setIdentifier] = useState(initialIdentifier); + const [password, setPassword] = useState(""); + const [remember, setRemember] = useState(true); + const [showPassword, setShowPassword] = useState(false); + const [error, setError] = useState(""); + const [isSubmitting, setIsSubmitting] = useState(false); + const identifierRef = useRef(null); + const submitTimer = useRef(null); + + useEffect(() => { + identifierRef.current?.focus(); + + const previousOverflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; + + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") onClose(); + }; + + window.addEventListener("keydown", handleKeyDown); + return () => { + window.removeEventListener("keydown", handleKeyDown); + document.body.style.overflow = previousOverflow; + if (submitTimer.current !== null) window.clearTimeout(submitTimer.current); + }; + }, [onClose]); + + const handleSubmit = (event: FormEvent) => { + event.preventDefault(); + const normalizedIdentifier = identifier.trim(); + if (!normalizedIdentifier) { + setError("请输入账号"); + identifierRef.current?.focus(); + return; + } + + if (password.length < 6) { + setError("密码至少需要 6 位字符"); + return; + } + + setError(""); + setIsSubmitting(true); + submitTimer.current = window.setTimeout(() => { + onSubmit({ identifier: normalizedIdentifier, remember }); + }, 220); + }; + + return ( +
{ + if (event.target === event.currentTarget) onClose(); + }} + > +
event.stopPropagation()} + > + + +
+ {!standalone && ( + + )} + +
+
+ Nianxx +
+

WELCOME BACK

+

登录产品空间

+

使用企业账号登录,继续探索智念科技的产品全景。

+
+ +
+ + + + +
+ + +
+ + {error && } + + +
+ +

还没有企业账号?

+
+
+
+ ); +} + +function App() { + const [notice, setNotice] = useState(""); + const [openScene, setOpenScene] = useState(null); + const [focusedLayer, setFocusedLayer] = useState(null); + const [authUser, setAuthUser] = useState(() => readStoredUser()); + const noticeTimer = useRef(null); + + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") { + setOpenScene(null); + setFocusedLayer(null); + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => { + window.removeEventListener("keydown", handleKeyDown); + if (noticeTimer.current) window.clearTimeout(noticeTimer.current); + }; + }, []); + + useEffect(() => { + if (!focusedLayer) return; + + const handlePointerDown = (event: PointerEvent) => { + const target = event.target; + if (!(target instanceof Element)) return; + + const clickedLayer = target.closest(".layer-row")?.dataset.layerId; + const clickedFocusedScenePopover = focusedLayer === "scene" && target.closest(".scene-popover"); + + if (clickedLayer || clickedFocusedScenePopover) return; + setFocusedLayer(null); + }; + + document.addEventListener("pointerdown", handlePointerDown); + return () => document.removeEventListener("pointerdown", handlePointerDown); + }, [focusedLayer]); + + const showNotice = (message: string) => { + setNotice(message); + if (noticeTimer.current) window.clearTimeout(noticeTimer.current); + noticeTimer.current = window.setTimeout(() => setNotice(""), 2200); + }; + + const launchEntry = (entry: Launchable, unavailableMessage: string) => { + const href = resolveLaunchHref(entry); + if (!href) { + showNotice(unavailableMessage); + return; + } + + if (entry.launchMode === "native") { + showNotice(`正在唤起${entry.launchLabel ?? "本机应用"}…`); + window.location.assign(href); + return; + } + + window.open(href, "_blank", "noopener,noreferrer"); + }; + + const openProduct = (product: Product) => { + launchEntry(product, `${product.name}暂未开放`); + }; + + const openEndpoint = (_product: Product, endpoint: SceneEndpoint) => { + setOpenScene(null); + launchEntry(endpoint, `${endpoint.name}暂未开放`); + }; + + const toggleLayerFocus = (layerId: ProductLayerId) => { + setOpenScene(null); + setFocusedLayer((current) => current === layerId ? null : layerId); + }; + + const handleLogin = ({ identifier, remember }: LoginPayload) => { + const user = { + email: identifier, + displayName: getDisplayName(identifier), + }; + + setAuthUser(user); + + if (remember) { + window.localStorage.setItem(AUTH_STORAGE_KEY, JSON.stringify(user)); + } else { + window.localStorage.removeItem(AUTH_STORAGE_KEY); + } + + showNotice(`登录成功,欢迎回来,${user.displayName}`); + }; + + const handleLogout = () => { + setAuthUser(null); + window.localStorage.removeItem(AUTH_STORAGE_KEY); + showNotice("已退出当前账号"); + }; + + if (!authUser) { + return ( +
+ undefined} + onRequestHelp={() => showNotice("请联系企业管理员处理账号问题")} + onSubmit={handleLogin} + /> +
+ {notice} +
+
+ ); + } + + return ( +
+ 跳到产品架构 +
+
+ Nianxx + 智念科技产品体系 +
+ +
+ + {openScene && ( +
+ ); +} + +export default App; diff --git a/src/platform/main.tsx b/src/platform/main.tsx new file mode 100644 index 0000000..888dcde --- /dev/null +++ b/src/platform/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import PlatformApp from "./PlatformApp"; +import "./platform.css"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/src/platform/platform.css b/src/platform/platform.css new file mode 100644 index 0000000..f748e56 --- /dev/null +++ b/src/platform/platform.css @@ -0,0 +1,2290 @@ +:root { + color-scheme: light; + font-family: "SF Pro Display", "SF Pro Text", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + --canvas: #eef3f8; + --canvas-deep: #e7eef6; + --surface: #fcfdff; + --surface-hover: #f8fbff; + --surface-muted: #f1f5f9; + --text: #16243a; + --text-muted: #62738a; + --text-soft: #8391a4; + --line: #d8e2ed; + --line-strong: #c8d5e3; + --brand: #2e72c4; + --scene: #2d75c7; + --capability: #695bb5; + --data: #247e9f; + --radius-card: 12px; + --radius-inner: 9px; + --radius-popover: 18px; + --shadow-card: 0 10px 28px rgba(43, 68, 101, 0.07), 0 2px 7px rgba(43, 68, 101, 0.035); + --shadow-card-hover: 0 16px 36px rgba(43, 68, 101, 0.12), 0 4px 10px rgba(43, 68, 101, 0.055); + --z-dismiss: 6; + --z-scene: 8; + --z-popover: 22; + --z-topbar: 40; + --z-toast: 70; + --z-auth: 60; + --ease-out: cubic-bezier(0.23, 1, 0.32, 1); +} + +* { + box-sizing: border-box; +} + +html { + min-width: 320px; + min-height: 100%; + scroll-behavior: smooth; +} + +body, +#root { + width: 100%; + min-height: 100%; +} + +body { + margin: 0; + min-width: 320px; + overflow-x: hidden; + color: var(--text); + background: var(--canvas); +} + +button { + font: inherit; + -webkit-tap-highlight-color: transparent; +} + +button:focus-visible, +a:focus-visible { + outline: 3px solid rgba(46, 114, 196, 0.28); + outline-offset: 3px; +} + +img { + display: block; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.skip-link { + position: fixed; + top: 10px; + left: 16px; + z-index: calc(var(--z-topbar) + 2); + padding: 9px 12px; + border-radius: var(--radius-inner); + background: var(--text); + color: var(--surface); + font-size: 13px; + font-weight: 650; + text-decoration: none; + transform: translateY(-160%); + transition: transform 160ms ease; +} + +.skip-link:focus { + transform: translateY(0); +} + +.portal-shell { + position: relative; + isolation: isolate; + min-height: 100dvh; + background: + radial-gradient(circle at 50% -28%, rgba(45, 117, 199, 0.13), transparent 42rem), + linear-gradient(180deg, #f5f8fb 0%, var(--canvas) 44%, #edf3f8 100%); +} + +.topbar { + position: sticky; + top: 0; + z-index: var(--z-topbar); + height: 64px; + padding: 0 clamp(16px, 1.4vw, 24px); + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + border-bottom: 1px solid rgba(200, 213, 227, 0.82); + background: rgba(252, 253, 255, 0.92); + box-shadow: 0 7px 24px rgba(43, 68, 101, 0.045); + backdrop-filter: blur(18px) saturate(135%); + -webkit-backdrop-filter: blur(18px) saturate(135%); +} + +.topbar-brand, +.topbar-meta { + display: flex; + align-items: center; +} + +.topbar-brand { + min-width: 0; + gap: 11px; + white-space: nowrap; +} + +.topbar-brand img { + width: 88px; + height: auto; + flex: 0 0 auto; + object-fit: contain; + mix-blend-mode: multiply; +} + +.topbar-brand strong { + color: #13233a; + font-size: 17px; + font-weight: 720; + letter-spacing: 0.025em; +} + +.topbar-meta { + height: 100%; + justify-self: end; + gap: 14px; + color: #4f6077; + font-size: 13px; +} + +.topbar-meta > span { + position: relative; + height: 100%; + display: flex; + align-items: center; + font-weight: 570; +} + +.topbar-meta > span::after { + content: ""; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 2px; + border-radius: 2px 2px 0 0; + background: var(--brand); +} + +.official-site-link { + min-height: 36px; + padding: 0 12px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + flex: 0 0 auto; + border: 1px solid var(--line); + border-radius: 10px; + background: rgba(252, 253, 255, 0.88); + color: #40536b; + font-size: 13px; + font-weight: 680; + text-decoration: none; + transition: transform 160ms var(--ease-out), border-color 160ms ease, background-color 160ms ease, color 160ms ease, box-shadow 180ms ease; +} + +.official-site-link:hover { + border-color: rgba(46, 114, 196, 0.36); + background: #f6faff; + color: var(--brand); + box-shadow: 0 6px 16px rgba(43, 68, 101, 0.08); +} + +.official-site-link:active { + transform: scale(0.97); +} + +.login-trigger, +.logout-button { + border: 1px solid var(--line); + background: rgba(252, 253, 255, 0.88); + color: #40536b; + cursor: pointer; + transition: transform 160ms var(--ease-out), border-color 160ms ease, background-color 160ms ease, color 160ms ease, box-shadow 180ms ease; +} + +.login-trigger { + min-height: 36px; + padding: 0 13px; + display: inline-flex; + align-items: center; + gap: 7px; + border-radius: 10px; + font-size: 13px; + font-weight: 680; +} + +.login-trigger:hover, +.logout-button:hover { + border-color: rgba(46, 114, 196, 0.36); + background: #f6faff; + color: var(--brand); + box-shadow: 0 6px 16px rgba(43, 68, 101, 0.08); +} + +.login-trigger:active, +.logout-button:active { + transform: scale(0.97); +} + +.topbar-user { + min-height: 38px; + padding: 3px 4px 3px 5px; + display: inline-flex; + align-items: center; + gap: 8px; + border: 1px solid rgba(200, 213, 227, 0.82); + border-radius: 12px; + background: rgba(248, 251, 255, 0.9); +} + +.topbar-user-avatar { + width: 29px; + height: 29px; + display: grid; + place-items: center; + flex: 0 0 auto; + border-radius: 9px; + background: color-mix(in srgb, var(--brand) 12%, var(--surface)); + color: var(--brand); + font-size: 12px; + font-weight: 760; +} + +.topbar-user-copy { + min-width: 0; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 1px; + line-height: 1.05; +} + +.topbar-user-copy small { + color: var(--text-soft); + font-size: 10px; + font-weight: 570; +} + +.topbar-user-copy strong { + max-width: 120px; + overflow: hidden; + color: var(--text); + font-size: 12px; + font-weight: 700; + text-overflow: ellipsis; + white-space: nowrap; +} + +.logout-button { + width: 29px; + height: 29px; + padding: 0; + display: grid; + place-items: center; + border-color: transparent; + border-radius: 8px; + background: transparent; + color: #8190a3; +} + +.portal-main { + width: 100%; + margin: 0; + padding: 24px clamp(12px, 1vw, 16px) 40px; +} + +.architecture-board { + --label-track: clamp(78px, 6vw, 88px); + --layer-gap: clamp(8px, 0.7vw, 10px); + --board-content-max: 1360px; + --module-right-inset: clamp(12px, 1.25vw, 24px); + min-width: 0; + width: 100%; + margin-inline: 0; + display: grid; + grid-template-columns: minmax(0, 1fr); + grid-template-rows: repeat(3, 156px); + gap: 28px; +} + +.layer-row { + --module-content-max: calc(var(--board-content-max) - var(--label-track) - var(--layer-gap)); + --label-side-gap: max( + 4px, + calc((100% - var(--module-content-max) - var(--label-track) - var(--module-right-inset)) / 2) + ); + min-width: 0; + min-height: 0; + display: grid; + grid-template-columns: + var(--label-side-gap) + var(--label-track) + var(--label-side-gap) + minmax(0, 1fr) + var(--module-right-inset); + gap: 0; + --layer-color: var(--scene); +} + +.layer-scene { + position: relative; + z-index: var(--z-scene); +} + +.layer-capability { + --layer-color: var(--capability); +} + +.layer-data { + --layer-color: var(--data); + position: relative; +} + +.layer-label { + grid-column: 2; + width: 100%; + height: 100%; + min-width: 0; + display: flex; + align-items: center; + justify-content: center; + justify-self: stretch; + color: var(--layer-color); + text-align: center; + opacity: 1; + transition: opacity 350ms var(--ease-out); +} + +.layer-focus-trigger { + position: relative; + width: 100%; + height: 100%; + min-width: 0; + padding: 10px 5px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 8px; + border: 1px solid transparent; + border-radius: 16px; + background: transparent; + color: inherit; + text-align: center; + cursor: pointer; + transition: + transform 250ms var(--ease-out), + border-color 250ms ease, + background-color 250ms ease, + box-shadow 300ms var(--ease-out); +} + +.layer-focus-trigger:hover { + border-color: color-mix(in srgb, var(--layer-color) 18%, transparent); + background: color-mix(in srgb, var(--layer-color) 5%, transparent); +} + +.layer-focus-trigger:active { + transform: scale(0.97); +} + +.layer-icon-shell { + width: 44px; + height: 44px; + display: grid; + place-items: center; + border: 1px solid color-mix(in srgb, var(--layer-color) 19%, var(--line)); + border-radius: 12px; + background: color-mix(in srgb, var(--layer-color) 8%, var(--surface)); + box-shadow: inset 0 1px 0 rgba(252, 253, 255, 0.82); + line-height: 0; + transition: transform 300ms var(--ease-out), border-color 250ms ease, background-color 250ms ease, box-shadow 300ms ease; +} + +.layer-label-copy { + display: flex; + flex-direction: column; + align-items: center; + gap: 3px; +} + +.layer-title { + color: var(--layer-color); + font-size: clamp(15px, 1.18vw, 17px); + font-weight: 680; + letter-spacing: 0.01em; +} + +.layer-focus-hint { + color: color-mix(in srgb, var(--layer-color) 58%, var(--text-soft)); + font-size: 9px; + font-weight: 620; + line-height: 1; + opacity: 0; + transform: translateY(2px); + transition: opacity 200ms ease, transform 250ms var(--ease-out); +} + +.layer-focus-trigger:hover .layer-focus-hint, +.layer-focus-trigger:focus-visible .layer-focus-hint, +.layer-row[data-focus-state="active"] .layer-focus-hint { + opacity: 1; + transform: translateY(0); +} + +.layer-focus-mark { + width: 20px; + height: 3px; + flex: 0 0 auto; + border-radius: 999px; + background: var(--layer-color); + opacity: 0; + transform: scaleX(0.35); + transition: opacity 220ms ease, transform 300ms var(--ease-out); +} + +.layer-row[data-focus-state="active"] .layer-focus-trigger { + border-color: color-mix(in srgb, var(--layer-color) 30%, var(--line)); + background: color-mix(in srgb, var(--layer-color) 9%, rgba(252, 253, 255, 0.74)); + box-shadow: 0 10px 24px color-mix(in srgb, var(--layer-color) 12%, transparent); +} + +.layer-row[data-focus-state="active"] .layer-icon-shell { + border-color: color-mix(in srgb, var(--layer-color) 42%, var(--line)); + background: color-mix(in srgb, var(--layer-color) 14%, var(--surface)); + box-shadow: 0 7px 16px color-mix(in srgb, var(--layer-color) 13%, transparent), inset 0 1px 0 rgba(252, 253, 255, 0.88); + transform: scale(1.04); +} + +.layer-row[data-focus-state="active"] .layer-focus-mark { + opacity: 0.9; + transform: scaleX(1); +} + +.architecture-board.has-layer-focus .layer-row[data-focus-state="muted"] .layer-label { + opacity: 0.58; +} + +.layer-module { + position: relative; + isolation: isolate; + grid-column: 4; + min-width: 0; + width: 100%; + height: 100%; + opacity: 1; + filter: blur(0) saturate(1) contrast(1); + transform: scale(1); + transform-origin: left center; + transition: + transform 400ms cubic-bezier(0.22, 1, 0.36, 1), + opacity 350ms cubic-bezier(0.22, 1, 0.36, 1), + filter 400ms cubic-bezier(0.22, 1, 0.36, 1); + will-change: transform, opacity, filter; +} + +.layer-module::before { + content: ""; + position: absolute; + inset: -10px; + z-index: 0; + border: 1px solid color-mix(in srgb, var(--layer-color) 34%, transparent); + border-radius: 20px; + background: color-mix(in srgb, var(--layer-color) 4%, rgba(252, 253, 255, 0.48)); + box-shadow: 0 18px 44px color-mix(in srgb, var(--layer-color) 14%, transparent); + opacity: 0; + pointer-events: none; + transform: scale(0.992); + transition: opacity 350ms ease, transform 400ms cubic-bezier(0.22, 1, 0.36, 1); +} + +.layer-module > * { + position: relative; + z-index: 1; +} + +.architecture-board.has-layer-focus .layer-row[data-focus-state="active"] .layer-module { + filter: blur(0) saturate(1.08) contrast(1.015); + transform: scale(1.006); +} + +.architecture-board.has-layer-focus .layer-row[data-focus-state="active"] .layer-module::before { + opacity: 1; + transform: scale(1); +} + +.architecture-board.has-layer-focus .layer-row[data-focus-state="muted"] .layer-module { + opacity: 0.42; + filter: blur(2px) saturate(0.66) contrast(0.94); + transform: scale(0.988); +} + +.layer-products { + min-width: 0; + width: 100%; + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + justify-self: start; + gap: clamp(10px, 0.9vw, 14px); +} + +.layer-capability .layer-products { + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: clamp(10px, 0.9vw, 14px); +} + +.data-products { + width: 100%; + grid-template-columns: repeat(3, minmax(0, 1fr)); + justify-self: stretch; + gap: 16px; +} + +.product-node { + position: relative; + isolation: isolate; + min-width: 0; + min-height: 0; + padding: 0; + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + align-items: stretch; + gap: 0; + overflow: hidden; + border: 1px solid color-mix(in srgb, var(--layer-color) 27%, var(--line)); + border-radius: var(--radius-card); + background: var(--surface); + color: var(--text); + box-shadow: var(--shadow-card); + text-align: center; + cursor: pointer; + transition: + transform 190ms cubic-bezier(0.16, 1, 0.3, 1), + border-color 190ms ease, + background-color 190ms ease, + box-shadow 220ms ease; +} + +.product-shot { + position: relative; + min-width: 0; + min-height: 0; + grid-column: 1; + grid-row: 1; + overflow: hidden; + background-color: color-mix(in srgb, var(--layer-color) 3%, var(--surface)); + background-image: var(--product-shot); + background-position: left center; + background-repeat: no-repeat; + background-size: contain; + opacity: 0.66; + filter: saturate(0.74) contrast(0.96); + transform: scale(1.008); + transition: opacity 220ms ease, filter 220ms ease, transform 280ms cubic-bezier(0.16, 1, 0.3, 1); +} + +.product-shot::after { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient( + 90deg, + rgba(252, 253, 255, 0.02) 0%, + rgba(252, 253, 255, 0.08) 42%, + rgba(252, 253, 255, 0.76) 68%, + rgba(252, 253, 255, 0.98) 100% + ); + pointer-events: none; +} + +.product-identity { + position: relative; + z-index: 2; + min-width: 0; + min-height: 0; + width: 44%; + padding: 12px 7px 10px; + grid-column: 1; + grid-row: 1; + justify-self: end; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 7px; + background: linear-gradient( + 90deg, + rgba(252, 253, 255, 0) 0%, + color-mix(in srgb, var(--layer-color) 4%, rgba(252, 253, 255, 0.92)) 30%, + color-mix(in srgb, var(--layer-color) 5%, var(--surface)) 100% + ); +} + +.product-node:not(.scene-product) { + width: 100%; + height: 100%; +} + +.product-node:hover { + border-color: color-mix(in srgb, var(--layer-color) 48%, var(--line)); + background: var(--surface-hover); + box-shadow: var(--shadow-card-hover); + transform: translateY(-3px); +} + +.product-node:hover .product-shot { + opacity: 0.78; + filter: saturate(0.9) contrast(1); + transform: scale(1.02); +} + +.product-node:active { + transform: translateY(0) scale(0.99); +} + +.node-icon { + position: relative; + width: 38px; + height: 38px; + display: grid; + flex: 0 0 auto; + place-items: center; + border: 1px solid color-mix(in srgb, var(--layer-color) 16%, var(--line)); + border-radius: 10px; + background: color-mix(in srgb, var(--layer-color) 8%, var(--surface)); + color: var(--layer-color); + line-height: 0; + transition: transform 190ms cubic-bezier(0.16, 1, 0.3, 1), background-color 190ms ease; +} + +.product-node:hover .node-icon { + background: color-mix(in srgb, var(--layer-color) 12%, var(--surface)); + transform: translateY(-1px); +} + +.node-name { + position: relative; + max-width: 100%; + color: var(--text); + font-size: clamp(14px, 1.16vw, 16px); + font-weight: 720; + line-height: 1.2; + letter-spacing: -0.018em; + overflow-wrap: anywhere; + text-wrap: pretty; +} + +.node-arrow { + position: absolute; + top: 9px; + right: 9px; + z-index: 3; + color: #8190a3; + opacity: 0; + transition: transform 180ms ease, color 180ms ease; +} + +.product-node:hover .node-arrow { + color: var(--layer-color); + opacity: 1; + transform: translateX(3px); +} + +.keyword-group { + position: relative; + min-width: 0; + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.keyword-chip { + padding: 2px 6px; + border-radius: 999px; + background: color-mix(in srgb, var(--layer-color) 8%, var(--surface-muted)); + color: color-mix(in srgb, var(--layer-color) 70%, var(--text)); + font-size: 9px; + font-weight: 620; + line-height: 1.2; + white-space: nowrap; +} + +.node-keywords { + max-width: 100%; + margin-top: 1px; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.scene-rail-shell { + position: relative; + min-width: 0; + width: 100%; + height: 100%; + isolation: isolate; +} + +.scene-products { + width: 100%; + height: 100%; + display: grid; + grid-template-columns: none; + grid-template-rows: minmax(0, 1fr); + grid-auto-flow: column; + grid-auto-columns: clamp(270px, 21vw, 318px); + gap: 22px; + overflow-x: auto; + overflow-y: hidden; + overscroll-behavior-x: contain; + scroll-padding-inline: 1px; + scroll-snap-type: x mandatory; + scrollbar-width: none; + -webkit-overflow-scrolling: touch; +} + +.scene-products::-webkit-scrollbar { + display: none; +} + +.scene-rail-shell::before, +.scene-rail-shell::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + z-index: 4; + width: 58px; + opacity: 0; + pointer-events: none; + transition: opacity 180ms ease; +} + +.scene-rail-shell::before { + left: 0; + background: linear-gradient(90deg, rgba(238, 243, 248, 0.96), rgba(238, 243, 248, 0)); +} + +.scene-rail-shell::after { + right: 0; + background: linear-gradient(270deg, rgba(238, 243, 248, 0.96), rgba(238, 243, 248, 0)); +} + +.scene-rail-shell.can-scroll-back::before, +.scene-rail-shell.can-scroll-forward::after { + opacity: 1; +} + +.scene-rail-controls { + position: absolute; + inset: 0; + z-index: 5; + pointer-events: none; +} + +.scene-rail-button { + position: absolute; + top: 50%; + width: 34px; + height: 34px; + padding: 0; + display: grid; + place-items: center; + border: 0; + border-radius: 50%; + background: rgba(248, 251, 254, 0.9); + color: var(--scene); + box-shadow: 0 8px 22px rgba(38, 65, 98, 0.12); + cursor: pointer; + pointer-events: auto; + transform: translateY(-50%); + transition: opacity 160ms ease, transform 180ms var(--ease-out), background-color 160ms ease, box-shadow 180ms ease; +} + +.scene-rail-button.is-previous { + left: 8px; +} + +.scene-rail-button.is-next { + right: 8px; +} + +.scene-rail-button:hover { + background: var(--surface); + box-shadow: 0 10px 26px rgba(38, 65, 98, 0.17); + transform: translateY(-50%) scale(1.04); +} + +.scene-rail-button:active { + transform: translateY(-50%) scale(0.96); +} + +.scene-rail-button:disabled { + opacity: 0; + cursor: default; + pointer-events: none; +} + +.scene-product-wrap { + position: relative; + z-index: 1; + min-width: 0; + min-height: 0; + height: 100%; + scroll-snap-align: start; + scroll-snap-stop: always; +} + +.scene-product-wrap.is-open { + z-index: 2; +} + +.scene-product-wrap:last-child { + scroll-snap-align: end; +} + +.product-node.scene-product { + width: 100%; + height: 100%; + padding: 0; + display: flex; + flex-direction: column; + align-items: stretch; + overflow: visible; + border: 0; + border-radius: 0; + background: transparent; + box-shadow: none; + text-align: left; +} + +.product-node.scene-product .product-shot { + position: relative; + width: 100%; + flex: 1 1 auto; + overflow: hidden; + border-radius: 11px; + background-position: center top; + background-size: cover; + opacity: 0.78; + filter: saturate(0.76) contrast(0.97); + -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 74%, rgba(0, 0, 0, 0.66) 88%, transparent 100%); + mask-image: linear-gradient(180deg, #000 0%, #000 74%, rgba(0, 0, 0, 0.66) 88%, transparent 100%); + transform: scale(1); +} + +.product-node.scene-product .product-shot::after { + background: linear-gradient(180deg, rgba(20, 42, 70, 0) 48%, rgba(20, 42, 70, 0.1) 100%); +} + +.product-identity.scene-identity { + position: relative; + width: 100%; + min-height: 56px; + flex: 0 0 56px; + margin-top: -8px; + padding: 7px 34px 0 2px; + display: grid; + grid-template-columns: 31px minmax(0, 1fr); + grid-template-rows: auto auto; + align-items: center; + justify-content: stretch; + justify-self: stretch; + gap: 0 8px; + border: 0; + background: transparent; +} + +.scene-identity .node-icon { + width: 30px; + height: 30px; + grid-column: 1; + grid-row: 1 / 3; + border: 0; + border-radius: 0; + background: transparent; +} + +.scene-identity .node-name { + grid-column: 2; + grid-row: 1; + align-self: end; + font-size: 14px; + line-height: 1.15; +} + +.scene-identity .node-keywords { + max-width: 100%; + margin: 3px 0 0; + grid-column: 2; + grid-row: 2; + align-self: start; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + gap: 4px; + overflow: hidden; +} + +.scene-identity .keyword-chip { + padding: 0; + border-radius: 0; + background: transparent; + color: #708097; + font-size: 8.5px; + font-weight: 590; +} + +.scene-identity .keyword-chip + .keyword-chip::before { + content: "/"; + margin-right: 4px; + color: #a9b5c3; +} + +.product-node.scene-product:hover .product-shot, +.scene-product-wrap.is-open .product-node.scene-product .product-shot { + opacity: 0.92; + filter: saturate(0.9) contrast(1); + transform: translateY(-2px) scale(1.012); +} + +.product-node.scene-product:hover, +.scene-product-wrap.is-open .product-node.scene-product { + border: 0; + background: transparent; + box-shadow: none; + transform: none; +} + +.product-node.scene-product:active { + transform: none; +} + +.scene-toggle { + position: absolute; + right: 3px; + bottom: 13px; + z-index: 3; + padding: 4px; + box-sizing: content-box; + border: 0; + border-radius: 0; + background: transparent; + color: var(--scene); + box-shadow: none; + opacity: 0.72; + transition: transform 220ms cubic-bezier(0.16, 1, 0.3, 1), opacity 180ms ease; +} + +.scene-product-wrap.is-open .scene-toggle { + background: transparent; + opacity: 1; + transform: rotate(180deg); +} + +.scene-popover-dismiss { + position: fixed; + inset: 64px 0 0; + z-index: var(--z-dismiss); + padding: 0; + border: 0; + background: rgba(232, 239, 246, 0.42); + cursor: default; + backdrop-filter: blur(2px); + -webkit-backdrop-filter: blur(2px); +} + +.scene-popover { + position: absolute; + top: calc(100% + 11px); + left: 50%; + z-index: var(--z-popover); + width: min(var(--popover-width), calc(100vw - 48px)); + padding: 14px; + border: 1px solid #d4dfeb; + border-radius: var(--radius-popover); + background: rgba(252, 253, 255, 0.985); + box-shadow: 0 24px 56px rgba(39, 61, 91, 0.2), 0 6px 16px rgba(39, 61, 91, 0.07); + backdrop-filter: blur(18px) saturate(125%); + -webkit-backdrop-filter: blur(18px) saturate(125%); + transform: translateX(-50%); + transform-origin: top center; + animation: scene-popover-in 190ms cubic-bezier(0.16, 1, 0.3, 1) both; +} + +.scene-popover.scene-rail-popover { + --layer-color: var(--scene); + position: fixed; + right: auto; + bottom: auto; + overflow-y: auto; + transform: translateX(-50%); + transform-origin: top center; + animation: scene-popover-in 190ms cubic-bezier(0.16, 1, 0.3, 1) both; +} + +.scene-product-wrap:first-child .scene-popover { + left: 0; + transform: none; + transform-origin: top left; +} + +.scene-product-wrap:last-child .scene-popover { + right: 0; + left: auto; + transform: none; + transform-origin: top right; +} + +.scene-popover-header { + padding: 1px 2px 11px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + color: #223248; +} + +.scene-popover-header strong { + font-size: 14px; + font-weight: 700; +} + +.scene-popover-close { + width: 26px; + height: 26px; + padding: 0; + display: grid; + place-items: center; + border: 1px solid transparent; + border-radius: 8px; + background: transparent; + color: #6b7b90; + cursor: pointer; + transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease, transform 160ms ease; +} + +.scene-popover-close:hover { + border-color: var(--line); + background: var(--surface-muted); + color: var(--text); +} + +.scene-popover-close:active { + transform: scale(0.96); +} + +.scene-endpoints { + display: grid; + grid-template-columns: repeat(var(--endpoint-count), minmax(0, 1fr)); + gap: 9px; +} + +.scene-partners { + margin-top: 12px; + padding: 11px 2px 1px; + display: flex; + flex-direction: column; + gap: 7px; + border-top: 1px solid #e2e9f1; +} + +.scene-partners-heading { + display: inline-flex; + align-items: center; + align-self: flex-start; + gap: 5px; + color: var(--scene); + font-size: 11px; + font-weight: 700; + line-height: 1.45; + white-space: nowrap; +} + +.scene-partner-list { + min-width: 0; + margin: 0; + padding: 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(145px, 1fr)); + gap: 4px 12px; + list-style: none; +} + +.scene-partner-list li { + position: relative; + padding-left: 8px; + color: #66778d; + font-size: 10.5px; + font-weight: 560; + line-height: 1.5; +} + +.scene-partner-list li::before { + content: ""; + position: absolute; + top: 0.62em; + left: 0; + width: 3px; + height: 3px; + border-radius: 50%; + background: color-mix(in srgb, var(--scene) 55%, #9aa9ba); +} + +.scene-endpoint { + min-width: 0; + padding: 6px; + border: 1px solid #dde6ef; + border-radius: 12px; + background: #f7f9fc; + color: #25354a; + text-align: left; + cursor: pointer; + transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1), border-color 180ms ease, background-color 180ms ease, box-shadow 200ms ease; +} + +.scene-endpoint:hover { + border-color: rgba(45, 117, 199, 0.46); + background: var(--surface); + box-shadow: 0 10px 22px rgba(48, 72, 105, 0.1); + transform: translateY(-2px); +} + +.scene-endpoint:active { + transform: translateY(0) scale(0.99); +} + +.scene-endpoint-image { + width: 100%; + height: 104px; + padding: 5px; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + border: 1px solid #dfe7f0; + border-radius: 8px; + background: #edf2f7; +} + +.scene-endpoint-image img { + width: 100%; + height: 100%; + border-radius: 5px; + object-fit: contain; + object-position: center; + filter: saturate(0.86) contrast(0.99); +} + +.scene-endpoint-label { + padding: 8px 5px 5px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 6px; + font-size: 12px; + font-weight: 660; +} + +.scene-endpoint-label > span { + min-width: 0; + white-space: nowrap; +} + +.scene-endpoint-label svg { + flex: 0 0 auto; + color: var(--scene); +} + +.endpoint-keywords { + padding: 0 5px 4px; + flex-wrap: nowrap; + gap: 4px; +} + +.endpoint-keywords .keyword-chip { + padding: 2px 5px; + font-size: 9px; +} + +@keyframes scene-popover-in { + from { + opacity: 0; + transform: translate(-50%, -7px) scale(0.975); + } + to { + opacity: 1; + transform: translate(-50%, 0) scale(1); + } +} + +.scene-product-wrap:first-child .scene-popover, +.scene-product-wrap:last-child .scene-popover { + animation-name: scene-popover-edge-in; +} + +@keyframes scene-popover-edge-in { + from { + opacity: 0; + transform: translateY(-7px) scale(0.975); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +.auth-overlay { + position: fixed; + inset: 0; + z-index: var(--z-auth); + padding: 24px; + display: grid; + place-items: center; + background: rgba(22, 36, 58, 0.32); + backdrop-filter: blur(9px) saturate(115%); + -webkit-backdrop-filter: blur(9px) saturate(115%); + animation: auth-overlay-in 180ms ease-out both; +} + +.auth-page-shell { + min-height: 100dvh; + background: #e8eef6; +} + +.auth-page { + overflow-y: auto; + padding: clamp(20px, 4vh, 48px) clamp(16px, 4vw, 64px); + background: + radial-gradient(circle at 50% 4%, rgba(92, 151, 224, 0.18), transparent 34rem), + linear-gradient(145deg, #e9f0f7 0%, #eef3f8 50%, #e4edf6 100%); + backdrop-filter: none; + -webkit-backdrop-filter: none; +} + +.auth-page-card { + width: min(1040px, 100%); + min-height: 610px; + grid-template-columns: minmax(0, 1fr) minmax(390px, 0.94fr); +} + +.auth-page .auth-visual { + min-height: 610px; +} + +.auth-page .auth-form-panel { + padding-inline: clamp(34px, 4.2vw, 58px); +} + +.auth-page .auth-close { + display: none; +} + +.auth-modal { + position: relative; + width: min(900px, 100%); + min-height: 566px; + display: grid; + grid-template-columns: minmax(0, 0.92fr) minmax(360px, 1.08fr); + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.82); + border-radius: 26px; + background: var(--surface); + box-shadow: 0 34px 90px rgba(17, 34, 57, 0.28), 0 8px 24px rgba(17, 34, 57, 0.12); + animation: auth-modal-in 230ms var(--ease-out) both; +} + +.auth-visual { + position: relative; + min-height: 566px; + overflow: hidden; + padding: 29px 30px 26px; + display: flex; + flex-direction: column; + color: #f1f7ff; + background: + radial-gradient(circle at 80% 12%, rgba(110, 182, 255, 0.25), transparent 21rem), + radial-gradient(circle at 8% 75%, rgba(126, 108, 214, 0.22), transparent 22rem), + linear-gradient(148deg, #15365d 0%, #203e68 47%, #263a71 100%); +} + +.auth-visual::before { + content: ""; + position: absolute; + pointer-events: none; +} + +.auth-visual::before { + inset: 0; + opacity: 0.24; + background-image: + linear-gradient(rgba(215, 234, 255, 0.16) 1px, transparent 1px), + linear-gradient(90deg, rgba(215, 234, 255, 0.16) 1px, transparent 1px); + background-size: 30px 30px; + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.7), transparent 78%); +} + +.auth-visual::after { + content: ""; + position: absolute; + right: -150px; + bottom: -172px; + width: 310px; + height: 310px; + border: 1px solid rgba(206, 231, 255, 0.18); + border-radius: 50%; + box-shadow: 0 0 0 28px rgba(206, 231, 255, 0.04), 0 0 0 56px rgba(206, 231, 255, 0.035); + pointer-events: none; +} + +.auth-visual-header, +.auth-visual-copy, +.auth-visual-footnote { + position: relative; + z-index: 2; +} + +.auth-visual-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.auth-visual-logo { + width: 74px; + height: 27px; + padding: 4px 8px 5px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 7px; + background: rgba(244, 249, 255, 0.96); +} + +.auth-visual-logo img { + width: 100%; + height: auto; + object-fit: contain; +} + +.auth-visual-label { + color: rgba(229, 240, 255, 0.64); + font-size: 9px; + font-weight: 710; + letter-spacing: 0.17em; +} + +.auth-visual-copy { + max-width: 360px; + margin-top: 66px; +} + +.auth-eyebrow { + margin: 0; + color: var(--brand); + font-size: 10px; + font-weight: 760; + letter-spacing: 0.13em; + line-height: 1.3; +} + +.auth-visual .auth-eyebrow { + color: #9ec9f8; +} + +.auth-visual-copy h2 { + margin: 12px 0 13px; + color: #f7fbff; + font-size: clamp(28px, 3vw, 39px); + font-weight: 720; + letter-spacing: -0.055em; + line-height: 1.12; +} + +.auth-visual-footnote { + margin-top: auto; + display: flex; + align-items: center; + gap: 8px; + color: rgba(231, 241, 255, 0.62); + font-size: 11px; +} + +.auth-footnote-dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: #78d2d5; + box-shadow: 0 0 0 4px rgba(120, 210, 213, 0.12); +} + +.auth-form-panel { + position: relative; + min-width: 0; + padding: 36px clamp(28px, 4vw, 52px) 30px; + display: flex; + flex-direction: column; + justify-content: center; + background: rgba(252, 253, 255, 0.98); +} + +.auth-close { + position: absolute; + top: 18px; + right: 18px; + width: 32px; + height: 32px; + padding: 0; + display: grid; + place-items: center; + border: 1px solid transparent; + border-radius: 9px; + background: transparent; + color: #8190a3; + cursor: pointer; + transition: transform 160ms var(--ease-out), border-color 160ms ease, background-color 160ms ease, color 160ms ease; +} + +.auth-close:hover { + border-color: var(--line); + background: var(--surface-muted); + color: var(--text); +} + +.auth-close:active { + transform: scale(0.96); +} + +.auth-form-header { + margin-bottom: 27px; +} + +.auth-form-brand { + display: none; +} + +.auth-form-header h1 { + margin: 8px 0 8px; + color: #1a2a41; + font-size: clamp(25px, 2.4vw, 31px); + font-weight: 740; + letter-spacing: -0.045em; + line-height: 1.15; +} + +.auth-form-header > p:last-child { + max-width: 320px; + margin: 0; + color: var(--text-muted); + font-size: 13px; + line-height: 1.65; +} + +.auth-form { + display: flex; + flex-direction: column; + gap: 16px; +} + +.auth-field { + display: flex; + flex-direction: column; + gap: 8px; + color: #43566e; + font-size: 12px; + font-weight: 680; +} + +.auth-input-wrap { + min-height: 46px; + display: flex; + align-items: center; + gap: 10px; + padding: 0 12px; + border: 1px solid #d7e1eb; + border-radius: 11px; + background: #f9fbfd; + color: #91a0b1; + transition: border-color 160ms ease, background-color 160ms ease, box-shadow 180ms ease; +} + +.auth-input-wrap:focus-within { + border-color: rgba(46, 114, 196, 0.62); + background: var(--surface); + box-shadow: 0 0 0 4px rgba(46, 114, 196, 0.1); +} + +.auth-input-wrap input { + width: 100%; + min-width: 0; + padding: 0; + border: 0; + outline: 0; + background: transparent; + color: var(--text); + font-size: 13px; + font-weight: 540; +} + +.auth-input-wrap input::placeholder { + color: #a9b5c3; +} + +.auth-password-toggle { + width: 26px; + height: 28px; + padding: 0; + display: grid; + place-items: center; + flex: 0 0 auto; + border: 0; + border-radius: 7px; + background: transparent; + color: #8b9aaa; + cursor: pointer; + transition: background-color 160ms ease, color 160ms ease, transform 160ms var(--ease-out); +} + +.auth-password-toggle:hover { + background: var(--surface-muted); + color: var(--brand); +} + +.auth-password-toggle:active { + transform: scale(0.96); +} + +.auth-form-options { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-top: -2px; +} + +.auth-checkbox { + display: inline-flex; + align-items: center; + gap: 7px; + color: var(--text-muted); + font-size: 12px; + cursor: pointer; + user-select: none; +} + +.auth-checkbox input { + width: 15px; + height: 15px; + margin: 0; + accent-color: var(--brand); +} + +.auth-help-link, +.auth-form-footer button { + padding: 0; + border: 0; + background: transparent; + color: var(--brand); + font-size: 12px; + font-weight: 660; + cursor: pointer; +} + +.auth-help-link:hover, +.auth-form-footer button:hover { + color: #185da9; + text-decoration: underline; + text-underline-offset: 3px; +} + +.auth-error { + margin: -1px 0 -2px; + color: #c14b58; + font-size: 12px; + line-height: 1.45; +} + +.auth-submit { + min-height: 47px; + margin-top: 4px; + padding: 0 17px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 9px; + border: 1px solid rgba(25, 92, 165, 0.24); + border-radius: 11px; + background: linear-gradient(135deg, #347fcf, #2c68b4); + color: #fff; + box-shadow: 0 10px 20px rgba(46, 114, 196, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.2); + font-size: 13px; + font-weight: 720; + cursor: pointer; + transition: transform 160ms var(--ease-out), box-shadow 180ms ease, filter 160ms ease; +} + +.auth-submit:hover:not(:disabled) { + filter: brightness(1.035); + box-shadow: 0 13px 25px rgba(46, 114, 196, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +.auth-submit:active:not(:disabled) { + transform: scale(0.98); +} + +.auth-submit:disabled { + cursor: wait; + opacity: 0.72; +} + +.auth-form-footer { + margin: 19px 0 0; + color: #8a98a9; + font-size: 11px; + text-align: center; +} + +@keyframes auth-overlay-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes auth-modal-in { + from { + opacity: 0; + transform: translateY(8px) scale(0.97); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +.portal-notice { + position: fixed; + left: 50%; + bottom: 24px; + z-index: var(--z-toast); + min-width: 200px; + max-width: calc(100vw - 32px); + padding: 11px 16px; + border: 1px solid #cfdae6; + border-radius: 10px; + background: rgba(252, 253, 255, 0.97); + color: #27384f; + box-shadow: 0 15px 34px rgba(48, 72, 105, 0.15); + font-size: 13px; + font-weight: 560; + text-align: center; + pointer-events: none; + opacity: 0; + transform: translate(-50%, 10px); + transition: opacity 180ms ease, transform 180ms cubic-bezier(0.16, 1, 0.3, 1); +} + +.portal-notice.is-visible { + opacity: 1; + transform: translate(-50%, 0); +} + +@media (min-width: 960px) and (min-height: 620px) { + html, + body, + #root { + height: 100%; + } + + body { + overflow: hidden; + } + + .portal-shell { + height: 100dvh; + min-height: 620px; + overflow: hidden; + } + + .portal-main { + --architecture-edge-padding: clamp(18px, 1.4vw, 24px); + --architecture-left-shift: clamp(6px, 0.55vw, 10px); + height: calc(100dvh - 64px); + min-height: 556px; + padding: + clamp(28px, 3.2vh, 36px) + calc(var(--architecture-edge-padding) + var(--architecture-left-shift)) + clamp(28px, 3.2vh, 36px) + calc(var(--architecture-edge-padding) - var(--architecture-left-shift)); + display: flex; + align-items: center; + justify-content: flex-start; + } + + .architecture-board { + --board-content-max: 1680px; + width: 100%; + height: auto; + min-height: 0; + grid-template-rows: repeat(3, clamp(152px, 18.5vh, 168px)); + align-content: initial; + gap: clamp(30px, 4vh, 36px); + } + + .layer-products { + height: 100%; + gap: 10px; + } + + .layer-scene { + transform: translateY(clamp(-26px, -2.6vh, -20px)); + } + + .layer-data { + transform: translateY(clamp(20px, 2.6vh, 26px)); + } + + .layer-capability .layer-products, + .layer-data .layer-products { + width: 100%; + justify-self: stretch; + grid-template-columns: repeat(5, minmax(0, 1fr)); + grid-template-rows: minmax(0, 1fr); + gap: 10px; + } + + .layer-scene .scene-products { + width: 100%; + height: 100%; + justify-self: stretch; + grid-template-columns: none; + grid-template-rows: minmax(0, 1fr); + gap: 22px; + } + + .layer-data .product-node:nth-child(1) { + grid-column: 2; + } + + .layer-data .product-node:nth-child(2) { + grid-column: 3; + } + + .layer-data .product-node:nth-child(3) { + grid-column: 4; + } + + .product-identity { + gap: 6px; + } + + .node-icon { + width: 36px; + height: 36px; + } + + .node-icon svg { + width: 24px; + height: 24px; + } + + .node-name { + font-size: clamp(14px, 1.02vw, 15.5px); + } +} + +@media (max-width: 1120px) and (min-width: 960px) { + .portal-main { + width: 100%; + } + + .layer-products { + gap: 8px; + } + + .product-node { + padding: 0; + } + + .node-icon { + width: 34px; + height: 34px; + } + + .node-name { + font-size: 13px; + } + + .keyword-chip { + padding-inline: 5px; + font-size: 9px; + } +} + +@media (max-width: 959px) { + .topbar { + position: sticky; + height: 60px; + padding-inline: 20px; + } + + .portal-main { + width: min(calc(100% - 32px), 820px); + margin-inline: auto; + padding: 22px 0 42px; + } + + .architecture-board { + grid-template-rows: auto; + gap: 36px; + } + + .layer-row { + display: block; + } + + .layer-module { + height: auto; + } + + .layer-label { + margin-bottom: 12px; + height: auto; + justify-content: flex-start; + text-align: left; + } + + .layer-focus-trigger { + width: auto; + height: auto; + min-height: 48px; + padding: 5px 10px 5px 5px; + flex-direction: row; + justify-content: flex-start; + gap: 10px; + border-radius: 13px; + } + + .layer-icon-shell { + width: 38px; + height: 38px; + border-radius: 11px; + } + + .layer-label-copy { + align-items: flex-start; + gap: 2px; + } + + .layer-title { + font-size: 16px; + } + + .layer-focus-hint { + font-size: 9px; + } + + .layer-focus-mark { + width: 3px; + height: 22px; + margin-left: 2px; + transform: scaleY(0.35); + } + + .layer-row[data-focus-state="active"] .layer-focus-mark { + transform: scaleY(1); + } + + .layer-products, + .layer-capability .layer-products { + width: 100%; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + transform: none; + } + + .scene-rail-shell { + height: 170px; + } + + .layer-products.scene-products { + width: 100%; + grid-template-columns: none; + grid-template-rows: minmax(0, 1fr); + grid-auto-flow: column; + grid-auto-columns: min(80vw, 306px); + gap: 18px; + overflow-x: auto; + } + + .scene-product-wrap { + min-height: 170px; + } + + .product-node:not(.scene-product) { + min-height: 150px; + } + + .scene-popover-dismiss { + inset: 60px 0 0; + } + + .scene-popover, + .scene-product-wrap:first-child .scene-popover, + .scene-product-wrap:last-child .scene-popover { + position: fixed; + top: auto; + right: 16px; + bottom: 16px; + left: 16px; + width: auto; + max-height: calc(100dvh - 92px); + overflow-y: auto; + transform: none; + transform-origin: bottom center; + animation: scene-sheet-in 220ms cubic-bezier(0.16, 1, 0.3, 1) both; + } + + @keyframes scene-sheet-in { + from { + opacity: 0; + transform: translateY(18px) scale(0.985); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } + } +} + +@media (min-width: 680px) and (max-width: 959px) { + .layer-products, + .layer-capability .layer-products { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .scene-product-wrap { + min-height: 164px; + } +} + +@media (max-width: 639px) { + .topbar { + padding-inline: 16px; + } + + .topbar-brand strong { + font-size: 14px; + } + + .topbar-brand { + gap: 8px; + } + + .topbar-brand img { + width: 72px; + } + + .topbar-meta { + font-size: 12px; + } + + .portal-main { + width: calc(100% - 28px); + padding-top: 18px; + } + + .layer-products, + .layer-capability .layer-products { + grid-template-columns: 1fr; + } + + .scene-rail-shell { + height: 168px; + } + + .scene-rail-shell::before, + .scene-rail-shell::after { + width: 34px; + } + + .scene-rail-controls { + display: none; + } + + .scene-product-wrap { + min-height: 156px; + } + + .product-node:not(.scene-product) { + min-height: 136px; + padding: 0; + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + + .product-identity { + padding: 10px 8px; + gap: 5px; + } + + .product-identity .node-icon { + width: 32px; + height: 32px; + } + + .product-identity .node-name { + font-size: 14px; + } + + .product-identity .node-keywords { + margin-top: 0; + } + + .node-arrow { + position: absolute; + top: 8px; + right: 8px; + } + + .scene-popover, + .scene-product-wrap:first-child .scene-popover, + .scene-product-wrap:last-child .scene-popover { + right: 10px; + bottom: 10px; + left: 10px; + max-height: calc(100dvh - 78px); + padding: 12px; + } + + .scene-endpoints { + grid-template-columns: 1fr; + } + + .scene-endpoint { + display: grid; + grid-template-columns: 116px minmax(0, 1fr); + grid-template-rows: auto auto; + column-gap: 10px; + align-items: center; + } + + .scene-endpoint-image { + height: 86px; + grid-row: 1 / 3; + grid-column: 1; + } + + .scene-endpoint-label { + grid-row: 1; + grid-column: 2; + align-self: end; + padding: 5px 4px 3px; + } + + .endpoint-keywords { + grid-row: 2; + grid-column: 2; + align-self: start; + padding: 0 4px 5px; + } + + .portal-notice { + bottom: 14px; + } +} + +@media (min-width: 960px) and (max-height: 700px) { + .portal-main { + padding-block: 16px; + } + + .architecture-board { + grid-template-rows: repeat(3, 148px); + gap: 20px; + } + + .layer-scene { + transform: translateY(-16px); + } + + .layer-data { + transform: translateY(16px); + } + + .product-node { + gap: 0; + padding: 0; + } + + .node-icon { + width: 34px; + height: 34px; + } + + .node-icon svg { + width: 23px; + height: 23px; + } + +} + +@media (max-width: 760px) { + .auth-overlay { + padding: 12px; + } + + .auth-modal { + width: min(520px, 100%); + min-height: 0; + max-height: calc(100dvh - 24px); + grid-template-columns: 1fr; + overflow-y: auto; + border-radius: 21px; + } + + .auth-visual { + display: none; + } + + .auth-form-panel { + min-height: 0; + padding: 35px 25px 25px; + } + + .auth-form-brand { + width: 92px; + height: 25px; + margin-bottom: 22px; + display: flex; + align-items: center; + } + + .auth-form-brand img { + width: 100%; + height: auto; + } +} + +@media (prefers-reduced-transparency: reduce) { + .topbar, + .scene-popover, + .scene-popover-dismiss { + backdrop-filter: none; + -webkit-backdrop-filter: none; + } + + .topbar, + .scene-popover { + background: var(--surface); + } + + .architecture-board.has-layer-focus .layer-row[data-focus-state="muted"] .layer-module { + opacity: 0.5; + filter: none; + } +} + +@media (max-width: 639px) { + .topbar-user-copy { + display: none; + } + + .official-site-link { + width: 34px; + min-height: 34px; + padding: 0; + } + + .official-site-link span { + display: none; + } + + .topbar-user { + gap: 3px; + padding-left: 4px; + } + + .login-trigger { + min-height: 34px; + padding-inline: 10px; + } + + .auth-form-panel { + padding-inline: 21px; + } +} + +@media (max-width: 420px) { + .topbar-meta { + gap: 7px; + } + + .topbar-meta > span { + display: none; + } + + .login-trigger span { + display: none; + } + + .login-trigger { + width: 35px; + padding: 0; + justify-content: center; + } + + .auth-overlay { + padding: 10px; + } + + .auth-modal { + max-height: calc(100dvh - 20px); + } + + .auth-form-panel { + padding: 33px 19px 23px; + } + + .auth-form-header h1 { + font-size: 24px; + } +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + *, + *::before, + *::after { + scroll-behavior: auto !important; + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} diff --git a/src/styles.css b/src/styles.css index e665080..87c080a 100644 --- a/src/styles.css +++ b/src/styles.css @@ -182,6 +182,38 @@ img { color: var(--accent-logo); } +.platform-entry-link { + display: inline-flex; + min-height: 36px; + align-items: center; + justify-content: center; + padding: 8px 15px; + border: 1px solid var(--text); + border-radius: var(--radius); + color: var(--surface); + background: var(--text); + font-size: 0.86rem; + font-weight: 680; + line-height: 1; + text-decoration: none; + white-space: nowrap; + transition: + color 180ms ease, + background 180ms ease, + transform 180ms ease; +} + +.platform-entry-link:hover, +.platform-entry-link:focus-visible { + color: var(--surface); + background: var(--accent-logo); + transform: translateY(-1px); +} + +.platform-entry-link:active { + transform: translateY(0) scale(0.98); +} + .language-switcher { display: inline-flex; flex: 0 0 auto; @@ -2832,6 +2864,16 @@ html:lang(en) .about-contact-copy p { } @media (max-width: 480px) { + .brand-name { + display: none; + } + + .platform-entry-link { + min-height: 34px; + padding: 7px 10px; + font-size: 0.8rem; + } + .hero-copy h1 > span { white-space: normal; } diff --git a/vite.config.ts b/vite.config.ts index 081c8d9..302c9c5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,4 +3,12 @@ import react from "@vitejs/plugin-react"; export default defineConfig({ plugins: [react()], + build: { + rollupOptions: { + input: { + official: "index.html", + platform: "platform/index.html", + }, + }, + }, });