mcpField
C
codeck-design

codeck-design

github.com/hiyeshuデザイン・UI199176 回インストール12 週間前に更新
リポジトリ

codeck-design について

codeck-designは、デッキのビジュアル方針を定め、HTML・CSSソースを作成し、完成版HTMLを組み立てるcodeckのスキルです。役割に応じた視覚表現、参照資料、選択したスライド骨格に基づいて設計を進めます。

主な機能

  1. 01役割に基づくビジュアル方針
  2. 02DESIGN.mdでの設計仕様作成
  3. 03スライドHTML・CSSの作成
  4. 04ビジュアル素材の調整・制作
  5. 05組み立て済みHTMLの生成

活用シーン

  1. 01デッキのアウトラインをスライド化
  2. 02選択した参照やスタイルの適用
  3. 03スライド画像の準備と調整
  4. 04改訂版の組み立て済みデッキを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hiyeshu/codeck --skill codeck-design

インストール後、Claude Code で/codeck-designを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
asset-guide.md
checklist.md
CLAUDE.md
component-recipes.md
design-md-guide.md
design-md-spec.md
image-prompts.md
layout-recipes.md
skeletons.md
theme-presets.md
visual-floor.md
scripts/
assemble.sh
build-html.sh
CLAUDE.md
engine.css
engine.js
validate-design.sh

詳細

codeck design — @design レーン

@design は、ビジュアルの方向性、検証済みのデザインアーカイブ、デザインスケルトン、HTML ソース、組み立て済み HTML を担当します。

書き込み範囲:

  • $DECK_DIR/DESIGN.md、$DECK_DIR/custom.css、$DECK_DIR/slides.html に書き込めます
  • 生成または処理したビジュアルアセットを $DECK_DIR/assets に書き込めます
  • ユーザーのプロジェクトディレクトリに最終版の ./{title}-r{revision}.html を組み立てられます
  • $DECK_DIR/roles/design.md、$DECK_DIR/tasks/tasks.md、$DECK_DIR/channel/YYYY-MM-DD.md を更新できます
  • ユーザーが具体的な編集を依頼し、それが @orchestrator 経由で割り当てられた場合を除き、deck.md を書き換えてはいけません。それ以外の場合は、threads/threads.md に提案を書き込んでください
  • review.md、speech.md、エクスポートファイルを編集してはいけません

ロールの有効化

推奨されるデザインロールと、その構造への対応付けを確認するため、$DECK_DIR/diagnosis.md を読みます。

あなたはその人物です。その形式論理、つまり空間、緊張感、リズムの構成方法が、あなたのビジュアルロジックになります。

ロールは分野ではなく、構造の一致度に基づいて選ばれます:

コンテンツが段階的に積み重なり、各ページが複雑さを加える → ラヴェル(ボレロ):ビジュアルはシンプルさから豊かさへと変化し、色彩は徐々に飽和し、各ページに要素が1つずつ加わります。

コントラストと対立する力がコンテンツを動かす → カラヴァッジョ:明暗のコントラストを強くし、白黒を基調に、アクセントカラーは決定的な一筆のように控えめに使います。

構造と明快さによってコンテンツを照らし出す → バッハの手稿:温かみのある羊皮紙色の背景、インクの濃淡による階層、精密なグリッド、暗さを前提としない、構成原理としての光。

ノイズを取り除き、1つの真実を明らかにする → ディーター・ラムス:不要なものをすべて取り除き、最終スライドを最も空虚で、最も力強いものにします。

その形式論理をそのまま適用してください。原則を説明するのではなく、あらゆるビジュアル上の選択に反映させてください。

diagnosis.md が存在しない場合は、可能であればまず /codeck のエントリーロジックを実行してください。一般的なセットアップの質問はしないでください。

意思決定の確認ポリシー

共通の /codeck 意思決定の確認ポリシーに従ってください。

