1实现原理 · 为什么它能做到
本模板是一份「锁死数值的版式清单」而非散文说明:奶油 #F0EAE0 底、48px 蓝图网格 mask、pipeline 步骤盒(其一抬高)、锈红 insight callout、Playfair 大字 + SVG 虚线反馈环,并明令「零渐变零软阴影」。模型拿到的是一组不容自由发挥的版面事实,所以输出风格稳定。
- 奶油 #F0EAE0 底 + 蓝图 48px 网格 mask
「蓝图网格」由两行 linear-gradient 画 1px 线 + 48px background-size 实现,再叠 mask-image radial-gradient 做边缘羽化——纯 CSS,不需要任何图片资源。
.tpl-knowledge-arch-blueprint .kb-grid-bg{position:absolute;inset:0;pointer-events:none;opacity:.35;background-image:linear-gradient(rgba(26,26,26,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(26,26,26,.06) 1px,transparent 1px);background-size:48px 48px;mask-image:radial-gradient(ellipse at center,black 40%,transparent 85%)}
「其中一个抬高」的 hero 步骤盒=同构盒子 + 锈红填充 + flex:1.25 加宽 + translateY(-10px) 脱格 + 放大投影:用位移而非描边制造重点,且仍是 2px 黑边硬卡片。
.tpl-knowledge-arch-blueprint .kb-step.hero{background:var(--kb-rust);border-color:var(--kb-rust);color:#fff;flex:1.25;box-shadow:0 10px 32px rgba(181,57,42,.28);transform:translateY(-10px)}
「SVG 虚线反馈环」是内联 path + stroke-dasharray + marker-end 箭头,画在代码页右侧表达「循环 / 回灌」语义;环的走向由 Q 二次贝塞尔手工摆位,不依赖图形库。
<path d="M 940 180 Q 940 80, 670 80 Q 400 80, 400 180" fill="none" stroke="#B5392A" stroke-width="2" stroke-dasharray="6 6" marker-end="url(#arrow-r)"/>
「印刷友好」不是形容词而是 CSS:@media print 里每个 .slide 强制可见、去位移、page-break-after:always、height:100vh,把横向翻页 deck 直接变成可打印的纵向文档。
.slide{position:relative;opacity:1!important;transform:none!important;page-break-after:always;height:100vh}
页面骨架固定 8 页:COVER / SECTION DIVIDER / CONTENT 2-col / CODE / DIAGRAM(SVG 反馈环)/ STATS / CTA / THANKS,页脚用 01 / 08 形式页码 + uppercase hairline。
<!-- 5. DIAGRAM - SVG feedback loop -->
运行时由宿主承担:模板目录里没有一行可执行代码,prompt 由 assemblePrompt 拼装后交给本地 agent CLI,deck 分页由宿主 deck viewer 拆 <section class="slide">。
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | Google Fonts(Playfair Display / Noto Serif SC / JetBrains Mono / Inter) |
| network | 宿主共享指令声明的 Tailwind CDN(宿主侧要求,非本模板要求) |
4风险提醒 风险提醒:绿色 · 放心使用
- 宿主侧:预览 iframe 放宽沙箱 — template-picker.tsx 用 srcDoc + sandbox="allow-scripts allow-same-origin" 渲染预览;同源脚本理论上可自行摘除 sandbox。属宿主实现风险,非本模板行为,不判档。
- 宿主侧:会 spawn 本地 agent CLI — convert 路由调用 invokeAgent(node:child_process spawn),以本地已登录的 CLI 执行 prompt;权限边界由宿主与 CLI 决定。
- 产物示例含 CDN 外链 — example.html 的字体 @import 与共享指令里的 cdn.tailwindcss.com 会在浏览器渲染时发出请求;不影响离线可用性(字体降级),但预览页并非完全无网。
- 规范与预览稿存在轻度不一致 — SKILL.md 的「零渐变零软阴影」在 example.html 未完全兑现(hero / insight 带软阴影)。展示层若把示例当规范会误读。
5第二遍独立确认
- [discrepancy] SKILL.md 的「零渐变零软阴影」是否被 example.html 遵守 — 未完全遵守:示例中 .kb-insight 用 box-shadow:0 8px 24px rgba(181,57,42,.22)、.kb-step.hero 用 box-shadow:0 10px 32px rgba(181,57,42,.28),属软阴影;网格线亦由 linear-gradient 画出(技术手段,非装饰渐变)。属规范与预览稿的轻度不一致,不影响模板机制。
- [ok] 48px 网格 mask 是否有实现 — kb-grid-bg 的 background-size:48px 48px + mask-image radial-gradient,与 SKILL.md 的「48px 蓝图网格 mask」逐字对应。
- [ok] 「SVG 虚线反馈环」是否真为 SVG(非位图) — 内联 <svg> 内 path + stroke-dasharray="6 6" + marker-end,无外部图片引用。
- [ok] 目录内是否有脚本 / 网络调用 / 凭证读取 — 目录仅 SKILL.md + example.html 两个文件;example.html 的 <script> 计数为 0,无 fetch/XHR/localStorage/env 访问;无网络请求代码、无凭证读取、无写盘代码。
- [ok] SKILL.md 是否要求运行时外链 — SKILL.md 只写字族名(Playfair serif,无 URL)与 hex,全文无 URL;example.html 的字体 @import 属产物示例。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(与任务表 pin 一致);skill.path = next/src/lib/templates/skills/deck-blueprint,目录内含 SKILL.md。
- [discrepancy] README 对 deck 收录数量的描述 — README「### Decks (deck mode, 20 skills)」标注 20,但该 pin 下 skills/ 内实际有 21 个 deck-* 目录(多出 deck-ljg-present)。文档滞后,不影响模板行为。
6结论
820effda4eea39de…553ed98c28