# 样式与配色 WarmIsland 主题的视觉设计围绕「暖夜中的小岛」这一意象展开,追求温暖、宁静、有质感的阅读体验。 ## 设计哲学 ### 暖夜小岛 想象一座深夜里温暖的小岛——远处是深邃的夜空,近处是篝火般的暖光。这就是 WarmIsland 的设计基调: - **温暖**:以暖色调为基础,避免冷硬的科技感 - **宁静**:克制的动效和留白,不喧宾夺主 - **质感**:毛玻璃、渐变光晕、细腻的阴影层次 - **呼吸**:元素有节奏地律动,如岛上的微风 ### 设计原则 1. **内容优先**:所有视觉设计服务于内容阅读 2. **克制装饰**:每个装饰元素都有其存在的理由 3. **层次分明**:通过颜色、字号、间距建立清晰的信息层级 4. **温暖一致**:从配色到动效,保持统一的温暖气质 ## 色彩系统 ### 浅色模式 | 变量 | 色值 | 用途 | |------|------|------| | `--bg` | `#faf7f2` | 页面背景,温暖的米白色 | | `--bg-raised` | `#f3ede5` | 卡片背景,略深的暖色 | | `--bg-overlay` | `rgba(250, 247, 242, 0.85)` | 遮罩层背景 | | `--ink` | `#2c2420` | 主文字色,深棕黑 | | `--ink-2` | `#7a6e64` | 次要文字,中灰棕 | | `--ink-3` | `#b5a99e` | 辅助文字,浅灰棕 | | `--rule` | `#e8e0d6` | 分隔线、边框 | | `--accent` | `#d4764e` | 强调色,温暖的赤陶橙 | | `--accent-hover` | `#c4613a` | 强调色悬停态,更深的赤陶 | | `--accent-bg` | `#fdf0e8` | 强调色浅底,用于标签背景 | | `--mist-pink` | `#f0e4de` | 薄雾粉,Hero 渐变用 | | `--sea-salt` | `#e8e0d6` | 海盐色,与 rule 相同 | | `--caramel` | `#8b6f5e` | 焦糖色,滚动条用 | | `--glass-bg` | `rgba(250, 247, 242, 0.72)` | 毛玻璃背景 | | `--glass-border` | `rgba(232, 224, 214, 0.5)` | 毛玻璃边框 | ### 深色模式 通过 `html.dark` 选择器切换,所有颜色变量重新定义: | 变量 | 色值 | 说明 | |------|------|------| | `--bg` | `#1a1614` | 深棕黑背景 | | `--bg-raised` | `#242018` | 略浅的卡片背景 | | `--ink` | `#ede6de` | 浅色主文字 | | `--ink-2` | `#9a8e84` | 次要文字 | | `--ink-3` | `#5e544a` | 辅助文字 | | `--accent` | `#e8955f` | 更亮的强调色(保证对比度) | | `--accent-hover` | `#f0a872` | 更亮的悬停态 | | `--accent-bg` | `#2a1e16` | 深色强调底 | ### 阴影系统 | 变量 | 浅色模式 | 深色模式 | 用途 | |------|----------|----------|------| | `--shadow-sm` | `0 1px 3px rgba(44, 36, 32, 0.06)` | `0 1px 3px rgba(0, 0, 0, 0.2)` | 轻微阴影 | | `--shadow-md` | `0 4px 16px rgba(44, 36, 32, 0.08)` | `0 4px 16px rgba(0, 0, 0, 0.25)` | 中等阴影 | | `--shadow-lg` | `0 8px 32px rgba(44, 36, 32, 0.12)` | `0 8px 32px rgba(0, 0, 0, 0.35)` | 大阴影 | | `--shadow-glow` | `0 0 40px rgba(212, 118, 78, 0.15)` | `0 0 40px rgba(232, 149, 95, 0.12)` | 强调色光晕 | ## 深色模式 ### 切换机制 深色模式通过 `html.dark` 类名控制: 1. **跟随系统**(默认):根据 `prefers-color-scheme` 媒体查询 2. **手动切换**:通过导航栏的主题切换按钮 3. **配置指定**:通过 `color_scheme` 配置项强制指定 ### 切换逻辑 ```javascript // 优先级:localStorage > 配置项 > 系统偏好 var stored = localStorage.getItem("wi-theme"); var prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; var scheme = document.currentScript.getAttribute("data-scheme"); if (stored === "dark") { isDark = true; } else if (stored === "light") { isDark = false; } else if (scheme === "dark") { isDark = true; } else if (scheme === "light") { isDark = false; } else if (!stored && prefersDark) { isDark = true; } ``` ### 设计要点 - 深色模式不是简单的反色,而是重新定义了所有颜色变量 - 强调色在深色模式下更亮,保证足够的对比度 - 阴影在深色模式下使用纯黑,更自然 - 文字颜色保持温暖色调,不是纯白 ## 字体系统 ### 字体栈 | 变量 | 字体栈 | 用途 | |------|--------|------| | `--font-sans` | `'Noto Serif SC', 'Source Han Serif SC', Georgia, serif` | 标题、强调文字 | | `--font-body` | `'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif` | 正文、UI 文字 | | `--font-mono` | `'JetBrains Mono', 'Fira Code', monospace` | 代码 | ### 设计思路 - **标题用衬线体**:Noto Serif SC 赋予标题优雅的文艺气质 - **正文用无衬线体**:Noto Sans SC 保证长文阅读的舒适度 - **代码用等宽体**:JetBrains Mono 专为代码设计 ::: tip 这些字体不会自动加载,需要在 Halo 后台或 HTML 中引入对应的字体 CSS。推荐使用 Google Fonts 或国内 CDN 镜像。 ::: ## 间距系统 | 变量 | 值 | 用途 | |------|-----|------| | `--space-xs` | `0.25rem` | 极小间距 | | `--space-sm` | `0.5rem` | 小间距 | | `--space-md` | `1rem` | 标准间距 | | `--space-lg` | `1.5rem` | 大间距 | | `--space-xl` | `2rem` | 超大间距 | | `--space-2xl` | `3rem` | 区块间距 | | `--space-3xl` | `4rem` | 大区块间距 | | `--space-4xl` | `6rem` | 页面级间距 | ### 容器宽度 | 变量 | 值 | 用途 | |------|-----|------| | `--container-sm` | `640px` | 小容器 | | `--container-md` | `768px` | 中容器 | | `--container-lg` | `1024px` | 大容器 | | `--container-xl` | `1200px` | 最大容器 | | `--content-max` | `800px` | 内容最大宽度 | ### 区块间距 `--section-spacing: clamp(3rem, 2rem + 3vw, 6rem)` — 响应式区块间距,在小屏幕上更紧凑。 ## 圆角系统 | SCSS 变量 | 值 | 用途 | |-----------|-----|------| | `$border-radius-sm` | `8px` | 小元素(标签、代码块) | | `$border-radius-md` | `12px` | 中等元素(卡片、图片) | | `$border-radius-lg` | `16px` | 大元素(卡片、面板) | | `$border-radius-xl` | `24px` | 超大元素 | | `$border-radius-full` | `9999px` | 胶囊按钮、头像 | ### 配置项 通过 `border_radius` 配置项可全局调整圆角风格: | 选项 | 效果 | |------|------| | `small` | 较小的圆角 | | `medium` | 中等圆角(默认) | | `large` | 较大的圆角 | ## 动画系统 ### 时间曲线 | 变量 | 值 | 用途 | |------|-----|------| | `--ease-out-expo` | `cubic-bezier(0.16, 1, 0.3, 1)` | 弹性出场,用于悬停和展开 | | `--ease-out-quart` | `cubic-bezier(0.25, 1, 0.5, 1)` | 平滑出场,用于颜色过渡 | | `--ease-in-out-cubic` | `cubic-bezier(0.65, 0, 0.35, 1)` | 对称缓动,用于循环动画 | ### 时长 | 变量 | 值 | 用途 | |------|-----|------| | `--duration-fast` | `150ms` | 快速反馈(颜色变化) | | `--duration-normal` | `300ms` | 标准过渡(悬停效果) | | `--duration-slow` | `500ms` | 慢速过渡(大位移) | | `--duration-breath` | `3s` | 呼吸动画周期 | ### 关键帧动画 | 动画名 | 效果 | 用途 | |--------|------|------| | `breathe` | 透明度 0.4→0.7 + 缩放 1→1.08 | Hero 光球呼吸 | | `fadeInUp` | 透明度 0→1 + 上移 20px | 元素入场 | | `float` | 上下浮动 6px | 装饰元素 | | `shimmer` | 背景位置平移 | 加载占位 | | `scrollHint` | 透明度 + 下移 8px | 滚动指示器 | | `likeHeartbeat` | 缩放 1→1.3→0.9→1 | 点赞心跳 | ### 动画开关 | 配置 | 说明 | 默认值 | |------|------|--------| | `animation_enabled` | 启用动效 | `true` | | `animation_breath` | 呼吸动画 | `true` | | `animation_scroll_reveal` | 滚动渐入 | `true` | | `animation_cursor_glow` | 光感跟随 | `false` | 关闭动效时,`html` 元素添加 `wi-no-animations` 类名。