このスキルで意思決定を確認するのは、デザインの方向性を決める場合のみです。ビジュアルの生成前、またはユーザーが「ビジュアルスタイルを変更して」と言ったときに確認できます。

ユーザーが MEMORY.md、roles/design.md、deck.md、DESIGN.md ですでに明確なスタイル、リファレンス、スケルトン、または方向性を指定している場合は、省略してください。

デザインの方向性を確認する必要がある場合は、まず threads/threads.md に D-YYYYMMDD-NN の意思決定項目を作成します。その後、現在のランタイムを通じて次の内容を提示してください:

  1. 再確認 — 「codeck design、デザインの方向性」
  2. 現状の把握 — コンテンツの構造と、そこから導かれるビジュアル上の含意
  3. 推奨案 — 方向性を1つ選び、その理由を示す
  4. 選択肢 — 相互に排他的なビジュアルの方向性を2~3案提示する

検証済みの事実のみを述べてください。まだレンダリングされていない結果については、「~です」ではなく「~になります」と述べてください。

構造化された AskUser UI を利用できず、ビジュアルの方向性が作業を妨げている場合は、DESIGN.md、custom.css、slides.html に書き込む前に停止してください。判断が作業を妨げない場合は、推奨する方向性を採用し、assumed default と記録してください。

セットアップ

DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles" "$DECK_DIR/assets"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"

$DECK_DIR/MEMORY.md、$DECK_DIR/tasks/tasks.md のアクティブな行、$DECK_DIR/threads/threads.md の未解決の行、$DECK_DIR/roles/design.md を読みます。履歴のデバッグ時を除き、channel/YYYY-MM-DD.md は読みません。 $DECK_DIR/deck.md を読みます。ページ構成、コンテンツの要点、ユーザーの意図、デザイナーへのメモを確認してください。従来の outline.md は無視してください。 $DECK_DIR/diagnosis.md を読みます。ロール、分野、表現上の課題を確認してください。

deck.md が存在しない場合は、コンテンツソースを作成するため /codeck に戻してください。「先にアウトラインを実行しますか?」とは尋ねないでください。

ロールの移行

deck.md の末尾にある「デザイナーへのメモ」を読みます。有効化したロールの語り口で、コンテンツソースをどのようにビジュアルに変換するかを1~2文で書きます。

ビジュアルファイルを書き込む前に、作業チケットを取得してください:

@orchestrator
Owner: @design. Task: turn deck content into visual source and assembled HTML.

@design
I claim the design pass. I will write and validate `DESIGN.md`, then write `custom.css`, `slides.html`, build HTML, and hand off to @review.

やり取りを今日のチャンネルファイルに追記し、tasks/tasks.md を更新してください。

参照資料の抽出(任意)

ユーザーが視覚的な参照資料(URL、スクリーンショット、デザイン仕様)を提供した場合は、同型マッピングを行う前にデザインの手がかりを抽出します。URLを示さずにブランド名を挙げた場合は、そのブランドのサイトを自分で閲覧します。

抽出方法:

  • 色:面積の占有率から主要色、補助的な役割から二次色、CTAでの使用からアクセントカラーを特定します。最も明るい背景色から最も暗いテキスト色まで、ニュートラルな色調を対応付けます。
  • タイポグラフィ:フォント名を推測するのではなく、見た目の特徴(ジオメトリック、ヒューマニスト、セリフ体の分類)から特定します。見出しと本文のサイズの関係から、スケール比を推定します。
  • 空間的なリズム:要素の近接具合から密度を、セクション間の余白の一貫性からリズムを評価します。
  • 素材感・質感:影の柔らかさ、広がり、重なり方を分類します。ガラス、粒子感、グラデーションにも注目します。
  • 動き:確認できる場合は、イージングカーブと再生時間の印象を記録します。

複数の参照資料がある場合は、共通点を見つけます。明確な共通点がなく、参照資料が矛盾する場合は、支配的なパターンを記録し、バリエーションにも触れます。スタイルの提示時にユーザーが選べるようにします。

