1仕組みと動作原理
横方向のスライド切り替えは「単一の flex トラック + translateX(-idx*100vw)」で実装:すべてのスライドを横並びに配置し、ページ送りは 700ms のトランジションを伴う transform の変更のみで処理。ページごとに display を切り替えるよりもスムーズで、タッチドラッグの操作マージンも広がります。
deck.style.transform = 'translateX(' + (-idx * 100) + 'vw)';
ナビゲーションモデルは同一リポジトリの guizang-ppt テンプレートからの借用であることが明記されており(同じ flex トラック + translateX、同じ key/wheel/touch ハンドラ)、既存の実装をベースにリスキンされたものであることを示しています。
* Navigation model is borrowed from skills/guizang-ppt — same flex
タイポグラフィ言語は kami デザインシステムに由来:kami トークンの採用(温かみのある羊皮紙背景、インクブルーのアクセント、単一ウェイトのセリフ、斜体不使用)がコメントに明記され、印刷基準線に対してマクロトークンを約1.6倍に拡大、字間を約0.6倍に縮小しています。
* tokens are scaled × ~1.6 vs. print baseline; letter-spacing scaled
ホストとの明示的な規約:コメントには、ページ番号を駆動するために .slide.active が Open Design の host bridge(src/runtime/srcdoc.ts の findActiveByClass)によって読み取られる旨が記載されています。CSS 内でこれを参照するルールは存在せず、ロードベアリング(必須要素)であるため削除禁止と明記されています。
/* load-bearing: .slide.active is read by Open Design's host bridge
インタラクションにスロットルロックを搭載:lock が真の場合 go(n) は直ちに復帰し、wheel/key/touch のみがスロットルを経由します。プログラムによる同期(ホストメッセージ、初期ページ復帰)はロックをバイパスし、700ms のトランジション中に高速な入力で連続してページ送りが加算されるのを防ぎます。
function go(n) {
ページ種別は data-slide-kind で注釈(cover / chapter / content / stats / quote / cta / end)。サンプルの9ページは表紙、章扉、本文、データハイライト、名言、CTA、終了ページを網羅しており、SKILL.md のレイアウト一覧を忠実に再現しています。
<section class='slide s-stats' data-slide-kind='stats'>
「データハイライトページ」と「名言ページ」の両方がサンプルに含まれる:stats ページは巨大な数字と1行の説明文、quote ページは日曜版の新聞風の引用レイアウトを採用しています。
<section class='slide s-quote' data-slide-kind='quote'>
ランタイムはホスト側が担当:テンプレートディレクトリ内にスクリプトファイルは同梱されておらず、プロンプトはホストによって組み立てられた後にローカル agent CLI に渡されます。サンプル内の JS は成果物としてのコンテンツに属します。
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| network | Google Fonts(Source Serif 4 / Source Sans 3 / JetBrains Mono) |
| network | Google Fonts 静态域(preconnect 预连接) |
| network | 产物示例 CTA 页的 GitHub 外链(指引用户去项目仓库 Star / 提 issue) |
| network | 宿主共享指令声明的 Tailwind CDN(宿主侧要求,非本模板要求) |
4推奨統制措置と判定根拠
- SKILL.md: 純粋なプロンプト指示およびルールテキストのみであり、スクリプト実行や外部影響は一切なし
5二重目の独立検証
- [discrepancy] 「WebGL 流体背景」是否存在于示例 — 不存在。example.html 内 canvas / getContext / WebGL / shader 关键字计数为 0(文件里唯一 <script> 是翻页逻辑),封面是暖羊皮纸底 + 墨蓝章节页的静态排版。SKILL.md 的「WebGL 流体背景」在示例中未落地,属描述超出现有预览稿(宿主共享指令也禁止引用外部图片、优先 CSS/SVG 内联,实际生成时是否引入 WebGL 取决于模型与所加库)。
- [discrepancy] 「键盘 ← / → 切换; hash 同步」是否兑现 — 键盘兑现(方向键 / PageUp / PageDown / 空格 / Home / End 全套 + Escape 总览);但示例脚本内没有 location.hash 读写,「hash 同步」这条在示例中未实现(截图与核对范围内未发现 hashchange 监听)。
- [ok] 导航是否真有节流 — go(n) 在 lock 为真时直接 return;滚动 / 键盘 / 触摸走 throttle,程序化同步绕过锁(注释说明原因)。
- [ok] 与宿主的 .slide.active 契约是否存在 — 注释声明 host bridge(src/runtime/srcdoc.ts findActiveByClass)读取该 class 驱动页码,并标注 load-bearing;宿主 deck.ts 亦按 <section class="slide"> 约定解析。
- [ok] 目录内是否有脚本文件 / 凭证读取 / 写盘 — 目录仅 SKILL.md + example.html 两个文件,无独立脚本文件;示例 JS 不读取 env / 凭证、不写盘、无 fetch/XHR 请求(唯一外链是 <link> 字体与 CTA 的 <a href>)。
- [ok] pin commit 与路径 — HEAD = 553ed98c283f9c0f489902d035416a972d6a9699;skill.path = next/src/lib/templates/skills/deck-magazine-web,含 SKILL.md。
- [ok] README 收录一致性 — README deck 表列出 deck-magazine-web(Magazine-style web deck),与目录内容相符。
6結論
44c08bb9682d2bdc…