diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 653dc47..6f9020d 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1,5 +1,4 @@ @import "tailwindcss"; -@import url('https://fonts.googleapis.com/css2?family=Abril+Fatface&display=swap'); @theme { --color-canvas: #faf9f5; diff --git a/app/pages/discover/index.vue b/app/pages/discover/index.vue new file mode 100644 index 0000000..abadc4a --- /dev/null +++ b/app/pages/discover/index.vue @@ -0,0 +1,368 @@ + + + + + diff --git a/app/pages/index/index.vue b/app/pages/index/index.vue index abadc4a..eba5e0d 100644 --- a/app/pages/index/index.vue +++ b/app/pages/index/index.vue @@ -1,368 +1,5 @@ - - - - + \ No newline at end of file diff --git a/docs/superpowers/specs/2026-05-20-homepage-fluid-canvas-design.md b/docs/superpowers/specs/2026-05-20-homepage-fluid-canvas-design.md new file mode 100644 index 0000000..87179f7 --- /dev/null +++ b/docs/superpowers/specs/2026-05-20-homepage-fluid-canvas-design.md @@ -0,0 +1,109 @@ +# 首页流体画布设计 + +## 概述 + +首页定位为纯粹的视觉体验,不承载信息。全屏 WebGL 流体画布,鼠标/触摸交互产生扰动,中央展示 "Dash" 品牌文字。首屏即全部,无下方内容区。 + +## 布局 + +``` +┌──────────────────────────────────────────┐ +│ │ +│ Nav (透明浮层,固定顶部) │ +│ │ +│ ┌─────────────┐ │ +│ │ 流体画布 │ │ +│ │ (全屏 Canvas) │ │ +│ │ │ │ +│ │ Dash │ │ +│ │ (中央文字) │ │ +│ │ │ │ +│ └─────────────┘ │ +│ │ +└──────────────────────────────────────────┘ +``` + +- Canvas 铺满整个视口 (100vw × 100vh),位于所有内容之下 (z-index: 0) +- 中央文字固定居中,z-index 高于 Canvas +- 无滚动内容,无 footer(首页专属) + +## 流体画布 + +### 色彩 + +- 底色:cream `#faf9f5`,占画布大部分面积 +- 主流动层:coral `#cc785c`,混入少量 amber `#e8a55a` +- 点缀暗部:dark navy `#181715`,偶尔出现如墨滴 +- 所有颜色 smooth blending,无硬边界 + +### 交互 + +- 鼠标移动 → 光标周围流体扰动,模拟手指划过水面 +- 扰动强度正比于鼠标速度:快速 = 大波纹,缓慢 = 细微涟漪 +- 鼠标静止 → 流体缓慢自主流动,不完全静止 +- 触摸设备 → 触摸点产生扰动 + +### 中央文字 + +- 内容:"Dash" +- 字体:Liu Jian Mao Cao(草书),字号约 120-160px +- 颜色:cream `#faf9f5` +- 位置:居中固定,始终在 Canvas 之上 + +### 技术方案 + +- WebGL + Three.js + custom fragment shader 实现流体模拟 +- Canvas 分辨率适配 devicePixelRatio +- 移动端降级为简化粒子系统(~200 粒子),触摸滑动产生扰动 +- 加载态:纯 cream 背景 + coral 色呼吸动画点,Canvas 就绪后淡入 + +## 导航栏 (TopNav) + +### 首页行为 + +- 背景透明,去掉 border-bottom +- 文字颜色使用 `on-dark` 风格(cream 偏白),确保在流体背景上可读 +- Logo 保持 Liu Jian Mao Cao 字体 +- 离开首页(导航到其他页面)恢复正常 cream 底 + hairline border + +### 实现方式 + +- 通过 route 判断是否在首页 (`route.path === '/'`) +- 首页:添加 `transparent` modifier class +- 非首页:默认样式 + +## 响应式 + +| 断点 | 行为 | +|------|------| +| 桌面 (>1024px) | 全 WebGL 流体,120-160px 字号 | +| 平板 (768-1024px) | WebGL 流体,100-120px 字号 | +| 移动 (<768px) | 粒子系统降级,80-100px 字号 | + +## 组件分解 + +### 1. FluidCanvas.vue + +WebGL Canvas 组件,负责: +- Three.js 场景初始化与销毁 +- Shader uniform 更新(鼠标位置、时间) +- 窗口 resize 适配 +- 移动端检测与降级切换 + +### 2. HomeHero.vue + +首页内容层,负责: +- 居中 "Dash" 文字 +- 文字淡入动画(Canvas 就绪后触发) + +### 3. TopNav 改动 + +- 新增 `transparent` prop 或 composable 判断首页 +- 首页样式覆盖:透明背景、无边框、文字颜色调整为 `on-dark` + +## 不在范围内 + +- 首页下方内容区域(明确不需要) +- 向下滚动提示(明确不需要) +- 音效 +- 流体录制/截图功能 diff --git a/nuxt.config.ts b/nuxt.config.ts index 97beb11..1c259e0 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -3,6 +3,15 @@ import tailwindcss from '@tailwindcss/vite' // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ compatibilityDate: '2025-07-15', + app: { + head: { + link: [ + { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, + { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }, + { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Abril+Fatface&display=swap' }, + ], + }, + }, css: ['~/assets/css/main.css'], devtools: { enabled: true }, vite: {