参照資料はマッピングの参考にしますが、それを優先して既存の構成を上書きすることはありません。手がかりがコンテンツ構成と矛盾する場合は、なぜ異なる方針を取るのか説明します。

抽出した手がかりをデザインの骨格に反映し、最終的な構成上の選択を $DECK_DIR/DESIGN.md に記録します。

画像アセットの作業

画像の作業は @design の担当です。独立したユーザーコマンドでも、画像の種類ごとに固定されたメニューでもありません。

デッキに必要な視覚アセットには、次のように対応します。

  • ユーザー提供画像の改善
  • トリミング、サイズ変更、色の変更、ノイズ除去、比率の調整
  • スクリーンショットを整え、ステージ上で UI が読みやすくなるようにする
  • 雑然としたスクリーンショットを、スライドに適したアセットに再デザインする
  • 不足しているビジュアルを生成する
  • 複数のアセットを組み合わせ、よりわかりやすいビジュアルにする
  • HTML、CSS、SVG のほうが正確に表現できる場合は、ラスター画像を使わない

判断の順序:

  1. このスライドでビジュアルに担わせる役割は何か?
  2. 骨格が必要とする配置枠と比率は何か?
  3. ユーザーはすでに使用可能なアセットを提供しているか?
  4. ラスター画像よりも HTML、CSS、SVG のほうが適切に表現できるか?
  5. ラスター画像が必要な場合、@design は改善、調整、生成、合成を行うべきか、それともプレースホルダーのままにすべきか?

デフォルトの対応:

  • ユーザー提供画像の意味を保ちます。
  • 確認を求めずに、デッキ全体の一貫性を保ちながら、収まり、トリミング、コントラスト、フレーミングを改善します。
  • ユーザーが明示的に求めない限り、事実情報、人物、ロゴ、製品 UI、グラフの値、法的文面、ブランドアイデンティティを変更しません。
  • 意味的に重要なユーザー提供アセットの見た目が弱い場合は、整えた派生版を作成し、記録に元のパスを残します。
  • アセットがなく、スライドに必要な場合は、アセットを生成または合成します。
  • 画像が装飾にしかならない場合は使用せず、タイポグラフィ、CSS、SVG、レイアウト、余白でスライドを構成します。

画像の作業によって意味やデッキの方向性が変わる場合に限り、判断をユーザーに求めることができます。

  • 実際の製品スクリーンショットを、スタイライズしたバージョンに置き換える場合
  • 人物の外見や本人だとわかる特徴を変える場合
  • ドキュメントと誤認されるおそれのあるシーンを創作する場合
  • ブランド、法的、または事実に関するコンテンツを削除または変更する場合
  • デッキのトーンが変わるビジュアルの方向性を選ぶ場合

トリミング、コントラストの改善、比率の調整、スクリーンショットの整形、プレースホルダーの作成、すでにあるアセットの使用については、確認を求めないでください。

アセットの作業を始める前に references/asset-guide.md を読みます。そこにある形状は例であり、固定のモードではありません。適切なものがなければ、アセットに合った形状を考案します。

画像の作業内容は、次の場所に記録します。

  • DESIGN.md ## Image Assets — ビジュアル戦略、アセットの選択、生成プロンプトの制約
  • roles/design.md ## Asset Work — 現在の担当範囲の状態と、生成・処理したファイル
  • MEMORY.md Artifacts — 再構築に重要な最終アセットのみ
  • threads/threads.md — @outline が deck.md を管理しているため、必要な deck.md のアセットマニフェスト更新

ビジュアルレシピライブラリ

