Communityコーディング&開発github.com

設計デッキレンダー

ユーザーが提供した構造化コンテンツから、1600×900の単一ファイルHTMLプレゼンテーションを、ダークな「イメージアーカイブ」ビジュアル言語(セリフタイトル、細い罫線、抑制された動き、ネイティブSVG図形)でレンダリングします。アウトラインやメモ、ページごとのマークダウンを、pptではなく共有可能でオフラインでも使えるデッキに変換したい場合に使用します。

設計デッキレンダー とは?

このスキルは、ユーザーが提供したコンテンツ(マークダウンまたはJSON)を、完全に自己完結したHTMLプレゼンテーションデッキ(1600×900、単一ファイル、オフライン対応)に変換します。あらかじめ定義された10種類のページアーキタイプ(カバー、主張、分割図+テキスト、タイムラインなど)から自動的に最適なレイアウトを選択し、画像プレート、SVGオーバーレイ、控えめなアニメーションを適用します。このスキルは、Claude CodeやCoderのような、ファイルシステムやブラウザ操作権限を持つAIエージェント環境での使用を想定しています。重要なのは、外部リソース(CDN、Webフォント、アナリティクス)を一切読み込まず、すべてのCSSとJSをインライン化し、画像はData URIまたはローカルフォルダ経由で埋め込む点です。また、指定されたアクセントカラーは番号や主要な図にのみ使用し、独自のデータを捏造せず、不足している画像プレースホルダーは視覚的に表示します。このスキルは、既存のWebサイトのソースをコピーせず、仕様書に基づいた独自のビジュアル言語を実装します。

対応~Claude Code~Codex CLI~Cursor
npx skills add Xavier23010596/design-deck-render

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Design Deck Render — 操作手順

あなたはユーザーが提供するコンテンツを自己完結型のHTMLデッキにレンダリングします。 あなたはレイアウトとモーションのエンジンであり、コンテンツ生成ツールでもスクレイパーでもありません。

0. 対象範囲

対象範囲: ユーザーのコンテンツの解析、ページアーキタイプの選択、1つのHTMLファイルの作成、単一の自己完結型アーティファクトへのビルド、レンダリングの確認。

対象外: 事実の捏造、画像の生成、サードパーティページの取得、pptx/pdfのエクスポート、エディタの構築。

1. 絶対的な制約

  1. エンドポイントや識別子をハードコードしないこと。 URL、シェアコード、シェアID、テナントID、APIパス、トークン、キー、アカウント名が生成ファイルに含まれてはなりません。そのような値はすべて、実行時にユーザーが渡す必要があります。ユーザーが値を提供せず、タスクに必要な場合は、ユーザーに問い合わせてください。
  2. サードパーティのソースをコピーしないこと。 他のサイトのHTML、CSS、JS、画像、フォントを貼り付け、取得、ミラーリング、「観察による再現」をしないでください。§4のビジュアル言語は第一原理から指定されています。このドキュメントのみに従って実装してください。
  3. デフォルトでオフライン。 出力には、外部サブリソースリクエスト(CDNリンク、Webフォント、アナリティクス、リモート画像)をゼロ個含める必要があります。すべてのCSSとJSはインライン化。すべての画像はData URIとしてインライン化されるか、ユーザーが管理するローカルフォルダから参照されます。
  4. 単一のアーティファクト。 成果物は1つのindex.htmlで、file://から開いてもネットワークが無効でも動作する必要があります。
  5. コンテンツの忠実性。 ユーザーが提供していない主張、数値、キャプションを追加しないでください。フィールドが欠落している場合は、もっともらしいテキストで埋める代わりに、スロットを視覚的に空のままにしておきます(§4.9参照)。
  6. スコープを仮定する前に質問すること。 ページ数、オーディエンス、言語が指定されていない場合は、一度質問し、明示されたデフォルトで続行します。

2. 実行時パラメータ

マークアップを記述する前に、これらを収集します。ここに組み込み値はありません。

パラメータ必須型備考
content_pathはいpathページごとのコンテンツのソース(§3)
titleはいstringデッキタイトル。<title>とランニングヘッドにも使用
out_pathはいpathビルドされた単一ファイルの出力先
langいいえzh-CN | enデフォルト zh-CN。フォントスタックと line-height に影響
pagesいいえint予想ページ数。省略した場合はコンテンツから導出して報告
image_dirいいえpath画像を含むローカルフォルダ。省略した場合はプレースホルダープレートを使用
accentいいえhex単一のアクセントカラー。デフォルト #C0483C
motionいいえfull | calmcalm は持続時間を40%短縮し、スロープッシュを無効にする

ユーザーがライブサイトをスタイルの参考として言及した場合は、それを散文(「ダークエディトリアル、セリフタイトル、ヘアライン」)として記録し、そのリソースを取得、埋め込み、引用しないでください。

3. 入力契約

どちらの形式でも受け入れます。最初に§3.3のJSON形状に正規化します。

3.1 Markdown 規則

