# Content rules for `slides.md`

Reference khi generate `slides.md` cho mỗi slide trong outline đã được user approve. Đọc file này khi bắt đầu step 4.2 trong workflow của SKILL.md.

## Density + structure

- **Bullet**: max 5 bullet/slide, mỗi bullet ≤ 2 dòng. Vượt → split slide.
- **Cover title (H1)**: ≤ 30 ký tự để Slidev TOC menu show 1 line, không wrap. Title dài → split thành H1 ngắn + subtitle (body text).
  - KHÔNG: `# HIN-based GraphRAG cho Education Recommendation`
  - ĐÚNG: `# HIN-based GraphRAG` + subtitle `Cho Education Recommendation`
- **Visual priority**: Mermaid > image > table > text-only. Slide toàn text là dấu hiệu cần split hoặc thêm diagram.
- **Math**: KaTeX. Trong Markdown `\` bị ăn 1 lớp, KaTeX cần 1 lớp nữa → viết `\\sum`, `\\mathcal{L}` trong `$...$` block.
- **Citation**: inline `(Author et al., YYYY)` hoặc `[n]` + dedicated References slide cuối với `<div class="references">` numbered list (xem `slidev-cheatsheet.md` mục "References slide"). Academic templates còn hỗ trợ **per-slide footer refs**: thêm `refs:` vào frontmatter từng slide -> footer hiện đúng trích dẫn của slide đó (0..n nguồn; slide không cite thì chỉ còn số trang), kèm link DOI/URL nếu có. Hợp cho deck phân tích/seminar nơi mỗi slide tựa vào nguồn khác nhau. Chi tiết: `slidev-cheatsheet.md` mục "Global footer". Mọi `url` phải HEAD/GET-check resolve (2xx/3xx) trước khi gắn - không bịa DOI.

## Language + voice

- **Language**: body theo ngôn ngữ user dùng (Vietnamese mặc định trong project này); technical term giữ English nguyên (HIN, GNN, RQ, KPI, ARR, NPS, IAM, RBAC, ABAC, RAG, etc.).
- **Voice match purpose**:
  - thesis-defense / thesis-proposal -> academic formal
  - advisor-meeting -> conversational tone (gần gũi so với formal academic, KHÔNG phải transcript văn nói)
  - pitch-deck -> punchy, ngắn, action-oriented
  - lecture -> instructional, có scaffolding (recap -> concept -> example -> check)
  - status-report -> direct, signal-over-polish

### Văn viết presentation, KHÔNG văn nói transcript

Slide là document standalone, người đọc không qua filter "speaker đang nói". Cấm các cụm văn nói trên text hiển thị:

| Sai (văn nói) | Đúng (văn viết presentation) |
|---|---|
| "Buổi này em xin trình bày..." | "Báo cáo gồm 3 nội dung..." |
| "em sẽ pitch/critique/chứng minh..." | "Thesis chứng minh...", "Critique tập trung 5 góc..." |
| "Thầy thấy nên chốt ngay hay khảo sát thêm?" | "Chốt ngay hay khảo sát thêm?" |
| "em mong nhận được phản biện..." | "Câu hỏi mở..." |
| "anh/chị/mình nghĩ..." | Noun phrase hoặc third-person |

Nếu cần truyền voice cá nhân -> đẩy vào speaker notes `<!-- ... -->` (Slidev hiện ở presenter mode, không xuất ra slide hay PPTX/PDF).

**Closing slide** (Q&A, Cảm ơn) được phép 1-2 cụm courtesy ("Cảm ơn quý thầy cô...", "Thank you") - đây là social convention, không phải transcript.

### Catch sót sau khi sinh

Sau khi viết xong `slides.md`, grep để kiểm tra:

```bash
grep -nE '\bem\b|\bthầy\b|Buổi này|xin trình bày|xin ý kiến|em sẽ|em xin|em mong' slides.md
```

Nếu có hit ngoài speaker notes -> sửa về văn viết.

## Animation: mặc định KHÔNG dùng

`<v-click>`, `<v-clicks>`, `v-motion`, `transition: ...` mặc định **KHÔNG dùng**.

**Lý do**: Slidev export PPTX render mỗi slide thành 1 PNG nhúng vào PowerPoint -> tất cả animation Slidev flatten về state cuối, click reveal mất hoàn toàn. Nếu user export PPTX (default cho academic + business decks), animation chết câm.

**Chỉ dùng animation khi**: user **chắc chắn** present từ web (dev mode hoặc `slidev build` HTML). Khi bắt đầu generate, hỏi rõ "xuất PPTX hay present web-only" trước khi quyết định.

**Nếu user cần progressive reveal nhưng vẫn xuất PPTX** - 3 cách thay thế:

1. **Static visual hierarchy** - numbered priority (1/2/3), color-coded callout box, icon + bold lead. Slide tự nó đã có cấu trúc rõ, không cần reveal.
2. **Split 1 slide thành 2-3 slide nhỏ** - mỗi slide là 1 step. Deck dày hơn nhưng PPTX/PDF đều work.
3. **`--with-clicks` flag** - sửa `package.json` để Slidev split mỗi click step thành 1 slide-image riêng. PPTX dày, vẫn là image, nhưng nhấn Space trong PowerPoint mimics click reveal. Chi tiết: `slidev-cheatsheet.md` mục "Export commands".

## No AI-tell punctuation

Tuyệt đối KHÔNG dùng các ký tự Unicode sau trong text hiển thị trên slide:

| Cấm | Tên | Codepoint | Thay bằng |
|---|---|---|---|
| `—` | em-dash | U+2014 | `-` (hyphen với spaces 2 bên cho aside) |
| `–` | en-dash | U+2013 | `-` (hyphen) hoặc `to` cho range |
| `"` `"` | curly double-quotes | U+201C/D | `"` straight |
| `'` `'` | curly single-quotes | U+2018/9 | `'` straight |
| `…` | ellipsis | U+2026 | `...` (3 dots) |

**Lý do**: User dị ứng các ký tự này vì AI-generated text (Claude/GPT) thường tự chèn -> reader nhận ra ngay đây là output AI.

**Exception**: code block, math `$...$`, quote nguyên văn từ paper -> giữ Unicode gốc nếu source có.

### Catch sót sau khi sinh

```bash
grep -nP '[\x{2014}\x{2013}\x{201C}\x{201D}\x{2018}\x{2019}\x{2026}]' slides.md
```

Replace toàn bộ về ASCII trước khi báo xong cho user.

## Quick checklist trước khi báo xong

- [ ] Mỗi slide ≤ 5 bullet, ≤ 2 dòng/bullet
- [ ] Cover H1 ≤ 30 ký tự
- [ ] Không có `<v-click>` / `<v-clicks>` / `v-motion` / `transition:` (trừ khi user confirm web-only)
- [ ] Không có em-dash / en-dash / curly quotes / Unicode ellipsis (grep check)
- [ ] Không có văn nói "em/thầy/buổi này/xin trình bày" trên text hiển thị (grep check)
- [ ] References slide dùng `<div class="references">` + numbered list (academic templates)
- [ ] (nếu dùng footer refs) mỗi slide cite nguồn có `refs:` frontmatter; `short` gọn (author + year); mọi `url` đã verify resolve trước khi gắn (không bịa DOI)
- [ ] Citation inline format `(Author et al., YYYY)`
- [ ] Mermaid validate ở mermaid.live nếu có diagram phức tạp
