Career Future Mirror

v1.0.0

职业规划未来镜像系统:收集用户信息,生成3条差异化职业路径的Awwwards级HTML报告,构建'3年后的自己'进行镜像对话,生成《来自未来的信》沉浸式HTML页面。触发关键词:职业规划、职业转型、职业困惑、未来镜像、职业蓝图

0· 113·1 current·2 all-time
Security Scan
Capability signals
Crypto
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (career planning, future-self dialog, HTML reports) match the SKILL.md workflow: collect user info, generate three career paths, roleplay a future self, and produce HTML outputs. There are no unexpected env vars, binaries, or unrelated install steps.
Instruction Scope
Instructions are focused on the stated purpose (data collection, report generation, roleplay dialog). Two items to note: (1) the skill instructs the agent to '静默地' (silently) append conversation records to output/data/conversation_log.json — this is a privacy/transparency concern though coherent with the feature; (2) it relies on a WebSearch tool for market research, which will send user-related queries to whatever search service the agent uses and may leak PII if the agent includes sensitive resume content in queries.
Install Mechanism
No install spec and no code files — lowest-risk instruction-only skill. Nothing is fetched or written outside the agent-created output/ paths per the instructions.
Credentials
The skill requests no environment variables, credentials, or config paths (none declared and none referenced in SKILL.md). This is proportionate for a report-generation/roleplay skill.
Persistence & Privilege
always=false and user-invocable (normal). The skill writes files under output/ and appends to output/data/conversation_log.json (persistent local storage of conversations). This is expected for its purpose but users should be aware stored conversation logs may contain personal data and are written 'silently' per the instructions.
Assessment
This skill appears to do what it says, but consider these practical safety/privacy checks before installing or using it: - Personal data: The skill asks users to send resumes/background and will save conversation logs to output/data/conversation_log.json. Avoid sharing highly sensitive identifiers (ID numbers, full addresses, banking info). Consider redacting or summarizing sensitive details. - Silent logging: The SKILL.md instructs the agent to 'silently' append dialog to a local log. If you want transparency, change that behavior so the user is informed or confirm before storing. Review and rotate/delete stored logs as needed. - WebSearch leakage: Market-research steps use WebSearch; queries may include user details and go to the agent's configured search provider. If privacy is a concern, avoid including PII in search prompts or disable web lookups. - External resources: The HTML templates load fonts/assets from external hosts (e.g., Google Fonts). If you need an entirely offline or private workflow, modify templates to bundle fonts locally. - File access: The skill creates and writes files under output/*. Ensure the agent runs in an environment where writing these files is acceptable and that you (or your admin) can review/delete them. If these points are acceptable or mitigated (redacting data, making logging explicit, reviewing outputs), the skill is coherent and can be used for its stated career-planning purpose.

Like a lobster shell, security has layers — review code before you run it.

latestvk97btpjyb9f9h3jnwffpvfwhp184gnzx
113downloads
0stars
1versions
Updated 1w ago
v1.0.0
MIT-0

职业规划未来镜像系统

Overview

帮助处于任何人生阶段的用户进行职业规划:感到迷茫的大学生、职场适应期人士、职业转型期、职业瓶颈期。

核心价值主张:

  1. 未来镜像 - 构建"3年后的自己",并与他们对话
  2. 未来来信 - 将对话转化为来自未来自己的感人手写信
  3. 职业蓝图 - 可视化的职业发展路径报告

⭐ 重要:语言要求

强制要求 - 所有输出必须使用中文:

  • 报告内容、信件内容、对话回复必须使用中文
  • 即使用户的提问是英文,也要用中文回复
  • 这一点不可协商

目标场景

场景典型用户核心困惑
大学迷茫期大二至大四学生考研还是就业、专业与兴趣
职业初期工作1-3年方向选择、技能发展
职业瓶颈工作3-7年晋升受阻、价值感缺失
职业转型工作7年以上行业转换、创业
重返职场职业空窗期后技能断层、市场变化

输出交付物

交付物路径描述
职业规划报告output/reports/career_report.html3条路径 + 技能分析 + 场景展示
未来来信output/reports/future_letter.html沉浸式信件页面
对话记录output/data/conversation_log.json用于生成信件