# デッキタイトル
## ページ1 — カバー
- claim: 一文で、反証可能
- kicker: DESIGN READING · 001
- image: cover.webp
- text: オプションの短い本文、40文字以内
## ページ2 — 主張
...

3.2 JSON

{
  "title": "string",
  "lang": "zh-CN",
  "pages": [
    {
      "id": 1,
      "kind": "cover",
      "kicker": "string?",
      "title": "string",
      "claim": "string?",
      "body": "string? (40 chars以下)",
      "figure": { "src": "img/x.webp", "caption": "string?", "note": "string?" },
      "data": { "value": "0.89", "rangeStart": "0.90", "rangeEnd": "0.95", "label": "string" },
      "items": ["string", "string"],
      "caveat": "string?"
    }
  ]
}

3.3 正規化されたページオブジェクト

id(int、1から連続)、kind、kicker、title、claim、body、figure、data、items、caveat。未知のキーは静かに破棄されるのではなく、data-extra属性に保持されます。

4. レンダリング契約

4.1 ステージ

固定 1600×900 キャンバス、ビューポートに均一にスケーリング。リフローは絶対に行いません。

#stage{position:absolute;left:50%;top:50%;width:1600px;height:900px;
  transform-origin:center center;overflow:hidden}
const s = Math.min(vw / 1600, vh / 900);
stage.style.transform = `translate(-50%,-50%) scale(${s})`;

利用可能な場合はvisualViewportを使用し、Math.min(visualViewport.height, innerHeight)を取得します。bodyはposition:fixed; inset:0; height:100dvh; overflow:hiddenでなければなりません。resize、orientationchange、visualViewport.resizeをリッスンします。

4.2 トークン

:root{
  --ink:#0F1214; --ink2:#161A1D;
  --paper:#E9E5DC; --dim:rgba(233,229,220,.52); --faint:rgba(233,229,220,.30);
  --rule:rgba(233,229,220,.20);
  --accent:#C0483C;            /* `accent` パラメータで上書き可能 */
  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC",serif;
  --sans:"Noto Sans SC","Source Han Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
}

アクセントカラーは番号付けと主要な図のみに予約されています。装飾、境界線、見出しに一括して使用しないでください。

4.3 タイプスケール

66 / 46 / 30 / 19 / 15 / 12 / 11 px。本文テキストは15pxを下回ってはなりません。11–12pxはランニングヘッド、キャプション、脚注に限定されます。タイトルはセリフ、本文はサンセリフ。行間: タイトル 1.28–1.5、本文 1.95–2.0。キッカーとキャプションの文字間隔: 0.14em–0.22em。

4.4 グリッド

ページパディング 84px 104px。コンテンツカラム最大幅 1180px。2カラム分割はgap: 70pxと不等分割(例:820/512)を使用します — 等分割はスプレッドシートのように読み取れます。

4.5 プレート(画像パネル)

.plate{position:relative;overflow:hidden;background:var(--ink2)}
.plate::after{content:'';position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 70px 22px var(--ink), inset 0 0 26px 8px rgba(15,18,20,.55)}
.plate img{width:100%;height:100%;object-fit:cover;display:block;
  transform:scale(1.07);transition:transform 11s linear}
.slide.in .plate img{transform:scale(1)}

インセットシャドウは、画像自身の明るい背景を暗いページに溶かし込みます。これがないと、すべての写真に明るい長方形の継ぎ目が表示されます。

4.6 モーションプリミティブ — ページごとに1つ

クラス効果
.rise16px 上方向へのフェードイン。.d1–.d6 でタイミングをずらす
.drawSVGパスの成長。pathLength="1000" が必要。stroke-dashoffset:1000 → 0
.wipeclip-path: inset(0 100% 0 0) → inset(0)
.pop不透明度のみ、純粋に遅延あり

これらのうち正確に1つがページのメインモーションです。その他は遅延されたエコーとしてのみ使用できます。 持続時間: rise 0.9s、draw 1.7s、wipe 1.3s、イメージプッシュ 11s。イージングは out-cubic、バウンスは禁止。

4.7 ページアーキタイプ

これら10個から選択します。アドホックなレイアウトを考案しないでください。

  1. カバー — フルブリードプレート、左下揃えのタイトルブロック、ヘアライン区切り、サブタイトル行。
  2. 主張 — 特大の引用文、著者行、下部ルールにピン止めされたスコープ脚注。
  3. 分割図+テキスト — 左に図、右にキッカー/タイトル/本文、オプションのネイティブスケール図。
  4. フルブリード図+パス — フルワイズプレートとSVGオーバーレイパス、1つのエンドラベル。
  5. 番号付きアンカー — 実際のパーツに配置された2–4個の.pinバッジ付きの図、右側に凡例。
  6. 階段セット — 対角線に沿ってオフセットされた3つのサイズ減少プレート。不足アセットは、何を撮影すべきかを示す破線の「アーカイブギャップ」カードになる。
  7. レンジバー — 両端が常に両方の数字で表示される。1つの数字とノートだけを表示することは禁止。
  8. タイムライン — 水平ルール、3つのノード、範囲外のノードは中空表示。
  9. コストページ — 3つの短いステートメント、段差インデント、画像なし(画像は正直さを弱めるため)。
  10. クロージングファイブ — 垂直ルール上の5つの番号付き行、プラス1つのアクション文。

