commit 62b9110 シリーズのページの見出しを日本語先に、series8 に定義の一文と一覧を追加

diff --git a/src/lib/records.ts b/src/lib/records.ts
index 288f61d..f3d0fbd 100644
--- a/src/lib/records.ts
+++ b/src/lib/records.ts
@@ -34,7 +34,7 @@ export type SimTab = { id: string; task: string; place: string; src: string; tit
 
 // シリーズのページ（URL → 記事のシリーズ名）。Studio の一覧の絞り込み条件と同じ
 // intro はシリーズのページの見出しの下に出す説明（ないシリーズは出さない）
-export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; guide?: boolean; thinking?: boolean; serving?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
+export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; points?: { h: string; items: string[] }[]; guide?: boolean; thinking?: boolean; serving?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
   series1: { series: 'HRI', title: 'Drug Delivery Robot | 薬剤搬送ロボットハコブくん', pageTitle: 'Series1 | 薬剤搬送ロボット', limit: 12,
     intro: '病院で薬を運ぶロボット「ハコブくん」を題材に、人とロボットの関わり（HRI）を設計している記録です。病院で使う画面（UI）の設計、Unity での自律移動、Fusion での形づくり、分身ロボット（アバター）の考察までを、4コママンガと一緒に残しています。' },
   series2: { series: 'R2R2R', title: 'R2R2R | デジタルツイン学習-R2R2R（Real to Render to Real）', pageTitle: 'Series2 | R2R2R', limit: 12,
@@ -50,7 +50,12 @@ export const SERIES_PAGES: Record<string, { series: string; title: string; pageT
   series7: { series: '画像認識・物体検出', title: 'Image recognition and Object detection | 画像認識と物体検出', pageTitle: 'Series7 | 画像認識と物体検出', limit: 12,
     intro: 'ロボットのカメラが物を見つける仕組みを、下の層から学び直している記録です。画素の数字、色の見分け方、しきい値、輪郭、特徴点といった昔からの手法を、机の上のアームを撮った写真で1つずつ測って確かめ、その上で SAM 3 のような新しいモデルも試します。評価の物差し（IoU・適合率・再現率など）を先に決め、結果は数字で残しています。' },
   series8: { series: '導入シミュレーション', title: 'Service Robot Simulation | サービスロボット導入シミュレーション', pageTitle: 'Series8 | サービスロボット導入シミュレーション', limit: 12, serving: true,
-    intro: '配膳・清掃・搬送など、店や施設で動くサービスロボットを入れたら何が変わるかを、導入前に試算する記録です。時間・順番・数は SimPy で、ぶつかる・こぼれるといった空間と動きは Unity で扱います。前提の数字は公開事例と観察から置き、結果とコードは全量で公開しています。',
+    intro: 'サービスロボット導入シミュレーションとは、配膳・清掃・搬送などのロボットを店や施設に入れる前に、待ち時間・必要な人数・ロボットが止まる場所・費用を試算して確かめることです。このシリーズでは、時間・順番・台数を SimPy で、ぶつかる・こぼれるといった空間と動きを Unity で扱い、結果とコードを全量公開しています。',
+    // 見出しの下に並べる短い一覧（検索や AI が「何が分かるか・どう試算するか」を拾えるように、本文の文字で書く）
+    points: [
+      { h: 'シミュレーションで分かること', items: ['必要な人数：ロボットを何台入れれば、スタッフを何人減らせるか', '待ち時間：ピーク時の入店待ちと、料理が届くまでの時間', '止まる場所：通路や席の配置で、ロボットが詰まる箇所', '費用：ロボットの月額と、浮く人件費の比較（補助金を含む）'] },
+      { h: '試算の方法', items: ['時間・順番・台数：離散イベントシミュレーション（SimPy）', '空間と動き：3Dシミュレーション（Unity）', '前提の数字：公開事例と、店で数える観察シート', 'ブラウザで試せる試算：飲食店・病院・商業施設・ホテル・オフィス・屋外の6現場'] },
+    ],
     sim: { src: '/sim/serving-robot.html', title: '配膳ロボット、何台入れたら店は変わる？',
       note: '店を選び、人数・台数・ロボットの使い方を切り替えると、ピーク時の入店待ちや料理が届くまでの時間が変わります。標準ファミレスは、店の形（平面図）から選ぶこともできます。レジの数（1つ・2つ）も選べます。ロボットの費用と浮く人件費も比べられます（補助金の情報つき）。1つの条件を40回回した平均で、数字はすべて仮の前提による試算です（試作 v2.8・32,850条件）。',
       obs: { src: '/sim/serving-robot-observation.html', title: '試算の仮の数字を、店で数える観察シート', label: '観察シートを開く ↗',
diff --git a/src/pages/[series].astro b/src/pages/[series].astro
index 8bee9a0..9e410ba 100644
--- a/src/pages/[series].astro
+++ b/src/pages/[series].astro
@@ -19,17 +19,26 @@ const conf = SERIES_PAGES[series];
 const blocks = (staticPages[series]?.blocks || []).slice(1); // 先頭はページの見出し
 const items = await seriesCards(conf.series);
 const [enName, jaName] = conf.title.split(' | ');
+// 見出しは日本語を先に置く（検索結果のタイトルが見出しに置き換えられるため。2026-10-25）
+const heading = jaName ? `${jaName} | ${enName}` : conf.title;
 const description = conf.intro ? `${SITE_NAME} のシリーズ「${jaName || conf.title}」（${enName}）。${conf.intro}` : `${SITE_NAME} のシリーズ「${jaName || conf.title}」（${enName}）の記録一覧。ロボットとフィジカルAIを、29年のデザイナー経験から実機とシミュレーションで試した過程を、失敗も含めて公開しています。`;
 const jsonLd = {
-  '@context': 'https://schema.org', '@type': 'CollectionPage', name: conf.title, description, url: `${SITE}/${series}`,
+  '@context': 'https://schema.org', '@type': 'CollectionPage', name: heading, description, url: `${SITE}/${series}`,
   inLanguage: 'ja',
   hasPart: items.slice(0, 50).map((c) => ({ '@type': 'BlogPosting', headline: c.title, url: `${SITE}/record/${c.slug}` })),
 };
 ---
 <Base title={`${jaName || conf.title}（${enName}）| ${SITE_NAME}`} description={description} path={`/${series}`} jsonLd={jsonLd}>
   <section class="s-hero"><div class="panel">
-    <h1 class="sec-h s-title">{conf.title}</h1>
+    <h1 class="sec-h s-title">{heading}</h1>
     {conf.intro && <p class="s-intro">{conf.intro}</p>}
+    {conf.points && (
+      <div class="s-points">
+        {conf.points.map((p) => (
+          <div><h2 class="s-points-h">{p.h}</h2><ul class="s-obs-list">{p.items.map((t) => <li>{t}</li>)}</ul></div>
+        ))}
+      </div>
+    )}
     {conf.guide && <div class="s-guide"><GuideBanner /></div>}
     {conf.thinking && <div class="s-guide"><ThinkingBanner /></div>}
     {conf.serving && <div class="s-guide"><ServingBanner /></div>}
@@ -43,7 +52,7 @@ const jsonLd = {
   </div></section>
   {conf.sim && (
     <section class="sec s-sim" data-ev-area="sim"><div class="panel">
-      <h2 class="sec-h">Simulator | 試算を試す</h2>
+      <h2 class="sec-h">試算を試す | Simulator</h2>
       {conf.sim.tabs && (
         <div class="s-tabs" role="tablist" aria-label="業種とロボットの仕事">
           {conf.sim.tabs.map((t, i) => (
@@ -134,7 +143,7 @@ const jsonLd = {
     }
   </script>
   <section class="sec"><div class="panel">
-    <h2 class="sec-h">Record | 記録</h2>
+    <h2 class="sec-h">記録 | Record</h2>
     <LoadMore limit={conf.limit} total={items.length}>{items.map((c) => <RecordCard item={c} />)}</LoadMore>
   </div></section>
 </Base>
@@ -143,6 +152,10 @@ const jsonLd = {
   .s-title { margin: 0; }
   .s-guide { margin: 24px 0 0; }
   .s-intro { margin: 16px 0 0; font: 400 16px/28px var(--sans); color: var(--ink-2); }
+  .s-points { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; margin: 24px 0 0; }
+  .s-points-h { margin: 0 0 8px; font: 600 16px/26px var(--sans); color: var(--ink); }
+  .s-points .s-obs-list { margin: 0; }
+  @media (max-width: 767px) { .s-points { grid-template-columns: minmax(0, 1fr); gap: 20px; } }
   .s-label { display: block; margin: 40px 0 16px; font: 500 16px/24px var(--sans); color: var(--ink); }
   .s-title + .s-label { margin-top: 8px; }
   a.s-label:hover { text-decoration: underline; }
