# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
项目:缠论研习社——缠中说禅《教你炒股票》原文与杂文的沉浸式阅读站。
## 命令
```bash
pnpm install # 安装依赖(需 Node 20+ 与 pnpm)
pnpm dev # 开发服务器 → http://localhost:5173(vite open 自动开浏览器)
pnpm build # vue-tsc -b 类型检查 + vite 生产构建
pnpm build:only # 跳过类型检查,仅 vite build
pnpm typecheck # 仅 vue-tsc -b 类型检查(改完 TS/Vue 先跑这个)
pnpm preview # 预览生产构建
```
本机 pnpm v11 用 `pnpm-workspace.yaml` 的 `allowBuilds`(不是 `onlyBuiltDependencies`)放行 esbuild / vue-demi 的构建脚本;新增带构建脚本的 devDep 时需在此手动放行,否则安装会被拦。
## 样式约定(重要)
### 每个用 Tailwind 写的元素必须带一个「标记类名」
用 Tailwind 工具类写样式时,**必须给每个有独立含义的元素加一个语义化的标记 class,并放在 class 列表最前面**。这样用户在对话里能精确指代「改哪个 div」。
```vue
```
命名规则:`<组件或区块名>__<部位>`,如 `home-hero__title`、`reader-meta`、`article-card__tags`。一个 `.vue` 文件内的标记类名以该组件的功能名为前缀,保证跨组件不撞。
> 现存组件(如 `ArticleCard.vue`)尚未遵循此约定;**新建或重写元素时一律补上**,改动既有元素时顺手补。
### 颜色必须走设计 Token,禁止裸色值
所有颜色用 `src/style.css` 里 `@theme inline` 定义的语义类,**不要写 `bg-white` / `text-gray-500` / `#fff` 这类**:
- 背景:`bg-app`(应用底)/ `bg-background`(卡片)/ `bg-surface` / `bg-surface-2` / `bg-hover`
- 文本:`text-foreground` / `text-muted` / `text-subtle` / `text-faint`
- 品牌/语义:`text-primary` / `bg-primary-soft` / `text-success` / `text-warning` / `text-danger`
- 边框:`border-line` / `border-line-strong` / `border-line-card`
- 圆角用 `rounded-xs/sm/md/lg/xl/2xl`(4/8/12/16/20/24),阴影用 `shadow-xs/sm/soft/md/lg/xl`
亮/暗主题切换靠 ``,所有语义色自动适配——**只要用 Token,就不用单独写 dark: 变体**。
### class 合并用 `cn()`
`src/utils/cn.ts` 的 `cn()` = clsx(条件)+ tailwind-merge(冲突后写覆盖前写,如 `px-2 px-4 → px-4`)。有条件 class 或动态拼接时用它,别手写字符串拼接。
## 架构(需要跨文件理解的)
**技术栈**:Vue 3 `