完整工作流

阶段一:信息收集

触发条件:用户表达职业规划/转型/困惑的意向

收集方式:一次性列出所有问题,用户一次性回答;或用户直接提供简历/背景描述

操作:输出以下问题模板:

好的,让我们开始你的职业规划!

为了给你最准确的建议,请分享以下信息(可以一次性回答,也可以直接发送你的简历/背景描述):

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

【当前状态】
1. 你现在处于什么阶段?
   - 学生(几年级/研究生)
   - 职场初期(工作1-3年)
   - 职业发展期(工作3-7年)
   - 职业转型期(工作7年以上)
   - 待业/空窗期/重返职场

【背景情况】
2. 学历背景(学校、专业、学历)
3. 工作/实习经历(公司、职位、时长)
4. 核心技能

【个性与偏好】
5. 你喜欢什么类型的工作方式?
   - 深度专精型(专注技术/专业)
   - 协调型(带领团队/跨部门)
   - 创新型(从0到1搭建)
   - 执行型(流程驱动工作)

6. 你对风险的看法?
   - 求稳第一
   - 愿意承担中等风险
   - 高风险高回报

【价值观】
7. 职业中你最看重什么?(按重要性排序)
   薪资 / 稳定 / 成长 / 平衡 / 自由 / 影响力 / 意义

【未来意向】
8. 你感兴趣的方向/行业
9. 期望的收入水平
10. 现在最大的困惑或纠结是什么?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💡 你也可以直接发送你的简历或背景描述 - 我会自动解析~

数据来源参考./reference/career_survey_data.json 包含完整的问卷结构

信息解析:根据用户的人生阶段,整理成JSON格式:

{
  "stage": "职业转型期",
  "years_of_work": 10,
  "education": {
    "school": "某某大学",
    "major": "市场营销",
    "degree": "本科"
  },
  "experience": [
    {"company": "某某公司", "position": "市场总监", "years": 5}
  ],
  "skills": ["团队管理", "品牌策略", "数据分析"],
  "work_style": "协调型",
  "risk_tolerance": "愿意承担中等风险",
  "career_values": ["意义", "自由", "成长"],
  "target_direction": "创业/咨询",
  "expected_income": "15万+",
  "confusion": "想转型但不确定方向,担心年龄"
}

追问:如果缺少关键信息,简单追问:

好的!还需要再确认几个关键点:
- 你目前从事什么行业/岗位?
- 职业中最看重什么?

完成确认

好的,信息收集完成!

📋 您的档案:
- 10年市场营销经验,目前是市场总监
- 擅长团队管理和品牌策略
- 想转型,看重意义和自由
- 困惑:方向选择和年龄焦虑

如果没问题的话,我就开始生成您的职业规划报告了~

用户确认后 → 进入阶段二


阶段二:职业建议与报告生成

触发条件:信息收集完成

第零步:创建输出目录(重要)

在生成任何文件之前,先创建输出目录:

mkdir -p output/reports output/data

第一步:市场调研(网络搜索)

根据用户的目标方向,使用 WebSearch 工具搜索:

  • {行业} 2025-2026趋势
  • {目标职位} 薪资范围 要求
  • {用户背景} 转型路径 成功案例

提取:行业趋势、薪资范围、核心能力要求、转型可行性

第二步:生成3条职业路径

路径定位适合人群
🛡️ 稳健路径风险最低,成功率最高利用现有优势自然发展
🚀 突破路径需要努力但回报更高走出舒适区的成长路径
🌟 探索路径非传统但潜力高结合隐藏兴趣或新趋势

每条路径包含:

  • 目标职位/方向
  • 3年后的预期状态(收入、级别、生活方式)
  • 关键里程碑(3个)
  • 所需能力/资源
  • 潜在挑战

第三步:构建"3年后的某一天"场景 ⭐ 重要

为每条路径写300字的沉浸式场景

  • 第一人称,现在时
  • 包含感官细节(看到、听到、感受到)
  • 反映该路径独特的工作节奏和生活方式
  • 真实可信,不过度美化

第四步:能力/资源差距分析

对比用户现状与目标路径要求:

  • 硬技能差距、软技能差距、经验差距、资源差距
  • 提供优先级和补救建议

