1实现原理 · 为什么它能做到
页序被写死为教学闭环:Cover(模块名 + 讲师)→ Learning objectives → 正文(concept + 例子)→ MCQ 自测页 → Wrap-up + 下一模块预告。这是教学设计骨架,不是排版建议。
- Cover (模块名 + 讲师)
「左侧学习目标常驻」的实现是 260px + 1fr 的 CSS grid 双栏:每张正文页都重复同一份 <ul class="obj-list"> 侧栏,随翻页持续可见,而不是固定定位的浮层。
.tpl-course-module .slide{padding:64px 80px;background:var(--bg);display:grid;grid-template-columns:260px 1fr;gap:56px;align-content:start}
学习目标带三态语义:默认 ○、已完成 ●、当前 ▸(由 .obj-list li / li.done / li.current 的 ::before 切换),随课程推进在每页同步更新。
.tpl-course-module .obj-list li.current::before{content:"▸";color:var(--accent-2)}
MCQ 自测页=.mcq 列表 + .mcq.correct 标出正确项,侧栏同步「Self-assess / You should get 3/3」,题干是可直接作答的单选(Which function will recurse forever?)。
<p class="dim" style="font-size:13px">You should get 3/3.</p>
暖纸色板把所有纯白替换掉:背景 #fbfaf6、卡面 #f6f3ea,强调色取青绿 #2d7d6e / 琥珀 #d88a3a,标题走 Playfair Display 72px。
--bg:#fbfaf6;--bg-soft:#f4f1e8;--surface:#ffffff;--surface-2:#f6f3ea;
讲义配件齐备:Exercise 虚线框(::before 输出「✎ Exercise」标签)、深褐底 JetBrains Mono 代码块、concept-box 卡片、页脚 slide-number 的 data-current/data-total。
.tpl-course-module .exercise::before{content:"✎ Exercise";display:block;font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--accent-2);margin-bottom:10px;text-transform:uppercase}
运行时同样由宿主承担:模板目录零可执行文件,prompt 由 assemblePrompt 拼装后交本地 agent CLI,deck 分页由宿主 deck viewer 拆 <section class="slide">。
The convention adopted by every deck skill
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | Google Fonts(Playfair Display / Noto Sans SC / JetBrains Mono / Inter) |
| 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 在渲染时请求外网;离线时降级为系统字体。
- 示例页序并非强制 — SKILL.md 的页序是模板建议,共享指令又强调页数由内容决定;长课程机械照抄 7 页会信息过载,需模型自行拆分。
5第二遍独立确认
- [ok] 「左侧学习目标常驻」在示例中是否真的持续可见 — 5 张内容页(Objectives / Concept / Example / Exercise / Check)各带一份 <aside class="sidebar"> 与 <h5>Learning objectives</h5>;Cover 与 Summary 为整页(.slide.full)无侧栏——符合「持续显示」意图。
- [ok] MCQ 自测页是否可判分 — 正确项带 .mcq.correct 且文案含「✓ Correct.」;侧栏同步把前 4 条标 done、第 5 条标 current。
- [ok] SKILL.md 的「含 MCQ 自测页」是否与示例一致 — 示例第 6 页即 <p class="kicker">CHECK YOUR UNDERSTANDING</p> 的单选题页,claim 无夸大。
- [ok] 目录内是否有脚本 / 网络调用 / 凭证读取 — 目录仅 SKILL.md + example.html;<script> 计数 0;无 fetch/XHR/env/写盘代码;无凭证读取。
- [ok] SKILL.md 是否要求运行时外链 — SKILL.md 只声明字族(Playfair serif / warm paper bg)与页序,全文无 URL;字体 @import 属 example.html(产物示例)。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699;skill.path = next/src/lib/templates/skills/deck-course-module,含 SKILL.md。
- [ok] README 收录一致性 — README deck 表列出 deck-course-module(Course module deck),与目录内容相符。
6结论
f859affcf97be929…553ed98c28