CLSを改善

| 項目 | 状態 |
|------|------|
| 画像の width/height 属性(sp-banner 123件) | 適用済み(効果なし) |
| 画像の width/height 属性(ファーストビュー 3件) | 適用済み(効果なし) |
| カルーセルのCSS最適化 | 適用済み(CLS -99.32%) |
| Webフォント font-display(Google Fonts) | 適用済み(CLS 完全解消) |
| Webフォント font-display(icomoon・自社配信) | 不採用(効果なし・optionalはアイコン豆腐化) |
| 動的挿入コンテンツ(AJAX差し替え 4ブロック) | 適用済み(効果なし) |
| ヘッダーの動的高さ | 該当なし(fix-space が同じ高さで補償済み) |
| Google Fonts Early Access版 | 該当なし(grep ヒット0件) |
| JS による zoom 操作 | 該当なし(grep ヒット0件) |

当初仮説(sp-banner の min-height 24px 不足)はトレースにより反証された。
真因は content/top/css の `.swiper-container.swiper-container-horizontal.swiper-container-fade`
に指定された `margin-bottom: 8px`。これらのクラスは Swiper が init() 時に JS で付与するため、
初期化の瞬間に margin-bottom が 0 → 8px に変化し、ヒーロー以降の全ブロックが 8px 押し下げられていた。
トレースの overall_max_distance: 8 と完全一致。

- font-display の最適値はフォントの用途で変わる。同じ optional が
  テキストフォント(Google Fonts)では CLS を完全解消し、
  アイコンフォント(icomoon)ではヘッダの全アイコンを豆腐化させた
- ラボデータの CLS = 0 はフィールドデータの CLS = 0 を意味しない。
  Lighthouse の計測時間内では AJAX 差し替えが発火せず、
  スクロールを与えて初めて高さが 227px → 449/416/512/0px に変化する
- 画像への単純な width/height 付与は、max-height や負マージンと干渉して
  表示崩れを起こすことがある(ヘッダロゴが 165×57.59 に横伸び)

LCP: 1945ms
CLS: 0.000
TBT: 0ms
FCP: 77ms
SI: 1833ms
Overall Score: 99

layout-shifts 監査: notApplicable / items 0件
トレースの LayoutShift イベント: 0件