1实现原理 · 为什么它能做到
底色直接借用 GitHub Dark 色板(#0d1117 底 / #161b22 面 / #30363d 边),因此代码块、状态色与开发者视觉惯性天然对齐,不需要重新发明暗色体系。
--oc-bg:#0d1117;
「紫蓝环境光」=两层 radial-gradient 叠加(紫 at 28%/38%、蓝 at 72%/62%),分别从左上与右下打光,形成对角氛围而不是均匀渐变。
.tpl-obsidian-claude-gradient .oc-cbg{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 28% 38%,rgba(124,58,237,.25) 0%,transparent 60%),radial-gradient(ellipse at 72% 62%,rgba(88,166,255,.18) 0%,transparent 60%)}
「60px 网格 mask」=两向 1px 线(#30363d 40%)+ 60px 间距 + radial mask 只留中心,与 SKILL.md 写死的 60px 一致。
.tpl-obsidian-claude-gradient .oc-cgrid{position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(48,54,61,.4) 1px,transparent 1px),linear-gradient(90deg,rgba(48,54,61,.4) 1px,transparent 1px);background-size:60px 60px;mask-image:radial-gradient(ellipse at center,black 35%,transparent 80%)}
「三色渐变标题」=linear-gradient(135deg,#a855f7 → #60a5fa → #34d399) + background-clip:text,紫→蓝→薄荷绿三段正好是 Claude / 开发者生态的常见配色。
.tpl-obsidian-claude-gradient .oc-g{background:linear-gradient(135deg,#a855f7 0%,#60a5fa 55%,#34d399 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
「GitHub 风代码 + 紫色左边框高亮块」:代码块用 #010409 深底 + 四类 token 类(.cp 绿 / .cc 蓝 / .ca 紫 / .cm 暗灰),对应 GitHub 的语法配色习惯。
.tpl-obsidian-claude-gradient .oc-code{background:#010409;border:1px solid var(--oc-border);border-radius:12px;padding:20px 24px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.85;width:100%;max-width:860px;text-align:left;color:#e6edf3}
「紫色 pill tag」=胶囊标签 + 半透明紫底(rgba(124,58,237,.14))+ 1px 紫边,用于标注主题(MCP / agent 等);另有四色 badge(.oc-bp/.oc-bb/.oc-bg/.oc-bo)做状态标注。
.tpl-obsidian-claude-gradient .oc-tag{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--oc-accent3);background:rgba(124,58,237,.14);border:1px solid rgba(168,85,247,.3);padding:5px 16px;border-radius:999px;margin-bottom:22px}
页面骨架是「教程结构」而非「产品推介」:COVER / SECTION / 对比卡 / 步骤页 / 代码页 / STATS / QUOTE-CTA / THANKS,示例内容是把 Obsidian 接到 Claude Desktop 的 MCP 配置教程。
<!-- 3. CONTENT — compare cards -->
运行时由宿主承担:模板目录零可执行文件、示例零 <script>;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(宿主侧要求,非本模板要求) |
| package | 示例配置文本里提到的 MCP server 包(仅作为教程代码示例出现,skill 不安装也不运行) |
4风险提醒 风险提醒:绿色 · 放心使用
- 宿主侧:预览 iframe 放宽沙箱 — template-picker.tsx 用 srcDoc + sandbox="allow-scripts allow-same-origin";同源脚本可自行摘除沙箱,属宿主实现风险,不判档。
- 宿主侧:会 spawn 本地 agent CLI — convert 路由经 invokeAgent 以本地已登录 CLI 执行 prompt。
- 产物示例含 CDN 外链 — 字体 @import 与共享指令的 cdn.tailwindcss.com 在渲染时请求外网;离线时降级为系统字体。
- 会引导读者接触第三方 MCP server — 教程示例教用户 npx 运行 @modelcontextprotocol/server-obsidian 并填入 API key。skill 自身不执行这些命令,但内容会推动读者在自己的机器上运行第三方包 —— 属内容引导风险,非 skill 行为。
- 暗色 + 紫色渐变在打印时失真 — 深底渐变文字与光斑打印会走样,不适合纸质交付。
5第二遍独立确认
- [ok] 示例中的 127.0.0.1:27123 是否构成网络调用 — 不构成。该字符串只出现在 <pre> 的 MCP 配置示例文本里(OBSIDIAN_HOST 的值);全文件 <script> 计数为 0,没有 fetch/XHR/Image/iframe 等任何请求代码,也没有 WebSocket。它是教程文案,不是运行时外发。
- [ok] 「60px 网格 mask」是否兑现 — .oc-cgrid 的 background-size:60px 60px + mask-image radial-gradient,与 SKILL.md 的 60px 一致。
- [ok] 「三色渐变标题」是否为真渐变 — .oc-g 使用 #a855f7 → #60a5fa → #34d399 的 135° 渐变 + background-clip:text。
- [ok] 「GitHub 风代码 palette」是否真为四类 token — .cp / .cc / .ca / .cm 四个类分别对应绿 / 蓝 / 紫 / 暗灰,落在 #010409 深底代码块内。
- [ok] 教程内容中的凭据写法是否安全 — 配置示例的 OBSIDIAN_API_KEY 用 xxxxxxxxxxxxxxxx 占位,未嵌入任何真实密钥;这是示例文案的良好实践。
- [ok] 目录内是否有脚本 / 凭证读取 / 写盘 — 目录仅 SKILL.md + example.html;<script> 计数 0;无 env/凭证访问代码、无写盘代码。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699;skill.path = next/src/lib/templates/skills/deck-obsidian-claude,含 SKILL.md。
6结论
b2eadd1665cf47d9…553ed98c28