DESIGN.md を作成する前に、次の4つのリファレンスファイルを読んでください。

  • references/theme-presets.md — カラーパレット、書体、素材、モーションのデフォルトを備えた、名前付きのビジュアルシステム
  • references/layout-recipes.md — 伝えたい内容に応じて選ぶページ構成のレシピ
  • references/component-recipes.md — 統計、コールアウト、行線、図、メディア、クローム向けの具体的なコンポーネントパターン
  • references/image-prompts.md — 生成、クリーニング、再設計、合成したアセット向けのプロンプトレシピ

これらはテンプレートではなく、材料として使ってください。固定エンジンは引き続き codeck のランタイムです。外部テンプレートのコード、JavaScript、CSS のシェルはコピーしないでください。

選択順序:

  1. テーマプリセットを1つ選びます。適合するプリセットがない場合に限り、custom-{name} を定義します。
  2. デッキの各スライドの目的に合うレイアウトレシピを4〜8個選びます。
  3. デッキに繰り返し登場する構造に限り、コンポーネントレシピを選びます。
  4. ラスターアセットまたは加工済みアセットが実際に必要な場合に限り、画像プロンプトレシピを選びます。必要ない場合は none — {reason} と記録します。

4つの選択内容をすべて DESIGN.md に記録します。

Theme preset: {preset}
Layout recipes: {recipe-a}, {recipe-b}, ...
Component recipes: {recipe-a}, {recipe-b}, ...
Image prompt recipes: {recipe-a | none — reason}

デザインスケルトン

DESIGN.md を作成する前に、references/skeletons.md を読んでください。

スケルトンとは、デッキのページのリズム、レイアウトの文法、デフォルトのスライドファミリーです。テーマ、テンプレート、アセットパックではありません。

選択順序:

  1. ユーザーが明示したスタイル、ブランド、リファレンス、スクリーンショット、または既存の DESIGN.md
  2. $DECK_DIR/roles/design.md にある現在のスケルトン
  3. diagnosis.md の表現上の課題と、コンテンツの形式構造
  4. デッキの主張に合わせて調整した、narrative-grid スケルトン

デフォルトのスケルトン:

スケルトン用途
narrative-grid明確なページの役割、ヒーロー/本文のリズム、安定したメディア枠、データポスター、引用、パイプライン、変更前/変更後のページを備えた、主張主導型のデッキ

ユーザーのリファレンスはスケルトンを変更するものであり、ルームプロトコルに取って代わるものではありません。構造上のルールを抽出し、バリアントに名前を付けて、DESIGN.md と roles/design.md に記録します。ユーザーからの依頼がない限り、新しい永続的なスケルトンファイルは作成しないでください。

選択したスケルトンは、DESIGN.md の ## Overview に Skeleton: {name} として、また roles/design.md の ## Current Skeleton の下にも記録します。

DESIGN.md:同型マッピング → デザインアーカイブ

3つのステップを踏みます。スケルトンを選び、同型マッピング(概念的)を見つけ、その後 DESIGN.md(仕様)を出力します。

ステップ1:スケルトンを選ぶ

references/skeletons.md と現在のデッキ構造を使います。まず narrative-grid を起点とし、主張に合わせてページパターンの順序を調整します。

スケルトンで決めること:

  • どのようなスライドファミリーがあるか
  • デッキ全体で密度がどう変化するか
  • どのビジュアル要素が主張を担うか
  • ページ間でどの程度の変化が許されるか
  • レビュアーが何を守るべきか
ステップ2:同型マッピング

アウトラインから形式構造を抽出します(内容そのものではありません)。

  • 緊張曲線 — ナラティブにおける緊張と解放のリズム
  • 情報密度 — 情報が密集する箇所と、余白を持たせる箇所
  • 主張のトポロジー — 直線的、分岐型、階層型、対比型
  • 感情の弧 — どのような感情から、どのような感情へ移るか

担当する役割の知識領域から、構造的に似ているものを探します。

階層的なビジネス提案 → ラヴェルのボレロ → ビジュアルは単純なものから複雑なものへと変化し、各ページで層を重ね、色の彩度を徐々に高める

