1实现原理 · 为什么它能做到
CRT 观感由三层绝对定位叠层实现:扫描线(repeating-linear-gradient 4px 周期 + mix-blend-mode:screen)、56px 赛博网格(mask 径向羽化)、暗角(radial-gradient 四角变黑)。全部是 CSS 图层,不需要贴图。
.tpl-hermes-cyber-terminal .hc-scanlines{position:absolute;inset:0;pointer-events:none;z-index:3;background:repeating-linear-gradient(180deg,transparent 0,transparent 3px,rgba(126,211,164,.025) 3px,rgba(126,211,164,.025) 4px);mix-blend-mode:screen}
网格层用 56px linear-gradient 画线 + radial mask 只在中心保留,正好兑现 SKILL.md 的「56px 赛博网格」。
.tpl-hermes-cyber-terminal .hc-grid{position:absolute;inset:0;pointer-events:none;opacity:.35;background-image:linear-gradient(rgba(126,211,164,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(126,211,164,.08) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse at 50% 50%,black 30%,transparent 80%)}
「窗口红绿灯 chrome + $ prompt 标题」=三个圆点 span 由 nth-child 上色(#ff5f57 红 / #febc2e 黄 / 薄荷绿),标题左侧用 ::before 生成青色「$ 」前缀——纯 CSS 仿真终端窗口,零图标零 SVG。
.tpl-hermes-cyber-terminal .hc-prompt::before{content:'$ ';color:var(--hc-cyan)}
「blinking 光标」=12px 竖条 + steps(2) 1s 无限动画(@keyframes hcBlink{50%{opacity:0}}),直接跟在标题文字后(HERMES AGENT / v0.9.2)。
.tpl-hermes-cyber-terminal .hc-cursor{display:inline-block;width:12px;height:1em;background:var(--hc-green);vertical-align:middle;margin-left:6px;animation:hcBlink 1s steps(2) infinite}
「Stroke-only 柱状图」=内联 SVG:柱体 fill 只用 15% / 12% 淡填充、stroke 用实色 1.5px 描边,坐标轴用 20% 透明线;两组色(薄荷绿 / 琥珀)区分被测对象。
<rect x="130" y="80" width="80" height="240" fill="rgba(126,211,164,.15)" stroke="#7ed3a4" stroke-width="1.5"/>
「三档 tag」=.hc-tag 默认绿 / .amber / .red 三种语义色,示例当「强度与风险」标签用(rust-core、mcp-native、72h-benchmark、honest-review),CTA 页的 needs-api-key 用 amber。
<span class="hc-tag red">honest-review</span>
示例把「CLI / agent / dev tool 测评」叙事走全:封面 → 章节 → spec 卡片 → 代码 → CHART → STATS(benchmark n=48)→ CTA → THANKS,并放真实 trace 节选与 strong / weak points。
<h3 class="hc-h3" style="margin-top:12px">↓ 真实 trace (节选)</h3>
运行时由宿主承担:模板目录零可执行文件,prompt 由宿主拼装后交本地 agent CLI 执行。
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | Google Fonts(JetBrains Mono / Inter / Noto Sans SC) |
| network | 宿主共享指令声明的 Tailwind CDN(宿主侧要求,非本模板要求) |
4风险提醒 风险提醒:绿色 · 放心使用
- 宿主侧:预览 iframe 放宽沙箱 — template-picker.tsx 的 srcDoc + sandbox="allow-scripts allow-same-origin";同源脚本可自行摘除沙箱,属宿主实现风险,不判档。
- 宿主侧:会 spawn 本地 agent CLI — convert 路由经 invokeAgent 以本地已登录 CLI 执行 prompt。
- 产物示例含 CDN 外链 — 字体 @import 与共享指令的 cdn.tailwindcss.com 在渲染时请求外网;离线时降级为系统字体。
- 示例内的测评数字无法回源 — 示例宣称的 trace / 48 任务 / benchmark 结果只出现在预览文案里(见 second_pass 的 unlocatable 项);若被当成模板自带数据引用会误导。
- 暗色高饱和 + 发光在打印 / 浅色场景走样 — CRT 层、text-shadow 发光与 mix-blend-mode 打印时会丢失或变脏,不适合纸质输出。
5第二遍独立确认
- [ok] 「56px 赛博网格」是否兑现 — .hc-grid 的 background-size:56px 56px + radial mask,与 SKILL.md 的 56px 逐字一致。
- [ok] 「blinking 光标」是否有真动画 — hc-cursor 使用 animation:hcBlink 1s steps(2) infinite,配套 @keyframes hcBlink{50%{opacity:0}}。
- [ok] 「Stroke-only 柱状图」是否真为描边 — SVG rect 的 fill 仅 15% / 12% 透明填充、stroke 实色 1.5px 描边;坐标轴为 20% 透明线。
- [unlocatable] 示例中的测评数据是否可回源核实(n=48、trace 节选) — 示例文案把「48 个任务的 PR 列表」「完整 trace」指向 github.com/lewis/hermes-review,仓库内无对应文件,无法回源核实;这些数字只存在于预览文案中,属示例内容而非模板规范,不代表模板会产出此类数据。
- [ok] 目录内是否有脚本 / 网络调用 / 凭证读取 — 目录仅 SKILL.md + example.html;<script> 计数 0;无 fetch/XHR/env/写盘代码;无凭证读取。
- [ok] SKILL.md 是否要求运行时外链 — SKILL.md 只列色值与版式(无 URL);字体 @import 属 example.html(产物示例)。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699;skill.path = next/src/lib/templates/skills/deck-hermes-cyber,含 SKILL.md。
- [ok] README 收录一致性 — README deck 表列出 deck-hermes-cyber(Hermes Cyber neon-luxe),与目录内容相符。
6结论
1065c8cc4396d02f…553ed98c28