---
name: 简历撰写
description: 基于用户提供的原始简历（PDF/文字/截图）及照片，自动生成莫兰迪配色的高质量HTML可视化简历，含移动端适配、PDF导出按钮，并自动部署至Cloudflare Pages线上化。触发词：帮我做简历、优化简历、做个在线简历、简历HTML化、简历上线。
---

# 简历撰写 Skill

## 整体流程概览

```
Step 1: 收集原始材料（简历文件 + 照片）
Step 2: 扫描信息完整性，主动补齐缺失项
Step 3: 确认补充内容（可问1-2个关键问题）
Step 4: 生成莫兰迪HTML简历
Step 5: 自动部署 Cloudflare Pages
Step 6: 打开本地预览
Step 7: 返回线上地址
```

---

## Step 1：收集原始材料

**主动向用户询问：**
1. 原始简历放在哪里？（文件路径 / 直接粘贴文字 / 截图均可）
2. 是否有个人照片？如有，放在哪里？

用 `read_file` 读取PDF/HTML简历，或直接解析用户粘贴的文字内容。

---

## Step 2：信息完整性扫描（必做）

读取简历后，逐项核查以下清单，**缺什么就向用户要什么**，不得跳过：

### 基础信息核查
- [ ] 姓名
- [ ] 手机号码（缺 → 主动要）
- [ ] 邮箱（缺 → 主动要）
- [ ] 所在城市
- [ ] 求职意向（职位方向）
- [ ] 个人照片（缺 → 主动要，告知可上传图片文件）

### 工作经历核查
- [ ] 每段经历是否有明确的**公司名、职位、起止时间**
- [ ] 每段经历是否有至少3条以上工作描述（仅1条需追问）
- [ ] **Gap扫描**：工作经历之间是否有超过6个月的空档期 → 若有，提示用户说明或补充
- [ ] 最近一段经历是否在近2年内（若空档超1年，需标注或补充说明）

### 教育背景核查
- [ ] 学校名称、专业、学历、毕业时间完整性

### 其他风险提示
- 若有多段经历但描述极少 → 提示可能影响展示效果，建议补充

---

## Step 3：确认阶段（最多2个问题）

在生成前，可向用户确认：
1. 「我计划这样写你的简历：[简要说明结构]，你有什么补充想法吗？」
2. 如有明显gap或信息缺失，直接说明并询问补充内容

**不得过度追问，2个问题上限，信息充分则直接生成。**

---

## Step 4：生成莫兰迪HTML简历

### 配色规范（强制执行，不得更改）

```css
:root {
  --ink: #2e3a42;
  --ink-light: #3d4f5a;
  --accent: #4a6274;          /* 莫兰迪烟灰蓝 */
  --accent-warm: #b8a070;     /* 浅金 */
  --accent-green: #5a8070;    /* 莫兰迪绿 */
  --sidebar-bg: #4a6274;      /* sidebar背景 */
  --sidebar-text: #dce6ec;
  --sidebar-dim: #a8bec9;
  --metric-bg: #f0f4f2;
  --metric-text: #3d6458;
  --metric-border: #b0ccc4;
  --award-bg: #faf6ee;
  --award-border: #c8aa7a;
  --rule: #dde6e2;
}
body { background: #e8e4de; }           /* 莫兰迪米棕 */
.resume { background: #faf9f7; }        /* 暖白 */
```