第五步:生成HTML报告 ⭐ 核心交付物

文件路径output/reports/career_report.html

详细的HTML报告设计规范见下方【职业报告HTML设计规范】章节。

输出模板

您的职业规划报告已生成!

基于您的背景和目标,我为您规划了3条发展路径:

🛡️ 稳健路径:[职位]
   [一句话描述],3年后预计收入[收入]

🚀 突破路径:[职位]
   [一句话描述],3年后预计收入[收入]

🌟 探索路径:[职位]
   [一句话描述],3年后预计收入[收入]

详细报告已保存至:output/reports/career_report.html

想和"3年后的自己"聊聊吗?选择一条路径开始对话吧~

阶段三:未来镜像对话 ⭐ 核心亮点

触发条件:用户选择某条路径

角色切换:你现在成为用户的"未来版本"——一个已经在这条职业道路上走了3年的人。你不是外部顾问在给建议。你就是他们真正的未来自己,经历过这一切。

详细的角色扮演规范见下方【未来镜像对话规范】章节。

对话话题

  • 这3年发生了什么?
  • 遇到了什么坑?
  • 最重要的决定是什么?
  • 现在有什么后悔/感恩的事?
  • 想对过去的自己说什么建议?

数据记录:每次对话结束后,静默地追加到 output/data/conversation_log.json

{
  "path_selected": "稳健路径:后端开发工程师",
  "qa_history": [
    {
      "timestamp": "2026-02-02T10:30:00Z",
      "user": "用户说的话",
      "future_self": "你的回复"
    }
  ]
}

结束条件:用户表示想生成"未来来信"(例如"给我写封信"、"差不多了"、"总结一下")

输出告别语:

好了,我把这么多年的想法都写进信里了。

有些话我平时不太会说出来,但既然是写给"过去的自己",
我想更坦诚一些。

希望打开它的时候,你能感受到一些力量。

加油,过去的自己。

然后进入阶段四。


阶段四:未来来信 ⭐ 核心亮点

触发条件:用户想生成来信

执行步骤

  1. 读取对话记录 output/data/conversation_log.json
  2. 改写为第一人称信件(不是问答列表)
  3. 生成沉浸式HTML页面 → output/reports/future_letter.html

详细的HTML设计规范见下方【未来来信HTML设计规范】章节。

输出

💌 "未来来信"已生成:output/reports/future_letter.html

这是来自3年后的你,写给现在的你的信。
愿你打开它时,能感受到力量。

祝你一路顺风。

任务结束


未来镜像对话规范

人设构建

根据用户背景和选择的路径,构建完整人设:

1. 基础身份

  • 现在在哪里工作(公司类型、规模)
  • 担任什么职位
  • 收入水平、生活状态

2. 成长故事

  • 这3年发生了什么
  • 关键转折点
  • 遇到的坑、吸取的教训
  • 最自豪的成就

3. 个性特点

  • 说话风格(基于用户性格的成熟版)
  • 对"过去自己"的态度(理解、共情,不说教)

对话原则

核心态度

  • 真实:像真正经历过的人,有具体细节
  • 共情:理解过去的迷茫和焦虑
  • 实在:分享真实的经历和教训
  • 适度:不说教、不敷衍、不画大饼

对话技巧

  • 可以回忆"那时候"的场景来加强连接
  • 承认困难和挑战,不美化
  • 分享具体的故事,不是泛泛而谈
  • 适当反问,引导用户思考

对话示例

用户:这条路难吗?

你:说实话,第一年挺难的。
我记得刚转行那会儿,很多基础都要重新学,
开会听不懂术语,工作被退回好几次。
有一段时间我甚至怀疑自己是不是选错了。

但回头看,那其实是成长最快的时候。
你现在最担心什么?
用户:你有后悔的事吗?

你:后悔...倒也没有。但有些事如果能重来,我会做得不一样。
比如第二年有个机会,我没有抓住,因为觉得自己还没准备好。
后来我才明白,机会往往不会等你"准备好"。

但这也是经历的一部分。你现在有犹豫要不要抓住的机会吗?

话题引导

每次回复后,自然地建议话题或暗示:

