skill-forge-hub 1.0.7 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.en.md +19 -0
  2. package/CHANGELOG.md +19 -0
  3. package/README.en.md +20 -7
  4. package/README.md +20 -7
  5. package/SKILLS_CATALOG.md +119 -0
  6. package/annual-report/SKILL.md +13 -3
  7. package/annual-report/resources/disk-and-html.md +1 -0
  8. package/annual-report/resources/reference.html +3 -3
  9. package/annual-report/resources/skillforge-guide.html +409 -0
  10. package/annual-report/resources/skillforge-guide.txt +132 -0
  11. package/annual-report/user-config.md +1 -1
  12. package/article-to-html/SKILL.md +13 -1
  13. package/article-to-html/resources/skillforge-guide.html +409 -0
  14. package/article-to-html/resources/skillforge-guide.txt +132 -0
  15. package/article-to-html/user-config.md +1 -1
  16. package/cli.js +60 -19
  17. package/commit-heatmap/SKILL.md +70 -0
  18. package/commit-heatmap/resources/collect.md +22 -0
  19. package/commit-heatmap/resources/generate.md +15 -0
  20. package/commit-heatmap/resources/html-rules.md +21 -0
  21. package/commit-heatmap/resources/reference.html +228 -0
  22. package/commit-heatmap/resources/skillforge-guide.html +409 -0
  23. package/commit-heatmap/resources/skillforge-guide.txt +132 -0
  24. package/commit-heatmap/resources/usage-guide.md +23 -0
  25. package/commit-heatmap/user-config.md +12 -0
  26. package/daily-report/SKILL.md +12 -2
  27. package/daily-report/resources/disk-and-html.md +1 -1
  28. package/daily-report/resources/reference.html +1 -1
  29. package/daily-report/resources/skillforge-guide.html +409 -0
  30. package/daily-report/resources/skillforge-guide.txt +132 -0
  31. package/daily-report/user-config.md +1 -1
  32. package/data-prepper/SKILL.md +54 -0
  33. package/data-prepper/resources/clean-rules.md +18 -0
  34. package/data-prepper/resources/overview.md +17 -0
  35. package/data-prepper/resources/read-data.md +13 -0
  36. package/data-prepper/resources/skillforge-guide.html +409 -0
  37. package/data-prepper/resources/skillforge-guide.txt +132 -0
  38. package/data-prepper/resources/usage-guide.md +24 -0
  39. package/data-prepper/user-config.md +11 -0
  40. package/decision-log/SKILL.md +53 -0
  41. package/decision-log/resources/index.md +21 -0
  42. package/decision-log/resources/record.md +19 -0
  43. package/decision-log/resources/skillforge-guide.html +409 -0
  44. package/decision-log/resources/skillforge-guide.txt +132 -0
  45. package/decision-log/resources/usage-guide.md +23 -0
  46. package/decision-log/user-config.md +9 -0
  47. package/deck-stage/SKILL.md +14 -11
  48. package/deck-stage/resources/cover-template.html +1 -1
  49. package/deck-stage/resources/skillforge-guide.html +409 -0
  50. package/deck-stage/resources/skillforge-guide.txt +132 -0
  51. package/docs/architecture.en.md +2 -1
  52. package/docs/architecture.md +2 -1
  53. package/docs/articles/ai-daily-report-correct-pose.md +39 -0
  54. package/docs/articles/ai-prompt-management-skill-pouch.md +37 -0
  55. package/docs/directory-submission.md +106 -0
  56. package/docs/install.en.md +57 -1
  57. package/docs/install.md +57 -1
  58. package/docs/usage-examples.en.md +50 -0
  59. package/docs/usage-examples.md +50 -0
  60. package/magic-deck/SKILL.md +15 -6
  61. package/magic-deck/resources/deck-spec.md +1 -1
  62. package/magic-deck/resources/reference.html +1 -1
  63. package/magic-deck/resources/skillforge-guide.html +409 -0
  64. package/magic-deck/resources/skillforge-guide.txt +132 -0
  65. package/magic-deck/user-config.md +1 -1
  66. package/meeting-minutes/SKILL.md +11 -1
  67. package/meeting-minutes/resources/disk-and-html.md +1 -0
  68. package/meeting-minutes/resources/reference.html +1 -1
  69. package/meeting-minutes/resources/skillforge-guide.html +409 -0
  70. package/meeting-minutes/resources/skillforge-guide.txt +132 -0
  71. package/meeting-minutes/user-config.md +1 -1
  72. package/meta-forge/SKILL.md +13 -3
  73. package/meta-forge/resources/forge-rules.md +4 -1
  74. package/meta-forge/resources/skillforge-guide.html +409 -0
  75. package/meta-forge/resources/skillforge-guide.txt +132 -0
  76. package/meta-forge/user-config.md +1 -1
  77. package/monthly-report/SKILL.md +11 -1
  78. package/monthly-report/resources/disk-and-html.md +1 -0
  79. package/monthly-report/resources/reference.html +1 -1
  80. package/monthly-report/resources/skillforge-guide.html +409 -0
  81. package/monthly-report/resources/skillforge-guide.txt +132 -0
  82. package/monthly-report/user-config.md +1 -1
  83. package/one-pager/SKILL.md +83 -0
  84. package/one-pager/resources/content.md +18 -0
  85. package/one-pager/resources/design-process.md +117 -0
  86. package/one-pager/resources/generate.md +28 -0
  87. package/one-pager/resources/html-rules.md +66 -0
  88. package/one-pager/resources/reference.html +1290 -0
  89. package/one-pager/resources/skillforge-guide.html +409 -0
  90. package/one-pager/resources/skillforge-guide.txt +132 -0
  91. package/one-pager/resources/usage-guide.md +37 -0
  92. package/one-pager/resources/user-template-example.html +63 -0
  93. package/one-pager/user-config.md +14 -0
  94. package/package.json +12 -2
  95. package/prompt-pouch/SKILL.md +16 -16
  96. package/prompt-pouch/resources/reference.html +181 -43
  97. package/prompt-pouch/resources/skillforge-guide.html +409 -0
  98. package/prompt-pouch/resources/skillforge-guide.txt +132 -0
  99. package/prompt-pouch/resources/usage-guide.md +3 -3
  100. package/quarterly-report/SKILL.md +11 -1
  101. package/quarterly-report/resources/disk-and-html.md +1 -0
  102. package/quarterly-report/resources/reference.html +1 -1
  103. package/quarterly-report/resources/skillforge-guide.html +409 -0
  104. package/quarterly-report/resources/skillforge-guide.txt +132 -0
  105. package/quarterly-report/user-config.md +1 -1
  106. package/release-notes/SKILL.md +54 -0
  107. package/release-notes/resources/collect.md +17 -0
  108. package/release-notes/resources/publish-checklist.md +11 -0
  109. package/release-notes/resources/skillforge-guide.html +409 -0
  110. package/release-notes/resources/skillforge-guide.txt +132 -0
  111. package/release-notes/resources/usage-guide.md +25 -0
  112. package/release-notes/resources/write.md +27 -0
  113. package/release-notes/user-config.md +15 -0
  114. package/skill-doctor/SKILL.md +53 -0
  115. package/skill-doctor/resources/checks.md +27 -0
  116. package/skill-doctor/resources/report.md +26 -0
  117. package/skill-doctor/resources/skillforge-guide.html +409 -0
  118. package/skill-doctor/resources/skillforge-guide.txt +132 -0
  119. package/skill-doctor/resources/usage-guide.md +22 -0
  120. package/skill-doctor/user-config.md +9 -0
  121. package/spec-doc2spec/SKILL.md +13 -9
  122. package/spec-doc2spec/resources/skillforge-guide.html +409 -0
  123. package/spec-doc2spec/resources/skillforge-guide.txt +132 -0
  124. package/spec-doc2spec/user-config.md +1 -1
  125. package/spec-spec2doc/SKILL.md +13 -12
  126. package/spec-spec2doc/resources/skillforge-guide.html +409 -0
  127. package/spec-spec2doc/resources/skillforge-guide.txt +132 -0
  128. package/spec-spec2doc/user-config.md +1 -1
  129. package/team-report-collector/SKILL.md +70 -0
  130. package/team-report-collector/resources/collect.md +23 -0
  131. package/team-report-collector/resources/generate.md +14 -0
  132. package/team-report-collector/resources/html-rules.md +22 -0
  133. package/team-report-collector/resources/reference.html +384 -0
  134. package/team-report-collector/resources/skillforge-guide.html +409 -0
  135. package/team-report-collector/resources/skillforge-guide.txt +132 -0
  136. package/team-report-collector/resources/usage-guide.md +25 -0
  137. package/team-report-collector/user-config.md +12 -0
  138. package/template/SKILL.md +2 -2
  139. package/template/user-config.md +1 -1
  140. package/twin-docs/SKILL.md +53 -0
  141. package/twin-docs/resources/glossary.md +12 -0
  142. package/twin-docs/resources/skillforge-guide.html +409 -0
  143. package/twin-docs/resources/skillforge-guide.txt +132 -0
  144. package/twin-docs/resources/sync-check.md +15 -0
  145. package/twin-docs/resources/translate.md +20 -0
  146. package/twin-docs/resources/usage-guide.md +24 -0
  147. package/twin-docs/user-config.md +11 -0
  148. package/weekly-report/SKILL.md +12 -2
  149. package/weekly-report/resources/disk-and-html.md +1 -1
  150. package/weekly-report/resources/reference.html +1 -1
  151. package/weekly-report/resources/skillforge-guide.html +409 -0
  152. package/weekly-report/resources/skillforge-guide.txt +132 -0
  153. package/weekly-report/user-config.md +1 -1
@@ -8,7 +8,7 @@
8
8
  - 每次生成落盘哪些文件读取顶部「默认配置」的 `FORMATS`(默认 md/txt/html/content-png 四个,md/txt/html 文件名 `daily-report-YYYYMMDD.<格式>`、截图文件名 `daily-report-YYYYMMDD-content.png`;txt 为纯文本版);`DISK: false` 时全部不落盘
9
9
  - 对话中照常输出 md 正文(不受 FORMATS 影响);`OPEN_HTML: true` 且本次落盘了 html 时,自动打开浏览器(macOS:`open <html文件>`;Windows PowerShell:`Start-Process <html文件>`)