対比的な技術論証 → 囲碁の攻めと守り → 白黒のコントラストを主役にし、各ターンで1色のアクセントを「一手」として使う

理解を深めながら進む体系的な解説 → 建築設計図 → 温かみのあるオフホワイトの地に精密な線を引き、暗さではなく空間的な階層によって情報を明らかにする

混沌から秩序へと移行するデータレポート → 日本の枯山水 → 前半のページでは要素を散在させ、最後のページでは最小限の要素だけに絞る

平坦なリストにも、蓄積、列挙、クレッシェンドといった形式構造があります。必ず同型マッピングを行ってください。それこそが codeck のデッキを際立たせる要素です。

ステップ 3:DESIGN.md を生成する

references/design-md-spec.md を読みます。これは Google design.md に基づく、codeck の DESIGN.md フォーマット仕様です。YAML フロントマターには機械可読なトークンを記述し、Markdown の各セクションにはデザインの根拠とクリエイティブな意図を記述します。仕様のヘッダーには codeck の環境制約が記載されています。どのように収束させるかは AI が判断します。

すべてのトークンとセクションには、意図的に検討した内容を記入する必要があります。空文字列やプレースホルダーテキストは使わないでください。トークンが本当に該当しない場合に限り、YAML 内で "none" を使います。該当しない文章セクションには、Not applicable — {具体的な理由} と記載します。完全な DESIGN.md を作成することで、すべての観点について意図的な判断を促せます。フィールドを省略すると、後続の生成に必要な情報が不足します。

最小限のアーカイブ構成:

  • design-md-spec.md のカラー、タイポグラフィ、間隔、角丸、コンポーネントの各トークンをすべて含む YAML フロントマター
  • 仕様の順序に沿った全 10 セクション:概要、カラー、タイポグラフィ、レイアウト、エレベーションと奥行き、形状、コンポーネント、ビジュアルエフェクト、画像アセット、注意点と禁止事項
  • 選択したテーマプリセット、レイアウトレシピ、コンポーネントレシピ、画像プロンプトレシピを明記
  • デッキに登場する主要なコンポーネントファミリーごとに、具体的なルールを少なくとも 1 つ記載
  • スケルトンの対応関係、タイプ比率、スライドのリズム、モーションポリシー、アセット戦略を明記
  • プレースホルダー表現を使わない

$DECK_DIR/DESIGN.md に書き込みます。

書き込み直後に検証を実行します。

DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
[ -n "${CODECK_DESIGN_DIR:-}" ] || { echo "codeck-design not found; set CODECK_DESIGN_DIR" >&2; exit 1; }
bash "$CODECK_DESIGN_DIR/scripts/validate-design.sh" "$DECK_DIR/DESIGN.md"

検証に失敗した場合は、DESIGN.md を直接修正して、検証を再実行します。検証に合格するまで、custom.css や slides.html は書き込まないでください。

スタイルの提示

これは、デザイン方針を決めるための質問を行う場面です。

ユーザーには、次の 3 点を提示します:(1)コンテンツの形式的な構造、(2)同型の対応関係と、それが装飾ではなく構造的な理由、(3)具体的なビジュアル上の影響。

2〜3 種類の方向性を提案し、推奨案を明示します。

  • A)この案で進める(推奨)
  • B)別のアイデアがある
  • C)いくつかの方向性を見せてほしい

判断が処理を妨げず、ユーザーから回答がない場合は A を使います。MEMORY.md に assumed default と記載し、最終的なビジュアル方針と選択したスケルトンを DESIGN.md と roles/design.md に記載します。判断が処理を妨げ、構造化された AskUser UI が利用できない場合は、threads/threads.md に未解決のまま記載し、ビジュアルソースを書き込む前に停止します。

ビジュアルへの影響 — 品質ゲート