**禁止使用黑色 (#000)、红色、纯灰色作为主色调。**

### HTML结构规范

```
<body>
  <!-- 悬浮PDF导出按钮（右上角固定） -->
  <div class="fab-wrap">
    <button class="fab-btn" onclick="exportPDF()">⬇ 导出 PDF</button>
  </div>

  <div class="resume">
    <!-- 左侧 sidebar（莫兰迪烟灰蓝背景） -->
    <aside class="sidebar">
      <!-- 照片（base64嵌入） + 姓名 + 联系方式 + 核心技能标签 + 教育 + 语言 -->
    </aside>

    <!-- 右侧 main（工作经历 + 核心亮点） -->
    <main class="main">
    </main>
  </div>
</body>
```

### 必须包含的功能

**1. 照片嵌入**（如有照片）：
```python
# 读取图片并转为base64
import base64
with open(photo_path, 'rb') as f:
    img_b64 = base64.b64encode(f.read()).decode()
# 在HTML中 <img src="data:image/jpeg;base64,{img_b64}">
```

**2. 移动端适配（iPhone）**：
```css
@media (max-width: 600px) {
  .resume { flex-direction: column; width: 100%; }
  .sidebar { width: 100%; padding: 24px 20px 20px; }
  .sidebar > div:first-child { display: flex; flex-direction: row; align-items: center; gap: 16px; }
  .contact-list { display: flex; flex-wrap: wrap; gap: 6px 14px; }
  .main { padding: 20px 16px 32px; }
}
```

**3. PDF导出按钮（打印背景色必须保留）**：
```css
.fab-wrap { position: fixed; top: 20px; right: 20px; z-index: 999; }
.fab-btn {
  background: #4a6274; color: #fff; border: none; border-radius: 8px;
  padding: 9px 16px; font-size: 13px; cursor: pointer;
  -webkit-appearance: none; appearance: none;  /* iOS Safari必须加 */
}
.sidebar {
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;  /* 打印时保留背景色 */
}
@media print { .fab-wrap { display: none !important; } }
```

```javascript
function exportPDF() {
  var btn = document.querySelector('.fab-wrap');
  btn.style.display = 'none';
  var style = document.createElement('style');
  style.id = 'print-override';
  style.innerHTML = `
    @page { size: A4; margin: 0; }
    @media print {
      html, body { width: 210mm; margin: 0 !important; padding: 0 !important; }
      * { print-color-adjust: exact !important; -webkit-print-color-adjust: exact !important; }
      .resume { width: 794px !important; flex-direction: row !important; box-shadow: none !important; }
      .sidebar { width: 236px !important; background: #4a6274 !important; color: #dce6ec !important; }
    }
  `;
  document.head.appendChild(style);
  window.print();
  setTimeout(function() {
    var s = document.getElementById('print-override');
    if (s) s.remove();
    btn.style.display = '';
  }, 1000);
}
```

### 内容写作规范
- 求职意向只写**职位方向**，不写目标公司名单
- 技能标签控制在 **5-8个**，聚焦核心，不堆砌
- 工作亮点数据化：尽量提炼量化指标（如"降低成本60%"、"管理87个仓"）
- 每段工作经历保留**原始信息完整度**，不过度压缩

---

## Step 5：部署到 Cloudflare Pages

生成HTML后，自动执行部署：

```powershell
# 1. 保存HTML到桌面
$htmlPath = "C:\Users\Administrator\Desktop\[姓名]_简历.html"

# 2. 同步到部署目录
$deployDir = "C:\Users\Administrator\Desktop\cv-deploy"
Copy-Item $htmlPath "$deployDir\index.html" -Force

# 3. 部署（项目名用姓名拼音或首字母，如 zhangsan-cv）
npx wrangler pages deploy "$deployDir" --project-name=[姓名拼音]-cv --branch=main --commit-dirty=true
```

**注意**：
- 如果 `cv-deploy` 目录不存在，先创建并在其中放 `index.html`
- project-name 只能用小写字母、数字、连字符
- 部署成功后从输出中提取 `https://xxxxxxxx.[project-name].pages.dev` 地址

---

## Step 6：打开本地预览

部署完成后，自动在浏览器中打开本地HTML预览：

```powershell
Start-Process $htmlPath
```

---

## Step 7：返回结果

向用户报告：
1. 本地文件路径：`C:\Users\...\[姓名]_简历.html`
2. 线上地址：`https://xxxxxxxx.[project-name].pages.dev`
3. 使用说明：右上角悬浮按钮 → 点击「导出 PDF」→ 系统打印对话框 → 选「另存为PDF」→ A4格式

---

## 常见问题与注意事项

| 问题 | 解决方案 |
|------|---------|
| iOS Safari 按钮显示黑色 | 必须加 `-webkit-appearance: none` |
| 打印时sidebar背景色消失 | sidebar加 `print-color-adjust: exact` + JS注入时加 `* {print-color-adjust: exact !important}` + sidebar写死背景色 |
| wrangler部署失败 | 检查 Node.js 是否安装；检查 `npx wrangler login` 是否已登录 |
| 照片读取失败 | 确认路径正确；支持jpg/png/webp格式 |
| Gap空档期超6个月 | 在对应时间段标注"个人发展期"或询问用户是否补充说明 |
