diff --git a/.env.staging b/.env.staging index ed44c17..a037d25 100644 --- a/.env.staging +++ b/.env.staging @@ -1,5 +1,6 @@ VITE_OJ=http://10.13.114.114:81 VITE_CODE=http://10.13.114.114:82 +VITE_WEB=http://10.13.114.114:91 # VITE_PLAY=http://10.13.114.114:83 VITE_BOOK=http://10.13.114.114:84 VITE_HUABU=http://10.13.114.114:85 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 08c7edb..3de620d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -9,16 +9,16 @@ jobs: build-and-deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v5 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: - node-version: 'current' + node-version: 24 cache: 'npm' - run: npm install - run: CI=false npm run build - - uses: easingthemes/ssh-deploy@v2.2.11 + - uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{ secrets.KEY }} REMOTE_HOST: ${{ secrets.HOST }} diff --git a/index.html b/index.html index dc50163..5a758ba 100644 --- a/index.html +++ b/index.html @@ -1,17 +1,99 @@ - + - 徐越的在线学习平台 + 物联网专业の在线学习平台 +
+
+
+

+ 火 + 未满十八禁荐 + 火 +

+

+ 爸家 +

+

+ 一? +

+
+
+
+
+ PYTHON +
+
+ WEB +
+
+ C言 +
+
+
+ 劲验 +
+
+ 广租 +
+
+
+
+
+
-

徐越的在线学习平台

+

+ ♥️ 物联网专业の在线学习平台 ♥️ +

@@ -31,6 +113,83 @@
+ +
+
+

+ 游戏 + 游到 + 游戏 +

+

+ 爸家 +

+

+ 一? +