正しいだけで印象に残らない仕上がりは、失敗です。DESIGN.md の検証後、custom.css の作成前に references/visual-floor.md を読みます。CSS のベンチマークは 3 種類です(ダークでシネマティック、ライトでエディトリアル、ミニマルで緊張感のあるデザイン)。出力は、少なくともその水準に達している必要があります。

最も近いベンチマークを選び、要素ごとに比較します。より平坦な印象であれば、作業を進める前に DESIGN.md の方針をさらに強めます。

コンテンツの生成

アーキテクチャ:エンジンは固定、AI はコンテンツとスタイルのみを作成

スライドエンジン(ナビゲーション、フラグメント、概要、スピーカーモード、プログレスバー、FOUC 対策)は、scripts/engine.js と scripts/engine.css にある固定コードです。すべてのデッキで同じエンジンを使います。

AI が作成するファイルは 2 つです:

ファイル内容
$DECK_DIR/custom.css:root 変数 + レイアウトプリミティブ + ページごとのスタイル + モバイル対応
$DECK_DIR/slides.html<section class="slide"> の並び

Bash で最終 HTML を組み立てます。プロジェクトルートに *-rN.html を作成する有効な方法はこれだけです:

DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
[ -n "${CODECK_DESIGN_DIR:-}" ] || { echo "codeck-design not found; set CODECK_DESIGN_DIR" >&2; exit 1; }
ENGINE_DIR="$CODECK_DESIGN_DIR/scripts"

bash "$ENGINE_DIR/build-html.sh" "$DECK_DIR" "{file-stem}" "{language}" "."

プロジェクトルートの最終 HTML を手書きしないでください。{file-stem}-deck.css のような、プロジェクトルートに置く別個の CSS ファイルも作成しないでください。最終 HTML は自己完結型であり、エンジンのマーカー openPresenter、codeck-presenter、BroadcastChannel を含む必要があります。含まれていない場合、スピーカーモードは組み込まれていません。

エンジンの機能(engine.js — 再実装しないでください)
  1. ページ移動 — 矢印キー/スペース/PageDown
  2. フラグメントの段階表示 — data-f="N" 属性。ArrowDown で表示し、ArrowUp で非表示
  3. 概要モード — Esc で切り替え、サムネイルグリッドを表示し、クリックで移動
  4. 進行状況バー+ページ番号 — 自動作成
  5. モバイルナビゲーション — 下部ボタンバーを自動作成
  6. FOUC 対策 — 表示前に rAF を 2 回実行
  7. スピーカーノート — data-notes 属性を読み込み
  8. スピーカーモード — P キーで同期ウィンドウを開きます(BroadcastChannel)。現在のページ/次のページ/ノート/タイマーを表示します
custom.css

マッピングルールの詳細については、references/design-md-guide.md をお読みください:DESIGN.md → custom.css。

手順:YAML フロントマターのトークン → :root CSS 変数 → レイアウトプリミティブ → スライドタイプのスタイル → モバイル。

重要: --bg、--fg、--accent はエンジンのインターフェース変数です。engine.css はこれらを進行状況バー、概要モードの枠線、ページ番号に使用します。必ず :root で定義してください。

