# Chat 页面美化总结（会话索引）

> 日期：2026-07-14 ｜  站点：http://43.156.179.74/chat/  ｜  当前 /var/www/html/chat/index.php ≈ 2965 行

## 文件时间线 / 备份

```
/home/ubuntu/chat-index-bak-20260714105351.php       Phase-1+2 备份 (Phase-2 之前)
/var/www/html/chat/index.php.bak.20260714105336      在 chat 目录内的同时间戳备份
/var/www/html/chat/index.php.bak.20260714111415      Phase-3 停止按钮改造前
/var/www/html/chat/index.php.bak.20260714132346      Phase-4 侧边栏改造前
```

## Phase-2：基础美化（行 509 起）

新增能力（不丢任何原功能）：

- **A1** 渐变背景 + 顶栏毛玻璃（`backdrop-filter blur 16px saturate 160%`）
- **A3** 气泡差异化（用户渐变蓝、助手柔和阴影、气泡入场 translateY 入场动画）
- **A4** 空状态欢迎页（logo + 欢迎语 + 4 张建议卡片，2×2 等高网格）
- **A5** 代码块 mac 风三圆点 + 一键复制按钮（hover 显示）
- **B6** 按钮微反馈（`:active` 涟漪、hover 缩放）
- **B8** "↓ 跳到底部"悬浮按钮（`#scroll-bottom-btn`）
- **C10** 暗色配色 slate 化（slate-900/800 + `#60a5fa→#818cf8`）
- **E13** 主题三档切换（浅/深/跟随系统，写 localStorage）

新增 JS 函数：applyTheme / setTheme / toggleThemeMenu / closeThemeMenuOutside / hideWelcome / showWelcome / maybeShowWelcome / welcomeSuggest / attachPreCopyButtons / fallbackPreCopy / maybeToggleScrollBtn / enhanceBubble（部分列表，原 71 函数全保留，新增约 14 个）

## Phase-3：停止按钮（行 641 起）

- HTML：`<svg class="stop-icon"><rect/></svg>` → `<div class="wave-bars">` 包 4 个 `<span class="wave-bar">`
- CSS（A1+A2+A3+B1+B3）：
  - 背景 `linear-gradient(135deg, #ef4444 0%, #f97316 100%)`
  - 暗色 `linear-gradient(135deg, #f43f5e 0%, #ec4899 100%)`
  - 红色发光阴影 + `stopPulse` 1.4s 脉冲（缩放 1↔1.06、阴影 0.4↔0.65）
  - 4 根竖条错峰 `scaleY 0.35↔1` 跳动（0/120/240/360ms delay）
- 兜底：`#send-btn { position: absolute !important; right: 8px !important; bottom: 10px !important; overflow: hidden; }` —— 防止后续 CSS 污染

## Phase-4：侧边栏（行 678 起）

HTML 调整：头部改用 logo + `My Claude Code` / 历史会话 / 关闭按钮；新对话按钮分离 plus/text span；新增 `<div class="sidebar-search">` 含 input + 清除按钮。

CSS 视觉层次 6 件套：

- **A1** 头部 36px 渐变 logo + 二级标题
- **A2** 新对话按钮 12px 圆角 + 渐变蓝 + hover 加号旋转 90°
- **A3** 分组标题 + SVG 图标 + 数量徽章 + sticky 顶置（z-index:5）
- **A4** 会话项右侧时间（HH:MM / 昨天 / N天前 / MM/DD）
- **A5** 选中态左侧蓝条 `transform: scaleY(0→1)` 滑入
- **A6** 来源标签 web/user/group 渐变 + 阴影

其他：

- **B1** 侧边栏顶部搜索框，实时过滤 + × 清空 + 空分组自动隐藏
- **D1** 底部用户卡（**已移除**，用户后续要求）

互动细节：

- 普通态：`padding-right: 38px !important` 让 conv-time 不与 ⋮ 重合（移动端 ≤768 恢复 12px）
- hover 态：`conv-time` opacity:0 + max-width:0 + margin-right:-8px 让出操作按钮位置
- 下拉 `.sidebar-item-dropdown { z-index: 50 !important }` 拉过 sticky 分组标题

JS 新增：

- `formatConvTime(unixSec)` HH:MM / 昨天 / N天前 / MM:DD
- `updateConvCount(n)` （D1 移除后无效但保留无副作用）
- `handleSidebarSearch(kw)` 输入过滤
- `clearSidebarSearch()` 清空
- `applySearchFilter(kw)` 过滤 item + 自动隐藏空组
- 渲染时给 `item.dataset.title` 写入小写标题用于过滤

## 修复记录

| 修复 | 行 | 内容 |
|---|---|---|
| 输入按钮溢出 | 645 | `#send-btn` position absolute 兜底，phase-3 不再覆盖 |
| welcome 深色标题 | 711 | `body.dark-mode .welcome-screen h1 { color: #f1f5f9 }` |
| welcomeSuggest autoResize 依赖 | – | 改为 dispatchEvent('input') 兼容 |
| 三点菜单覆分组标题 | – | `.sidebar-item-dropdown { z-index: 50 !important }` |
| time/⋮ 重叠 | 720 | `padding-right: 38px` 给 ⋮ 让位，移动端恢复 12px |

## URL 速查

- 网站：http://43.156.179.74/chat/
- 截图目录：http://43.156.179.74/share/

## 设计约束（不丢功能 + 允许新增）

- 所有 CSS 仅作"追加"，不动既有规则；后写者赢 + 必要时 `!important`
- JS 函数全部保留，原 71 + 新增约 14，原函数体不修改，仅追加新函数
- HTML 在原结构旁 append 新节点，不删除原有 id / class
- 暗色模式用 `body.dark-mode` 前缀独立组织

## 已知未做（潜在下一轮）

- PC 端侧边栏折叠按钮 + 状态持久化（toggleSidebarPin）
- 拖拽分隔条改宽度
- 分组折叠 + 记忆
- 来源标签过滤 chip
- Esc 关侧边栏 / Alt+S 快捷键
- 主题菜单按钮目前未在截图中显示（顶栏右侧 5 个图标中有的被暗色覆盖，可在 phase-2 主题按钮组中确认）

## 测试方式

```bash
# 截图验证
pkill -9 chromium 2>/dev/null; sleep 1
DOCKER_CONTAINER=true node /tmp/test-sidebar.js   # 浅/深 + 普通/hover

# 对照原 CSS（行号变化）
grep -nE "Phase-[234]|^[[:space:]]*#send-btn \\{|\\.sidebar-" /var/www/html/chat/index.php | head -30
```

## 短期维护清单

- Phase-3 兜底 `position: absolute !important; right: 8px !important; bottom: 10px !important; overflow: hidden;` 不要删
- Phase-4 `z-index: 50 !important` on `.sidebar-item-dropdown` 不要删（sticky 标题层级问题）
- Phase-4 `padding-right: 38px !important` 给 ⋮ 让位（删除会与时间重叠）
- `localStorage` 键：`theme_mode`、`dark_mode`、`auth_token` — 都有原代码定义，不要改键名