4.8 クローム

ランニングヘッド(.rail)左上にデッキラベル、右上にNN / TT。下部にアクセントカラーの2pxプログレスバー。6.5秒後にフェードアウトするキーボードヒント。キーボード: ←/→/Space/PageUp/PageDown、F フルスクリーン、A オートプレイ(9秒/ページ)、Home/End。右半分クリック → 次へ、左半分クリック → 前へ。タッチ: 50pxの水平スワイプ。ディープリンク: ?p=N。

4.9 アセット欠落

figure.srcが存在しないか、ファイルが存在しない場合は、壊れた画像の代わりにプレースホルダープレートをレンダリングします。

<div class="plate" data-ph="FIG 03 · 未撮影:全身正面、腰の高さにカメラ"></div>

[data-ph] は、かすかな斜線のハッチ、点線の1pxアウトライン、58%の不透明度で中央揃えされたラベルでスタイル設定します。プレースホルダーは可視である必要があります — 暗いページ上の暗いブロックは「何もない」と読み取られます。

4.10 静的状態(必須)

@media (prefers-reduced-motion: reduce){
  *{transition:none!important;animation:none!important}
  .draw{stroke-dashoffset:0}
  .pop,.rise,.pin{opacity:1;transform:none}
  .wipe{clip-path:none}
  .plate img{transform:none}
}

このブロックはアクセシビリティパスであると同時に、ページのスクリーンショットを確実に撮る唯一の方法です。.staticクラスをJSからトグルして実装しないでください。

5. 手順

  1. コンテンツを読み込む。 §3に従って解析、正規化し、フィードバック(ページ数、選択された種類、欠落フィールド)を返します。複数のページにわたって必須フィールドが1つ以上欠落している場合は停止して質問します。
  2. アーキタイプを割り当てる。 各ページを§4.7のいずれかにマッピングします。マッピングを表として報告します。アーキタイプに適合しないコンテンツのページは、無理に適合させるのではなく、フラグを立てます。
  3. アセットをチェックする。 すべてのfigure.srcについて、image_dir下にファイルが存在することを確認します。欠落しているものをリストアップします。それらは§4.9のプレースホルダーになります。
  4. index.src.htmlを作成する。 手書きのマークアップ、テンプレートエンジンは使用しません。ページごとに1つの<section class="slide" data-i="N">、Nは0から連続。
  5. ビルドする。 CSS/JSと画像をインライン化してout_pathに出力します。アーティファクトが絶対URL(プロトコル相対の//hostパスを含む)を参照しておらず、相対img/参照を保持していないことを確認します。
  6. 検証する。 静的チェック(§6参照)に加えて、少なくとも1ページ目、中間、最終ページを1600×900および844×390でヘッドレススクリーンショットします。
  7. 報告する。 出力: ページ数、アーキタイプ表、作成されたファイル、アーティファクトサイズ、スクリーンショットパス、残されたプレースホルダー。

6. 品質ゲート

警告のまま出荷せず、ビルドを失敗させて修正します。

  • data-i が0から連続。コンテンツページごとに1つのセクション。
  • 置き換えられていない{{placeholder}}がない。
  • 外部サブリソースなし: 絶対URL(任意のスキーム)、プロトコル相対パスがない。
  • 単一ファイルとしてビルドされた場合、アーティファクトにsrc="img/..."が残っていない(すべてインライン化されている)。
  • @media (prefers-reduced-motion: reduce) が存在する。
  • すべてのページに正確に1つのメインモーションクラスがある。
  • 1600×900および844×390で、テキストノードがコンテナからはみ出していない。
  • 300KB以上の画像は、WebPへの変換を提案するフラグが立てられている。
  • 単一アーティファクト ≤ 6MB。それを超える場合は画像が圧縮されていないことを意味する。
  • 生成されたファイルにURL、シェアコード、ID、トークンがない。
  • サードパーティのソース、画像、フォントが埋め込まれていない。

7. 出力契約

<out_path>              単一の自己完結型HTML
<working dir>/index.src.html   手動編集可能なソース(一緒に保持)

最終メッセージで明示的に述べること: ファイルは自己完結型であり、ネットワークを必要とせず、ローカルでどのフォントを期待するか。

8. 障害処理

状況対応
コンテンツにページごとのclaimがない各ページに1つ依頼する。主張を推測しない
ページ数が22を超える注意力の限界について警告。マージを提案し、ユーザーの選択に従う
画像が参照されているが見つからない§4.9のプレースホルダーをレンダリングし、レポートにパスをリストする
フォントが利用できない続行する。フォールバックをレポートに記載する
ユーザーがpptx/pdfを要求断り、フォーマットが対象外であることを説明する
ユーザーが「このサイトを完全にコピー」してと要求この仕様からのビジュアル言語のみが再現されることを説明する。サイトを取得またはミラーリングしない

関連スキル