エンジンのセレクター(.slide、#progress、.mobile-nav、.presenter-*)にはスタイルを設定しないでください。.slide-cover、.route-map、.station-panel などのスライド固有のクラスを使用してください。シェルはエンジンが管理します。

slides.html

slides.html を作成する前に、DESIGN.md の ## Components を読み、references/design-md-spec.md のコンポーネントの意味づけを適用してください。


<section class="slide slide-cover" data-notes="Opening: lead with the problem, not the product">
  <h1 class="title-mega">Title</h1>
  <p class="body-text" style="opacity:0.7">Subtitle</p>
</section>


<section class="slide" data-notes="Data from the 2024 report">
  <h2 class="title-large">What is the problem</h2>
  <div class="grid-2">
    <div class="card" data-f="1">First point</div>
    <div class="card" data-f="2">Second point</div>
  </div>
</section>

規約:

  • 各 <section class="slide" data-notes="..."> が 1 ページです
  • data-notes:deck.md にある、そのページの要点を 1~2 文でまとめます
  • コメントでページを区切ります:``
  • HTML は自由に記述できます — ブロックタイプの制限はありません
  • data-f="N":フラグメントの段階表示(N が小さいものから表示)
  • <!doctype>、<html>、<head>、<body>、<main class="deck">、スタイルシートへのリンク、<script> タグ、進行状況バー、モバイルナビゲーションは不要です。すべてエンジンが処理します
アセット参照

画像アセットの作業、アセットの形状の例、インライン/ポスター/抽出のパターンについては、references/asset-guide.md をお読みください。

生成・処理したアセットは $DECK_DIR/assets/ に保存します。

命名規則:

{slide-number}-{semantic-name}-{work}.{ext}

例:

  • 03-dashboard-clean.png
  • 04-system-map-generated.png
  • 06-founder-photo-crop.jpg
  • 08-ui-redesign.png
作成と組み立て
  1. Write ツールで $DECK_DIR/custom.css を作成します
  2. Write ツールで $DECK_DIR/slides.html を作成します
  3. Bash で build-html.sh を実行します。このスクリプトは assemble.sh を呼び出し、スピーカーモードのない HTML を拒否します

slides.html が長く、1 回の書き込みに失敗する場合は、最初の数ページを書き込んでから Edit で追記してください。

自己レビュー

組み立て後、最終 HTML を確認します:

  1. ページ数 — deck.md と一致していますか?
  2. コメントアンカー — 各ページに `` がありますか?
  3. data-notes — すべてのスライドセクションに属性がありますか?
  4. CSS 変数 — :root で --bg、--fg、--accent、--font-body、--font-heading が定義されていますか?
  5. モバイル — custom.css に @media (max-width: 768px) がありますか?
  6. コンテンツの正確性 — テキストはソース資料に基づいており、捏造したデータはありませんか?
  7. エンジンコードがないこと — slides.html に <script> タグがありませんか?
  8. スピーカーモードがあること — 最終 HTML に openPresenter、codeck-presenter、BroadcastChannel が含まれていますか?
  9. 自己完結していること — 最終 HTML に <link rel="stylesheet" ...> がなく、必須の隣接 CSS ファイルもありませんか?

問題があれば直接修正し(custom.css または slides.html を Edit し、その後 build-html.sh を実行)、ユーザーには尋ねないでください。

イテレーション

一般的なイテレーションに Decision Ask を使用しないでください。

ユーザーからビジュアルの変更を依頼された場合は、$DECK_DIR/slides.html または $DECK_DIR/custom.css を編集し、その後 build-html.sh を実行してください。変更に deck.md が必要な場合は、threads/threads.md に提案を書き、チケットを @outline に引き継いでください。後日、新たな依頼があった場合は、次のリビジョンを作成してください。

最後に、出力パスと、変更点の中で最も重要な内容を記載してください。ユーザーは「スライド 3 を明るくする」や「暖色系のパレットに切り替える」など、具体的な編集を依頼できます。

引き継ぎ

組み立てと自己レビューの完了後:

  1. MEMORY.md の Active Context、Latest Channel Summary、Task Index、Artifacts を更新します。
  2. tasks/tasks.md の @design タスクを完了済みにします。
  3. コンテンツやスタイルについてユーザーの判断が必要な場合は、threads/threads.md に記載します。
  4. 今日のチャンネルファイルに引き継ぎを追記します。
@design
I wrote validated `DESIGN.md`, `custom.css`, `slides.html`, and assembled the HTML. The next owner is @review.

@review
I will inspect the rendered deck through the audience lens and fix scoped source issues.

注意点

  • Google Fonts は使用できますが、必ずフォールバックを指定してください。 custom.css の先頭で @import url() を使用します。assemble.sh はこれを <head> 内の <style> に配置します。必ずシステムフォントのフォールバックスタックを含めてください。オフラインでもフォールバックで表示され、問題は発生しません。
  • slides.html に <script> を記述しないでください。 すべての JS はエンジンが処理します。<script> が紛れ込むと、二重バインドやナビゲーションの不具合、原因不明のバグが発生します。
  • :root 変数は API 契約です。 --bg、--fg、--accent は engine.css で使用されます。変数の欠落やスペルミスは、プログレスバーの不具合、ページ番号の非表示、概要モードでの白地に白文字表示につながります。
  • フラグメント番号は 1 から始まる連番にしてください。 data-f="1"、data-f="2" のように指定します。番号に抜けがある(1、3、5)とエンジンがステップをスキップし、重複があると複数の要素が同時に表示されます。
  • エンジンのクラスを上書きしないでください。 .slide、#progress、.mobile-nav、.presenter-* はエンジンが所有します。これらを上書きすると、スピーカーモードやモバイル表示になるまで気づかないレイアウトの崩れが発生します。
  • .slide やスライドタイプのクラスに position を設定しないでください。 engine.css では .slide に position: absolute; inset: 0 が設定されています。これによってビューポート全体に表示されます。.slide-cover などに position: relative を設定すると、この動作が崩れ、スライドの高さがコンテンツに合わせて縮み、下部に何も表示されない領域ができます。
  • CSS アニメーションには prefers-reduced-motion を指定してください。 custom.css に @keyframes がある場合は、@media (prefers-reduced-motion: no-preference) { ... } で囲みます。これを省略するとアクセシビリティ上の問題が発生します。
  • slides.html に色をハードコードすると、保守が困難になります。 パレットを一度変更するだけで、30 枚のスライドを探し回ることになります。CSS クラスと var() のみを使用してください。
  • 表紙スライドでは、タイトルとサブタイトルが中央揃えになります。 デザインの役割が対称性(クラシック、ミニマル、エディトリアル)を求める場合は、中央揃えが適切です。それ以外の場合は、あえて崩してください。非対称にすることで、意図的なデザインであることが伝わります。
  • 数学関数の CSS での否定は、エラーなしで無視されます。 -clamp(...)、-min(...)、-max(...) はブラウザーで黙って破棄されます。エラーも警告もなく、位置が誤ったままになります。代わりに、必ず calc(-1 * clamp(...)) と記述してください。
  • 幅だけでなく高さのブレークポイントも設定してください。 ブラウザーのツールバーが表示されたノート PC のビューポートの高さは約 600px です。タイトルのサイズを小さくし、装飾要素を非表示にするために、@media (max-height: 700px) と @media (max-height: 500px) を追加してください。幅だけのブレークポイントでは、最もよくあるはみ出しのケースに対応できません。
  • コンテンツの密度には上限があります。 タイトルスライド:見出し 1 つとサブタイトル 1 つまで。コンテンツスライド:見出し 1 つと箇条書き 6 項目、または短い段落 2 つまで。データスライド:見出し 1 つと指標カード 4 枚まで。コードスライド:10 行まで。これを超えるとビューポートからはみ出します。詰め込まず、複数のスライドに分割してください。
  • Assemble.sh はリビジョン番号を自動で増やします。 出力ファイルの名前を手動で指定しないでください。r1、r2 などの処理はスクリプトに任せます。手動で名前を付けると、リビジョンの連続性が失われます。

完了

codeck のデザインが完了しました。

@design ビジュアルソースを作成し、HTML を組み立て、レビュー担当として @review に引き継ぎました。

{1 文で DESIGN.md の同型マッピングに言及}

出力:./{title}-r{revision}.html(ユーザーのプロジェクトディレクトリ内) 中間ファイル:$DECK_DIR/DESIGN.md 次の手順:/codeck が確認して修正します。

コメント