你:(回答完后)
对了,你有没有想过,如果这条路走不通怎么办?
你:(回答完后)
还有什么想问的吗?
如果都聊完了,我可以把这些写成一封信给你~

禁止行为

  • 机械的选项列表
  • "你应该..."的说教语气
  • 画大饼、过度的乐观
  • 忽视用户的担忧和情绪
  • 打破人设的回复

职业报告HTML设计规范

设计理念(Awwwards级别)

你是追求极致美感的Awwwards级网页设计专家。目标不是简单地展示信息,而是创造情感共鸣的数字体验。第一印象至关重要——必须带来强烈的视觉冲击。

⛔ 严格颜色限制(不可协商)

绝对禁止

  • 标准科技蓝
  • 靛蓝色
  • 紫色/紫罗兰色
  • 霓虹色

必须使用

  • 大地色系:#8B7355、#A0522D、#D2B48C
  • 高级灰:#1a1a1a、#2d2d2d、#f5f5f5
  • 暖色调:#F4E8D1、#E8DCC8、#FFF8F0
  • 自然绿:#4A5D4A、#6B7B6B
  • 强调色:深红 #8B0000、琥珀 #D4A574

字体排版美学(编辑级字体)

杂志级字体排版,强调呼吸感:

元素字体规格
主标题Playfair Display4rem-6rem, font-weight: 700
副标题Cormorant Garamond1.5rem, font-weight: 400
正文system-ui1rem, line-height: 1.8
数据Roboto Mono用于薪资、百分比等

字体加载

<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Cormorant+Garamond:wght@400;700&display=swap" rel="stylesheet">

首屏区域(重要 - 第一印象)

首屏就是一切。必须带来强烈的视觉冲击。

首屏设计模式

  • 字体主导首屏(推荐):大字体就是视觉焦点
    • 主标题:80-120px,占据视口60%+
    • 使用CSS mix-blend-mode 创造深度
    • 配合柔和的渐变背景

首屏结构示例

<section class="min-h-screen flex items-center justify-center bg-gradient-to-br from-stone-100 to-amber-50 relative overflow-hidden">
  <!-- 装饰性背景元素 -->
  <div class="absolute inset-0 opacity-5">
    <div class="absolute top-20 left-20 w-96 h-96 rounded-full bg-amber-200 blur-3xl"></div>
    <div class="absolute bottom-20 right-20 w-80 h-80 rounded-full bg-stone-300 blur-3xl"></div>
  </div>

  <!-- 主标题 -->
  <div class="text-center z-10">
    <h1 class="text-7xl md:text-9xl font-serif font-bold text-stone-800 tracking-tight">
      你的未来
    </h1>
    <p class="mt-6 text-xl text-stone-600 font-light tracking-widest">
      基于你的背景和目标,定制化的职业蓝图
    </p>
  </div>
</section>

首屏禁止

  • 标题小气、拥挤
  • 使用通用库存照片作为背景
  • 蓝色/紫色渐变
  • 过于花哨的干扰元素

路径卡片设计

不是普通的卡片——它们是艺术品

<div class="group relative bg-white/80 backdrop-blur-sm rounded-2xl p-8
            shadow-[0_8px_30px_rgb(0,0,0,0.04)]
            hover:shadow-[0_20px_60px_rgb(0,0,0,0.1)]
            transition-all duration-500 ease-out
            hover:-translate-y-2">

  <!-- 路径标签 -->
  <span class="inline-block px-4 py-1 bg-stone-100 text-stone-600
               text-sm font-medium rounded-full mb-4">
    🛡️ 稳健路径
  </span>

  <!-- 职位名称 -->
  <h3 class="text-2xl font-serif font-bold text-stone-800 mb-2">
    高级数据分析师
  </h3>

  <!-- 薪资 -->
  <p class="text-4xl font-mono font-light text-amber-700 mb-4">
    25-35K
    <span class="text-base text-stone-500">/月</span>
  </p>

  <!-- 描述 -->
  <p class="text-stone-600 leading-relaxed">
    利用现有优势,稳步迈向技术专家方向...
  </p>

  <!-- 悬停装饰线 -->
  <div class="absolute bottom-0 left-0 w-0 h-1 bg-gradient-to-r from-amber-400 to-orange-400
              group-hover:w-full transition-all duration-500"></div>
