diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 2faa51c..1fc1ec5 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -4,7 +4,8 @@ "Bash(cd \"D:/git/gitea/LoveKeyOW\" && npm create vite@latest . -- --template vue 2>&1)", "Bash(cd \"D:/git/gitea/LoveKeyOW\" && npm create vite@latest . -- --template vue --force 2>&1)", "Bash(cd \"D:/git/gitea/LoveKeyOW\" && npm install 2>&1)", - "Bash(cd \"D:/git/gitea/LoveKeyOW\" && npx vite build 2>&1)" + "Bash(cd \"D:/git/gitea/LoveKeyOW\" && npx vite build 2>&1)", + "Bash(npm install:*)" ] } } diff --git a/package-lock.json b/package-lock.json index 1f130d1..819044b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", + "less": "^4.5.1", "vite": "^6.3.5" } }, @@ -980,6 +981,19 @@ "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", "license": "MIT" }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", @@ -998,6 +1012,20 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", @@ -1079,6 +1107,77 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/less": { + "version": "4.5.1", + "resolved": "https://registry.npmmirror.com/less/-/less-4.5.1.tgz", + "integrity": "sha512-UKgI3/KON4u6ngSsnDADsUERqhZknsVZbnuzlRZXLQCmfC/MDld42fTydUE9B+Mla1AL6SJ/Pp6SlEFi/AVGfw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", @@ -1088,6 +1187,35 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", @@ -1106,6 +1234,34 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", @@ -1125,6 +1281,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", @@ -1153,6 +1320,14 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/rollup": { "version": "4.59.0", "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.59.0.tgz", @@ -1198,6 +1373,47 @@ "fsevents": "~2.3.2" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "dev": true, + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1224,6 +1440,13 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/vite": { "version": "6.4.1", "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.1.tgz", diff --git a/package.json b/package.json index ad73afb..aead164 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.3", + "less": "^4.5.1", "vite": "^6.3.5" } } diff --git a/src/assets/images/bg-top-phone.png b/src/assets/images/bg-top-phone.png new file mode 100644 index 0000000..f4ad768 Binary files /dev/null and b/src/assets/images/bg-top-phone.png differ diff --git a/src/assets/images/bg-top-points.png b/src/assets/images/bg-top-points.png new file mode 100644 index 0000000..b6e50e5 Binary files /dev/null and b/src/assets/images/bg-top-points.png differ diff --git a/src/assets/images/bg-top.png b/src/assets/images/bg-top.png new file mode 100644 index 0000000..61ce82a Binary files /dev/null and b/src/assets/images/bg-top.png differ diff --git a/src/assets/images/logo-top.png b/src/assets/images/logo-top.png new file mode 100644 index 0000000..e11d73b Binary files /dev/null and b/src/assets/images/logo-top.png differ diff --git a/src/assets/variables.less b/src/assets/variables.less new file mode 100644 index 0000000..85b6818 --- /dev/null +++ b/src/assets/variables.less @@ -0,0 +1,29 @@ +// 响应式尺寸工具 +// 基准设计稿宽度 1920px +// clamp(min, preferred, max) 在 1280px~3840px 间线性缩放 + +// 字体 +@font-hero: clamp(28px, 2.5vw, 64px); // 首页大标题 +@font-title: clamp(24px, 2.2vw, 52px); // 各页标题 +@font-desc: clamp(13px, 0.9vw, 20px); // 描述文字 +@font-nav: clamp(12px, 1vw, 18px); // 导航文字 +@font-btn: clamp(12px, 1vw, 18px); // 按钮文字 +@font-small: clamp(11px, 0.65vw, 15px); // 小字 + +// 间距 +@gap-section: clamp(40px, 5vw, 120px); // 左右两侧间距 +@gap-content: clamp(30px, 4vw, 100px); // 内容区左右内边距 +@gap-items: clamp(16px, 1.5vw, 40px); // 元素间距 + +// 手机图片尺寸(保持约 1:1.85 比例) +@phone-w-main: clamp(160px, 14vw, 320px); +@phone-h-main: clamp(296px, 25.9vw, 592px); +@phone-w-side: clamp(130px, 11vw, 260px); +@phone-h-side: clamp(240px, 20.4vw, 480px); + +// 内容区最大宽度(4K下不超过屏幕70%) +@content-max: min(1400px, 72vw); + +// 导航高度 +@nav-h: clamp(56px, 8vh, 90px); +@nav-px: clamp(24px, 8vw, 200px); \ No newline at end of file diff --git a/src/components/FullPage.vue b/src/components/FullPage.vue index 48c4c21..aed5261 100644 --- a/src/components/FullPage.vue +++ b/src/components/FullPage.vue @@ -94,14 +94,16 @@ defineExpose({ currentIndex, goTo }) width: 10px; height: 10px; border-radius: 50%; - background: rgba(255, 255, 255, 0.4); + background: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(0, 0, 0, 0.1); cursor: pointer; transition: all 0.3s ease; } .dot.active { - background: #fff; + background: #00BFA5; + border-color: #00BFA5; transform: scale(1.3); - box-shadow: 0 0 8px rgba(255, 255, 255, 0.6); + box-shadow: 0 0 8px rgba(0, 191, 165, 0.4); } diff --git a/src/components/PageAdvantage.vue b/src/components/PageAdvantage.vue index b290a0f..3a2c8dd 100644 --- a/src/components/PageAdvantage.vue +++ b/src/components/PageAdvantage.vue @@ -1,174 +1,110 @@ - diff --git a/src/components/PageContact.vue b/src/components/PageContact.vue index 540f05c..7ceff33 100644 --- a/src/components/PageContact.vue +++ b/src/components/PageContact.vue @@ -1,269 +1,133 @@ - diff --git a/src/components/PageHome.vue b/src/components/PageHome.vue index a085917..3841844 100644 --- a/src/components/PageHome.vue +++ b/src/components/PageHome.vue @@ -2,228 +2,237 @@
+
- -
- 主视觉图片 +

+ Not just a tool but
+ giving meaning to every click +

+ -

LoveKeyOW

-

用心创造,为爱而生

-
了解更多
-
-
-
-
+
+
-

滚动探索

+
🪙
+
🏆
+
+
- diff --git a/src/components/PageProduct.vue b/src/components/PageProduct.vue index b0f26bd..80327b0 100644 --- a/src/components/PageProduct.vue +++ b/src/components/PageProduct.vue @@ -1,134 +1,110 @@ - diff --git a/vite.config.js b/vite.config.js index c40aa3c..b546b3c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,6 +1,19 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' export default defineConfig({ plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + css: { + preprocessorOptions: { + less: { + additionalData: `@import "@/assets/variables.less";`, + }, + }, + }, })