Skip to content

Commit 72947be

Browse files
hades217claude
andcommitted
docs: add presentation design system guide
Standardizes Neo-Brutalism visual style, color palette, typography, UI components, and slide patterns for all JR Academy presentations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0df7818 commit 72947be

1 file changed

Lines changed: 270 additions & 0 deletions

File tree

DESIGN.md

Lines changed: 270 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
# Presentation Design System
2+
3+
所有 JR Academy Presentation 项目统一遵循此设计规范。新建 presentation 时直接复制 `company-intro/src/styles/theme.ts``company-intro/src/components/ui.tsx` 作为起点。
4+
5+
---
6+
7+
## Tech Stack
8+
9+
```
10+
React 19 + TypeScript + Vite 8
11+
framer-motion (动画)
12+
styled inline (不用 CSS 文件,全部 inline style)
13+
```
14+
15+
**不要用**:styled-components、Tailwind、CSS Modules、任何 UI 库。Presentation 追求零依赖、纯 inline style。
16+
17+
---
18+
19+
## 视觉风格:Neo-Brutalism
20+
21+
JR Academy 的品牌风格是 **Neo-Brutalism(新野蛮主义)**,核心特征:
22+
23+
| 特征 | 规则 |
24+
|------|------|
25+
| **黑色粗边框** | 所有卡片/按钮: `border: 3px solid #000` |
26+
| **偏移阴影** | `box-shadow: 6px 6px 0px #000`(大)或 `4px 4px 0px #000`(小)|
27+
| **Hover 效果** | hover 时阴影消失 + 位移 `transform: translate(4px, 4px)` |
28+
| **大号粗体标题** | `font-weight: 900``clamp()` 响应式字号 |
29+
| **色块强调** | 重要文字用纯色背景 highlight,如 `<span style={{ background: '#FFDE59', padding: '4px 16px' }}>` |
30+
| **倾斜元素** | 装饰性色块 `transform: rotate(±3~15deg)` |
31+
| **无圆角** | 默认不用 `border-radius`(极少数例外) |
32+
33+
---
34+
35+
## 色板
36+
37+
```typescript
38+
export const colors = {
39+
red: '#ff5757', // JR 品牌主色
40+
dark: '#10162f', // 深色背景、按钮
41+
yellow: '#FFDE59', // 强调、高亮
42+
green: '#7ED957', // 成功、数据
43+
blue: '#38B6FF', // 信息、链接
44+
purple: '#CB6CE6', // 装饰
45+
orange: '#FF914D', // 警告、次要强调
46+
warmBg: '#fff1e7', // 默认浅色背景 ← JR 品牌背景色
47+
darkBg: '#1a1a2e', // 深色 slide 背景
48+
white: '#ffffff',
49+
black: '#000000',
50+
indigo: '#6366f1', // AI/Tech 主题(AI Adoption 用)
51+
teal: '#10b981', // AI/Tech 辅助色
52+
} as const;
53+
```
54+
55+
**用法原则**
56+
- 每个 presentation 可以有自己的主题色(如 AI Adoption 用 indigo/teal),但 `red``warmBg``dark` 是 JR 品牌色必须保留
57+
- Cover slide 通常用 `dark``black` 背景
58+
- 内容 slide 用 `warmBg``white`
59+
- 交替使用不同背景色避免视觉疲劳
60+
61+
---
62+
63+
## 字体
64+
65+
```typescript
66+
export const fonts = {
67+
heading: '"Bricolage Grotesque", "Noto Sans SC", sans-serif', // 标题
68+
body: '"DM Sans", "Noto Sans SC", sans-serif', // 正文
69+
mono: '"Space Mono", monospace', // 数据/标签/代码
70+
} as const;
71+
```
72+
73+
`index.html` 中引入:
74+
```html
75+
<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;600;700;800&family=DM+Sans:wght@400;500;600;700&family=Space+Mono:wght@400;700&family=Noto+Sans+SC:wght@400;500;700;900&display=swap" rel="stylesheet" />
76+
```
77+
78+
**字号规则**
79+
- 标题:`clamp(36px, 5vw, 64px)` — 响应式,16:9 ratio 下自适应
80+
- 副标题:`clamp(16px, 2vw, 22px)`
81+
- 正文:14-16px
82+
- 标签/badge:12-14px, `font-family: fonts.mono`
83+
- 数据大字:36-56px, `font-weight: 900`
84+
85+
---
86+
87+
## 核心 UI 组件
88+
89+
`ui.tsx` 导入使用,不要重新造:
90+
91+
### 布局
92+
93+
| 组件 | 用途 | 示例 |
94+
|------|------|------|
95+
| `<Slide bg={color}>` | Slide 容器,全屏 | `<Slide bg={colors.warmBg}>` |
96+
| `<Inner center>` | 内容居中容器 | 用于统计/标题页 |
97+
| `<Inner split>` | 左右分栏 | 配合 `<Half>` 使用 |
98+
| `<Half>` | 半栏 |`<Inner split>`|
99+
| `<Grid cols={3}>` | 网格布局 | 卡片列表 |
100+
101+
### 文字
102+
103+
| 组件 | 用途 |
104+
|------|------|
105+
| `<Title>` | 大标题,`font-weight: 900` |
106+
| `<Title white>` | 白色标题(深色背景用) |
107+
| `<Subtitle>` | 副标题,灰色 |
108+
| `<Highlight color={bg}>` | 纯色背景高亮文字 |
109+
| `<BulletList items={[...]}>` |`` 前缀的列表 |
110+
| `<Tag bg={color}>` | 小标签 badge |
111+
112+
### 卡片
113+
114+
| 组件 | 用途 |
115+
|------|------|
116+
| `<Card>` | 大卡片,3px 边框 + 6px 阴影 + hover 动画 |
117+
| `<CardSm>` | 小卡片,2px 边框 + 4px 阴影 |
118+
119+
### 动画
120+
121+
| 组件 | 用途 |
122+
|------|------|
123+
| `<Stagger>` | 子元素依次出现 (stagger 0.08s) |
124+
| `<StaggerItem>` | Stagger 的子项 |
125+
| `<Divider center>` | 标题下的装饰横线 |
126+
127+
---
128+
129+
## Slide 设计模式
130+
131+
### 1. Cover Slide(封面)
132+
133+
```
134+
背景: colors.black 或 colors.dark
135+
元素:
136+
├── 倾斜色块装饰 (absolute positioned, rotate)
137+
├── JR Logo badge (白色卡片 + 黑边 + 阴影)
138+
├── 大号标题 (clamp 响应式, text-shadow)
139+
├── 高亮关键词 (黄色背景 + 黑边)
140+
├── 副标题 (borderLeft 强调)
141+
└── 底部 tag 行 (monospace 标签)
142+
```
143+
144+
### 2. 数据统计 Slide
145+
146+
```
147+
背景: colors.warmBg
148+
布局: <Inner center>
149+
元素:
150+
├── <Title> + <Divider center>
151+
├── <Stagger> 3-4 列 <Card>
152+
│ ├── 大号数字 (56px, font-weight 900)
153+
│ ├── 标题文字
154+
│ └── 说明文字 (灰色)
155+
└── 底部补充说明
156+
```
157+
158+
### 3. 左右对比 Slide
159+
160+
```
161+
背景: colors.white
162+
布局: <Inner split> + <Half> × 2
163+
左半:
164+
├── <Title>
165+
├── <Divider>
166+
├── 说明文字
167+
└── <Tag> 标签
168+
右半:
169+
├── 多个 <Card> 堆叠
170+
└── 或 <BulletList>
171+
```
172+
173+
### 4. 网格卡片 Slide
174+
175+
```
176+
背景: colors.white 或浅色
177+
布局: <Inner center>
178+
元素:
179+
├── <Title> + <Divider center>
180+
└── <Stagger> + grid (3-4 列)
181+
└── <CardSm> × N
182+
├── emoji 图标
183+
├── 标题
184+
└── 内容
185+
```
186+
187+
### 5. CTA 结尾 Slide
188+
189+
```
190+
背景: colors.dark
191+
元素:
192+
├── 旋转圆圈装饰 (animate rotate 无限循环)
193+
├── 大号标题 + 高亮关键词
194+
├── 副标题 (半透明白色)
195+
├── 按钮组 (黄色主按钮 + 白色边框次按钮)
196+
└── 底部数据指标行
197+
```
198+
199+
---
200+
201+
## SlideEngine 交互
202+
203+
所有 presentation 共用同一个 `SlideEngine.tsx`
204+
205+
| 功能 | 操作 |
206+
|------|------|
207+
| 下一页 | `` / `` / `Space` / 鼠标滚轮 / 触摸左滑 |
208+
| 上一页 | `` / `` / 触摸右滑 |
209+
| 全屏 |`F` |
210+
| 跳转 | 点击底部导航点 |
211+
212+
Progress bar 颜色可以自定义(company-intro 用 `colors.red`,ai-adoption 用 `colors.indigo`)。
213+
214+
---
215+
216+
## 文件结构
217+
218+
新建 presentation 时按此结构:
219+
220+
```
221+
presentations/
222+
└── your-presentation/
223+
├── package.json
224+
├── index.html # 引入 Google Fonts
225+
├── vite.config.ts # base: '/presentation/your-presentation/'
226+
├── tsconfig.json
227+
├── tsconfig.app.json
228+
├── public/
229+
│ └── images/ # 图片资源
230+
├── src/
231+
│ ├── main.tsx
232+
│ ├── App.tsx # SlideEngine + Slides 组装
233+
│ ├── styles/
234+
│ │ └── theme.ts # 复制 company-intro 的,按需加主题色
235+
│ └── components/
236+
│ ├── SlideEngine.tsx # 复制 company-intro 的
237+
│ ├── ui.tsx # 复制 company-intro 的,按需加组件
238+
│ └── slides/
239+
│ ├── S01_Cover.tsx
240+
│ ├── S02_xxx.tsx
241+
│ └── ...
242+
└── bun.lock
243+
```
244+
245+
**命名规则**:Slide 文件用 `S01_Cover.tsx``S02_Problem.tsx` 格式,序号两位数 + 下划线 + 描述性名称。
246+
247+
---
248+
249+
## 部署
250+
251+
1.`.github/workflows/deploy.yml` 的 build steps 中添加你的 presentation
252+
2. 在 Assemble output 中 `cp -r your-presentation/dist/* _site/your-presentation/`
253+
3. 在首页索引 `_site/index.html` 中添加链接
254+
4. Push 到 main 分支自动部署到 GitHub Pages
255+
256+
---
257+
258+
## Checklist:新建 Presentation 前检查
259+
260+
- [ ] 复制 `theme.ts``ui.tsx` 作为基础
261+
- [ ] `vite.config.ts` 设置正确的 `base` 路径
262+
- [ ] `index.html` 引入 Google Fonts
263+
- [ ] 第一张 slide 是 Cover(深色背景 + JR Logo)
264+
- [ ] 最后一张 slide 是 CTA
265+
- [ ] 所有卡片有 `border: 3px solid #000` + `box-shadow`
266+
- [ ] Hover 效果:阴影消失 + 位移
267+
- [ ] 标题用 `clamp()` 响应式字号
268+
- [ ] 数据/标签用 `Space Mono` 字体
269+
- [ ] 配色不超过 3-4 个主色(品牌色 + 1-2 个主题色)
270+
- [ ] 更新 `deploy.yml` 和首页索引

0 commit comments

Comments
 (0)