+
+
+
+
+ PYTHON +
+
+ WEB +
+
+ C言 +
+
+
+ 劲验 +
+
+ 广租 +
+
+
+
+
diff --git a/main.js b/main.js index e8a99e1..095b3a2 100644 --- a/main.js +++ b/main.js @@ -1,5 +1,3 @@ -import "./style.css" - const pins = [ // { // url: "https://code.xuyue.cc?query=30", @@ -24,54 +22,66 @@ const sites = [ url: import.meta.env.VITE_OJ, title: "判题狗", description: "在线判题网站", + icon: "noto--dog-face.svg", }, { url: import.meta.env.VITE_CODE, title: "自测猫", description: "代码运行网站", + icon: "noto--cat-face.svg", }, { url: import.meta.env.VITE_WEB, - title: "AI x Web", + title: "哈基米", description: "Web 前端开发", + icon: "noto--honeybee.svg", }, { url: import.meta.env.VITE_SHUATI, title: "刷题鸭", description: "梁老师的刷题网站", + icon: "noto--paintbrush.svg", }, { url: import.meta.env.VITE_PLAY, title: "限时鸭", description: "用来练习基本的代码格式", + icon: "noto--duck.svg", }, { url: import.meta.env.VITE_BOOK, title: "编程书", description: "编程和计算机相关知识汇总", + icon: "noto--bookmark-tabs.svg", }, { url: import.meta.env.VITE_HUABU, title: "白板", description: "在线板书", + icon: "noto--artist-palette.svg", }, { url: import.meta.env.VITE_PPT, title: "Python PPT", description: "Python 第一学期上课用", + icon: "material-icon-theme--python.svg", }, { url: import.meta.env.VITE_PY, title: "Python 项目", description: "Python 第二学期上课用", + icon: "material-icon-theme--folder-python-open.svg", }, ].filter((i) => !!i.url) const item = (site) => ` -

${site.title} →

-

${site.description}

-

${site.url}

+
+${site.icon ? `${site.title}` : ""} +

${site.title} →

+
+

${site.description}

+

${site.url}

` diff --git a/package-lock.json b/package-lock.json index 6cb7589..eef33d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "name": "hyyz-home", "version": "1.0.0", "devDependencies": { - "prettier": "^3.5.3", - "vite": "^6.2.2" + "prettier": "^3.6.2", + "vite": "^7.1.3" } }, "node_modules/@esbuild/aix-ppc64": { @@ -438,9 +438,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", - "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", "cpu": [ "arm" ], @@ -452,9 +452,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", - "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", "cpu": [ "arm64" ], @@ -466,9 +466,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", - "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", "cpu": [ "arm64" ], @@ -480,9 +480,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", - "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", "cpu": [ "x64" ], @@ -494,9 +494,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", - "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", "cpu": [ "arm64" ], @@ -508,9 +508,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", - "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", "cpu": [ "x64" ], @@ -522,9 +522,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", - "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", "cpu": [ "arm" ], @@ -536,9 +536,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", - "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", "cpu": [ "arm" ], @@ -550,9 +550,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", - "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", "cpu": [ "arm64" ], @@ -564,9 +564,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", - "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", "cpu": [ "arm64" ], @@ -578,9 +578,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", - "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", "cpu": [ "loong64" ], @@ -591,10 +591,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", - "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", "cpu": [ "ppc64" ], @@ -606,9 +606,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", - "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", "cpu": [ "riscv64" ], @@ -620,9 +620,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", - "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", "cpu": [ "riscv64" ], @@ -634,9 +634,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", - "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", "cpu": [ "s390x" ], @@ -648,9 +648,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", - "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", "cpu": [ "x64" ], @@ -662,9 +662,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", - "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", "cpu": [ "x64" ], @@ -676,9 +676,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", - "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", "cpu": [ "arm64" ], @@ -690,9 +690,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", - "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", "cpu": [ "ia32" ], @@ -704,9 +704,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", - "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", "cpu": [ "x64" ], @@ -718,9 +718,9 @@ ] }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -765,6 +765,24 @@ "@esbuild/win32-x64": "0.25.1" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -806,10 +824,23 @@ "dev": true, "license": "ISC" }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -827,7 +858,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -836,9 +867,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -852,13 +883,13 @@ } }, "node_modules/rollup": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", - "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -868,26 +899,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.37.0", - "@rollup/rollup-android-arm64": "4.37.0", - "@rollup/rollup-darwin-arm64": "4.37.0", - "@rollup/rollup-darwin-x64": "4.37.0", - "@rollup/rollup-freebsd-arm64": "4.37.0", - "@rollup/rollup-freebsd-x64": "4.37.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", - "@rollup/rollup-linux-arm-musleabihf": "4.37.0", - "@rollup/rollup-linux-arm64-gnu": "4.37.0", - "@rollup/rollup-linux-arm64-musl": "4.37.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-musl": "4.37.0", - "@rollup/rollup-linux-s390x-gnu": "4.37.0", - "@rollup/rollup-linux-x64-gnu": "4.37.0", - "@rollup/rollup-linux-x64-musl": "4.37.0", - "@rollup/rollup-win32-arm64-msvc": "4.37.0", - "@rollup/rollup-win32-ia32-msvc": "4.37.0", - "@rollup/rollup-win32-x64-msvc": "4.37.0", + "@rollup/rollup-android-arm-eabi": "4.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", "fsevents": "~2.3.2" } }, @@ -901,22 +932,42 @@ "node": ">=0.10.0" } }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/vite": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz", - "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "postcss": "^8.5.3", - "rollup": "^4.30.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -925,14 +976,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "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" @@ -1151,149 +1202,149 @@ "optional": true }, "@rollup/rollup-android-arm-eabi": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", - "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", - "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", - "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", - "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", - "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", - "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", - "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", - "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", - "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", - "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", "dev": true, "optional": true }, "@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", - "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", "dev": true, "optional": true }, - "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", - "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", - "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", - "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", "dev": true, "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", - "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", - "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", - "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", - "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", - "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", - "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", "dev": true, "optional": true }, "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true }, "esbuild": { @@ -1329,6 +1380,13 @@ "@esbuild/win32-x64": "0.25.1" } }, + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1348,50 +1406,56 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + }, "postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "requires": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true }, "rollup": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", - "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", "dev": true, "requires": { - "@rollup/rollup-android-arm-eabi": "4.37.0", - "@rollup/rollup-android-arm64": "4.37.0", - "@rollup/rollup-darwin-arm64": "4.37.0", - "@rollup/rollup-darwin-x64": "4.37.0", - "@rollup/rollup-freebsd-arm64": "4.37.0", - "@rollup/rollup-freebsd-x64": "4.37.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", - "@rollup/rollup-linux-arm-musleabihf": "4.37.0", - "@rollup/rollup-linux-arm64-gnu": "4.37.0", - "@rollup/rollup-linux-arm64-musl": "4.37.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-musl": "4.37.0", - "@rollup/rollup-linux-s390x-gnu": "4.37.0", - "@rollup/rollup-linux-x64-gnu": "4.37.0", - "@rollup/rollup-linux-x64-musl": "4.37.0", - "@rollup/rollup-win32-arm64-msvc": "4.37.0", - "@rollup/rollup-win32-ia32-msvc": "4.37.0", - "@rollup/rollup-win32-x64-msvc": "4.37.0", - "@types/estree": "1.0.6", + "@rollup/rollup-android-arm-eabi": "4.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", + "@types/estree": "1.0.8", "fsevents": "~2.3.2" } }, @@ -1401,16 +1465,29 @@ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true }, + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + } + }, "vite": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz", - "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", "dev": true, "requires": { "esbuild": "^0.25.0", + "fdir": "^6.5.0", "fsevents": "~2.3.3", - "postcss": "^8.5.3", - "rollup": "^4.30.1" + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" } } } diff --git a/package.json b/package.json index ed0271e..6feea55 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,13 @@ "version": "1.0.0", "type": "module", "scripts": { - "start": "vite", + "start": "vite --mode=production", "build": "vite build", "build:staging": "vite build --mode=staging", "fmt": "prettier --write *.js style.css index.html" }, "devDependencies": { - "prettier": "^3.5.3", - "vite": "^6.2.2" + "prettier": "^3.6.2", + "vite": "^7.1.3" } } \ No newline at end of file diff --git a/public/icons/material-icon-theme--folder-python-open.svg b/public/icons/material-icon-theme--folder-python-open.svg new file mode 100644 index 0000000..7de48d3 --- /dev/null +++ b/public/icons/material-icon-theme--folder-python-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/material-icon-theme--python.svg b/public/icons/material-icon-theme--python.svg new file mode 100644 index 0000000..0fb33c7 --- /dev/null +++ b/public/icons/material-icon-theme--python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--artist-palette.svg b/public/icons/noto--artist-palette.svg new file mode 100644 index 0000000..31b2d70 --- /dev/null +++ b/public/icons/noto--artist-palette.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--bookmark-tabs.svg b/public/icons/noto--bookmark-tabs.svg new file mode 100644 index 0000000..d90a462 --- /dev/null +++ b/public/icons/noto--bookmark-tabs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--cat-face.svg b/public/icons/noto--cat-face.svg new file mode 100644 index 0000000..d3fa0ee --- /dev/null +++ b/public/icons/noto--cat-face.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--dog-face.svg b/public/icons/noto--dog-face.svg new file mode 100644 index 0000000..05f4127 --- /dev/null +++ b/public/icons/noto--dog-face.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--duck.svg b/public/icons/noto--duck.svg new file mode 100644 index 0000000..03f655e --- /dev/null +++ b/public/icons/noto--duck.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--fire.svg b/public/icons/noto--fire.svg new file mode 100644 index 0000000..ad55581 --- /dev/null +++ b/public/icons/noto--fire.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--honeybee.svg b/public/icons/noto--honeybee.svg new file mode 100644 index 0000000..c91731a --- /dev/null +++ b/public/icons/noto--honeybee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--no-one-under-eighteen.svg b/public/icons/noto--no-one-under-eighteen.svg new file mode 100644 index 0000000..f5299cf --- /dev/null +++ b/public/icons/noto--no-one-under-eighteen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--paintbrush.svg b/public/icons/noto--paintbrush.svg new file mode 100644 index 0000000..abf5556 --- /dev/null +++ b/public/icons/noto--paintbrush.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/noto--video-game.svg b/public/icons/noto--video-game.svg new file mode 100644 index 0000000..0314b38 --- /dev/null +++ b/public/icons/noto--video-game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/1.jpg b/public/images/1.jpg new file mode 100644 index 0000000..9afa328 Binary files /dev/null and b/public/images/1.jpg differ diff --git a/public/images/2.jpg b/public/images/2.jpg new file mode 100644 index 0000000..f82d222 Binary files /dev/null and b/public/images/2.jpg differ diff --git a/public/images/3.jpg b/public/images/3.jpg new file mode 100644 index 0000000..73108e0 Binary files /dev/null and b/public/images/3.jpg differ diff --git a/public/images/4.jpg b/public/images/4.jpg new file mode 100644 index 0000000..aeacd98 Binary files /dev/null and b/public/images/4.jpg differ diff --git a/public/images/5.jpg b/public/images/5.jpg new file mode 100644 index 0000000..e1c1c22 Binary files /dev/null and b/public/images/5.jpg differ diff --git a/style.css b/style.css index 61bbd09..f2cc028 100644 --- a/style.css +++ b/style.css @@ -2,35 +2,502 @@ html, body { padding: 0; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, - Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + background: + radial-gradient( + circle at 20% 80%, + rgba(255, 182, 193, 0.3) 0%, + transparent 50% + ), + radial-gradient( + circle at 80% 20%, + rgba(221, 160, 221, 0.3) 0%, + transparent 50% + ), + radial-gradient( + circle at 40% 40%, + rgba(173, 216, 230, 0.2) 0%, + transparent 50% + ), + linear-gradient( + 135deg, + #ffeef8 0%, + #f0e6ff 25%, + #e6f3ff 50%, + #fff0f5 75%, + #f8f0ff 100% + ); + color: #4a4a4a; + min-height: 100vh; + letter-spacing: 0.01em; + position: relative; + overflow-x: hidden; } +#app { + display: flex; + min-height: 100vh; + position: relative; +} + +/* 添加可爱的装饰星星 */ +body::before { + content: ""; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: + radial-gradient(2px 2px at 20px 30px, #ff69b4, transparent), + radial-gradient(2px 2px at 40px 70px, #ffb6c1, transparent), + radial-gradient(1px 1px at 90px 40px, #dda0dd, transparent), + radial-gradient(1px 1px at 130px 80px, #87ceeb, transparent), + radial-gradient(2px 2px at 160px 30px, #ffc0cb, transparent); + background-repeat: repeat; + background-size: 200px 100px; + animation: twinkle 3s ease-in-out infinite alternate; + pointer-events: none; + z-index: 1; +} + +@keyframes twinkle { + 0% { + opacity: 0.3; + } + 100% { + opacity: 0.8; + } +} + +/* 动漫风格链接 */ a { - color: inherit; - text-decoration: none; + color: #ff69b4; + text-shadow: 0 1px 2px rgba(255, 105, 180, 0.3); + transition: all 0.3s ease; + position: relative; +} +a:hover { + color: #ff1493; + text-shadow: 0 2px 4px rgba(255, 20, 147, 0.4); + transform: translateY(-1px); } * { box-sizing: border-box; } -.container { - padding: 0 2rem; +.promo-left, +.promo-right { + width: 350px; + min-height: 100vh; + position: fixed; + top: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; } -.main { - padding: 2rem 0; - flex: 1; +.promo-left { + left: 0; +} + +.promo-right { + right: 0; +} + +.promo-content { + background: rgba(255, 255, 255, 0.9); + border: 2px solid rgba(255, 182, 193, 0.3); + border-radius: 15px; + padding: 1rem; + text-align: center; + box-shadow: 0 4px 15px rgba(255, 182, 193, 0.2); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + animation: + adFloat 3s ease-in-out infinite, + adShake 2s ease-in-out infinite, + adFlash 1.5s ease-in-out infinite; +} + +.promo-content h3 { + color: #ff69b4; + font-size: 1.6rem; + margin: 0 0 0.5rem 0; + text-shadow: 1px 1px 2px rgba(255, 105, 180, 0.3); +} + +.promo-content p { + color: #9370db; + font-size: 1.2rem; + margin: 0.3rem 0; + text-shadow: 1px 1px 2px rgba(147, 112, 219, 0.3); +} + +.promo-placeholder { + width: 300px; + height: 300px; + background: linear-gradient( + 135deg, + rgba(255, 182, 193, 0.3) 0%, + rgba(221, 160, 221, 0.3) 100% + ); + border: 2px solid rgba(255, 105, 180, 0.5); + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + color: #ff69b4; + font-weight: bold; + font-size: 0.8rem; + animation: adPulse 2s ease-in-out infinite; + position: relative; + overflow: hidden; +} + +.game-promo { + text-align: center; + padding: 1rem; + height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; } +.game-title { + font-size: 2.2rem; + font-weight: bold; + color: #ff1493; + text-shadow: 2px 2px 4px rgba(255, 20, 147, 0.3); + margin-bottom: 0.5rem; + animation: gameTitleGlow 2s ease-in-out infinite; +} + +.game-subtitle { + font-size: 1.2rem; + color: #9370db; + margin-bottom: 0.5rem; + text-shadow: 1px 1px 2px rgba(147, 112, 219, 0.3); +} + +.promo-rental { + font-size: 1rem; + color: #ff69b4; + margin-top: 0.5rem; + text-shadow: 1px 1px 2px rgba(255, 105, 180, 0.3); + font-weight: bold; +} + +.language-list { + display: flex; + flex-direction: column; + gap: 0.1rem; + margin-top: 0.5rem; + justify-content: center; + align-items: center; +} + +.play-button { + background: linear-gradient(45deg, #ff69b4, #ff1493); + color: white; + padding: 0.6rem 1.2rem; + border-radius: 20px; + font-size: 1rem; + font-weight: bold; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 4px 8px rgba(255, 20, 147, 0.3); + animation: buttonPulse 1.5s ease-in-out infinite; +} + +.play-button:hover { + transform: scale(1.1); + box-shadow: 0 6px 12px rgba(255, 20, 147, 0.5); +} + +@keyframes gameTitleGlow { + 0%, + 100% { + text-shadow: 2px 2px 4px rgba(255, 20, 147, 0.3); + } + 50% { + text-shadow: + 2px 2px 8px rgba(255, 20, 147, 0.6), + 0 0 12px rgba(255, 20, 147, 0.4); + } +} + +@keyframes buttonPulse { + 0%, + 100% { + transform: scale(1); + -webkit-transform: scale(1); + } + 50% { + transform: scale(1.05); + -webkit-transform: scale(1.05); + } +} + +/* 爱心抖动效果 */ +.heart-shake { + display: inline-block; + color: #ff1493; + animation: heartShake 0.5s ease-in-out infinite; + text-shadow: 0 0 3px rgba(255, 20, 147, 0.6); + font-size: 0.8em; + margin: 0 0.1em; +} + +.promo-title-shake, +.promo-text-shake, +.game-title-shake, +.game-subtitle-shake, +.play-button-shake { + animation: textShake 2s ease-in-out infinite; +} + +@keyframes heartShake { + 0%, + 100% { + transform: translateX(0) translateY(0) rotate(0deg) scale(1); + -webkit-transform: translateX(0) translateY(0) rotate(0deg) scale(1); + } + 25% { + transform: translateX(-1px) translateY(-1px) rotate(-2deg) scale(1.1); + -webkit-transform: translateX(-1px) translateY(-1px) rotate(-2deg) + scale(1.1); + } + 50% { + transform: translateX(1px) translateY(1px) rotate(2deg) scale(1.2); + -webkit-transform: translateX(1px) translateY(1px) rotate(2deg) scale(1.2); + } + 75% { + transform: translateX(-1px) translateY(1px) rotate(-1deg) scale(1.1); + -webkit-transform: translateX(-1px) translateY(1px) rotate(-1deg) scale(1.1); + } +} + +@keyframes textShake { + 0%, + 100% { + transform: translateX(0) translateY(0); + -webkit-transform: translateX(0) translateY(0); + } + 10% { + transform: translateX(-0.5px) translateY(-0.5px); + -webkit-transform: translateX(-0.5px) translateY(-0.5px); + } + 20% { + transform: translateX(0.5px) translateY(0.5px); + -webkit-transform: translateX(0.5px) translateY(0.5px); + } + 30% { + transform: translateX(-0.3px) translateY(0.3px); + -webkit-transform: translateX(-0.3px) translateY(0.3px); + } + 40% { + transform: translateX(0.3px) translateY(-0.3px); + -webkit-transform: translateX(0.3px) translateY(-0.3px); + } + 50% { + transform: translateX(-0.2px) translateY(0.2px); + -webkit-transform: translateX(-0.2px) translateY(0.2px); + } + 60% { + transform: translateX(0.2px) translateY(-0.2px); + -webkit-transform: translateX(0.2px) translateY(-0.2px); + } + 70% { + transform: translateX(-0.1px) translateY(0.1px); + -webkit-transform: translateX(-0.1px) translateY(0.1px); + } + 80% { + transform: translateX(0.1px) translateY(-0.1px); + -webkit-transform: translateX(0.1px) translateY(-0.1px); + } + 90% { + transform: translateX(0) translateY(0); + -webkit-transform: translateX(0) translateY(0); + } +} + +@keyframes adFloat { + 0%, + 100% { + transform: translateY(0px); + -webkit-transform: translateY(0px); + } + 50% { + transform: translateY(-5px); + -webkit-transform: translateY(-5px); + } +} + +@keyframes adShake { + 0%, + 100% { + transform: translateX(0) translateY(0) rotate(0deg); + -webkit-transform: translateX(0) translateY(0) rotate(0deg); + } + 10% { + transform: translateX(-3px) translateY(-3px) rotate(-2deg); + -webkit-transform: translateX(-3px) translateY(-3px) rotate(-2deg); + } + 20% { + transform: translateX(3px) translateY(3px) rotate(2deg); + -webkit-transform: translateX(3px) translateY(3px) rotate(2deg); + } + 30% { + transform: translateX(-2px) translateY(2px) rotate(-1.5deg); + -webkit-transform: translateX(-2px) translateY(2px) rotate(-1.5deg); + } + 40% { + transform: translateX(2px) translateY(-2px) rotate(1.5deg); + -webkit-transform: translateX(2px) translateY(-2px) rotate(1.5deg); + } + 50% { + transform: translateX(-1.5px) translateY(1.5px) rotate(-1deg); + -webkit-transform: translateX(-1.5px) translateY(1.5px) rotate(-1deg); + } + 60% { + transform: translateX(1.5px) translateY(-1.5px) rotate(1deg); + -webkit-transform: translateX(1.5px) translateY(-1.5px) rotate(1deg); + } + 70% { + transform: translateX(-1px) translateY(1px) rotate(-0.5deg); + -webkit-transform: translateX(-1px) translateY(1px) rotate(-0.5deg); + } + 80% { + transform: translateX(1px) translateY(-1px) rotate(0.5deg); + -webkit-transform: translateX(1px) translateY(-1px) rotate(0.5deg); + } + 90% { + transform: translateX(0) translateY(0) rotate(0deg); + -webkit-transform: translateX(0) translateY(0) rotate(0deg); + } +} + +@keyframes adFlash { + 0%, + 100% { + opacity: 1; + box-shadow: 0 4px 15px rgba(255, 182, 193, 0.2); + } + 25% { + opacity: 0.8; + box-shadow: 0 4px 20px rgba(255, 182, 193, 0.4); + } + 50% { + opacity: 1; + box-shadow: 0 4px 25px rgba(255, 182, 193, 0.6); + } + 75% { + opacity: 0.9; + box-shadow: 0 4px 30px rgba(255, 182, 193, 0.8); + } +} + +@keyframes adPulse { + 0%, + 100% { + opacity: 0.7; + } + 50% { + opacity: 1; + } +} + +.container { + padding: 0 2rem; + position: relative; + z-index: 2; + flex: 1; + margin: 0 370px; +} +.main { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 2rem 0; + min-height: 100vh; + background: rgba(255, 255, 255, 0.1); + border-radius: 20px; + box-shadow: 0 8px 32px rgba(255, 182, 193, 0.2); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + animation: float 6s ease-in-out infinite; +} + +@keyframes float { + 0%, + 100% { + transform: translateY(0px); + } + 50% { + transform: translateY(-10px); + } +} + .title { - line-height: 1.15; - font-size: 2rem; + line-height: 1.2; + font-size: 2.5rem; + font-weight: bold; + text-align: center; + margin-bottom: 1rem; +} + +.title { + font-family: "Orbitron", sans-serif; + color: #ff69b4; + text-shadow: 2px 2px 4px rgba(255, 105, 180, 0.3); + letter-spacing: 0.02em; + transform-origin: center; +} + +/* 动漫风格渐变文字 */ +.title.gradient { + background: linear-gradient( + 45deg, + #ff69b4 0%, + #ff1493 25%, + #da70d6 50%, + #9370db 75%, + #8a2be2 100% + ); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; + text-shadow: none; + animation: + rainbow 3s ease-in-out infinite; +} + +@keyframes centerRotate { + 0% { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + } +} + +@keyframes rainbow { + 0% { + -webkit-filter: hue-rotate(0deg); + filter: hue-rotate(0deg); + } + 100% { + -webkit-filter: hue-rotate(360deg); + filter: hue-rotate(360deg); + } } .title, @@ -39,9 +506,34 @@ a { } .description { - margin: 4rem 0; - line-height: 1.5; - font-size: 1.5rem; + margin: 2rem 0; + line-height: 1.6; + font-size: 1.2rem; + color: #9370db; + text-shadow: 1px 1px 2px rgba(147, 112, 219, 0.3); + animation: pulse 2s ease-in-out infinite; +} + +@keyframes pulse { + 0%, + 100% { + opacity: 0.8; + } + 50% { + opacity: 1; + } +} + +@keyframes float { + 0%, + 100% { + transform: translateY(0px); + -webkit-transform: translateY(0px); + } + 50% { + transform: translateY(-10px); + -webkit-transform: translateY(-10px); + } } .grid { @@ -49,42 +541,164 @@ a { align-items: center; justify-content: center; flex-wrap: wrap; - max-width: 800px; + gap: 1.5rem; + max-width: 1000px; + margin-top: 2rem; } .card { width: 100%; - margin: 1rem; + margin: 0; padding: 1.5rem; text-align: left; color: inherit; text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; + border: 2px solid rgba(255, 182, 193, 0.3); + border-radius: 20px; + transition: all 0.3s ease; max-width: 300px; + position: relative; + overflow: hidden; +} + +/* 动漫风格卡片 */ +.card { + color: #4a4a4a; + background: linear-gradient( + 135deg, + rgba(255, 255, 255, 0.9) 0%, + rgba(255, 240, 245, 0.8) 100% + ); + box-shadow: 0 4px 15px rgba(255, 182, 193, 0.2); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + animation: + cardFloat 4s ease-in-out infinite, + cardRotate 8s linear infinite; + transform-origin: center; +} + +.card::before { + content: ""; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient( + 45deg, + transparent, + rgba(255, 182, 193, 0.1), + transparent + ); + transform: rotate(45deg); + transition: all 0.6s ease; + opacity: 0; +} + +.card:hover::before { + animation: shine 0.6s ease-in-out; +} + +@keyframes shine { + 0% { + transform: translateX(-100%) translateY(-100%) rotate(45deg); + -webkit-transform: translateX(-100%) translateY(-100%) rotate(45deg); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: translateX(100%) translateY(100%) rotate(45deg); + -webkit-transform: translateX(100%) translateY(100%) rotate(45deg); + opacity: 0; + } +} + +@keyframes cardFloat { + 0%, + 100% { + transform: translateY(0px); + -webkit-transform: translateY(0px); + } + 50% { + transform: translateY(-5px); + -webkit-transform: translateY(-5px); + } +} + +@keyframes cardRotate { + 0% { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + } } .card.pin { - background-color: whitesmoke; + background: linear-gradient( + 135deg, + rgba(255, 192, 203, 0.9) 0%, + rgba(255, 182, 193, 0.8) 100% + ); + border-color: rgba(255, 105, 180, 0.6); + animation: + pinPulse 2s ease-in-out infinite, + cardRotate 8s linear infinite; + transform-origin: center; +} + +@keyframes pinPulse { + 0%, + 100% { + transform: scale(1); + -webkit-transform: scale(1); + } + 50% { + transform: scale(1.05); + -webkit-transform: scale(1.05); + } } .card:hover, .card:focus, .card:active { - color: #0070f3; - border-color: #0070f3; + color: #ff1493; + border-color: rgba(255, 20, 147, 0.8); + transform: translateY(-8px) scale(1.02); + -webkit-transform: translateY(-8px) scale(1.02); + box-shadow: 0 8px 25px rgba(255, 20, 147, 0.3); + animation-play-state: paused; } .card h2 { - margin: 0 0 1rem 0; - font-size: 1.5rem; + margin: 0 0 0.5rem 0; + font-size: 1.4rem; + font-weight: bold; + color: #ff69b4; + text-shadow: 1px 1px 2px rgba(255, 105, 180, 0.3); + transition: all 0.3s ease; +} + +.card:hover h2 { + color: #ff1493; + transform: scale(1.05); } .card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; + margin: 0.5rem 0; + font-size: 1rem; + line-height: 1.4; + color: #666; + transition: all 0.3s ease; +} + +.card:hover p { + color: #ff1493; } .card .single { @@ -94,44 +708,197 @@ a { white-space: nowrap; } +.title-icon { + display: flex; + align-items: center; + margin-bottom: 1rem; + transition: all 0.3s ease; +} + +.title-icon .icon { + width: 36px; + height: 36px; + margin-right: 12px; + transition: all 0.3s ease; + filter: drop-shadow(0 2px 4px rgba(255, 105, 180, 0.3)); +} + +.card:hover .title-icon .icon { + transform: scale(1.1) rotate(5deg); + filter: drop-shadow(0 4px 8px rgba(255, 20, 147, 0.4)); +} + .beian { + margin-top: 2rem; margin-bottom: 20px; text-align: center; + padding: 1rem; + background: rgba(255, 255, 255, 0.1); + border-radius: 15px; + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px); + border: 1px solid rgba(255, 182, 193, 0.2); } .beian img { - width: 14px; - height: 14px; + width: 16px; + height: 16px; margin: 0 4px; + transition: all 0.3s ease; +} + +.beian img:hover { + transform: scale(1.2) rotate(10deg); } .beian a { text-decoration: none; font-size: 14px; + color: #9370db; + transition: all 0.3s ease; + text-shadow: 1px 1px 2px rgba(147, 112, 219, 0.3); +} + +.beian a:hover { + color: #ff69b4; + transform: translateY(-2px); +} + +.beian { + color: #9370db; + text-shadow: 1px 1px 2px rgba(147, 112, 219, 0.3); } @media (max-width: 600px) { + .promo-left, + .promo-right { + display: none; + } + + .container { + margin: 0; + padding: 0 1rem; + } + .grid { width: 100%; flex-direction: column; - } -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; + gap: 1rem; } - body { - color: white; - background: black; + .main { + padding: 1.5rem; + border-radius: 15px; + margin: 1rem; } .card { - border-color: #222; + max-width: 100%; + margin: 0; } - .pin.card { - background-color: #222; + .title { + font-size: 2rem; + } +} + +@media (max-width: 1600px) { + .promo-left, + .promo-right { + width: 300px; + } + + .container { + margin: 0 320px; + } + + .promo-placeholder { + width: 250px; + height: 400px; + } +} + +@media (max-width: 1400px) { + .promo-left, + .promo-right { + width: 250px; + } + + .container { + margin: 0 270px; + } + + .promo-placeholder { + width: 200px; + height: 350px; + } +} + +@media (max-width: 1200px) { + .promo-left, + .promo-right { + width: 200px; + } + + .container { + margin: 0 220px; + } + + .promo-placeholder { + width: 160px; + height: 300px; + } +} + +/* 添加更多动漫风格装饰 */ +.main::after { + content: "✨"; + position: absolute; + top: 20px; + right: 20px; + font-size: 2rem; + animation: sparkle 2s ease-in-out infinite; + z-index: 1; +} + +/* 雨滴图片动画样式 */ + +.rain-icon { + position: fixed; + top: -64px; + pointer-events: none; + opacity: 0; + z-index: 9999; + animation: rainFall linear forwards; + animation-fill-mode: both; +} + +@keyframes rainFall { + 0% { + transform: translateY(0) scale(1) rotate(0deg); + opacity: 0; + } + 10% { + opacity: 0.85; + } + 80% { + opacity: 0.85; + } + 100% { + transform: translateY(100vh) scale(0.8) rotate(360deg); + opacity: 0.1; + } +} +@keyframes sparkle { + 0%, + 100% { + transform: scale(1) rotate(0deg); + -webkit-transform: scale(1) rotate(0deg); + opacity: 0.7; + } + 50% { + transform: scale(1.2) rotate(180deg); + -webkit-transform: scale(1.2) rotate(180deg); + opacity: 1; } }