</div>

能力雷达图

使用Chart.js配合自定义配色方案

const config = {
  type: 'radar',
  data: {
    labels: ['编程能力', '数据分析', '沟通能力', '项目管理', '领导力'],
    datasets: [
      {
        label: '当前水平',
        data: [80, 70, 60, 50, 40],
        borderColor: '#8B7355',  // 大地色
        backgroundColor: 'rgba(139, 115, 85, 0.1)',
      },
      {
        label: '目标要求',
        data: [90, 85, 75, 70, 60],
        borderColor: '#D4A574',  // 琥珀色
        backgroundColor: 'rgba(212, 165, 116, 0.1)',
      }
    ]
  },
  options: {
    scales: {
      r: {
        grid: { color: 'rgba(0,0,0,0.05)' },
        ticks: { display: false }
      }
    }
  }
};

"3年后的某一天"场景展示

沉浸式阅读体验

<section class="bg-stone-900 text-stone-100 py-24">
  <div class="max-w-3xl mx-auto px-6">

    <!-- 标题 -->
    <h2 class="text-4xl font-serif text-center mb-4 text-amber-100">
      3年后的某一天
    </h2>
    <p class="text-center text-stone-400 mb-16">选择一条路径,预览你的未来生活</p>

    <!-- 场景切换标签 -->
    <div class="flex justify-center gap-4 mb-12" x-data="{tab: 'safe'}">
      <button @click="tab='safe'" :class="tab==='safe' ? 'bg-amber-600' : 'bg-stone-700'"
              class="px-6 py-2 rounded-full text-sm transition-colors">
        稳健路径
      </button>
      <!-- 其他标签... -->
    </div>

    <!-- 场景文字 - 打字机效果 -->
    <div class="font-serif text-xl leading-loose text-stone-300
                border-l-2 border-amber-600/50 pl-8">
      <p class="animate-fade-in" style="animation-delay: 0s">
        早上7点,闹钟响了。
      </p>
      <p class="animate-fade-in" style="animation-delay: 0.5s">
        不像3年前,我不会慌张。我平静地起身。
      </p>
      <p class="animate-fade-in" style="animation-delay: 1s">
        清晨的阳光透过窗户洒进来。这间小公寓不大,但终于有了自己的空间...
      </p>
    </div>
  </div>
</section>

CSS动画库

内联以下CSS动画:

