create-ampless 1.0.0-alpha.57 → 1.0.0-alpha.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/index.js +1 -10
  2. package/dist/templates/_shared/AGENTS.ja.md +16 -26
  3. package/dist/templates/_shared/AGENTS.md +16 -26
  4. package/dist/templates/_shared/README.ja.md +29 -3
  5. package/dist/templates/_shared/README.md +29 -3
  6. package/dist/templates/_shared/THEMES.ja.md +495 -0
  7. package/dist/templates/_shared/THEMES.md +523 -0
  8. package/dist/templates/_shared/app/layout.tsx +8 -8
  9. package/dist/templates/_shared/app/providers.tsx +0 -2
  10. package/dist/templates/_shared/components/site-chrome/site-sidebar.tsx +2 -2
  11. package/dist/templates/_shared/components.json +1 -1
  12. package/dist/templates/_shared/lib/admin.ts +4 -6
  13. package/dist/templates/_shared/lib/ampless.ts +2 -8
  14. package/dist/templates/_shared/lib/amplify.ts +0 -5
  15. package/dist/templates/_shared/package.json +2 -2
  16. package/dist/templates/blog/pages/feed.ts +2 -2
  17. package/dist/templates/blog/pages/home.tsx +8 -10
  18. package/dist/templates/blog/pages/post.tsx +9 -12
  19. package/dist/templates/blog/pages/sitemap.ts +2 -2
  20. package/dist/templates/blog/pages/tag.tsx +7 -9
  21. package/dist/templates/corporate/pages/feed.ts +2 -2
  22. package/dist/templates/corporate/pages/home.tsx +6 -8
  23. package/dist/templates/corporate/pages/post.tsx +9 -12
  24. package/dist/templates/corporate/pages/sitemap.ts +2 -2
  25. package/dist/templates/corporate/pages/tag.tsx +7 -9
  26. package/dist/templates/dads/pages/feed.ts +2 -2
  27. package/dist/templates/dads/pages/home.tsx +6 -8
  28. package/dist/templates/dads/pages/post.tsx +9 -12
  29. package/dist/templates/dads/pages/sitemap.ts +2 -2
  30. package/dist/templates/dads/pages/tag.tsx +7 -9
  31. package/dist/templates/docs/pages/feed.ts +2 -2
  32. package/dist/templates/docs/pages/home.tsx +4 -6
  33. package/dist/templates/docs/pages/post.tsx +7 -10
  34. package/dist/templates/docs/pages/sitemap.ts +2 -2
  35. package/dist/templates/docs/pages/tag.tsx +6 -8
  36. package/dist/templates/landing/pages/feed.ts +2 -2
  37. package/dist/templates/landing/pages/home.tsx +6 -8
  38. package/dist/templates/landing/pages/post.tsx +9 -12
  39. package/dist/templates/landing/pages/sitemap.ts +2 -2
  40. package/dist/templates/landing/pages/tag.tsx +7 -9
  41. package/dist/templates/minimal/pages/feed.ts +2 -2
  42. package/dist/templates/minimal/pages/home.tsx +5 -6
  43. package/dist/templates/minimal/pages/post.tsx +8 -10
  44. package/dist/templates/minimal/pages/sitemap.ts +2 -2
  45. package/dist/templates/minimal/pages/tag.tsx +6 -7
  46. package/package.json +1 -1
  47. package/dist/templates/_shared/components/i18n-provider.tsx +0 -15
  48. package/dist/templates/_shared/lib/amplify-server.ts +0 -7
  49. package/dist/templates/_shared/lib/auth-server.ts +0 -15
  50. package/dist/templates/_shared/lib/cn.ts +0 -5
  51. package/dist/templates/_shared/lib/i18n.ts +0 -35
  52. package/dist/templates/_shared/lib/kv-provider.ts +0 -8
  53. package/dist/templates/_shared/lib/media.ts +0 -6
  54. package/dist/templates/_shared/lib/posts-provider.ts +0 -8
  55. package/dist/templates/_shared/lib/posts-public.ts +0 -27
  56. package/dist/templates/_shared/lib/posts.ts +0 -12
  57. package/dist/templates/_shared/lib/seo.ts +0 -11
  58. package/dist/templates/_shared/lib/site-settings.ts +0 -11
  59. package/dist/templates/_shared/lib/storage.ts +0 -10
  60. package/dist/templates/_shared/lib/theme-actions.ts +0 -5
  61. package/dist/templates/_shared/lib/theme-active.ts +0 -10
  62. package/dist/templates/_shared/lib/theme-config.ts +0 -12
  63. package/dist/templates/_shared/lib/upload.ts +0 -6