10
10
  - FORMATS 含 content-png 时额外生成内容区截图 `daily-report-YYYYMMDD-content.png`:整页内容区截图一张(头部标题卡片 + 今日任务进度/明日计划/风险阻塞点三张分节卡片整体截出,头部卡片必须带上,图片四周保留对称合适的外边距约 40px 留白):html 内置 `?shot=content` 参数(页面 JS 检测后仅统一 body 四周 padding 40px、除右下角主题换肤坞外不隐藏任何元素(头部标题卡/三张分节卡/页脚全部保留),正常浏览不受影响);用 Chrome headless 访问带参 URL 截图(路径按系统选:macOS=`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`;Windows 按序探测 `C:\Program Files\Google\Chrome\Application\chrome.exe` → `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe` → `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe`,经 node child_process 执行 `--headless --disable-gpu --no-sandbox --hide-scrollbars --user-data-dir=<临时目录> --screenshot=<png路径> --window-size=760,<估算高度> --virtual-time-budget=4000 "file:///<html路径>?shot=content"`(Windows 下 URL 写作 file:///C:/...,用 node url.pathToFileURL 生成),跑完删除临时目录;禁止用 `--headless=new`(单例模式会静默失败生成占位图);若 Chrome 不存在则换 Edge(macOS=`/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`;Windows=`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe` → `C:\Program Files\Microsoft\Edge\Application\msedge.exe`),都找不到时跳过截图并在对话注明);高度按整页内容区估算(body 上下留白~80 + 头部标题卡片~180 + 每节卡片(45+条目数×70+40,含各卡片 margin-bottom 18) + 余量~15,底部留白仅 body 下 padding 40px、与顶部对称,余量只防截断不可多给),截图后用 Read 校验:头部标题卡片与三张分节卡片整体完整在图内、四周留白对称合适、不截断,底部留白过大则减高度、截断则加高度重截
11
- - md/txt/html 均含生成时间行,精确到时分秒(如 2026-10-22 19:10:38);HTML 采用参考图式深蓝面板风格 + ask 同款发光动效的融合样式(不换其它色系,颜色全部用 CSS 变量统一主题令牌:29 令牌 × 5 主题(tech 深蓝科技(默认,色值与旧 ask 色板一致)/biz 浅色商务/mono IDEA 黑亮(JetBrains New UI Dark 官方色系:编辑区 #1e1f22 + 面板 #2b2d30)/light IDEA 白亮(IntelliJ Light 官方色系:白编辑区 + 浅灰面板)/warm 温暖渐变,html[data-theme] 运行时切换;12 核心契约 --bg/--bg2/--panel/--panel-solid/--text/--muted/--accent/--accent2/--border/--glow/--title-grad/--tag-bg + 报告扩展 --glow-soft/--scan/--scan-dim/--heat/--green/--orange/--rose + 流星粒子 --cp-a/--cp-b/--cp-tip/--cp-glow0/--cp-glow1 与 --cpd-a/--cpd-b/--cpd-tip/--cpd-glow0/--cpd-glow1(跨主题统一白色系:本体白热尖端 + 柔和白青光晕,深浅两带只差光晕强度);生成时按 THEME 配置写 data-theme 定默认,页面右下角换肤坞五色点随点随换、localStorage 记忆(键按页内嵌唯一 ID 隔离、多份产物互不串台、改名/移动目录记忆不丢;生成时头部写 `<meta name="daily-id" content="<UUID>">`,每次新 UUID)、?shot 截图模式与打印隐藏):禁用任何 CDN 与外部网络引用(@import、外链 CSS/JS/图片/网络字体一律禁止,页面必须公司内网离线双击可打开、零外部依赖),字体全用系统本地字体栈 ui-monospace/'SF Mono'/SFMono-Regular/Menlo/Consolas/'Microsoft YaHei'/monospace(macOS 走 SF Mono/Menlo、Windows 走 Consolas,中文回退 Microsoft YaHei;字母数字等宽自带科技感),正文同栈 400、标题同栈 900 渐变文字(var(--title-grad),background-clip:text,发光用 ask-result 模板同款 text-shadow 双圈(titleGlow 动画 3s 呼吸:基线 20px/.4 + 60px/.15 ↔ 峰值 30px/.7 + 80px/.3,h1 留静态基线;24px 小字同参数观感与官方一致,禁止改三圈小模糊——会糊在字内边界不清));页面背景纯深蓝黑 #0a1929(参考图同款色值)、正文浅青 #bae6fd、全屏极轻微噪点纹理(body::before fixed 覆盖层,background-image 用 SVG feTurbulence data URI(<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(#n)'/></svg>),opacity .04,pointer-events:none,z-index 0 在卡片之下,消除大面积纯色死板感),body 纯 #0a1929 背景不加径向辉光(onboarding 同款);全屏背景叠加 科技仪表盘同款三层科技感底纹:60px 网格底纹(.grid-pattern fixed inset 0,background-image linear-gradient(var(--scan-dim) 1px, transparent 1px) 纵横双向、background-size 60px 60px、z-index 0)+ 彩色星点层(.stars fixed inset 0,8 个 1-1.5px 星点 radial-gradient(1px 1px at <位置>, <色>, transparent) 多背景组合:白色 rgba(255,255,255,.3-.4) 与青色 rgba(0,240,255,.45-.5)、紫色 rgba(168,85,247,.4)、绿色 rgba(0,255,136,.4),位置分散 10%-90%,z-index 0)+ 全屏 2px 周期细扫描线(.scanlines fixed inset 0,repeating-linear-gradient(0deg, transparent 0 2px, var(--scan-dim) 2px 4px),z-index 999 罩最上层,pointer-events none;三层均 fixed 不随滚动,营造星野+网格+扫描的科技氛围,不破坏参考图纯深蓝黑质感);内容区宽度响应窗口自适应(.wrap width:clamp(640px, 60%, 1200px) + margin:0 auto:最小 640px、最大 1200px、中间按窗口 60% 缩放,页面左右留白对称);头部卡片参考图式实心深蓝底(var(--panel-solid) 实心 #0b1e37,略亮于背景、更偏蓝)+ 8px 周期细密水平条纹(background-image 叠加 repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px))+ 上下边缘 1px 微亮描边(border-top/border-bottom 1px solid #0f3350,参考图「边缘点亮一线」效果,与 ask 四边浮光扫描线动画共存、动画层在上)+ 圆角 6px + 外发光与 inset 内发光(0 0 20px rgba(14,165,233,.08) + inset 0 1px 24px rgba(14,165,233,.04)),overflow:hidden,标题区仅标题与青色胶囊生成时间徽章(badge 后直接收尾,不加底部细线/装饰光带,避免悬空多余线);标题与徽章下加 TL;DR 一句话摘要行(.summary-line flex 布局 max-width 540px 居中:左侧 .summary-tag「TL;DR」青色小标签 系统等宽 10px 粗体、rgba(14,165,233,.35) 细边圆角 4px、rgba(14,165,233,.07) 底、青色 text-shadow 光晕 + 右侧 .summary-text 12.5px 浅青正文 line-height 1.75 text-align left;摘要带判断给结论——整体节奏/主要风险/明日重点,不罗列条目);分节卡片同参考图式质感(实心深蓝底 #0b1e37 + 8px 周期细密水平条纹 + 上下边缘 1px 微亮描边 #0f3350 + 圆角缩小至 6px + overflow:hidden,保留阴影与 inset 内发光,去掉原全框青色细边),每张分节卡片左侧带参考图式左缘色条(8px 宽竖线贯穿整卡高度,节色渐变带同色光晕:完成 linear-gradient(180deg,#5eead4,#14b8a6) / 计划 linear-gradient(180deg,#fdba74,#f97316) / 风险 linear-gradient(180deg,#fda4af,#e11d48),box-shadow 0 0 12px 同色 30% 透明度;卡片内容 padding-left 24px 避让色条),节标题带 18px 同色渐变 SVG 语义图标+文字微光晕(h2 flex 布局 gap 10px,图标替换原竖向短条:完成=圆形对勾、计划=日历、风险=三角警示;inline SVG 内 linearGradient 同节色系渐变 完成 #5eead4→#14b8a6 / 计划 #fdba74→#f97316 / 风险 #fda4af→#e11d48 + 白色描边细节 + drop-shadow 同色光晕;标题色:完成青绿 #5eead4、计划橙 #fdba74、风险玫红 #fda4af + h2 文字同色双圈发光字 3s 呼吸 secGlow 动画(基线 14px/.45+40px/.18 ↔ 峰值 22px/.75+60px/.3,各节动画用本节主题色,与主标题同节奏;仅节标题文字发光,SVG 图标与日期徽章不加))+ 「今日任务进度」节标题右侧带目标日期小胶囊徽章 sec-date(margin-left:auto 推右、flex:0 0 auto;11px var(--muted) 字、padding 3px 10px、圆角 999px、青色细边 var(--border)、背景 var(--tag-bg),如 2026-10-22;仅完成节显示、计划/风险节不加,让截图自带具体日期)+ 条目 3D 立体圆球序号徽章(28px 白字,立体感克制的柔和球面——弱化版三段收窄色阶:受光球面渐变 radial-gradient(受光点 circle at 30% 28%,浅亮→主色→深色:完成 #7dd9cf→#14b8a6→#0d9488、计划 #fdc69a→#f97316→#ea580c、风险 #fdaab4→#f43f5e→#e11d48)+ inset 右下内暗影 -3px -4px 6px rgba(0,0,0,.3) 与左上内亮缘 1px 2px 3px rgba(255,255,255,.2) + ::before 左上椭圆高光点(position:relative 定位,top 5px/left 7px、8x6px、rotate -28deg、白色径向渐隐 rgba(255,255,255,.7)→0)+ 底部投影 0 2px 4px rgba(0,0,0,.25) 与同色光晕 0 0 8px + 数字 text-shadow 0 1px 1px rgba(0,0,0,.25) 贴球面) + 条目内部留白:li 水平 padding 10px(hover 淡青底 var(--tag-bg) 与文字间留 10px 间距)+ 序号圆形徽章 28px(数字距圆边约 8px,不贴圆边)+ 列表轻微缩进 12px(ol/ul padding 0 12px)+ 描述与进度双层错落排版(描述 15px、进度用时 12px 青灰小字 #5b7fa5、百分比加粗强调且两侧 margin 0 2px 呼吸留白、进度与用时之间用「 - 」连接(与 md/txt 版一致,不用 · )、条目间青色虚线分隔);风险节条目四环展开:desc 主行(问题)+ meta 影响行(12px 青灰小字「影响:xxx」)+ .advice 建议行(12px 青色小字,「建议:」加粗前缀,margin-top 6px)+ .owner 责任与时间行(12px 紫色 #a78bfa 小字,「责任与时间:」加粗前缀,margin-top 4px,口述无责任信息时省略此行);md/txt 版同条目依次写问题、影响、建议、责任与时间(第四项口述有时必写),文本格式不变+ 青色渐变 40px 大胶囊「一键复制」按钮(var(--accent)→var(--accent2),30px 青色光晕,hover 45px 光晕上浮,模板同款;flex 居中布局,内置 16px 内联 SVG 双矩形复制图标(白色 currentColor 描边、图标与文字 gap 8px、禁用 emoji 图标),复制成功后图标切换为对勾 SVG、文字短暂变「已复制」);头部 指令面板风格发光特效(与参考面板完全同款):四边 1px 青色浮光线,渐变 transparent→var(--accent)→transparent 整条线平移扫动(亮段长、无 box-shadow 光晕,四边亮段构成顺时针环绕循环,与 ask 看板卡片完全同款(上横线 scanX 左→右、右竖线 scanY 上→下、下横线 scanX-rev 右→左、左竖线 scanY-rev 下→上,四线同周期同速度 3s linear 单向平移);实现为 1px 整线渐变元素平铺整条边(上/下横线 left:0/right:0 + height:1px + linear-gradient(90deg, transparent, var(--accent), transparent);左/右竖线 top:0/bottom:0 + width:1px + linear-gradient(180deg, transparent, var(--accent), transparent)),随线体 translateX/translateY 平移 ±100%(相对线长):scanX -100%→100%、scanX-rev 100%→-100%、scanY -100%→100%、scanY-rev 100%→-100%;亮段(线中央渐变段)完整穿越卡片后消失于两端界外(卡片 overflow:hidden 裁剪),带「出现→穿越→消失」节奏;禁止自创 background-position 滚动/常驻辉光/往返摆动/亮段半嵌常驻等变体)+ 顶部光斑 ask 同款 cardGlow(radial-gradient ellipse at 50% 10% var(--glow)→transparent 70%,opacity .5→1 + scale 1→1.6,transform-origin top center,3s 循环;头部卡片与每张分节卡片内均放 .card-glow 光斑层,覆盖整卡顶部)+ 标题文字青色光晕呼吸(text-shadow 双圈 3s 循环);入场动画:头部淡入下滑、卡片依次错峰上浮淡入(完成 0.26s/计划 0.4s/风险 0.54s);滚动入场:初始视口外的卡片滚到视口才上浮渐显(html.js 门控 + IntersectionObserver,translate 独立属性不碰 transform——hover 3D 偏转零冲突,stagger 70ms 封顶 280ms、入场完即清 delay 不拖慢 hover 偏转,2s 兜底强制显示;无 JS/打印/截图模式一律全显);窄屏收敛:<680px 视口 wrap 满宽流式、边距收窄、h1 统一 26px(clamp 640px 下限在窄窗不再横向溢出)、按钮弹入(卡片入场动画 fadeDown/fadeUp/riseIn 的 fill-mode 必须用 backwards 严禁 both——both 使动画结束后最后一帧 transform:none 永久覆盖 hover 的 3D 偏转 transform,CSS 动画 applied 值优先级高于普通声明,hover 偏转会完全失效;cometFade 与按钮 pop 保持 both 不受此限);hover 微交互:卡片上浮+阴影加深+inset 发光增强、条目淡青底、序号徽章放大微旋(li:hover .idx transform:scale(1.18) rotate(-4deg)、球内数字放大 12→14px、数字必须用 <b> 包裹(.idx b{display:inline-block;transition:transform .2s ease})+ li:hover .idx b{transform:rotate(-6deg)} 数字在球内独立微旋;用户澄清 hover 变大的字体仅小球内数字,desc 正文保持 15px 不变不加斜体;销售 demo 版类名 .num:li:hover .num scale(1.22) rotate(-6deg)、数字 13→15px 同样 <b> 包裹 + rotate(-6deg))、按钮上浮/按压回缩;页脚 10px muted 文字(无分隔线、不加边框),署名固定 GENERATED BY AI TEAM · <目标日期>(日期动态,如 GENERATED BY AI TEAM · 20261022);三段分节列表,任务点保持中文顿号序号;当日节奏条(.day-strip 任务进度节内三时段横条:上午/下午/晚上按提交数分段高亮、.strip-item position:relative、hover 弹出 .strip-tip 浮层(bottom:calc(100% + 6px) 向上弹出避卡片 overflow:hidden 裁剪;position:absolute、translateX(-50%) scale(.85)→hover scale(1)、opacity 0→1、pointer-events:none、z-index:30、background:#0b2a4a、border:1px solid rgba(14,165,233,.4)、圆角、小字两行「时段 · N 次提交」+主题词));数字选择:用户口述的业务结果指标(响应时间/错误率/转化率/成功率等)优先写入,提交统计(提交数/文件数/行数)仅在无业务指标时兜底,两者都有时业务指标在前、提交统计后置或省略;数字凡有对比基准必带(环比/同比/目标完成度至少其一,如「+18%」「达目标 90%」),无基准来源时不作要求 - 节奏条下量化指标行(.day-metrics flex 居中 gap:22px、10.5px muted 字、数字用 .day-metrics b 青色等宽加粗(3 次提交 / 56 个文件 / +1.8k −285 行,删行数字 .minus 用 --rose 玫红);纯文字模式无 提交数据时省略此行);进度条终点圆点 + 流星扫描填充(.pbar-fill 必须 display:block + position:relative——行内 span 忽略 width/height 会变成 0×0,填充与圆点全部不可见;.pbar-fill::before 终点圆点 7px 径向渐变圆 right:0 + transform:translate(50%,-50%) 骑在填充右缘(done 青绿 radial-gradient(circle at 35% 30%,#a7f3d0,#2dd4bf 62%,#0d9488)、plan 橙 #fdba74/#f97316/#c2410c,box-shadow 同色光晕、z-index:2;.pbar-track/.pbar-fill 均不得加 overflow:hidden——圆点右半伸出填充 3.5px 骑边渲染);流星 = JS 注入 .pbar-track 内的 .pbar-sweep(absolute 左贴轨道、width:0 起点隐藏、height:16px、transform:translateY(-50%) 垂直居中、z-index:1、pointer-events:none)+ sweep 右缘 .pbar-comet 光体(absolute left:100% 贴 sweep 右缘随宽度移动,严禁 right:62%/right:100% 等右侧定位——彗星会停在轨道中段、进度 100% 时也到不了终点;子弹头形光核:20×11px 横向泪滴 border-radius:55% 100% 100% 55% / 85% 100% 100% 85%(右端全圆弧=前进弹头、左端 55%/85% 大圆角=后部饱满钝圆接尾不露尖(比 35%/60% 更钝,禁尖窄收尾),严禁 13×7 小椭圆方块感、严禁 20px 大圆球形态)background 三层:底层 linear-gradient(90deg,rgba(224,254,255,.3),rgba(224,254,255,.6) 55%,#fff) 铺底(形状内不得透底)+ 右前缘白青冷光 radial-gradient(ellipse 70% 85% at 74% 45%,rgba(224,254,255,.85),transparent) + 青白核 radial-gradient(circle 12px at 66% 50%,#fff,rgba(224,254,255,.95) 45%,rgba(224,254,255,.5) 75%,transparent)(circle 半径必须显式 12px——自动半径按最远角计、四角渐隐至透明会露出轨道深色背景成「黑三角」,显式半径让光核饱满),box-shadow 双圈柔光 0 0 5px 2px rgba(186,230,253,.75) + 0 0 12px 4px rgba(224,254,255,.35)——光晕总高控制在 2~2.5 倍条高以内,不用 drop-shadow;整体前大后收窄的扫帚流星:头部 20×11 大头 → ::after 彗尾 right:40%、84×12px 细长锥形拖尾 linear-gradient(90deg,transparent,rgba(224,254,255,.25) 26%,rgba(224,254,255,.75) 64%,rgba(255,255,255,.9)) + clip-path:polygon(4% 40%,16% 24%,100% 0,100% 100%,16% 76%,4% 60%)(左端收成 2.4px 高平口钝头、右端全高平接光核、16% 处起渐收——远窄近宽,禁矩形方块形、禁 1px 尖点)+ blur 1px + z-index:0——长度约 4 倍头宽;剥落粒子流(JS 为每颗 .pbar-comet 注入 30 个 span.cp,绝对定位在光核中后段出生):30 粒三带分布(上方飘散带 17 粒 by -6~-0.5 向上飘散 + 中部渗漏带 6 粒 by +0.5~+5.2 + 深色带 7 粒 by +5.5~+8 贴光核下缘)椭圆小块前大后小(3.2×2.2 → 1.2×0.9px,宽高不等 + rotate -12°~12° 不规则椭圆,禁用标准圆形、禁用 box-shadow 静态星屑——静态点没有剥落飘散的生命感),出生点从头部稍靠后(left 9~17px)开始,y 紧贴中心水平线(中线 ±2.5px,各粒角度基本一致不散乱),cpFlow 1.5~1.8s cubic-bezier(.2,.05,.55,1) infinite + 负延迟 -0.1~-1.5s 错峰:0%→10% 淡入渐现(渐渐出现)、10%→100% 沿水平线加速向后飘 translate3d(-45~-62px, dy, 0)(加速向后)、55% 后 opacity 渐隐 + scale(.16) 渐小(向尾部消失)、dy 三带取值:上方 -3.5~-7 上飘展开(用户反馈上方粒子少且飘散不够远,13→17 再加密、dy 再扩大,下方相对合适不增)、中部 +1.5~+3.5 向下渗漏、白带 +5~+7 向后甩出(全白发光带 cp-deep 与浅带同为白色系(本体白热 + 柔和白青光晕、光晕略强分层,跨主题统一)、dur 1.06~1.25s 更久停留),box-shadow 光晕 0%→55% 增强再减弱(每粒生命期一次明灭=呼吸发光,周期 1.5~1.8s 与主体 1.8s 呼吸非整数倍错开,禁止同频齐步闪);粒子 z-index:1 在彗尾之上(尾 z-index:0)、opacity:0 起步呼吸发光分层不同频:主体光核 1.8s 与彗尾 2.4s 周期呼吸(comet 双动画 cometFade + glowPulse 1.8s ease-in-out infinite:纯白晕光晕 0%↔50% 周期扩缩(50% 时白晕最盛 = 白色呼吸,扫过 1.1s 内可见一轮明暗);::after 挂 tailGlow 2.4s ease-in-out infinite:filter blur(1px) brightness(1) ↔ blur(1.5px) brightness(1.28) 亮度呼吸),粒子 1.5~1.8s 明灭与主体 1.8s 呼吸非整数倍错开(视觉错落不同频);opacity:0 常驻隐藏);.pbar-track.sheen-on 时 sweep transition:width 1.1s cubic-bezier(.3,.8,.4,1) 生长(comet 贴 sweep 右缘 left:100% 随宽度从左扫到右),comet 的 animation 严禁写在 .pbar-comet 基类(基类动画页面加载 t=0 即播、1.1s 后 both 定格 opacity:0,而扫动 setTimeout 1.5s 才开始——时序错位会让流星全程不可见);必须挂在 .pbar-track.sheen-on .pbar-comet 选择器上(cometFade 1.1s ease-out both, glowPulse 1.8s ease-in-out infinite 逗号并列双动画:cometFade 7% 淡入、86% 保持、100% 到终点消失、glowPulse 白晕呼吸循环;::after 彗尾另挂 tailGlow 2.4s ease-in-out infinite 亮度呼吸),靠 playSweep 内 remove/add sheen-on 类切换重启动画,与 dotPulse 同机制;扫动终点按各条目标进度 data-w:sheen 内 sweep inline width 终点 = data-w(done 条 100% 扫满轨道、有进度的 plan 条如 30% 即 30% 停在进度点不越界)——sweep 宽度过渡与 fill 宽度过渡同参数天然同步,comet 与彗尾/星屑无需任何反向补偿(scaleX 压缩方案会把彗尾一同拉长数倍,禁用);填充同步生长:入场 sheen(el,'wave') 给 fill 设 transition width 1.1s 同 easing + width 0→data-w,与流星同步——流星扫到哪、填充长到哪,流星到终点消失、留下各自进度,之后填充保持不再变化;圆点 .pbar-done/.pbar-plan .pbar-track.sheen-on .pbar-fill::before animation:dotPulse 1.1s(90% 处 filter:brightness(2) + 白光 drop-shadow 爆亮,done/plan 通用)流星到达终点时爆亮——dotPulse 选择器必须与 JS 加类位置一致:JS 把 sheen-on 加在 .pbar-track 上,严禁写 .pbar-fill.sheen-on::before(JS 从不在 fill 上加类,选择器永不命中、爆亮不触发);流星注入与入场波浪覆盖完成条 + 有进度的计划条(JS 遍历 .pbar-track:plan 且进度<=0 的条 return 跳过——0 进度的计划条不注入流星、不扫、保持静态),其余条 data-w 记录目标进度后 fill 归零;入场波浪:setTimeout 1500+i*420ms 逐条 sheen(el,'wave') 错峰(上→下必然可见);hover 重扫:li 上 mouseenter+pointerenter 双监听,sheen(el,'hover') 只 remove/add fill 与 track 的 sheen-on 类重放流星扫过(comet 再扫一遍,0 进度的 plan 条同样跳过),fill 宽度与颜色完全不重置(进度不再变化),sheen(el,src) 按来源独立节流(wave 1s / hover 300ms);重启动画 remove 类→sweep inline 归零 width:0(transition:none 无过渡)→void offsetWidth 强制回流→同步 add 类→sweep inline 目标 width=data-w(恢复 transition;双 RAF 在 headless 虚拟时间下不推进,不可用));液态玻璃(@supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) 内 .header-card/.section 加 backdrop-filter:blur(16px) saturate(1.35) + background-color:var(--panel),不支持的老浏览器走默认实心深蓝不白屏);CRT 扫描光带(.scanband position:fixed、left:0/right:0、height:150px、linear-gradient(180deg,transparent,var(--scan-dim) 50%,transparent)、animation:scanMove 11s linear infinite(top -22%→112%)、pointer-events:none、z-index:998,置于 scanlines 之下一层);卡片级 3D 微倾斜(严禁全页级 mousemove 倾斜——页面容器整页旋转会让所有卡片一起偏转,与「仅当前卡片响应」不符):每张卡片 hover 时仅该卡片随鼠标偏转,卡片 transform 写 perspective(900px) + rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg))(±1.25° 极轻微),与 hover 上浮 translateY(-2px) 合并写同一条 transform(严禁拆两条相互覆盖);hover 态选择器带 tilt(header-card/overview/section 或 header-card/card),非 hover 卡片不倾斜;JS 对每张卡片监听 mousemove 计算卡内相对位置((clientX-rect.left)/rect.width*2-1 归一化 -1~1)只更新该卡 --mx/--my,mouseleave 归零回正,transition transform .18s 平滑;移动端无 mousemove 保持 0 不倾斜);body 严禁写 perspective 属性(perspective 使 body 成为 fixed 后代的包含块,右下角换肤坞 position:fixed 会相对 body 定位、随页面一起滚动——「坞不固定」的根因;卡片 3D 已由 transform 自带 perspective(900px),body 级 perspective 冗余且有害);禁止写 @media (prefers-reduced-motion: reduce) 禁用动画的媒体查询块(官方模板无此块,用户系统开启减少动画时该块会禁用全部动效,是竖线不动/发光不呼吸的根因);页面 JS 需支持 `?shot=content` 参数(检测 location.search 含 shot=content 时仅统一 body 四周 padding 40px + 隐藏右下角主题换肤坞(其余元素一律保留),供整页内容区截图用、保证截图四周留白对称合适)
11
+ - md/txt/html 均含生成时间行,精确到时分秒(如 2026-10-22 19:10:38);HTML 采用参考图式深蓝面板风格 + ask 同款发光动效的融合样式(不换其它色系,颜色全部用 CSS 变量统一主题令牌:29 令牌 × 5 主题(tech 深蓝科技(默认,色值与旧 ask 色板一致)/biz 浅色商务/mono IDEA 黑亮(JetBrains New UI Dark 官方色系:编辑区 #1e1f22 + 面板 #2b2d30)/light IDEA 白亮(IntelliJ Light 官方色系:白编辑区 + 浅灰面板)/warm 温暖渐变,html[data-theme] 运行时切换;12 核心契约 --bg/--bg2/--panel/--panel-solid/--text/--muted/--accent/--accent2/--border/--glow/--title-grad/--tag-bg + 报告扩展 --glow-soft/--scan/--scan-dim/--heat/--green/--orange/--rose + 流星粒子 --cp-a/--cp-b/--cp-tip/--cp-glow0/--cp-glow1 与 --cpd-a/--cpd-b/--cpd-tip/--cpd-glow0/--cpd-glow1(跨主题统一白色系:本体白热尖端 + 柔和白青光晕,深浅两带只差光晕强度);生成时按 THEME 配置写 data-theme 定默认,页面右下角换肤坞五色点随点随换、localStorage 记忆(键按页内嵌唯一 ID 隔离、多份产物互不串台、改名/移动目录记忆不丢;生成时头部写 `<meta name="daily-id" content="<UUID>">`,每次新 UUID)、?shot 截图模式与打印隐藏):禁用任何 CDN 与外部网络引用(@import、外链 CSS/JS/图片/网络字体一律禁止,页面必须公司内网离线双击可打开、零外部依赖),字体全用系统本地字体栈 ui-monospace/'SF Mono'/SFMono-Regular/Menlo/Consolas/monospace(macOS 走 SF Mono/Menlo、Windows 走 Consolas,中文回退系统默认;字母数字等宽自带科技感),正文同栈 400、标题同栈 900 渐变文字(var(--title-grad),background-clip:text,发光用 ask-result 模板同款 text-shadow 双圈(titleGlow 动画 3s 呼吸:基线 20px/.4 + 60px/.15 ↔ 峰值 30px/.7 + 80px/.3,h1 留静态基线;24px 小字同参数观感与官方一致,禁止改三圈小模糊——会糊在字内边界不清));页面背景纯深蓝黑 #0a1929(参考图同款色值)、正文浅青 #bae6fd、全屏极轻微噪点纹理(body::before fixed 覆盖层,background-image 用 SVG feTurbulence data URI(<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(#n)'/></svg>),opacity .04,pointer-events:none,z-index 0 在卡片之下,消除大面积纯色死板感),body 纯 #0a1929 背景不加径向辉光(onboarding 同款);全屏背景叠加 科技仪表盘同款三层科技感底纹:60px 网格底纹(.grid-pattern fixed inset 0,background-image linear-gradient(var(--scan-dim) 1px, transparent 1px) 纵横双向、background-size 60px 60px、z-index 0)+ 彩色星点层(.stars fixed inset 0,8 个 1-1.5px 星点 radial-gradient(1px 1px at <位置>, <色>, transparent) 多背景组合:白色 rgba(255,255,255,.3-.4) 与青色 rgba(0,240,255,.45-.5)、紫色 rgba(168,85,247,.4)、绿色 rgba(0,255,136,.4),位置分散 10%-90%,z-index 0)+ 全屏 2px 周期细扫描线(.scanlines fixed inset 0,repeating-linear-gradient(0deg, transparent 0 2px, var(--scan-dim) 2px 4px),z-index 999 罩最上层,pointer-events none;三层均 fixed 不随滚动,营造星野+网格+扫描的科技氛围,不破坏参考图纯深蓝黑质感);内容区宽度响应窗口自适应(.wrap width:clamp(640px, 60%, 1200px) + margin:0 auto:最小 640px、最大 1200px、中间按窗口 60% 缩放,页面左右留白对称);头部卡片参考图式实心深蓝底(var(--panel-solid) 实心 #0b1e37,略亮于背景、更偏蓝)+ 8px 周期细密水平条纹(background-image 叠加 repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px))+ 上下边缘 1px 微亮描边(border-top/border-bottom 1px solid #0f3350,参考图「边缘点亮一线」效果,与 ask 四边浮光扫描线动画共存、动画层在上)+ 圆角 6px + 外发光与 inset 内发光(0 0 20px rgba(14,165,233,.08) + inset 0 1px 24px rgba(14,165,233,.04)),overflow:hidden,标题区仅标题与青色胶囊生成时间徽章(badge 后直接收尾,不加底部细线/装饰光带,避免悬空多余线);标题与徽章下加 TL;DR 一句话摘要行(.summary-line flex 布局 max-width 540px 居中:左侧 .summary-tag「TL;DR」青色小标签 系统等宽 10px 粗体、rgba(14,165,233,.35) 细边圆角 4px、rgba(14,165,233,.07) 底、青色 text-shadow 光晕 + 右侧 .summary-text 12.5px 浅青正文 line-height 1.75 text-align left;摘要带判断给结论——整体节奏/主要风险/明日重点,不罗列条目);分节卡片同参考图式质感(实心深蓝底 #0b1e37 + 8px 周期细密水平条纹 + 上下边缘 1px 微亮描边 #0f3350 + 圆角缩小至 6px + overflow:hidden,保留阴影与 inset 内发光,去掉原全框青色细边),每张分节卡片左侧带参考图式左缘色条(8px 宽竖线贯穿整卡高度,节色渐变带同色光晕:完成 linear-gradient(180deg,#5eead4,#14b8a6) / 计划 linear-gradient(180deg,#fdba74,#f97316) / 风险 linear-gradient(180deg,#fda4af,#e11d48),box-shadow 0 0 12px 同色 30% 透明度;卡片内容 padding-left 24px 避让色条),节标题带 18px 同色渐变 SVG 语义图标+文字微光晕(h2 flex 布局 gap 10px,图标替换原竖向短条:完成=圆形对勾、计划=日历、风险=三角警示;inline SVG 内 linearGradient 同节色系渐变 完成 #5eead4→#14b8a6 / 计划 #fdba74→#f97316 / 风险 #fda4af→#e11d48 + 白色描边细节 + drop-shadow 同色光晕;标题色:完成青绿 #5eead4、计划橙 #fdba74、风险玫红 #fda4af + h2 文字同色双圈发光字 3s 呼吸 secGlow 动画(基线 14px/.45+40px/.18 ↔ 峰值 22px/.75+60px/.3,各节动画用本节主题色,与主标题同节奏;仅节标题文字发光,SVG 图标与日期徽章不加))+ 「今日任务进度」节标题右侧带目标日期小胶囊徽章 sec-date(margin-left:auto 推右、flex:0 0 auto;11px var(--muted) 字、padding 3px 10px、圆角 999px、青色细边 var(--border)、背景 var(--tag-bg),如 2026-10-22;仅完成节显示、计划/风险节不加,让截图自带具体日期)+ 条目 3D 立体圆球序号徽章(28px 白字,立体感克制的柔和球面——弱化版三段收窄色阶:受光球面渐变 radial-gradient(受光点 circle at 30% 28%,浅亮→主色→深色:完成 #7dd9cf→#14b8a6→#0d9488、计划 #fdc69a→#f97316→#ea580c、风险 #fdaab4→#f43f5e→#e11d48)+ inset 右下内暗影 -3px -4px 6px rgba(0,0,0,.3) 与左上内亮缘 1px 2px 3px rgba(255,255,255,.2) + ::before 左上椭圆高光点(position:relative 定位,top 5px/left 7px、8x6px、rotate -28deg、白色径向渐隐 rgba(255,255,255,.7)→0)+ 底部投影 0 2px 4px rgba(0,0,0,.25) 与同色光晕 0 0 8px + 数字 text-shadow 0 1px 1px rgba(0,0,0,.25) 贴球面) + 条目内部留白:li 水平 padding 10px(hover 淡青底 var(--tag-bg) 与文字间留 10px 间距)+ 序号圆形徽章 28px(数字距圆边约 8px,不贴圆边)+ 列表轻微缩进 12px(ol/ul padding 0 12px)+ 描述与进度双层错落排版(描述 15px、进度用时 12px 青灰小字 #5b7fa5、百分比加粗强调且两侧 margin 0 2px 呼吸留白、进度与用时之间用「 - 」连接(与 md/txt 版一致,不用 · )、条目间青色虚线分隔);风险节条目四环展开:desc 主行(问题)+ meta 影响行(12px 青灰小字「影响:xxx」)+ .advice 建议行(12px 青色小字,「建议:」加粗前缀,margin-top 6px)+ .owner 责任与时间行(12px 紫色 #a78bfa 小字,「责任与时间:」加粗前缀,margin-top 4px,口述无责任信息时省略此行);md/txt 版同条目依次写问题、影响、建议、责任与时间(第四项口述有时必写),文本格式不变+ 青色渐变 40px 大胶囊「一键复制」按钮(var(--accent)→var(--accent2),30px 青色光晕,hover 45px 光晕上浮,模板同款;flex 居中布局,内置 16px 内联 SVG 双矩形复制图标(白色 currentColor 描边、图标与文字 gap 8px、禁用 emoji 图标),复制成功后图标切换为对勾 SVG、文字短暂变「已复制」);头部 指令面板风格发光特效(与参考面板完全同款):四边 1px 青色浮光线,渐变 transparent→var(--accent)→transparent 整条线平移扫动(亮段长、无 box-shadow 光晕,四边亮段构成顺时针环绕循环,与 ask 看板卡片完全同款(上横线 scanX 左→右、右竖线 scanY 上→下、下横线 scanX-rev 右→左、左竖线 scanY-rev 下→上,四线同周期同速度 3s linear 单向平移);实现为 1px 整线渐变元素平铺整条边(上/下横线 left:0/right:0 + height:1px + linear-gradient(90deg, transparent, var(--accent), transparent);左/右竖线 top:0/bottom:0 + width:1px + linear-gradient(180deg, transparent, var(--accent), transparent)),随线体 translateX/translateY 平移 ±100%(相对线长):scanX -100%→100%、scanX-rev 100%→-100%、scanY -100%→100%、scanY-rev 100%→-100%;亮段(线中央渐变段)完整穿越卡片后消失于两端界外(卡片 overflow:hidden 裁剪),带「出现→穿越→消失」节奏;禁止自创 background-position 滚动/常驻辉光/往返摆动/亮段半嵌常驻等变体)+ 顶部光斑 ask 同款 cardGlow(radial-gradient ellipse at 50% 10% var(--glow)→transparent 70%,opacity .5→1 + scale 1→1.6,transform-origin top center,3s 循环;头部卡片与每张分节卡片内均放 .card-glow 光斑层,覆盖整卡顶部)+ 标题文字青色光晕呼吸(text-shadow 双圈 3s 循环);入场动画:头部淡入下滑、卡片依次错峰上浮淡入(完成 0.26s/计划 0.4s/风险 0.54s);滚动入场:初始视口外的卡片滚到视口才上浮渐显(html.js 门控 + IntersectionObserver,translate 独立属性不碰 transform——hover 3D 偏转零冲突,stagger 70ms 封顶 280ms、入场完即清 delay 不拖慢 hover 偏转,2s 兜底强制显示;无 JS/打印/截图模式一律全显);窄屏收敛:<680px 视口 wrap 满宽流式、边距收窄、h1 统一 26px(clamp 640px 下限在窄窗不再横向溢出)、按钮弹入(卡片入场动画 fadeDown/fadeUp/riseIn 的 fill-mode 必须用 backwards 严禁 both——both 使动画结束后最后一帧 transform:none 永久覆盖 hover 的 3D 偏转 transform,CSS 动画 applied 值优先级高于普通声明,hover 偏转会完全失效;cometFade 与按钮 pop 保持 both 不受此限);hover 微交互:卡片上浮+阴影加深+inset 发光增强、条目淡青底、序号徽章放大微旋(li:hover .idx transform:scale(1.18) rotate(-4deg)、球内数字放大 12→14px、数字必须用 <b> 包裹(.idx b{display:inline-block;transition:transform .2s ease})+ li:hover .idx b{transform:rotate(-6deg)} 数字在球内独立微旋;用户澄清 hover 变大的字体仅小球内数字,desc 正文保持 15px 不变不加斜体;销售 demo 版类名 .num:li:hover .num scale(1.22) rotate(-6deg)、数字 13→15px 同样 <b> 包裹 + rotate(-6deg))、按钮上浮/按压回缩;页脚 10px muted 文字(无分隔线、不加边框),署名固定 GENERATED BY AI TEAM · <目标日期>(日期动态,如 GENERATED BY AI TEAM · 20261022);三段分节列表,任务点保持中文顿号序号;当日节奏条(.day-strip 任务进度节内三时段横条:上午/下午/晚上按提交数分段高亮、.strip-item position:relative、hover 弹出 .strip-tip 浮层(bottom:calc(100% + 6px) 向上弹出避卡片 overflow:hidden 裁剪;position:absolute、translateX(-50%) scale(.85)→hover scale(1)、opacity 0→1、pointer-events:none、z-index:30、background:#0b2a4a、border:1px solid rgba(14,165,233,.4)、圆角、小字两行「时段 · N 次提交」+主题词));数字选择:用户口述的业务结果指标(响应时间/错误率/转化率/成功率等)优先写入,提交统计(提交数/文件数/行数)仅在无业务指标时兜底,两者都有时业务指标在前、提交统计后置或省略;数字凡有对比基准必带(环比/同比/目标完成度至少其一,如「+18%」「达目标 90%」),无基准来源时不作要求 - 节奏条下量化指标行(.day-metrics flex 居中 gap:22px、10.5px muted 字、数字用 .day-metrics b 青色等宽加粗(3 次提交 / 56 个文件 / +1.8k −285 行,删行数字 .minus 用 --rose 玫红);纯文字模式无 提交数据时省略此行);进度条终点圆点 + 流星扫描填充(.pbar-fill 必须 display:block + position:relative——行内 span 忽略 width/height 会变成 0×0,填充与圆点全部不可见;.pbar-fill::before 终点圆点 7px 径向渐变圆 right:0 + transform:translate(50%,-50%) 骑在填充右缘(done 青绿 radial-gradient(circle at 35% 30%,#a7f3d0,#2dd4bf 62%,#0d9488)、plan 橙 #fdba74/#f97316/#c2410c,box-shadow 同色光晕、z-index:2;.pbar-track/.pbar-fill 均不得加 overflow:hidden——圆点右半伸出填充 3.5px 骑边渲染);流星 = JS 注入 .pbar-track 内的 .pbar-sweep(absolute 左贴轨道、width:0 起点隐藏、height:16px、transform:translateY(-50%) 垂直居中、z-index:1、pointer-events:none)+ sweep 右缘 .pbar-comet 光体(absolute left:100% 贴 sweep 右缘随宽度移动,严禁 right:62%/right:100% 等右侧定位——彗星会停在轨道中段、进度 100% 时也到不了终点;子弹头形光核:20×11px 横向泪滴 border-radius:55% 100% 100% 55% / 85% 100% 100% 85%(右端全圆弧=前进弹头、左端 55%/85% 大圆角=后部饱满钝圆接尾不露尖(比 35%/60% 更钝,禁尖窄收尾),严禁 13×7 小椭圆方块感、严禁 20px 大圆球形态)background 三层:底层 linear-gradient(90deg,rgba(224,254,255,.3),rgba(224,254,255,.6) 55%,#fff) 铺底(形状内不得透底)+ 右前缘白青冷光 radial-gradient(ellipse 70% 85% at 74% 45%,rgba(224,254,255,.85),transparent) + 青白核 radial-gradient(circle 12px at 66% 50%,#fff,rgba(224,254,255,.95) 45%,rgba(224,254,255,.5) 75%,transparent)(circle 半径必须显式 12px——自动半径按最远角计、四角渐隐至透明会露出轨道深色背景成「黑三角」,显式半径让光核饱满),box-shadow 双圈柔光 0 0 5px 2px rgba(186,230,253,.75) + 0 0 12px 4px rgba(224,254,255,.35)——光晕总高控制在 2~2.5 倍条高以内,不用 drop-shadow;整体前大后收窄的扫帚流星:头部 20×11 大头 → ::after 彗尾 right:40%、84×12px 细长锥形拖尾 linear-gradient(90deg,transparent,rgba(224,254,255,.25) 26%,rgba(224,254,255,.75) 64%,rgba(255,255,255,.9)) + clip-path:polygon(4% 40%,16% 24%,100% 0,100% 100%,16% 76%,4% 60%)(左端收成 2.4px 高平口钝头、右端全高平接光核、16% 处起渐收——远窄近宽,禁矩形方块形、禁 1px 尖点)+ blur 1px + z-index:0——长度约 4 倍头宽;剥落粒子流(JS 为每颗 .pbar-comet 注入 30 个 span.cp,绝对定位在光核中后段出生):30 粒三带分布(上方飘散带 17 粒 by -6~-0.5 向上飘散 + 中部渗漏带 6 粒 by +0.5~+5.2 + 深色带 7 粒 by +5.5~+8 贴光核下缘)椭圆小块前大后小(3.2×2.2 → 1.2×0.9px,宽高不等 + rotate -12°~12° 不规则椭圆,禁用标准圆形、禁用 box-shadow 静态星屑——静态点没有剥落飘散的生命感),出生点从头部稍靠后(left 9~17px)开始,y 紧贴中心水平线(中线 ±2.5px,各粒角度基本一致不散乱),cpFlow 1.5~1.8s cubic-bezier(.2,.05,.55,1) infinite + 负延迟 -0.1~-1.5s 错峰:0%→10% 淡入渐现(渐渐出现)、10%→100% 沿水平线加速向后飘 translate3d(-45~-62px, dy, 0)(加速向后)、55% 后 opacity 渐隐 + scale(.16) 渐小(向尾部消失)、dy 三带取值:上方 -3.5~-7 上飘展开(用户反馈上方粒子少且飘散不够远,13→17 再加密、dy 再扩大,下方相对合适不增)、中部 +1.5~+3.5 向下渗漏、白带 +5~+7 向后甩出(全白发光带 cp-deep 与浅带同为白色系(本体白热 + 柔和白青光晕、光晕略强分层,跨主题统一)、dur 1.06~1.25s 更久停留),box-shadow 光晕 0%→55% 增强再减弱(每粒生命期一次明灭=呼吸发光,周期 1.5~1.8s 与主体 1.8s 呼吸非整数倍错开,禁止同频齐步闪);粒子 z-index:1 在彗尾之上(尾 z-index:0)、opacity:0 起步呼吸发光分层不同频:主体光核 1.8s 与彗尾 2.4s 周期呼吸(comet 双动画 cometFade + glowPulse 1.8s ease-in-out infinite:纯白晕光晕 0%↔50% 周期扩缩(50% 时白晕最盛 = 白色呼吸,扫过 1.1s 内可见一轮明暗);::after 挂 tailGlow 2.4s ease-in-out infinite:filter blur(1px) brightness(1) ↔ blur(1.5px) brightness(1.28) 亮度呼吸),粒子 1.5~1.8s 明灭与主体 1.8s 呼吸非整数倍错开(视觉错落不同频);opacity:0 常驻隐藏);.pbar-track.sheen-on 时 sweep transition:width 1.1s cubic-bezier(.3,.8,.4,1) 生长(comet 贴 sweep 右缘 left:100% 随宽度从左扫到右),comet 的 animation 严禁写在 .pbar-comet 基类(基类动画页面加载 t=0 即播、1.1s 后 both 定格 opacity:0,而扫动 setTimeout 1.5s 才开始——时序错位会让流星全程不可见);必须挂在 .pbar-track.sheen-on .pbar-comet 选择器上(cometFade 1.1s ease-out both, glowPulse 1.8s ease-in-out infinite 逗号并列双动画:cometFade 7% 淡入、86% 保持、100% 到终点消失、glowPulse 白晕呼吸循环;::after 彗尾另挂 tailGlow 2.4s ease-in-out infinite 亮度呼吸),靠 playSweep 内 remove/add sheen-on 类切换重启动画,与 dotPulse 同机制;扫动终点按各条目标进度 data-w:sheen 内 sweep inline width 终点 = data-w(done 条 100% 扫满轨道、有进度的 plan 条如 30% 即 30% 停在进度点不越界)——sweep 宽度过渡与 fill 宽度过渡同参数天然同步,comet 与彗尾/星屑无需任何反向补偿(scaleX 压缩方案会把彗尾一同拉长数倍,禁用);填充同步生长:入场 sheen(el,'wave') 给 fill 设 transition width 1.1s 同 easing + width 0→data-w,与流星同步——流星扫到哪、填充长到哪,流星到终点消失、留下各自进度,之后填充保持不再变化;圆点 .pbar-done/.pbar-plan .pbar-track.sheen-on .pbar-fill::before animation:dotPulse 1.1s(90% 处 filter:brightness(2) + 白光 drop-shadow 爆亮,done/plan 通用)流星到达终点时爆亮——dotPulse 选择器必须与 JS 加类位置一致:JS 把 sheen-on 加在 .pbar-track 上,严禁写 .pbar-fill.sheen-on::before(JS 从不在 fill 上加类,选择器永不命中、爆亮不触发);流星注入与入场波浪覆盖完成条 + 有进度的计划条(JS 遍历 .pbar-track:plan 且进度<=0 的条 return 跳过——0 进度的计划条不注入流星、不扫、保持静态),其余条 data-w 记录目标进度后 fill 归零;入场波浪:setTimeout 1500+i*420ms 逐条 sheen(el,'wave') 错峰(上→下必然可见);hover 重扫:li 上 mouseenter+pointerenter 双监听,sheen(el,'hover') 只 remove/add fill 与 track 的 sheen-on 类重放流星扫过(comet 再扫一遍,0 进度的 plan 条同样跳过),fill 宽度与颜色完全不重置(进度不再变化),sheen(el,src) 按来源独立节流(wave 1s / hover 300ms);重启动画 remove 类→sweep inline 归零 width:0(transition:none 无过渡)→void offsetWidth 强制回流→同步 add 类→sweep inline 目标 width=data-w(恢复 transition;双 RAF 在 headless 虚拟时间下不推进,不可用));液态玻璃(@supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) 内 .header-card/.section 加 backdrop-filter:blur(16px) saturate(1.35) + background-color:var(--panel),不支持的老浏览器走默认实心深蓝不白屏);CRT 扫描光带(.scanband position:fixed、left:0/right:0、height:150px、linear-gradient(180deg,transparent,var(--scan-dim) 50%,transparent)、animation:scanMove 11s linear infinite(top -22%→112%)、pointer-events:none、z-index:998,置于 scanlines 之下一层);卡片级 3D 微倾斜(严禁全页级 mousemove 倾斜——页面容器整页旋转会让所有卡片一起偏转,与「仅当前卡片响应」不符):每张卡片 hover 时仅该卡片随鼠标偏转,卡片 transform 写 perspective(900px) + rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg))(±1.25° 极轻微),与 hover 上浮 translateY(-2px) 合并写同一条 transform(严禁拆两条相互覆盖);hover 态选择器带 tilt(header-card/overview/section 或 header-card/card),非 hover 卡片不倾斜;JS 对每张卡片监听 mousemove 计算卡内相对位置((clientX-rect.left)/rect.width*2-1 归一化 -1~1)只更新该卡 --mx/--my,mouseleave 归零回正,transition transform .18s 平滑;移动端无 mousemove 保持 0 不倾斜);body 严禁写 perspective 属性(perspective 使 body 成为 fixed 后代的包含块,右下角换肤坞 position:fixed 会相对 body 定位、随页面一起滚动——「坞不固定」的根因;卡片 3D 已由 transform 自带 perspective(900px),body 级 perspective 冗余且有害);禁止写 @media (prefers-reduced-motion: reduce) 禁用动画的媒体查询块(官方模板无此块,用户系统开启减少动画时该块会禁用全部动效,是竖线不动/发光不呼吸的根因);页面 JS 需支持 `?shot=content` 参数(检测 location.search 含 shot=content 时仅统一 body 四周 padding 40px + 隐藏右下角主题换肤坞(其余元素一律保留),供整页内容区截图用、保证截图四周留白对称合适)
12
12
  - HTML 顶部带「一键复制」按钮:点击复制的是 txt 版纯文本全文(复制源必须用 txt 文件内容:含换行、无 #/##/> 等 Markdown 符号,严禁用 md 内容当复制源),按钮短暂变"已复制";JS 用 navigator.clipboard.writeText,失败回退隐藏 textarea + document.execCommand('copy')(兼容 file:// 打开)
13
13
  - 用户临时说"不落盘/别写文件"时(覆盖 DISK):只在对话输出,不写文件、不开浏览器;临时说"写到桌面/存到 X"(覆盖 DIR)、"只要 md/只出 html/只要内容区截图/只要截图/这次不截图"(覆盖 FORMATS)、"别开浏览器"(覆盖 OPEN_HTML)同理,均只对当次生效、不改配置
14
14
  - 同名目录处理:日期子目录已存在时直接复用(不重建、不清空),仅覆盖 FORMATS 清单内的同名文件(md/txt/html/content-png),目录内其它文件(时间戳另存的历史文件、full.png 等用户自放文件)一律保留不动、绝不删除或清空(该目录可能是用户此前自建、作其它用途的目录,我们只并列写入自己的专属命名文件,不与用户文件冲突混淆);落盘前查看目录内已有内容,若存在非本 skill 命名的其它文件(daily-report-/weekly-report- 前缀之外),对话中提示用户「该目录内已有其它文件,本次日报已与它们并列存放,未做任何改动」;同一日期重复生成默认直接覆盖原文件,用户说"保留之前的/另存/不覆盖"时,文件名追加时间戳(如 `daily-report-20261022-1530.html`)另存不覆盖
@@ -80,7 +80,7 @@
80
80
  *{margin:0;padding:0;box-sizing:border-box;}
81
81
  html,body{background:var(--bg);}
82
82
  body{
83
- font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Microsoft YaHei',monospace;
83
+ font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,monospace;
84
84
  color:var(--text); font-weight:400; padding:40px 20px 40px;
85
85
  min-height:100vh; position:relative; overflow-x:hidden;
86
86
  }
@@ -0,0 +1,409 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN" data-theme="tech">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>SkillForge 使用指引</title>
7
+ <style>
8
+
9
+ /* ═══ 五主题令牌:与报表/幻灯同源(12 核心契约 + 报告扩展);html[data-theme] 运行时切换 ═══ */
10
+ :root, [data-theme="tech"]{
11
+ --bg:#0a1929; --bg2:#071525; --panel:rgba(11,30,55,.9); --panel-solid:#0b1e37;
12
+ --text:#bae6fd; --muted:#5b7fa5; --accent:#0ea5e9; --accent2:#14b8a6;
13
+ --border:rgba(14,165,233,.18); --glow:rgba(14,165,233,.35); --glow-soft:rgba(14,165,233,.15);
14
+ --title-grad:linear-gradient(90deg,#7dd3fc,#0ea5e9 45%,#818cf8);
15
+ --tag-bg:rgba(14,165,233,.12);
16
+ --card-shadow:0 1px 0 rgba(255,255,255,.05) inset,0 12px 32px rgba(1,6,16,.5),0 0 24px rgba(14,165,233,.15);
17
+ --scan:rgba(0,240,255,.2); --scan-dim:rgba(0,240,255,.05);
18
+ --green:#14b8a6; --orange:#f97316; --rose:#f43f5e;
19
+ }
20
+ [data-theme="biz"]{
21
+ --bg:#e8ecf5; --bg2:#dde3ef; --panel:rgba(255,255,255,.97); --panel-solid:#ffffff;
22
+ --text:#1e293b; --muted:#64748b; --accent:#2563eb; --accent2:#0891b2;
23
+ --border:rgba(37,99,235,.14); --glow:rgba(37,99,235,.18); --glow-soft:rgba(37,99,235,.12);
24
+ --title-grad:linear-gradient(90deg,#1e40af,#2563eb 55%,#0891b2);
25
+ --tag-bg:rgba(37,99,235,.08);
26
+ --card-shadow:0 1px 2px rgba(15,23,42,.05),0 10px 28px rgba(15,23,42,.12);
27
+ --scan:rgba(37,99,235,.14); --scan-dim:rgba(37,99,235,.04);
28
+ --green:#0d9488; --orange:#ea580c; --rose:#e11d48;
29
+ }
30
+ [data-theme="mono"]{
31
+ --bg:#1e1f22; --bg2:#2b2d30; --panel:rgba(43,45,48,.95); --panel-solid:#2b2d30;
32
+ --card-shadow:0 1px 0 rgba(255,255,255,.06) inset, 0 12px 32px rgba(0,0,0,.5), 0 0 24px rgba(53,116,240,.16);
33
+ --text:#dfe1e5; --muted:#9aa0a6; --accent:#3574f0; --accent2:#5e9aff;
34
+ --border:rgba(53,116,240,.26); --glow:rgba(53,116,240,.3); --glow-soft:rgba(53,116,240,.13);
35
+ --title-grad:linear-gradient(90deg,#dfe1e5,#5e9aff 50%,#3574f0);
36
+ --tag-bg:rgba(53,116,240,.13);
37
+ --scan:rgba(223,225,229,.18); --scan-dim:rgba(223,225,229,.07);
38
+ --green:#4da36b; --orange:#d09645; --rose:#d85f73;
39
+ }
40
+ [data-theme="light"]{
41
+ --bg:#ffffff; --bg2:#f2f2f2; --panel:rgba(255,255,255,.98); --panel-solid:#ffffff;
42
+ --card-shadow:0 1px 2px rgba(30,31,34,.06), 0 10px 28px rgba(30,31,34,.12);
43
+ --text:#1e1f22; --muted:#6e7781; --accent:#2675bf; --accent2:#4a9be0;
44
+ --border:rgba(38,117,191,.18); --glow:rgba(38,117,191,.2); --glow-soft:rgba(38,117,191,.1);
45
+ --title-grad:linear-gradient(90deg,#1e5f9f,#2675bf 55%,#4a9be0);
46
+ --tag-bg:rgba(38,117,191,.08);
47
+ --scan:rgba(38,117,191,.12); --scan-dim:rgba(38,117,191,.04);
48
+ --green:#2f8a5b; --orange:#d97706; --rose:#d6336c;
49
+ }
50
+ [data-theme="warm"]{
51
+ --bg:#f7ebd9; --bg2:#efe0c8; --panel:rgba(255,250,243,.97); --panel-solid:#fffaf3;
52
+ --text:#43301f; --muted:#8a7565; --accent:#d97706; --accent2:#ea580c;
53
+ --border:rgba(217,119,6,.18); --glow:rgba(217,119,6,.22); --glow-soft:rgba(217,119,6,.14);
54
+ --title-grad:linear-gradient(90deg,#b45309,#d97706 50%,#ea580c);
55
+ --tag-bg:rgba(217,119,6,.1);
56
+ --card-shadow:0 1px 2px rgba(120,72,24,.07),0 10px 28px rgba(120,72,24,.13);
57
+ --scan:rgba(217,119,6,.16); --scan-dim:rgba(217,119,6,.04);
58
+ --green:#0d9488; --orange:#c2410c; --rose:#be123c;
59
+ }
60
+ [data-theme="biz"] .stars, [data-theme="light"] .stars, [data-theme="warm"] .stars{ opacity:.28; }
61
+ [data-theme="mono"] .stars{ background:radial-gradient(1px 1px at 12% 22%,rgba(223,225,229,.32),transparent),radial-gradient(1px 1px at 28% 68%,rgba(223,225,229,.28),transparent),radial-gradient(1.5px 1.5px at 45% 15%,rgba(223,225,229,.24),transparent),radial-gradient(1px 1px at 62% 78%,rgba(223,225,229,.26),transparent),radial-gradient(1px 1px at 78% 32%,rgba(223,225,229,.3),transparent),radial-gradient(1.5px 1.5px at 88% 58%,rgba(223,225,229,.28),transparent),radial-gradient(1px 1px at 8% 85%,rgba(223,225,229,.26),transparent),radial-gradient(1px 1px at 55% 45%,rgba(223,225,229,.24),transparent)}
62
+
63
+ *{margin:0;padding:0;box-sizing:border-box}
64
+ html,body{background:var(--bg)}
65
+ body{
66
+ font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,monospace;
67
+ color:var(--text);-webkit-font-smoothing:antialiased;overflow-x:hidden;
68
+ }
69
+ .grid-pattern{position:fixed;inset:0;z-index:0;pointer-events:none;
70
+ background:linear-gradient(var(--scan-dim) 1px,transparent 1px),linear-gradient(90deg,var(--scan-dim) 1px,transparent 1px);
71
+ background-size:60px 60px}
72
+ .stars{position:fixed;inset:0;z-index:0;pointer-events:none;
73
+ background:radial-gradient(1px 1px at 12% 22%,rgba(255,255,255,.4),transparent),radial-gradient(1px 1px at 28% 68%,rgba(0,240,255,.5),transparent),radial-gradient(1.5px 1.5px at 45% 15%,rgba(168,85,247,.4),transparent),radial-gradient(1px 1px at 62% 78%,rgba(0,255,136,.4),transparent),radial-gradient(1px 1px at 78% 32%,rgba(255,255,255,.35),transparent),radial-gradient(1.5px 1.5px at 88% 58%,rgba(0,240,255,.45),transparent),radial-gradient(1px 1px at 8% 85%,rgba(255,255,255,.3),transparent),radial-gradient(1px 1px at 55% 45%,rgba(0,240,255,.35),transparent)}
74
+ .scanlines{position:fixed;inset:0;z-index:999;pointer-events:none;
75
+ background:repeating-linear-gradient(0deg,transparent,transparent 2px,var(--scan-dim) 2px,var(--scan-dim) 4px)}
76
+ .scanband{position:fixed;left:0;right:0;height:150px;z-index:998;pointer-events:none;
77
+ background:linear-gradient(180deg,transparent,var(--scan-dim) 50%,transparent);
78
+ animation:scanMove 11s linear infinite}
79
+ @keyframes scanMove{from{top:-22%}to{top:112%}}
80
+ .wrap{width:clamp(640px, 60%, 1200px); margin:0 auto; position:relative; z-index:1; padding:40px 0}
81
+ .header-card{position:relative;overflow:hidden;background:var(--panel-solid);border:1px solid var(--border);border-radius:6px;
82
+ padding:34px 28px 26px;text-align:center;margin-bottom:18px;
83
+ box-shadow:var(--card-shadow);
84
+ background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px)}
85
+ .header-card h1{font-size:26px;letter-spacing:2px;margin-bottom:8px;
86
+ background:var(--title-grad);-webkit-background-clip:text;background-clip:text;color:transparent;
87
+ animation:titleGlow 3s ease-in-out infinite}
88
+ @keyframes titleGlow{0%,100%{text-shadow:0 0 8px var(--glow),0 0 22px var(--glow-soft)}50%{text-shadow:0 0 14px var(--glow),0 0 34px var(--glow-soft)}}
89
+ .header-sub{font-size:12px;color:var(--muted);letter-spacing:1px;margin-bottom:12px}
90
+ .header-badge{display:inline-block;font-size:11px;color:var(--accent);border:1px solid var(--glow);border-radius:999px;padding:4px 14px}
91
+ .card-glow{position:absolute;inset:-40% -20% auto;height:70%;pointer-events:none;
92
+ background:radial-gradient(ellipse at 50% 10%,var(--glow),transparent 70%);
93
+ animation:cardGlow 3s ease-in-out infinite;transform-origin:top center;opacity:.5}
94
+ @keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}
95
+ .scanline-el{position:absolute;pointer-events:none}
96
+ .scan-x{top:0;left:0;height:1px;width:100%;background:linear-gradient(90deg,transparent,var(--accent),transparent);animation:scanX 3s linear infinite}
97
+ .scan-y{top:0;right:0;width:1px;height:100%;background:linear-gradient(180deg,transparent,var(--accent),transparent);animation:scanY 3s linear infinite}
98
+ .scan-x-rev{bottom:0;left:0;height:1px;width:100%;background:linear-gradient(90deg,transparent,var(--accent),transparent);animation:scanXRev 3s linear infinite}
99
+ .scan-y-rev{top:0;left:0;width:1px;height:100%;background:linear-gradient(180deg,transparent,var(--accent),transparent);animation:scanYRev 3s linear infinite}
100
+ @keyframes scanX{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
101
+ @keyframes scanY{from{transform:translateY(-100%)}to{transform:translateY(100%)}}
102
+ @keyframes scanXRev{from{transform:translateX(100%)}to{transform:translateX(-100%)}}
103
+ @keyframes scanYRev{from{transform:translateY(100%)}to{transform:translateY(-100%)}}
104
+ .section{position:relative;overflow:hidden;background:var(--panel-solid);border:1px solid var(--border);border-radius:6px;
105
+ padding:22px 24px 22px 32px;margin-bottom:18px;
106
+ box-shadow:var(--card-shadow);
107
+ background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
108
+ transition:transform .18s ease,box-shadow .18s ease}
109
+ .section:hover{transform:translateY(-2px);box-shadow:var(--card-shadow),inset 0 0 22px var(--glow-soft)}
110
+ .sec-bar{position:absolute;left:0;top:0;bottom:0;width:8px}
111
+ .sec-ov .sec-bar{background:linear-gradient(180deg,var(--accent2),var(--accent));box-shadow:0 0 12px var(--glow)}
112
+ .sec-ms .sec-bar{background:linear-gradient(180deg,#5eead4,#14b8a6);box-shadow:0 0 12px rgba(20,184,166,.3)}
113
+ .sec-gw .sec-bar{background:linear-gradient(180deg,#a5b4fc,#6366f1);box-shadow:0 0 12px rgba(99,102,241,.3)}
114
+ .sec-rf .sec-bar{background:linear-gradient(180deg,#fda4af,#e11d48);box-shadow:0 0 12px rgba(244,63,94,.3)}
115
+ .sec-pl .sec-bar{background:linear-gradient(180deg,#fdba74,#f97316);box-shadow:0 0 12px rgba(249,115,22,.3)}
116
+ .sec-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}
117
+ .sec-head svg{flex:0 0 auto}
118
+ .sec-head h2{font-size:18px;letter-spacing:1px;animation:secGlow 3s ease-in-out infinite}
119
+ .sec-ov .sec-head h2{color:var(--accent)}.sec-ms .sec-head h2{color:#5eead4}.sec-gw .sec-head h2{color:#c7d2fe}
120
+ .sec-rf .sec-head h2{color:#fda4af}.sec-pl .sec-head h2{color:#fdba74}
121
+ @keyframes secGlow{0%,100%{text-shadow:0 0 6px var(--glow)}50%{text-shadow:0 0 14px var(--glow)}}
122
+ /* 引言与条目 */
123
+ .lead{font-size:15px;line-height:1.75;margin-bottom:14px}
124
+ .lead b{color:var(--accent);font-weight:700}
125
+ .kw{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
126
+ .kw-item{flex:1 1 200px;background:var(--tag-bg);border:1px solid var(--border);border-radius:6px;padding:12px 14px;
127
+ transition:transform .18s ease,box-shadow .18s ease}
128
+ .kw-item:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.3)}
129
+ .kw-num{font-size:20px;font-weight:900;background:var(--title-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
130
+ .kw-label{font-size:12px;color:var(--muted);margin-top:4px}
131
+ /* 表格 */
132
+ .tbl{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:14px}
133
+ .tbl th{text-align:left;font-size:12px;color:var(--muted);letter-spacing:1px;padding:8px 10px;border-bottom:1px solid var(--border);white-space:nowrap}
134
+ .tbl td{padding:8px 10px;border-bottom:1px dashed var(--border);line-height:1.6;vertical-align:top}
135
+ .tbl tr:last-child td{border-bottom:none}
136
+ .tbl tr:hover td{background:var(--tag-bg)}
137
+ .tbl td:first-child{color:var(--accent);font-weight:700;white-space:nowrap}
138
+ .cat-tag{display:inline-block;font-size:11px;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:1px 8px;margin-right:6px}
139
+ /* 命令代码块 */
140
+ .cmd{display:block;font-family:inherit;font-size:13px;color:var(--accent2);background:var(--tag-bg);
141
+ border:1px solid var(--border);border-radius:4px;padding:3px 8px;margin:2px 0;white-space:nowrap;overflow-x:auto}
142
+ .cmd-in{display:inline-block;font-family:inherit;font-size:13px;color:var(--accent2);background:var(--tag-bg);
143
+ border:1px solid var(--border);border-radius:4px;padding:1px 6px;white-space:nowrap}
144
+ /* 链路分条 */
145
+ ul.steps{margin:6px 0 0;padding:0;list-style:none}
146
+ ul.steps>li{padding:4px 0 4px 13px;position:relative;font-size:13.5px;line-height:1.7}
147
+ ul.steps>li::before{content:"";position:absolute;left:0;top:12px;width:5px;height:5px;border-radius:50%;background:var(--accent2);opacity:.75}
148
+ ul.steps>li b{color:var(--accent);font-weight:700}
149
+ /* 场景条目 */
150
+ .scn{margin-bottom:12px;padding-left:14px;border-left:2px solid var(--border)}
151
+ .scn-title{font-size:14px;font-weight:700;color:var(--accent);letter-spacing:1px;margin-bottom:6px}
152
+ .scn p{font-size:13.5px;line-height:1.7}
153
+ .scn p .dot{color:var(--muted)}
154
+ /* 链路条目 */
155
+ ol.chain{list-style:none}
156
+ ol.chain>li{display:flex;gap:12px;padding:10px;border-radius:4px;transition:background .18s;margin-bottom:4px}
157
+ ol.chain>li:hover{background:var(--tag-bg)}
158
+ .idx{flex:0 0 auto;width:26px;height:26px;border-radius:50%;position:relative;
159
+ display:flex;align-items:center;justify-content:center;color:#fff;
160
+ font-size:12px;font-weight:900;margin-top:2px;transition:transform .2s ease}
161
+ .idx.rf{background:radial-gradient(circle at 30% 28%,#fdaab4,#f43f5e 55%,#be123c);
162
+ box-shadow:0 2px 4px rgba(0,0,0,.25),0 0 8px rgba(244,63,94,.4),inset -3px -4px 6px rgba(0,0,0,.3),inset 1px 2px 3px rgba(255,255,255,.25)}
163
+ .idx::before{content:'';position:absolute;top:4px;left:6px;width:7px;height:5px;border-radius:50%;
164
+ background:radial-gradient(circle,rgba(255,255,255,.7),rgba(255,255,255,0));transform:rotate(-28deg);pointer-events:none}
165
+ ol.chain>li:hover .idx{transform:scale(1.15) rotate(-4deg)}
166
+ .entry{flex:1;min-width:0}
167
+ .entry-title{font-size:14px;font-weight:700;color:#fda4af;margin-bottom:4px}
168
+ .entry p{font-size:13.5px;line-height:1.7}
169
+ /* 小抄与 FAQ */
170
+ .faq{margin-top:14px;padding-top:12px;border-top:1px dashed var(--border)}
171
+ .faq-title{font-size:12px;color:var(--muted);letter-spacing:1px;margin-bottom:10px}
172
+ .faq-item{font-size:13.5px;line-height:1.7;margin-bottom:8px;padding-left:14px;border-left:2px solid var(--border)}
173
+ .faq-item b{color:var(--accent);font-weight:700}
174
+ footer{text-align:center;font-size:10px;color:var(--muted);letter-spacing:1px;padding:8px 0 4px}
175
+ .header-card{animation:fadeDown .6s ease-out backwards}
176
+ .sec-ov{animation:riseIn .5s ease-out .13s backwards}
177
+ .sec-ms{animation:riseIn .5s ease-out .26s backwards}
178
+ .sec-gw{animation:riseIn .5s ease-out .4s backwards}
179
+ .sec-rf{animation:riseIn .5s ease-out .54s backwards}
180
+ .sec-pl{animation:riseIn .5s ease-out .68s backwards}
181
+ @keyframes fadeDown{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}
182
+ @keyframes riseIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
183
+ .theme-dock{
184
+ position:fixed; right:18px; bottom:18px; z-index:1001;
185
+ display:flex; gap:8px; padding:8px 10px; border-radius:999px;
186
+ background:var(--panel-solid); border:1px solid var(--border);
187
+ box-shadow:0 4px 18px rgba(0,0,0,.3);
188
+ }
189
+ .theme-dock .th-dot{
190
+ width:22px; height:22px; border-radius:50%; cursor:pointer;
191
+ border:2px solid transparent; padding:0;
192
+ transition:transform .15s ease, border-color .15s ease;
193
+ }
194
+ .theme-dock .th-dot:hover{ transform:scale(1.18); }
195
+ .theme-dock .th-dot.on{ border-color:var(--text); }
196
+ .theme-dock .th-dot[data-theme="tech"]{ background:#0ea5e9; }
197
+ .theme-dock .th-dot[data-theme="biz"]{ background:#2563eb; }
198
+ .theme-dock .th-dot[data-theme="mono"]{ background:#1e1f22; }
199
+ .theme-dock .th-dot[data-theme="light"]{ background:#ffffff; }
200
+ .theme-dock .th-dot[data-theme="warm"]{ background:#d97706; }
201
+ @media print{ .theme-dock{ display:none; } }
202
+ @media (max-width:680px){
203
+ body{ padding:24px 12px 32px; }
204
+ .wrap{ width:100%; max-width:none; }
205
+ .header-card{ padding:26px 18px 20px; }
206
+ .header-card h1{ font-size:26px; }
207
+ }
208
+ </style>
209
+ </head>
210
+ <body>
211
+ <div class="grid-pattern"></div>
212
+ <div class="stars"></div>
213
+ <div class="scanband"></div>
214
+ <div class="scanlines"></div>
215
+ <div class="wrap">
216
+ <header class="header-card" id="headerCard">
217
+ <span class="scanline-el scan-x"></span>
218
+ <span class="scanline-el scan-y"></span>
219
+ <span class="scanline-el scan-x-rev"></span>
220
+ <span class="scanline-el scan-y-rev"></span>
221
+ <div class="card-glow"></div>
222
+ <h1>SkillForge 使用指引</h1>
223
+ <div class="header-sub">技能锻造坊 · 个人技能仓库与命令行分发器</div>
224
+ <span class="header-badge">npm 包 skill-forge-hub · 命令 skill-forge · 21 技能</span>
225
+ </header>
226
+
227
+ <section class="section sec-ov">
228
+ <div class="sec-bar"></div>
229
+ <div class="card-glow"></div>
230
+ <div class="sec-head">
231
+ <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#38bdf8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15l4-5M8 15l4-5"/><circle cx="12" cy="14" r="8"/><path d="M12 14l4-5"/></svg>
232
+ <h2>一、SkillForge 是什么</h2>
233
+ </div>
234
+ <div class="lead"><b>SkillForge</b> 是一套个人技能仓库 + 命令行分发器:把 21 个技能打包分发,一条命令装进你的 AI 助手技能目录;升级时配置版本感知,你的本地个性化配置永不丢失。</div>
235
+ <div class="kw">
236
+ <div class="kw-item"><div class="kw-num">21</div><div class="kw-label">技能 · 七类:报表汇演 / 文档装裱 / 工程提效 / 演示汇演 / 数据整备 / 沟通协作 / 技能自造</div></div>
237
+ <div class="kw-item"><div class="kw-num">ls · init · update</div><div class="kw-label">命令 skill-forge:只读浏览 / 交互安装 / 配置版本感知升级</div></div>
238
+ <div class="kw-item"><div class="kw-num">永不覆盖</div><div class="kw-label">用户配置出站 user-config.md,升级不丢个性化;结构变化先备份再三选一</div></div>
239
+ </div>
240
+ <table class="tbl">
241
+ <tr><th>分类</th><th>技能</th><th>一句话触发语</th></tr>
242
+ <tr><td>报表汇演</td><td>daily-report · weekly-report · monthly-report · quarterly-report · annual-report · team-report-collector</td><td>「写日报 / 周报 / 月报 / 季报 / 年报」/「收日报」</td></tr>
243
+ <tr><td>文档装裱</td><td>article-to-html · twin-docs · one-pager</td><td>丢给它一个文档 /「翻译成英文文档」/「做张海报」</td></tr>
244
+ <tr><td>工程提效</td><td>spec-doc2spec · spec-spec2doc · release-notes</td><td>「把这个文档转成需求规格 / 导出 Word·PDF」/「写发版说明」</td></tr>
245
+ <tr><td>演示汇演</td><td>magic-deck · deck-stage</td><td>「做个 PPT」(HTML 幻灯 / .pptx 可编辑)</td></tr>
246
+ <tr><td>数据整备</td><td>data-prepper · commit-heatmap</td><td>「整理这份数据」/「生成提交热力图」</td></tr>
247
+ <tr><td>沟通协作</td><td>meeting-minutes · prompt-pouch · decision-log</td><td>「记会议」/「做一个锦囊管理页面」/「记决策」</td></tr>
248
+ <tr><td>技能自造</td><td>meta-forge · skill-doctor</td><td>「帮我创建一个新技能」/「给技能体检」</td></tr>
249
+ </table>
250
+ </section>
251
+
252
+ <section class="section sec-ms">
253
+ <div class="sec-bar"></div>
254
+ <div class="card-glow"></div>
255
+ <div class="sec-head">
256
+ <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#5eead4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9l3 3-3 3M13 15h4"/></svg>
257
+ <h2>二、命令速查</h2>
258
+ </div>
259
+ <table class="tbl">
260
+ <tr><th>命令</th><th>说明</th></tr>
261
+ <tr><td><span class="cmd-in">skill-forge ls</span></td><td>列出全部技能(分类 + 名称 + 说明),只读不写文件</td></tr>
262
+ <tr><td><span class="cmd-in">skill-forge init</span></td><td>交互挑选安装:a 全装 / 编号挑选(已装标 ★)/ 确认时 s 跳过已装</td></tr>
263
+ <tr><td><span class="cmd-in">npm update -g skill-forge-hub</span></td><td>官方发新版后升级 CLI 本体(只升级本包)</td></tr>
264
+ <tr><td><span class="cmd-in">skill-forge update</span></td><td>升级全部已安装技能(配置版本感知)</td></tr>
265
+ <tr><td><span class="cmd-in">skill-forge update --skills a,b</span></td><td>只升级指定技能(未安装的提示跳过)</td></tr>
266
+ <tr><td><span class="cmd-in">skill-forge --version</span> / <span class="cmd-in">--help</span></td><td>显示版本号 / 完整帮助</td></tr>
267
+ </table>
268
+ <div class="lead">命令别名:<b>list = ls、install = init、upgrade = update</b>。通用参数(init / update 通用):</div>
269
+ <div class="scn"><div class="scn-title">--target &lt;目录&gt;(-t)</div><p>指定技能目录;缺省自动探测常见助手目录(~/.qoder-cn、~/.claude、~/.cursor 等),探测到多个时交互选择</p></div>
270
+ <div class="scn"><div class="scn-title">--skills a,b(-s)</div><p>init 时跳过选择直接装指定技能(脚本与单件补装友好);update 时只升级指定技能</p></div>
271
+ <div class="scn"><div class="scn-title">--yes(-y)</div><p>跳过确认直接执行;配置版本变化时默认「保留我的 + 官方版另存 .upstream 对照」</p></div>
272
+ </section>
273
+
274
+ <section class="section sec-gw">
275
+ <div class="sec-bar"></div>
276
+ <div class="card-glow"></div>
277
+ <div class="sec-head">
278
+ <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#a5b4fc" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 6h4M17 14h4M3 6h4M3 14h4"/><path d="M12 22a10 10 0 0 0 0-20"/></svg>
279
+ <h2>三、场景化使用流程</h2>
280
+ </div>
281
+ <div class="scn"><div class="scn-title">场景一 · 首次接入(从零到可用)</div>
282
+ <p><span class="cmd">npm i -g skill-forge-hub</span><span class="cmd">skill-forge ls</span><span class="cmd">skill-forge init</span>先浏览清单(只读)→ 交互挑选(a 全装 / 编号挑选 → 确认时 s 跳过已装)→ 自动探测技能目录 → 完成。装完直接对话触发:「写日报」「写周报」「写月报」「写季报」「写年报」「记会议」,或直接丢给它一个文档。</p></div>
283
+ <div class="scn"><div class="scn-title">场景二 · 单件补装(脚本 / 只想要某一个)</div>
284
+ <p><span class="cmd">skill-forge init --skills prompt-pouch --target ~/.qoder-cn/skills</span>跳过挑选环节,只装指定技能到指定目录。</p></div>
285
+ <div class="scn"><div class="scn-title">场景三 · 官方发新版后升级</div>
286
+ <p><span class="cmd">npm update -g skill-forge-hub</span><span class="cmd">skill-forge update</span><span class="cmd">skill-forge update --skills daily-report</span>
287
+ 先升级 CLI 本体,再升级技能;配置结构没变:无感升级,user-config.md 原样保留;<br>
288
+ 配置结构变了(CONFIG_VERSION 升了):先备份 <span class="cmd-in">user-config.md.bak-&lt;时间戳&gt;</span>,再三选一——<span class="dot">[1]</span> 官方覆盖 / <span class="dot">[2]</span> 保留我的(默认,最稳,官方版另存 .upstream 对照文件手动合并)/ <span class="dot">[3]</span> 稍后处理;<br>
289
+ 官方删了文件:按 .installed-manifest 安装清单精准清理,你自建的文件一律不动。</p></div>
290
+ <div class="scn"><div class="scn-title">场景四 · 非交互 / 自动化</div>
291
+ <p><span class="cmd">skill-forge init --skills daily-report,weekly-report --yes</span>--yes 跳过一切确认,配置冲突默认走 [2] 保留我的。</p></div>
292
+ <div class="scn"><div class="scn-title">场景五 · 换机器 / 换 AI 助手</div>
293
+ <p>新环境重新 <span class="cmd-in">npm i -g skill-forge-hub &amp;&amp; skill-forge init</span>;保留个人配置就把旧机器技能目录里的 user-config.md 一并拷过去(升级永不覆盖,覆盖安装时也保留)。</p></div>
294
+ </section>
295
+
296
+ <section class="section sec-rf">
297
+ <div class="sec-bar"></div>
298
+ <div class="card-glow"></div>
299
+ <div class="sec-head">
300
+ <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#fda4af" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2L3 14h7l-1 8 10-12h-7l1-8z"/></svg>
301
+ <h2>四、典型技能使用链路</h2>
302
+ </div>
303
+ <div class="lead">统一节奏:<b>安装 → 首次生成 → 修改配置 → 官方升级后 → 旧产物回炉</b>。四个代表,其余同构。</div>
304
+ <ol class="chain">
305
+ <li><span class="idx rf"><b>1</b></span><div class="entry">
306
+ <div class="entry-title">日报 daily-report(报表族代表)</div>
307
+ <ul class="steps">
308
+ <li><b>安装</b>:<span class="cmd-in">skill-forge init --skills daily-report</span></li>
309
+ <li><b>日常生成</b>:说「写日报」口述内容 → md/txt/html(自动打开)+ 截图</li>
310
+ <li><b>修改配置</b>:user-config.md 改 DIR(落盘目录)/ THEME(五主题)/ TEMPLATE(自定义模板);临时口头要求当次生效不写配置</li>
311
+ <li><b>官方升级后</b>:配置冲突选 [2] 保留我的,对照 .upstream 合并新配置点</li>
312
+ <li><b>旧产物回炉</b>:模板版本戳升了说「把我旧日报都升级成新样式」——浅升级换样式块、深升级从同目录 md 底稿重建,旧版先备份</li>
313
+ </ul>
314
+ </div></li>
315
+ <li><span class="idx rf"><b>2</b></span><div class="entry">
316
+ <div class="entry-title">锦囊 prompt-pouch(本地管理台 + 用户数据)</div>
317
+ <ul class="steps">
318
+ <li><b>安装</b>:<span class="cmd-in">skill-forge init --skills prompt-pouch</span></li>
319
+ <li><b>首次生成</b>:「做一个锦囊管理页面」→ 生成管理台 html + data/prompts.json 数据文件</li>
320
+ <li><b>日常使用</b>:分组侧栏 / 搜索 / 收藏 / 标签点击过滤 / {变量} 插值一键复制 / 导入导出 JSON 备份;页面与数据分离,删页面不丢数据</li>
321
+ <li><b>修改配置</b>:user-config.md 改 DIR(页面目录)、DATA_DIR / BACKUP_DIR(数据与备份目录)</li>
322
+ <li><b>官方升级后</b>:数据目录与数据文件一概不动;深升级重建沿用原页 pouch-id → 收藏 / 分组照旧读回</li>
323
+ <li><b>页面版本升级(回炉)</b>:模板版本戳升了,下次生成时 AI 主动提示「检测到 X 份旧版锦囊」→ 说「把我旧锦囊都升级成新样式」→ 列清单选全部或部分 → 浅升级换样式块、深升级从模板重建沿用原页 pouch-id(收藏分组照旧读回);prompts.json 数据不动、旧页先备份 .bak-时间戳</li>
324
+ <li><b>多文件隔离</b>:两份锦囊各自独立(内嵌 ID 命名空间);复制文件副本 = 同一身份共享同一份数据(要独立身份请重新生成一份)</li>
325
+ </ul>
326
+ </div></li>
327
+ <li><span class="idx rf"><b>3</b></span><div class="entry">
328
+ <div class="entry-title">PPT 两形态 magic-deck / deck-stage</div>
329
+ <ul class="steps">
330
+ <li><b>选形态</b>:说「做个 PPT」AI 先问——HTML 幻灯(magic-deck)还是 .pptx 可编辑文稿(deck-stage)</li>
331
+ <li><b>HTML 幻灯</b>:magic-deck 生成单文件 HTML 幻灯,浏览器全屏放映(自动播放 / 循环 / 热键翻页);需要图片时逐页 PNG 截图</li>
332
+ <li><b>.pptx 文稿</b>:deck-stage 三问交互(素材 → 页骨架表 → 成片方式)生成 .pptx——常规页原生可编辑(数据卡 / 时间线 / 图表),封面与结尾页 HTML 截图保真</li>
333
+ <li><b>补依赖</b>:deck-stage 依赖 PptxGenJS,npm 包不含 node_modules,装完按提示 <span class="cmd-in">cd &lt;技能目录&gt;/deck-stage &amp;&amp; npm install</span> 补装一次</li>
334
+ <li><b>修改配置</b>:五主题 / 页面尺寸 / 演讲备注在 user-config.md</li>
335
+ </ul>
336
+ </div></li>
337
+ <li><span class="idx rf"><b>4</b></span><div class="entry">
338
+ <div class="entry-title">会议纪要 meeting-minutes(汇报链源头)</div>
339
+ <ul class="steps">
340
+ <li><b>日常生成</b>:「记会议」口述材料 → 五段式纪要(会议信息 / 会议结论 / 议题讨论 / 决议与行动项 / 下次会议),行动项带负责人与截止时间——日报 / 周报 / 月报 / 季报的汇报链源头</li>
341
+ <li><b>修改配置</b>:SERIES_GROUP 三态——auto 自动提取系列名归入 meetings/{系列名}/、series 一律按系列建目录、off 纯月份平铺;改口机制「以后这个系列叫 XX」永久生效</li>
342
+ <li><b>官方升级后</b>:同报表族——配置三选一保护 + 说「把旧纪要升级成新样式」回炉</li>
343
+ </ul>
344
+ </div></li>
345
+ </ol>
346
+ </section>
347
+
348
+ <section class="section sec-pl">
349
+ <div class="sec-bar"></div>
350
+ <div class="card-glow"></div>
351
+ <div class="sec-head">
352
+ <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="#fdba74" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3 8-8"/><path d="M20 12v6a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h9"/></svg>
353
+ <h2>五、通用小抄</h2>
354
+ </div>
355
+ <table class="tbl">
356
+ <tr><th>需求</th><th>做法</th></tr>
357
+ <tr><td>换落盘目录 / 主题 / 模板</td><td>改 user-config.md(升级永不覆盖)</td></tr>
358
+ <tr><td>官方发新版</td><td><span class="cmd-in">skill-forge update</span>,配置冲突选 [2] 保留我的</td></tr>
359
+ <tr><td>旧产物换新样式</td><td>说「把我旧 XX 都升级成新样式」</td></tr>
360
+ <tr><td>装漏技能</td><td><span class="cmd-in">skill-forge init --skills 技能名</span></td></tr>
361
+ <tr><td>查全部命令</td><td><span class="cmd-in">skill-forge --help</span></td></tr>
362
+ <tr><td>问单个技能用法</td><td>直接问「XX 技能怎么用」,AI 会读该技能的使用说明输出</td></tr>
363
+ <tr><td>问 SkillForge 本身</td><td>问「skillforge 怎么用」,AI 朗读本指引并打开排版页</td></tr>
364
+ <tr><td>查技能双语简介 / 实操文章</td><td><span class="cmd-in">SKILLS_CATALOG.md</span>(21 技能逐条中英简介)/ <span class="cmd-in">docs/articles/</span>(实操文章)/ <span class="cmd-in">docs/directory-submission.md</span>(目录收录素材)</td></tr>
365
+ </table>
366
+ <div class="faq">
367
+ <div class="faq-title">常见问题</div>
368
+ <div class="faq-item"><b>装完对话没触发技能?</b>确认装进了当前 AI 助手实际读取的技能目录(init 完成时输出的路径)。</div>
369
+ <div class="faq-item"><b>deck-stage 报缺依赖?</b><span class="cmd-in">cd &lt;技能目录&gt;/deck-stage &amp;&amp; npm install</span> 补装 PptxGenJS 一次即可。</div>
370
+ <div class="faq-item"><b>升级后配置会丢吗?</b>不会。user-config.md(与 .preserve 清单内文件)升级永不覆盖,本地修改永久保留。</div>
371
+ <div class="faq-item"><b>这份指引在哪?</b>每个技能的 resources/ 目录里都有(skillforge-guide.txt 文字版 + skillforge-guide.html 排版版),官方升级时随技能资源一起更新。</div>
372
+ </div>
373
+ </section>
374
+
375
+ <footer>GENERATED BY SKILLFORGE TEAM</footer>
376
+ </div>
377
+
378
+ <div class="theme-dock" id="themeDock">
379
+ <button class="th-dot" type="button" data-theme="tech" title="深蓝科技"></button>
380
+ <button class="th-dot" type="button" data-theme="biz" title="浅色商务"></button>
381
+ <button class="th-dot" type="button" data-theme="mono" title="IDEA 黑亮"></button>
382
+ <button class="th-dot" type="button" data-theme="light" title="IDEA 白亮"></button>
383
+ <button class="th-dot" type="button" data-theme="warm" title="温暖渐变"></button>
384
+ </div>
385
+
386
+ <script>
387
+ // ?shot:截图/打印模式——停入场动画直接渲染终态(headless 虚拟时间下动画帧不推进会停在 0 相位)
388
+ if (location.search.indexOf('shot=') !== -1) {
389
+ document.querySelectorAll('.header-card,.section').forEach(function(el){
390
+ el.style.animation = 'none'; el.style.opacity = '1';
391
+ });
392
+ }
393
+ // 主题换肤:五套配色随点随换;记忆上次选择(localStorage,失败静默)
394
+ (function(){
395
+ var THEMES = ['tech','biz','mono','light','warm'];
396
+ var dock = document.getElementById('themeDock');
397
+ if (!dock) return;
398
+ function apply(t){ document.documentElement.setAttribute('data-theme', t);
399
+ dock.querySelectorAll('.th-dot').forEach(function(d){ d.classList.toggle('on', d.getAttribute('data-theme') === t); });
400
+ try{ localStorage.setItem('sf-guide-theme', t); }catch(e){} }
401
+ var cur = document.documentElement.getAttribute('data-theme');
402
+ var saved = null; try{ saved = localStorage.getItem('sf-guide-theme'); }catch(e){}
403
+ if (saved && THEMES.indexOf(saved) !== -1 && saved !== cur){ apply(saved); }
404
+ else{ dock.querySelectorAll('.th-dot').forEach(function(d){ d.classList.toggle('on', d.getAttribute('data-theme') === (cur || 'tech')); }); }
405
+ dock.querySelectorAll('.th-dot').forEach(function(d){ d.addEventListener('click', function(){ apply(d.getAttribute('data-theme')); }); });
406
+ })();
407
+ </script>
408
+ </body>
409
+ </html>