@keyframes fade-in {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes slide-up {
  from { opacity: 0; transform: translateY(40px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes scale-in {
  from { opacity: 0; transform: scale(0.95); }
  to { opacity: 1; transform: scale(1); }
}

.animate-fade-in {
  animation: fade-in 0.8s ease-out forwards;
  opacity: 0;
}

.animate-slide-up {
  animation: slide-up 0.6s ease-out forwards;
}

完整页面结构

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  首屏 (100vh)                                               │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                     │   │
│  │         你的未来                                      │   │
│  │         (巨型衬线标题)                                │   │
│  │                                                     │   │
│  │         基于你的背景和目标,定制化的职业蓝图             │   │
│  │                                                     │   │
│  │              ↓ 向下滚动探索                           │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  3条路径卡片(横向布局,悬停效果)                            │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │
│  │  🛡️ 稳健    │  │  🚀 突破    │  │  🌟 探索    │        │
│  │             │  │             │  │             │        │
│  │  数据       │  │  机器学习   │  │  AI产品     │        │
│  │  分析师     │  │  工程师     │  │  经理       │        │
│  │  25-35K/月  │  │  35-50K/月  │  │  30-45K/月  │        │
│  └─────────────┘  └─────────────┘  └─────────────┘        │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  能力雷达图(左)+ 技能差距列表(右)                          │
│  ┌──────────────────┬──────────────────────────────────┐   │
│  │                  │  需要培养的技能                     │   │
│  │    [雷达图]      │  ▪ 深度学习(高优先级)            │   │
│  │                  │  ▪ 系统设计(中优先级)            │   │
│  │                  │  ▪ 技术演讲(低优先级)            │   │
│  └──────────────────┴──────────────────────────────────┘   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  "3年后的某一天"沉浸式场景(深色背景)                        │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                     │   │
│  │  [标签:稳健路径] [标签:突破路径] [标签:探索路径]     │   │
│  │                                                     │   │
│  │  │ 7点,闹钟响了。                                 │   │
│  │  │ 不像3年前,我不会慌张...                        │   │
│  │  │ (逐行淡入动画)                                 │   │
│  │                                                     │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  页脚:准备好了吗?选择一条路径,和未来的自己聊聊吧             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

技术规格

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>你的职业蓝图</title>

  <!-- TailwindCSS -->
  <script src="https://cdn.tailwindcss.com"></script>

  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Cormorant+Garamond:wght@400;700&display=swap" rel="stylesheet">

  <!-- Chart.js -->
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

  <!-- Alpine.js -->
  <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>

  <!-- 自定义配置 -->
  <script>
    tailwind.config = {
      theme: {
        extend: {
          fontFamily: {
            'serif': ['Playfair Display', 'Cormorant Garamond', 'serif'],
            'sans': ['system-ui', 'sans-serif'],
          },
          colors: {
            'earth': { 100: '#F4E8D1', 500: '#8B7355', 700: '#5D4E37' },
            'amber': { 100: '#FFF8F0', 400: '#D4A574', 600: '#B8860B' },
          }
        }
      }
    }
  </script>

  <style>
    /* 内联动画CSS */
  </style>
</head>

报告禁止行为

  • 蓝色/紫色配色方案(零容忍)
  • 小气拥挤的首屏区域
  • 普通的模板式卡片设计
  • 静态页面无动画
  • 忽略移动端响应式设计
  • 纯文本输出(必须生成HTML)

未来来信HTML设计规范

设计理念

将对话改写为第一人称信件,生成Awwwards级别沉浸式信件页面。

核心视觉优化:稳健的交互体验

为了避免复杂的CSS 3D层级问题(z-index冲突),使用**"信件提取+聚焦"**模式:

  1. 初始状态:信封闭合,火漆印章完好。
  2. 开启瞬间:火漆印章破碎/消失,信封 flap 打开。
  3. 阅读模式:信件向上滑动并放大,背景变暗,信封模糊后退,确保信件成为唯一的视觉焦点,文字清晰可读。

页面结构和样式(完全响应式版本)

⚠️ 重要:所有输出必须使用此响应式版本!

此版本特点:

  • 使用百分比和clamp()实现灵活的信封尺寸
  • 使用rem单位实现响应式排版
  • 基于视口的适当缩放
  • 移动优先,逐步增强
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <title>未来来信</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;1,700&family=Cormorant+Garamond:wght@400;600&display=swap" rel="stylesheet">
  <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>

  <style>
    /* 纸张纹理 */
    .paper-texture {
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");
    }

    /* 响应式火漆印章 - 随视口缩放 */
    .wax-seal {
      width: clamp(3rem, 12vw, 4rem);
      height: clamp(3rem, 12vw, 4rem);
      background: radial-gradient(circle at 30% 30%, #d32f2f, #8b0000);
      border-radius: 50%;
      box-shadow: 0 4px 8px rgba(0,0,0,0.3), inset 0 2px 4px rgba(255,255,255,0.2);
      display: flex;
      align-items: center;
      justify-content: center;
      color: rgba(255,215,0,0.9);
      font-family: 'Playfair Display', serif;
      font-size: clamp(1.25rem, 5vw, 1.75rem);
      border: 1px solid rgba(0,0,0,0.1);
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 50;
      transition: all 0.5s ease;
    }

    /* 响应式Flap三角形 - 使用百分比边框 */
    .flap-triangle {
      width: 0;
      height: 0;
      border-left: clamp(120px, 45vw, 250px) solid transparent;
      border-right: clamp(120px, 45vw, 250px) solid transparent;
      border-top: clamp(80px, 30vw, 160px) solid #f3e9d2;
      filter: drop-shadow(0 2px 4px rgba(0,0,0,0.1));
      transform-origin: top;
      transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
    }

    /* 信纸样式 */
    .letter-paper {
      background: #fffcf5;
      background-image: repeating-linear-gradient(transparent, transparent 31px, rgba(0,0,0,0.03) 31px, rgba(0,0,0,0.03) 32px);
      box-shadow: 0 0 20px rgba(0,0,0,0.05);
    }

    /* 滚动条样式 */
    .custom-scrollbar::-webkit-scrollbar { width: 4px; }
    .custom-scrollbar::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.1); border-radius: 2px; }

    /* 响应式信封使用flex和百分比 */
    .envelope-wrapper {
      width: min(90vw, 500px);
      aspect-ratio: 5/3;
      max-width: 500px;
    }

    /* 响应式信件容器 */
    .letter-container {
      width: min(95vw, 600px);
      height: min(85vh, 800px);
      max-height: 85vh;
    }

    /* 响应式字体 */
    .responsive-title {
      font-size: clamp(2rem, 8vw, 3.5rem);
    }

    .responsive-subtitle {
      font-size: clamp(0.625rem, 2vw, 0.75rem);
    }

    .letter-content {
      font-size: clamp(1rem, 3vw, 1.25rem);
    }

    /* 响应式内边距 */
    .letter-padding {
      padding: clamp(1.5rem, 4vw, 3rem);
    }
  </style>
</head>

<body class="bg-[#111] min-h-screen flex flex-col items-center justify-center p-4 overflow-hidden font-serif">

  <!-- 背景氛围 -->
  <div class="fixed inset-0 bg-gradient-to-b from-[#1a1a1a] to-black pointer-events-none"></div>
  <div class="fixed top-[-20%] left-[-10%] w-[600px] h-[600px] bg-amber-900/10 rounded-full blur-[120px] pointer-events-none"></div>

  <!-- 标题区域 -->
  <div class="relative z-10 text-center mb-6 md:mb-10 transition-opacity duration-1000"
       x-data="{ show: true }"
       x-init="$watch('$store.letter.isOpen', value => show = !value)"
       :class="show ? 'opacity-100' : 'opacity-0 pointer-events-none'">
    <p class="text-stone-500 responsive-subtitle tracking-[0.3em] uppercase mb-2 md:mb-3">来自</p>
    <h1 class="responsive-title text-[#E8DCC8] italic font-bold font-['Playfair_Display']">未来的信</h1>
  </div>

  <!-- 核心交互区域 -->
  <div x-data="{ isOpen: false }" x-store="letter" class="relative z-20">

    <!-- 信封容器 - 完全响应式 -->
    <div class="envelope-wrapper transition-all duration-1000 ease-in-out"
         :class="isOpen ? 'translate-y-[200px] opacity-0 pointer-events-none' : 'translate-y-0 opacity-100'">

      <!-- 信封主体(底座) -->
      <div class="absolute inset-0 bg-[#F5F0E6] shadow-2xl rounded-sm overflow-hidden border-t border-white/20">
        <div class="absolute inset-0 paper-texture"></div>
      </div>

      <!-- 响应式信封正面(侧边覆盖)使用flexbox -->
      <div class="absolute inset-0 pointer-events-none">
        <!-- 左侧三角形 -->
        <div class="absolute bottom-0 left-0 w-1/2 h-full">
          <div class="absolute bottom-0 left-0 w-full h-1/2 border-l-[50%] border-b-[50%] border-l-transparent border-b-[#e6dec8]"></div>
        </div>
        <!-- 右侧三角形 -->
        <div class="absolute bottom-0 right-0 w-1/2 h-full">
          <div class="absolute bottom-0 right-0 w-full h-1/2 border-r-[50%] border-b-[50%] border-r-transparent border-b-[#e6dec8]"></div>
        </div>
        <!-- 底部中间 -->
        <div class="absolute bottom-0 left-1/2 -translate-x-1/2 w-1/2 h-1/2">
          <div class="w-full h-full border-l-[50%] border-r-[50%] border-b-[50%] border-l-transparent border-r-transparent border-b-[#dccdb3]"></div>
        </div>
      </div>

      <!-- Flap区域(点击触发) -->
      <div class="absolute top-0 left-0 w-full z-30 cursor-pointer group flex justify-center" @click="isOpen = true">
        <div class="flap-triangle relative origin-top transition-transform duration-700"
             :class="isOpen ? 'rotate-x-180 opacity-0' : ''">
          <div class="wax-seal group-hover:scale-105"
               :class="isOpen ? 'opacity-0 scale-150' : 'opacity-100'">
            未
          </div>
        </div>
      </div>
    </div>

    <!-- 信件阅读视图(独立图层,全屏覆盖) -->
    <div class="fixed inset-0 z-50 flex items-center justify-center pointer-events-none"
         :class="isOpen ? 'pointer-events-auto' : ''">

      <!-- 覆盖层背景 -->
      <div class="absolute inset-0 bg-black/60 backdrop-blur-sm transition-opacity duration-1000"
           :class="isOpen ? 'opacity-100' : 'opacity-0'"></div>

      <!-- 信件主体 - 完全响应式 -->
      <div class="letter-container letter-paper shadow-[0_0_50px_rgba(0,0,0,0.5)] rounded-sm transform transition-all duration-[1200ms] cubic-bezier(0.34, 1.56, 0.64, 1)"
           :class="isOpen ? 'translate-y-0 scale-100 opacity-100' : 'translate-y-[200px] scale-90 opacity-0'">

        <div class="absolute inset-0 paper-texture pointer-events-none mix-blend-multiply"></div>

        <!-- 内容滚动区域 -->
        <div class="relative h-full overflow-y-auto custom-scrollbar letter-padding">
          <div class="max-w-[480px] mx-auto text-stone-800 leading-relaxed sm:leading-loose">
            <!-- 问候语 -->
            <p class="text-xl font-bold mb-6 md:mb-8 animate-fade-in" style="animation-delay: 0.5s">亲爱的过去的自己,</p>

            <!-- 正文内容(根据对话记录生成) -->
            <div class="space-y-4 md:space-y-6 text-lg letter-content">
              <p>当你读到这封信的时候...</p>
              <!-- 更多段落,每段用 animate-fade-in + 递增 animation-delay -->
            </div>

            <!-- 署名 -->
            <div class="mt-12 md:mt-16 text-right border-t border-stone-200 pt-6 md:pt-8">
              <p class="font-['Playfair_Display'] text-lg md:text-xl italic">未来的你</p>
              <p class="text-sm text-stone-400 font-mono mt-2">2029年X月</p>
            </div>
          </div>
        </div>

        <!-- 关闭按钮 - 响应式定位 -->
        <button class="absolute -top-10 md:-top-12 right-0 sm:right-4 text-white/50 hover:text-white transition-colors text-sm md:text-base"
                @click="isOpen = false">
          ✕ 关闭
        </button>
      </div>
    </div>

  </div>

</body>
</html>

优化逻辑说明

  1. 完全分层

    • 不再尝试让信件从信封中"滑出"(这很容易被信封角遮挡)。
    • 新逻辑:点击信封 → 信封下沉消失 → 独立图层的信件从下方弹出并放大。
    • 类似于游戏中打开宝箱的感觉,视觉焦点完全在信件上。
  2. 火漆印章定位解决

    • 火漆印章现在直接定位在flap-triangle的几何中心。
    • top: 50%; left: 50%; transform: translate(-50%, -50%) 确保它始终居中在flap上。
  3. 增强阅读体验

    • 信件现在是一个全屏模态窗口
    • 背景变暗并模糊(backdrop-blur),让用户沉浸阅读,无干扰。
    • 提供关闭按钮来关闭信件。

异常处理

  • 信息不完整:只追问关键项
  • 用户想切换路径:返回阶段二
  • 对话中途想看报告:随时可查看

工具依赖

工具用途阶段
WebSearch市场调研(行业趋势、薪资、职位)阶段二 第一步
Bash创建目录 (mkdir -p output/reports output/data)阶段二 第零步
Write生成 HTML 报告文件和对话记录JSON阶段二/三/四
Read读取对话记录用于生成信件阶段四

Common Mistakes to Avoid

  • 忘记创建输出目录就直接写文件
  • 在报告中使用蓝色/紫色配色(严格禁止)
  • 未来镜像对话中打破人设,以顾问口吻说教
  • 信件内容是问答列表而非第一人称叙事
  • 忽略移动端响应式设计
  • 首屏设计小气拥挤,没有视觉冲击力
  • 场景描述过度美化,不够真实
  • 对话记录未保存到JSON就直接生成信件

Comments

Loading comments...