@@ -0,0 +1,495 @@
1
+ > English: [THEMES.md](./THEMES.md)
2
+ >
3
+ # THEMES.md
4
+
5
+ このドキュメントは、ampless プロジェクトでテーマをカスタマイズするときの実務ガイドです。
6
+ AI エージェントが読むことも、人間が作業メモとして読むことも想定しています。
7
+
8
+ テーマ作業の詳細はここに集約し、`AGENTS.md` / `AGENTS.ja.md` には最終的に「テーマ作業は `THEMES.md` を参照」とだけ残す方針です。
9
+
10
+ ## 基本方針
11
+
12
+ - 公式テーマは直接編集しない。
13
+ - カスタマイズは `themes/my-*/` に閉じ込める。
14
+ - 共有シェルである `app/`、`components/`、`lib/` は、テーマだけで解決できない場合に限って触る。
15
+ - `themes-registry.ts` は自動生成ファイルなので手動編集しない。
16
+ - UI / テーマ変更は、型チェックだけで完了扱いにしない。必ずブラウザで目視確認する。
17
+
18
+ ## ベーステーマの選び方
19
+
20
+ ampless のテーマカスタマイズは、既存テーマをベースにして `themes/my-*/` にコピーするところから始める。
21
+ 最初に「何を作るか」ではなく「どのテーマを土台にするか」を決めると、作業範囲が小さくなる。
22
+
23
+ ### `blog`
24
+
25
+ 個人ブログ、日記、技術メモ、ニュースへのコメントなど、時系列の投稿を中心にしたサイト向け。
26
+
27
+ 特徴:
28
+
29
+ - ホームに投稿フィード。
30
+ - 個別投稿ページ。
31
+ - タグ別一覧。
32
+ - ヘッダー / フッターナビ。
33
+ - カラー、フォント、角丸、固定記事などの調整幅が広い。
34
+
35
+ 向いているカスタマイズ:
36
+
37
+ - 個人メディア風にする。
38
+ - 記事一覧の密度を変える。
39
+ - 記事詳細の組版を強める。
40
+ - Markdown の表、コード、引用まで含めて読み物として整える。
41
+
42
+ 迷ったらまず `blog` をベースにする。
43
+
44
+ ### `minimal`
45
+
46
+ 装飾を抑えた小さなブログ向け。
47
+
48
+ 特徴:
49
+
50
+ - カスタマイズ項目が少ない。
51
+ - 余計な chrome が少ない。
52
+ - デザインを主張させず、投稿を淡々と並べる。
53
+
54
+ 向いているカスタマイズ:
55
+
56
+ - 色と角丸だけ軽く変えたい。
57
+ - レイアウトはほぼ変えない。
58
+ - 文章量が少ないサイト。
59
+
60
+ 大きく作り替えるなら `blog` の方が向く。
61
+
62
+ ### `landing`
63
+
64
+ 1 ページ完結型の紹介サイト向け。
65
+
66
+ 特徴:
67
+
68
+ - ヒーロー中心。
69
+ - CTA ボタン。
70
+ - 任意で最新記事。
71
+ - サイト説明や導線を前面に出す。
72
+
73
+ 向いているカスタマイズ:
74
+
75
+ - プロダクト、イベント、ポートフォリオ、店舗紹介。
76
+ - 投稿一覧よりも最初の訴求を重視するサイト。
77
+ - AI に hero / CTA / feature section のデザインを作らせたい場合。
78
+
79
+ ### `corporate`
80
+
81
+ 企業サイト、事務所、団体サイト向け。
82
+
83
+ 特徴:
84
+
85
+ - 落ち着いたヒーロー。
86
+ - お知らせ一覧。
87
+ - ヘッダー / フッターがしっかりある。
88
+ - フッター注記を持てる。
89
+
90
+ 向いているカスタマイズ:
91
+
92
+ - 会社概要やサービス説明を前面に置く。
93
+ - ニュースやお知らせを投稿として管理する。
94
+ - 信頼感、読みやすさ、保守性を優先する。
95
+
96
+ ### `docs`
97
+
98
+ ドキュメントサイト向け。
99
+
100
+ 特徴:
101
+
102
+ - サイドバー主導。
103
+ - `tag:<name>` をナビに入れると、そのタグの記事一覧を自動展開できる。
104
+ - コードフォントや技術文書向けの構造を持つ。
105
+
106
+ 向いているカスタマイズ:
107
+
108
+ - ヘルプ、仕様書、開発者向けドキュメント。
109
+ - 記事をタグで分類し、サイドバーへ自動反映したい。
110
+ - Markdown のコードブロックや表が多い。
111
+
112
+ ### `dads`
113
+
114
+ デジタル庁デザインシステムに寄せた公共系サイト向け。
115
+
116
+ 特徴:
117
+
118
+ - 高コントラスト。
119
+ - アクセシビリティ重視。
120
+ - 装飾控えめ。
121
+ - `@digital-go-jp/tailwind-theme-plugin` ベース。
122
+
123
+ 向いているカスタマイズ:
124
+
125
+ - 政府、自治体、公共系の情報サイト。
126
+ - 独自の雰囲気よりも準拠性や読みやすさを優先する。
127
+
128
+ 注意:
129
+
130
+ - DADS 以外の色へ大きく変えると、DADS 準拠の意味は薄れる。
131
+ - 公共系では、AI が出した装飾案をそのまま採用せず、アクセシビリティを優先して調整する。
132
+
133
+ ## 標準フロー
134
+
135
+ 1. 公式テーマをコピーする。
136
+
137
+ ```bash
138
+ npm run copy-theme blog my-blog
139
+ ```
140
+
141
+ `my-` プレフィックスがついたテーマはユーザー所有のコピーとして扱われ、`npm run update-ampless` で上書きされない。
142
+
143
+ 2. まずテーマ内だけで実装する。
144
+
145
+ 優先順位:
146
+
147
+ - `themes/my-blog/tokens.css` — 色、フォント、余白、罫線、Markdown 本文の見た目。
148
+ - `themes/my-blog/manifest.ts` — 管理 UI に公開するテーマ設定。
149
+ - `themes/my-blog/pages/` — home / post / tag / feed / sitemap などのルート別レイアウト。
150
+ - `themes/my-blog/components.tsx` など — テーマ内でだけ使う共通 UI。ヘッダー、フッター、ワードマークなどはここに切り出してよい。
151
+
152
+ 3. テーマを有効化する。
153
+
154
+ `/admin/sites/<siteId>/theme` で `my-blog` を選択して保存する。テーマ切り替えはランタイム設定なので、通常は再デプロイ不要。
155
+
156
+ 4. 確認する。
157
+
158
+ ```bash
159
+ npm run dev
160
+ npx tsc --noEmit
161
+ npm run build
162
+ npm run lint
163
+ ```
164
+
165
+ `npm run lint` がプロジェクトの Next.js バージョンと合っていない場合は、その旨を報告する。代替として型チェック、ビルド、ブラウザ確認は必ず行う。
166
+
167
+ ## カスタマイズの設計手順
168
+
169
+ テーマを変更するときは、実装前に次の順で決める。
170
+
171
+ 1. サイトの役割
172
+
173
+ 例: 個人ブログ、技術メモ、ニュースコメント、企業サイト、ドキュメント、ランディングページ。
174
+
175
+ 2. 読ませ方
176
+
177
+ 例: 長文をじっくり読ませる、一覧を高速にスキャンさせる、ヒーローで強く印象づける、検索やタグから探させる。
178
+
179
+ 3. 画面の種類
180
+
181
+ 少なくとも以下を考える。
182
+
183
+ - home
184
+ - post detail
185
+ - tag / archive
186
+ - empty state
187
+ - mobile home
188
+ - mobile detail
189
+
190
+ 4. 変更範囲
191
+
192
+ `tokens.css` だけで済むのか、`pages/` の構造変更が必要か、テーマ内コンポーネントを追加するかを決める。
193
+
194
+ 5. Markdown の扱い
195
+
196
+ ブログや docs では、本文だけでなく Markdown 要素もテーマの一部として設計する。
197
+
198
+ ### 変更の優先順位
199
+
200
+ まず `tokens.css` で変えられることを変える。
201
+
202
+ - 色
203
+ - フォント
204
+ - 背景
205
+ - 罫線
206
+ - 余白
207
+ - prose / Markdown
208
+ - レスポンシブ時のサイズ調整
209
+
210
+ 次に `pages/` を変える。
211
+
212
+ - home の構造。
213
+ - 記事一覧の密度。
214
+ - post detail の余白とメタ情報。
215
+ - tag / archive の見せ方。
216
+ - empty state。
217
+
218
+ 最後に、繰り返し出る要素を `components.tsx` などのテーマ内コンポーネントへ切り出す。
219
+
220
+ 共有 `components/` や `app/` へ手を入れるのは、複数テーマで使う必要がある場合だけにする。
221
+
222
+ ## Claude Design を使わない場合
223
+
224
+ まず、既存テーマを読む。いきなり作り替えない。
225
+
226
+ 確認するもの:
227
+
228
+ - `tokens.css` のトークン構造。
229
+ - `manifest.ts` の公開フィールド。
230
+ - `pages/home.tsx`、`pages/post.tsx`、`pages/tag.tsx` のデータ取得と表示責務。
231
+ - `themes/<official-name>/README.*` があれば、テーマ固有の意図。
232
+
233
+ 進め方:
234
+
235
+ 1. 要件を「読む体験」「情報密度」「ブランド感」「対応するコンテンツ型」に分解する。
236
+ 2. 先に `tokens.css` で大きな方向を決める。
237
+ 3. 必要な場合だけ `pages/` の構造を変更する。
238
+ 4. 繰り返し出る chrome はテーマローカルコンポーネントに切り出す。
239
+ 5. Markdown 要素も必ずデザイン対象にする。
240
+
241
+ Markdown で確認するもの:
242
+
243
+ - 見出し `h1` / `h2` / `h3`
244
+ - 段落
245
+ - リスト
246
+ - 表
247
+ - 引用
248
+ - インラインコード
249
+ - コードブロック
250
+ - 画像
251
+ - リンク
252
+
253
+ 読み物サイトでは、本文の可読性を最優先する。装飾は本文の外側、余白、罫線、ナビゲーション、一覧の密度、メタ情報の組版で出す。
254
+
255
+ ## AI を使ったテーマカスタマイズ
256
+
257
+ AI は「実装を全部任せる道具」ではなく、複数の役割に分けて使うと精度が上がる。
258
+
259
+ おすすめの役割分担:
260
+
261
+ - デザイン探索: Claude Design、ChatGPT、画像生成などで方向性を出す。
262
+ - 実装計画: Codex / Claude Code に既存テーマを読ませ、どのファイルに反映するか決める。
263
+ - 実装: テーマ内ファイルを編集する。
264
+ - 検証: ブラウザスクリーンショットで Desktop / Mobile を比較する。
265
+ - 仕上げ: はみ出し、空状態、Markdown、長いタイトルを詰める。
266
+
267
+ ### AI に渡すとよい情報
268
+
269
+ AI にテーマ案を作らせるときは、次を渡す。
270
+
271
+ - サイト名。
272
+ - サイトの内容。
273
+ - 読者。
274
+ - 主な投稿タイプ。
275
+ - 避けたい雰囲気。
276
+ - 参考サイトやスクリーンショット。
277
+ - Desktop / Mobile の両方が必要であること。
278
+ - home / archive / detail / empty state が必要であること。
279
+ - Markdown の表、リスト、コード、引用も使うこと。
280
+
281
+ 例:
282
+
283
+ ```text
284
+ ishinao.net という個人ブログのテーマを作りたい。
285
+ 内容は日常、技術メモ、ニュースへの短いコメント。
286
+ 本文を読ませるサイトなので、記事本文の可読性を最優先。
287
+ ただし home / archive / header / meta 情報ではデザイン性を出したい。
288
+ Desktop と Mobile の両方で、Top empty、Top with content、Archive、Detail を作って。
289
+ Markdown の表、リスト、引用、コードブロックも浮かない雰囲気にしたい。
290
+ ```
291
+
292
+ ### AI 出力をそのまま信じない
293
+
294
+ AI が作ったデザインには、次のような抜けが出やすい。
295
+
296
+ - Desktop は良いが Mobile が破綻する。
297
+ - ヒーローだけ作り込み、記事詳細が普通になる。
298
+ - 本文の可読性より装飾が勝つ。
299
+ - Markdown の表やコードが未設計。
300
+ - 空状態がない。
301
+ - 実データの長い日本語タイトルで崩れる。
302
+ - 余白や文字サイズが実装時に別物になる。
303
+
304
+ そのため、AI 出力は「完成コード」ではなく「視覚仕様」として扱う。
305
+
306
+ ## Claude Design を使う場合
307
+
308
+ Claude Design の出力 HTML は、多くの場合「ひとつの完成サイト」ではなく「複数画面のアートボード集」です。HTML をそのまま移植するのではなく、画面ごとの設計意図を抽出して、ampless のテーマ構造へ写像する。
309
+
310
+ ### 読み取り方
311
+
312
+ まず HTML またはスクリーンショットから、アートボードを画面単位で分類する。
313
+
314
+ 例:
315
+
316
+ - Desktop / Top empty
317
+ - Desktop / Top with content
318
+ - Desktop / Archive list
319
+ - Desktop / Detail
320
+ - Mobile / Top
321
+ - Mobile / Archive
322
+ - Mobile / Detail
323
+
324
+ 次に、各画面から共通トークンを抜き出す。
325
+
326
+ - 背景色
327
+ - アクセントカラー
328
+ - 罫線色
329
+ - フォントファミリー
330
+ - 見出しのサイズ感
331
+ - 本文の行間
332
+ - 一覧の密度
333
+ - 余白の単位
334
+ - ヘッダー / フッターの chrome
335
+ - モバイル時の幅、余白、改行、情報の省略ルール
336
+
337
+ この段階で、特定アートボードだけを見て実装しない。Desktop と Mobile の両方を見て、同じ UI がどう変化しているかを確認する。
338
+
339
+ ### 実装への写像
340
+
341
+ Claude Design の画面を ampless のテーマに対応させる。
342
+
343
+ - Top / Home 系 → `themes/my-blog/pages/home.tsx`
344
+ - Detail / Article 系 → `themes/my-blog/pages/post.tsx`
345
+ - Archive / Tag / List 系 → `themes/my-blog/pages/tag.tsx`
346
+ - 共通ヘッダー、ワードマーク、フッター → `themes/my-blog/components.tsx`
347
+ - 色、フォント、グリッド、prose、レスポンシブ → `themes/my-blog/tokens.css`
348
+ - 管理 UI で変えたい値 → `themes/my-blog/manifest.ts`
349
+
350
+ HTML 内の generated code や inline style を丸ごとコピーしない。必要なのは、実装そのものではなく設計のルール。
351
+
352
+ ### 実装時のコツ
353
+
354
+ Claude Design の HTML からは、次を手で抽出する。
355
+
356
+ - 画面タイプ。
357
+ - 共通トークン。
358
+ - レイアウトグリッド。
359
+ - 見出しのサイズ比。
360
+ - 一覧行の高さ、罫線、メタ情報の位置。
361
+ - モバイル時の省略 / 縦積み / サイズ変更。
362
+ - 空状態の扱い。
363
+
364
+ ampless 側では、それを以下のように分ける。
365
+
366
+ - 共通デザイン言語 → `tokens.css`
367
+ - 画面構造 → `pages/*.tsx`
368
+ - 繰り返し UI → テーマ内 `components.tsx`
369
+ - 管理 UI で変更可能にする値 → `manifest.ts`
370
+
371
+ Claude Design のアートボードに複数状態がある場合は、最初に状態名をメモする。
372
+
373
+ 例:
374
+
375
+ ```text
376
+ Final - ishinao.net theme
377
+ - Top empty
378
+ - Top with content
379
+ - Archive list
380
+ - Detail editorial body
381
+ - Mobile top empty
382
+ - Mobile top with content
383
+ - Mobile archive
384
+ - Mobile detail
385
+ ```
386
+
387
+ このメモを実装チェックリストとして使う。
388
+
389
+ ### Claude Design 反映チェックリスト
390
+
391
+ - Desktop と Mobile の両方を実装したか。
392
+ - 空状態と投稿あり状態の両方を考慮したか。
393
+ - 一覧、詳細、タグ一覧など、複数ページに同じデザイン言語が通っているか。
394
+ - ワードマーク、ナビ、メタ情報、罫線、背景の扱いが共通化されているか。
395
+ - モバイルで横スクロールや文字のはみ出しがないか。
396
+ - 長い日本語タイトルでも破綻しないか。
397
+ - 投稿が 1 件、複数件、タグなし、タグ複数のときに破綻しないか。
398
+ - Markdown の表やコードブロックがテーマの世界観から浮いていないか。
399
+
400
+ ## Claude Design 以外の AI を使う場合
401
+
402
+ Claude Design がない場合でも、AI は十分使える。
403
+
404
+ ### テキストで依頼する
405
+
406
+ まず、AI にデザイン仕様書を書かせる。
407
+
408
+ 依頼例:
409
+
410
+ ```text
411
+ ampless の blog テーマをベースに、個人技術ブログ向けのテーマ仕様を作って。
412
+ 出力は実装コードではなく、tokens、home、post detail、tag archive、mobile rules、Markdown styling に分けて。
413
+ 本文の可読性を最優先し、装飾は chrome と一覧で出す。
414
+ ```
415
+
416
+ この出力をもとに、Codex / Claude Code へ実装させる。
417
+
418
+ ### 画像やスクリーンショットを使う
419
+
420
+ 参考画像がある場合は、AI に以下を抽出させる。
421
+
422
+ - 色。
423
+ - フォントの雰囲気。
424
+ - 余白。
425
+ - 罫線。
426
+ - 情報密度。
427
+ - Desktop / Mobile の差。
428
+ - 実装時に `tokens.css` へ入れるべきもの。
429
+ - `pages/` の構造変更が必要なもの。
430
+
431
+ ### AI に実装させるときの依頼
432
+
433
+ 実装 AI には、次のように依頼する。
434
+
435
+ ```text
436
+ themes/my-blog だけを編集して、共有 app/components/lib は触らない。
437
+ まず既存テーマを読んで、tokens.css、pages、manifest の責務を確認して。
438
+ Desktop 1440px と Mobile 390px でスクリーンショット確認して。
439
+ Markdown の表、リスト、引用、コードもテーマに合うように調整して。
440
+ ```
441
+
442
+ AI に「全部いい感じにして」とだけ依頼すると、共有ファイルを触ったり、Desktop だけで終わったりしやすい。
443
+
444
+ ## ブラウザ確認
445
+
446
+ UI / テーマ変更では dev server を起動し、実際のページを開いて確認する。
447
+
448
+ ```bash
449
+ npm run dev
450
+ ```
451
+
452
+ 確認する代表幅:
453
+
454
+ - Desktop: `1440 x 1100`
455
+ - Mobile: `390 x 844`
456
+
457
+ スクリーンショットで確認する場合は、キャッシュの影響を避けるためにクエリ文字列を付けるとよい。
458
+
459
+ ```text
460
+ http://localhost:3000/?v=theme-check-1
461
+ ```
462
+
463
+ 見るポイント:
464
+
465
+ - 参照デザインと比べて、第一印象が同じ方向を向いているか。
466
+ - テキストが親要素からはみ出していないか。
467
+ - モバイルで横スクロールが発生していないか。
468
+ - 背景、罫線、余白、文字サイズが画面幅に対して自然か。
469
+ - 読むべき本文のコントラストと行間が十分か。
470
+ - リンク、タグ、ナビ、フッターが空設定のときに余計な余白を残していないか。
471
+
472
+ ## テーマ内コンポーネントの使いどころ
473
+
474
+ テーマ専用の共通 UI は `themes/my-blog/components.tsx` のようにテーマ内へ置く。
475
+
476
+ 向いているもの:
477
+
478
+ - ヘッダー
479
+ - フッター
480
+ - ワードマーク
481
+ - 記事行
482
+ - メタ情報
483
+ - テーマ固有の装飾 UI
484
+
485
+ 共有 `components/` に置くのは、複数テーマや管理 UI でも再利用する場合だけにする。
486
+
487
+ ## よくある失敗
488
+
489
+ - Claude Design の最初のサムネイルだけを見て実装してしまう。
490
+ - Desktop だけ寄せて、Mobile アートボードを見落とす。
491
+ - `tokens.css` だけで済む変更なのに、共有 `components/` を編集してしまう。
492
+ - 公式テーマ `themes/blog/` を直接編集してしまう。
493
+ - Markdown の表、引用、コードブロックを未調整のままにする。
494
+ - ブラウザ確認なしで「ビルドが通ったので完了」とする。
495
+ - 空の footer / nav 設定でも chrome だけ表示してしまう。