@charset "UTF-8";
/* =====================================================================
   lp-forge / base.css — 汎用LP生成エンジンの土台CSS
   ---------------------------------------------------------------------
   これは「1本のLPのCSS」ではない。案件ごとに色・書体・写真が入れ替わっても
   構造が破綻しないための器だけを書いてある。**色の実値は1つも書いていない。**

   設計の根拠と判断理由は docs/css-architecture.md に全部書いた。
   ここには「なぜこの値か」を各ブロック1行で置く。

   ■ このファイルが守っている禁止（research-and-design-rules.md 5章）
     - グラデーションを書かない ................ gradient は 0 個
     - 均等3カラムの器を作らない ............... repeat(3, 1fr) / auto-fit / auto-fill は 0 個
     - 全セクション中央揃えにしない ............ text-align:center は .btn と .stickybar だけ
     - スクロール連動の演出を書かない .......... animation / @keyframes / IntersectionObserver 前提クラスは 0 個
     - フォーカスリングを消さない .............. outline:none は 0 個
     - 見出しに飾りを付けない .................. 左罫・下線バー・英字ラベル用の装飾は持たない

   ■ 読み込み順の約束（重要）
     レンダラが出す :root のトークンは **このファイルより後** に置くこと。
     このファイル末尾でなく先頭の :root に既定値を持っているので、後勝ちで上書きされる。
     より確実にしたいなら <div class="lp" style="--bg:...;--fg:..."> のインラインで渡す
     （インラインは常に勝つ）。

   ■ コントラストの責任分界
     CSS は「どの組み合わせが本文扱いか」を宣言するだけ。実測は Node 側の監査で行う。
     4.5:1 以上が要るペア（本文・注記・ボタン文字。18.5px未満/24px未満の文字が乗る）
       --fg      on --bg          本文・見出し
       --fg      on --sunk        沈めた面の本文（.sec--tone-sunk）
       --muted   on --bg          注記・出典・キャプション（13px。ここが一番落ちる）
       --muted   on --sunk        同上
       --accent  on --bg          リンク・キッカー・.stat__value
       --accent  on --sunk        同上
       --accent-fg on --accent    主ボタンの文字・必須バッジの文字（.sec--tone-accent の本文も）
       --accent  on --accent-weak .qa[open] / .voice / .plan--強調 の中の文字
     3:1 以上が要るペア（UI部品の輪郭。WCAG 1.4.11）
       --line    on --bg          入力欄の枠・チェックの枠 ← 罫線一般ではなく「入力欄の枠」が対象
       フォーカスリングは outline-color を --fg / --accent-fg（面に応じて）にしてある。
       **--accent をリングに使っていない**（アクセント地のボタンの上でリングが消えるため）。
     色として自由（不問）
       --line を装飾罫として使う箇所、--accent-weak を面として使う箇所

   ■ 書体トークンについて（research-and-design-rules.md 6章）
     --font-base / --font-head に **Inter / Roboto / system-ui / 游ゴシック を入れない**。
     CSS では禁止できないので、監査ゲート側で文字列一致で落とすこと。
   ===================================================================== */


/* =====================================================================
   1. トークン既定値
   ---------------------------------------------------------------------
   **色の既定値は置いていない。このファイルに色リテラルは0個。**
   置かない理由：既定のグレーを入れておくと、レンダラがトークンを流し忘れても
   「それらしいモノクロのLP」が描画されてしまい、事故が静かに通る。
   トークンが無ければ色が壁抜けして見た目が壊れる＝すぐ気づく、を選んだ。
   （--bg --fg --muted --line --sunk --accent --accent-fg --accent-weak は
     レンダラが :root か .lp の style 属性で必ず全部渡すこと。監査で存在を検査する）

   一方、**寸法と書体には既定値を置いている**。こちらは欠けても壊れ方が静かで、
   かつ案件ごとに変える必要が薄いため。
   ===================================================================== */
:root{
  --font-base: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN",
               "Hiragino Sans", "Noto Sans JP", sans-serif;
  --font-head: var(--font-base);

  --w-text: 40rem;   /* 640px。16px本文で全角40字＝実測ルール「35〜45字」の中央 */
  --w-wide: 70rem;   /* 1120px。器のあるセクションだけがここまで広がる */

  --radius: 4px;     /* 角丸は控えめ。写真には効かせない（下の .card__media 参照） */

  --scheme: light;   /* 暗色トークンを流す案件は :root で --scheme:dark に差し替える */

  /* --- 余白スケール（4px基準。刻みは末尾ほど粗い＝隣同士が目で見て違う） --- */
  --sp-1: 0.25rem;   /*  4px  バッジ内・アイコンと文字 */
  --sp-2: 0.5rem;    /*  8px  ラベルと入力欄 */
  --sp-3: 0.75rem;   /* 12px  見出し→直後の本文 */
  --sp-4: 1rem;      /* 16px  段落と段落／左右ガター（SP） */
  --sp-5: 1.5rem;    /* 24px  ボタン間・カード内の段 */
  --sp-6: 2rem;      /* 32px  本文→表・リスト・写真 */
  --sp-7: 2.5rem;    /* 40px  h3のまとまり同士・カード同士 */
  --sp-8: 3.5rem;    /* 56px  セクション縦余白（小） */
  --sp-9: 4.5rem;    /* 72px  セクション縦余白（中） */

  /* --- 意味づけした余白（実装ではこちらだけを使う） --- */
  --flow-tight: var(--sp-3);
  --flow:       var(--sp-4);
  --flow-loose: var(--sp-6);
  --gap-group:  var(--sp-7);
  --gutter:     var(--sp-4);

  /* --- 文字スケール ---------------------------------------------------
     16px = 1rem 基準。clamp を使うのは h1/h2/h3/lead/数字だけ。
     本文以下は固定（本文を可変にすると入力欄が16pxを割ってiOSが自動ズームする）。
     clamp の中央値には **必ず rem 項を入れている**。vw だけだとブラウザの
     文字サイズ設定に追従せず WCAG 1.4.4（200%拡大）を落とす。 */
  --fs-cap:   0.8125rem;                                   /* 13px 下限。これ未満を作らない */
  --fs-sm:    0.875rem;                                    /* 14px 表の中・フッター・追従バー */
  --fs-base:  1rem;                                        /* 16px 本文・入力欄 */
  --fs-lead:  clamp(1.0625rem, 1rem    + 0.30vw, 1.1875rem); /* 17→19px 導入文 */
  --fs-h3:    clamp(1.1875rem, 1.10rem + 0.40vw, 1.375rem);  /* 19→22px */
  --fs-h2:    clamp(1.375rem,  1.20rem + 1.10vw, 1.875rem);  /* 22→30px 実測レンジ SP22-26 / PC26-30 */
  --fs-h1:    clamp(1.625rem,  1.30rem + 1.90vw, 2.5rem);    /* 26→40px 実測レンジ SP26-32 / PC32-40 */
  --fs-num:   clamp(2rem,      1.60rem + 2.20vw, 3.25rem);   /* 32→52px .stats の先頭1つだけ */
  --fs-num-s: 1.5rem;                                        /* 24px  それ以外の数値・料金 */

  /* --- 行送り・字送り（和文。research-and-design-rules.md 6章） --- */
  --lh-body:  1.85;   /* 和文本文 1.8〜2.0 の中央 */
  --lh-head:  1.45;   /* 和文見出し 1.4〜1.5 の中央 */
  --lh-tight: 1.25;   /* 数字だけ */
  --ls-body:  0.02em;
  --ls-head:  0.03em;

  /* --- 部品の寸法（高さは全部 min-* 。固定 height を1つも持たない） --- */
  --tap:         2.75rem;  /* 44px。WCAG 2.5.5 の下限 */
  --btn-h:       3rem;     /* 48px */
  --btn-h-lg:    3.5rem;   /* 56px */
  --stickybar-h: 4.5rem;   /* 72px。追従バーの実高ではなく「フッターに空ける下駄」の見積り */

  /* --- 面（tone）。実体は下の .sec--tone-* で差し替える --- */
  --surface:    var(--bg);
  --on-surface: var(--fg);
}


/* =====================================================================
   2. リセット
   グローバルに触るのは box-sizing と body の余白と text-size-adjust だけ。
   WordPress の固定ページに載せてもテーマ側を壊さない範囲に留める。
   ===================================================================== */
*, *::before, *::after{ box-sizing: border-box; }
html{ -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body{ margin: 0; }

.lp{
  color-scheme: var(--scheme);
  font-family: var(--font-base);
  font-size: var(--fs-base);
  line-height: var(--lh-body);
  letter-spacing: var(--ls-body);
  color: var(--fg);
  background: var(--bg);
  /* 中央揃えを既定にしない。中央になるのは .btn のラベルと .stickybar だけ。
     text-align を切り替えるユーティリティも用意しない（禁止「全セクション中央揃え」） */
  text-align: left;
  text-underline-offset: 0.22em;
  overflow-wrap: anywhere;   /* 長いURLで横スクロールを出さない（WCAG 1.4.10） */
}

/* ---------------------------------------------------------------------
   要素セレクタは **すべて :where() で詳細度0** にする。ここは重要な設計判断。

   初版は `.lp a{...}` `.lp p{margin:0}` と書いていた。詳細度は (0,1,1) で、
   クラス1つのコンポーネント指定 (0,1,0) **より強い**。層の順序が逆転していて、
   リセットがコンポーネントを上書きしていた。実測で見つかった被害は2つ:
     ・`.lp a{color:var(--accent)}` が `.btn--primary{color:var(--accent-fg)}` に勝ち、
       主ボタンの文字が地と同色（コントラスト1:1）になっていた
     ・`.lp p{margin:0}` が `.sec__body > * + *{margin-top}` (0,1,0) に勝ち、
       **本文の縦リズムが全滅**していた（実測 marginTop=0px）
   どちらも「変数は正しいのに当たっていない」ので、目でも計算値でも見つからない。

   :where() の中身は詳細度に加算されないので、`:where(.lp) :where(p)` は (0,0,0)。
   作者スタイルはUAスタイルより常に強いので、詳細度0でもブラウザ既定には勝つ。
   → **クラスを1つでも持つ指定は、必ずこの層に勝つ。**
   --------------------------------------------------------------------- */
:where(.lp) :where(img){ display: block; max-width: 100%; height: auto; }
:where(.lp) :where(h1, h2, h3, h4, p, ul, ol, dl, dd,
                   figure, blockquote, table, fieldset){ margin: 0; }
:where(.lp) :where(fieldset){ border: 0; padding: 0; min-width: 0; }
:where(.lp) :where(table){ border-collapse: collapse; width: 100%; }
:where(.lp) :where(b, strong){ font-weight: 700; }

/* 段落の縦リズム。**器の中でも効かせる**。
   初版は `.sec__body > * + *` の1本しか無く、`.sec__body` の直下しか見ていなかった。
   実測で `.hero__sub` / `.card__body` / `.qa__a` / `.step__body` の中の段落間が
   すべて 0px だった。詳細度0で置くので、器ごとの指定があればそちらが必ず勝つ。 */
:where(.lp) :where(p, ul, ol, dl, blockquote, figure, table)
+ :where(p, ul, ol, dl, blockquote, figure, table){ margin-top: var(--flow); }

/* リンク色。**ボタンを二重に除外している**（`:not(.btn)` と 詳細度0）。
   レンダラはCTAを <a class="btn btn--primary"> で出す（href を持つ以上アンカーが正しい）ので、
   ここで除外しないと必ず衝突する。
   除外しているのは .btn だけ。.news__title / .lp-footer__links / .sec__tel > a /
   .lp-footer__tel > a / 本文中のリンクには今までどおり当たる。 */
:where(.lp) :where(a:not(.btn)){ color: var(--accent); text-decoration-thickness: 1px; }
:where(.lp) :where(a:not(.btn)):hover{ text-decoration-thickness: 2px; }
/* アクセント面ではリンクが地に溶ける（--accent on --accent）。面に追従させる */
.sec--tone-accent :where(a:not(.btn)){ color: var(--on-surface); }

/* フォーカスリング。outline:none はこのファイルに1つも無い。
   色は面に追従する --on-surface。--accent は使わない（アクセント地の上で消えるため）。 */
.lp :where(a, button, input, select, textarea, summary, [tabindex]):focus-visible{
  outline: 3px solid var(--on-surface);
  outline-offset: 2px;
  border-radius: var(--radius);
}

/* アンカー着地。ヘッダーが sticky になる幅（≥960px）でだけ下駄を履かせる */
.lp [id]{ scroll-margin-top: var(--sp-5); }


/* =====================================================================
   3. 器（section / inner / 面 / 縦余白）
   ===================================================================== */
.sec{
  background: var(--surface);
  color: var(--on-surface);
  /* 上下を非対称にしている。見出しの上には余白が要るが、末尾（多くはCTAか注記）の
     下は詰めてよい。全部同じ数値で積むと「均等余白」になり、禁止事項に触れる。 */
  padding-block: var(--sec-pt, var(--sp-9)) var(--sec-pb, var(--sp-8));
}

/* 縦余白は3段だけ。段を増やすと「なんとなく違う値」が生まれて統制が消える */
.sec--sp-s{ --sec-pt: var(--sp-7); --sec-pb: var(--sp-6); }  /* 40 / 32 密度を上げる帯 */
.sec--sp-m{ --sec-pt: var(--sp-9); --sec-pb: var(--sp-8); }  /* 72 / 56 標準 */
.sec--sp-l{ --sec-pt: 5.5rem;      --sec-pb: var(--sp-9); }  /* 88 / 72 行動する場所 */

/* ヒーローだけ上を詰めて下を空ける。ヘッダーの罫線から主コピーまでを近づける */
.sec--hero{ --sec-pt: var(--sp-6); --sec-pb: var(--sp-9); }

/* --- 面（tone） ------------------------------------------------------
   --surface / --on-surface / --muted / --line を面ごとに差し替える。
   コンポーネント側はこの2〜4個しか見ないので、面が変わっても文字が消えない。
   （入力欄だけは例外で --bg / --fg を直接使う。理由は §9 のコメント） */
.sec--tone-base{  --surface: var(--bg); }
.sec--tone-sunk{  --surface: var(--sunk); }
.sec--tone-accent{
  --surface:    var(--accent);
  --on-surface: var(--accent-fg);
  --muted:      var(--accent-fg);  /* 弱い文字を作らない。アクセント地で階調を作ると必ずコントラストを割る */
  --line:       var(--accent-weak);
}

/* 隣り合う面を同じにしない。**構造的に封じる**：
   同じ tone が連続したら、2つ目を地に戻す。テンプレ感の正体のひとつは
   「面が交互に切り替わるだけの単調なページ」なので、そもそも作れないようにする。
   （黙って変わるのは不親切なので、監査ゲート側でも警告を出すこと） */
.sec--tone-sunk + .sec--tone-sunk{ --surface: var(--bg); }
.sec--tone-accent + .sec--tone-accent{
  --surface:    var(--bg);
  --on-surface: var(--fg);
  --muted:      var(--muted);
  --line:       var(--line);
}

/* --- 内側の器 --------------------------------------------------------
   既定は本文幅（--w-text）。**広い器を持つセクションだけ** --w-wide まで広がる。
   ページ全体が同じ幅の柱1本にならないので、それだけで型どおりに見えなくなる。
   :has() が効かない環境では全部が本文幅に落ちる＝安全側に壊れる。 */
.sec__inner{
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--gutter);
  max-width: calc(var(--w-text) + var(--gutter) * 2);
}
.sec--hero .sec__inner,
.sec__inner:has(.cards, .stats, .plans, .voices, .steps){
  max-width: calc(var(--w-wide) + var(--gutter) * 2);
}

/* 見出しのかたまり。本文よりさらに狭くして、見出しが1行に伸び切らないようにする */
.sec__head{ max-width: 34rem; }
/* 見出しのかたまりの直後。初版は `+ .sec__body` に限定していたため、
   レンダラが .stack / .stats / .cards / .steps / .qa / .form を直に置いた節で
   **見出しと中身が 0px で密着**していた（実測報告）。器の種類を問わず空ける。 */
.sec__head + *{ margin-top: var(--flow-loose); }

/* 縦のリズムは隣接セレクタだけで作る。要素ごとに margin-bottom を書かないので、
   最後の要素の下に余分な余白が残る事故が構造的に起きない。 */
.sec__body > * + *{ margin-top: var(--flow); }
/* 器の前は広く空ける。ただし **直前が見出しなら空けない**（見出しは下の塊に属する）。
   `:not(h2,h3,h4)` で除外しておくことで、下の `.lp :where(h2,h3,h4) + *` と
   セレクタが重ならない＝詳細度の勝ち負けに依存しなくなる。 */
.sec__body > :not(h2, h3, h4) + h3,
.sec__body > :not(h2, h3, h4) + .cards,
.sec__body > :not(h2, h3, h4) + .stats,
.sec__body > :not(h2, h3, h4) + .steps,
.sec__body > :not(h2, h3, h4) + .plans,
.sec__body > :not(h2, h3, h4) + .voices,
.sec__body > :not(h2, h3, h4) + .qa,
.sec__body > :not(h2, h3, h4) + .deflist,
.sec__body > :not(h2, h3, h4) + table,
.sec__body > :not(h2, h3, h4) + figure{ margin-top: var(--gap-group); }


/* =====================================================================
   4. タイポグラフィ
   見出しに装飾を付けない（左罫・下線バー・英字ラベル・アイコン）。
   制作会社テンプレの指紋はほぼ全部そこに出る。
   ===================================================================== */
.sec__kicker{
  font-size: var(--fs-cap);
  font-weight: 700;
  letter-spacing: 0.04em;     /* 0.3em の英字キッカーにしない。和文が前提 */
  line-height: 1.6;
  color: var(--accent);
  margin-bottom: var(--sp-2);
}
.sec--tone-accent .sec__kicker{ color: var(--on-surface); }

.sec__title{
  font-family: var(--font-head);
  font-size: var(--fs-h2);
  line-height: var(--lh-head);
  letter-spacing: var(--ls-head);
  font-weight: 700;
  color: var(--on-surface);
}
/* richtext から来る素の見出しの既定。**詳細度0**にしてあるので、
   .card__title / .step__title / .plan__name がどの要素で出ても必ず勝つ。
   （初版は `.lp h2` (0,1,1) だったため、たとえば <h2 class="card__title"> に
     h2 のサイズが当たって h3 指定が効かない、という取りこぼしが起きる形だった） */
:where(.lp) :where(h2){
  font-family: var(--font-head);
  font-size: var(--fs-h2);
  line-height: var(--lh-head);
  letter-spacing: var(--ls-head);
  font-weight: 700;
  color: var(--on-surface);
}
:where(.lp) :where(h3, h4){
  font-family: var(--font-head);
  font-size: var(--fs-h3);
  line-height: var(--lh-head);
  letter-spacing: var(--ls-head);
  font-weight: 700;
  color: var(--on-surface);
}
/* 見出しと直後の本文だけ詰める。初版は !important で通していたが、
   リセットの詳細度を下げたので素の (0,1,0) で足りる。ここから !important を外した。
   （残る !important は .u-visually-hidden と prefers-reduced-motion の計4個だけ。
     どちらも「必ず勝たなければ意味が無い」定型なので残す）
   §3 の `.sec__body > * + *` より後に置いてあるので、同詳細度で後勝ちする。 */
.lp :where(h2, h3, h4) + *{ margin-top: var(--flow-tight); }

.sec__lead{
  margin-top: var(--flow-tight);
  font-size: var(--fs-lead);
  line-height: 1.8;
  color: var(--muted);
  max-width: var(--w-text);
}
:where(.sec__body) :where(p){ max-width: var(--w-text); }

/* セクション内の電話番号。<p class="sec__tel"> の中に受付時間の span が入る。
   .lp-footer__tel と同じ考え方：<p> に nowrap を掛けず、番号の <a> だけ折らせない。 */
.sec__tel{
  font-size: var(--fs-num-s);
  font-weight: 700;
  line-height: var(--lh-tight);
  font-variant-numeric: tabular-nums;
  color: var(--on-surface);
}
.sec__tel > a{ white-space: nowrap; }
.sec__telhours{
  display: block;                 /* span で出るので block にしないと margin-top が効かない */
  margin-top: var(--sp-1);
  font-size: var(--fs-cap);
  font-weight: 400;
  line-height: 1.7;
  letter-spacing: var(--ls-body);
  font-variant-numeric: normal;
  color: var(--muted);
}

:where(.lp) :where(small, figcaption),
.stat__src,
.voice__who,
.hero__note,
.field__help,
.lp-footer__note{
  font-size: var(--fs-cap);   /* 13px。都合の悪い情報（出典・注記）を小さくして逃げない */
  line-height: 1.7;
  color: var(--muted);
}


/* =====================================================================
   5. ボタン
   高さを固定しない（min-height だけ）。**ボタンには white-space:nowrap を書かない**。
   字送りを 0.12em に上書きされても折り返して逃げる（WCAG 1.4.12）。

   min-width:0 が要る理由（2026-09-03 実測で判明）:
   .btn は .hero__ctas / .stickybar の中で flex item になる。flex item の既定は
   min-width:auto なので、中身より小さくならず **親を押し広げる**。
   実測では 390px の画面で .stickybar が 408px になり、18px の横スクロールが出た。
   flex-basis を何remにしても、min-width:0 が無ければ縮まない。
   ===================================================================== */
.btn{
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;            /* ラベルが長いとき2行に逃がす。高さは min-height で受ける */
  gap: var(--sp-2);
  min-width: 0;               /* flex item として縮めるため。これが無いと親を押し広げる */
  max-width: 100%;
  min-height: var(--btn-h);
  padding: var(--sp-3) var(--sp-6);
  border: 2px solid transparent;
  border-radius: var(--radius);
  font-family: inherit;
  font-size: var(--fs-base);
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: var(--ls-body);
  text-align: center;         /* 中央揃えを許すのはここと .stickybar だけ */
  text-decoration: none;
  cursor: pointer;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.btn--primary{
  background: var(--accent);
  color: var(--accent-fg);
  /* 枠を透明のままにしない。背景と同じ色を明示する。
     「操作部品の輪郭」を測る道具は border-color を見るので、transparent だと
     比 1.0 と読まれて誤検出になる。値としては見た目に影響しない。 */
  border-color: var(--accent);
}
.btn--ghost{
  background: transparent;
  color: var(--on-surface);
  border-color: var(--on-surface);
}
.btn--ghost:hover{ background: var(--accent-weak); }
/* 電話ボタン。
   **nowrap を外した（2026-09-03 実測）。**
   「番号だけなら nowrap で足りる」という見積りが外れた。レンダラが出す実ラベルは
   「電話する（8:00〜19:00）」のような受付時間つきで、0.12em上書き下で 392px（画面390px）。
   元リサーチ（実測7社中4社が受付時間を併記）に沿った書き方なので、ラベルが短くなる
   見込みは無い。**ボタンは折り返せる、を優先する**（WCAG 1.4.12 / 1.4.10）。
   番号そのものを折らせない手当ては .lp-footer__tel > a に限定した（§11）。 */
.btn--tel{
  background: transparent;
  color: var(--on-surface);
  border-color: var(--line-strong);   /* 枠だけで成立するボタン＝操作部品の輪郭。3:1 が要る */
  font-size: var(--fs-num-s);
  font-variant-numeric: tabular-nums;
}
/* ボタン内の補足（レンダラは <span class="btn__note"> で出す。<p>の中に<div>を置けないため）。
   flex の全幅行にして2行目に落とす。色は currentColor のまま＝どの面でも文字が消えない。 */
.btn__note{
  flex: 1 1 100%;
  font-size: var(--fs-cap);
  font-weight: 400;
  line-height: 1.6;
  letter-spacing: var(--ls-body);
}
/* アクセント地の上では主ボタンが地に溶ける。色を反転させて構造的に潰す */
.sec--tone-accent .btn--primary{
  background: var(--accent-fg);
  color: var(--accent);
  border-color: var(--accent-fg);
}
.sec--tone-accent .btn--ghost:hover{ background: transparent; border-color: var(--accent-weak); }


/* =====================================================================
   6. ヘッダー
   SP では sticky にしない（上下を固定バーで挟むと小さい画面が潰れる）。
   常時の出口は .stickybar だけが持つ。PC では逆に .stickybar を消して
   ヘッダーを sticky にする。**画面に常駐するものは常に1つだけ。**
   ===================================================================== */
/* flex + wrap だと、タグラインが入ったときに **CTAが2行目に落ちる**（実測報告）。
   grid で「1行目=屋号とCTA / 2行目=タグライン」を確定させる。
   タグラインが無ければ2行目は潰れるので、高さは変わらない。 */
.lp-header{
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  column-gap: var(--sp-4);
  row-gap: var(--sp-1);
  min-height: 3.5rem;
  padding: var(--sp-3) var(--gutter);
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.lp-header__brand{
  grid-column: 1; grid-row: 1;
  font-weight: 700;
  font-size: var(--fs-base);
  line-height: 1.4;
  letter-spacing: var(--ls-head);
  min-width: 0;
}
.lp-header__brand img{ max-height: 2.25rem; width: auto; }
/* タグライン。本文16pxのままだとCTAを押し出す。13pxにして2行目に固定する */
.lp-header__tag{
  grid-column: 1; grid-row: 2;
  min-width: 0;
  font-size: var(--fs-cap);
  line-height: 1.6;
  color: var(--muted);
}
.lp-header__cta{ grid-column: 2; grid-row: 1 / -1; align-self: center; }
.lp-header .btn{
  min-height: var(--tap);
  font-size: var(--fs-sm);
  padding-inline: var(--sp-4);
}


/* =====================================================================
   7. ヒーロー
   **文字が先、写真が後。写真の上に文字を載せない。**
   純広告LP4本は4本とも見出しを画像に焼いていた（WCAG 1.4.5違反）。
   HTMLテキストで出す以上、順序を反転させるのが素直で、写真が差し替わっても
   コントラストが崩れない。左テキスト＋右モックアップの2列も作らない（禁止事項）。
   ===================================================================== */
.hero__kicker{
  font-size: var(--fs-cap);
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--accent);
  margin-bottom: var(--sp-3);
}
.hero__headline{
  font-family: var(--font-head);
  font-size: var(--fs-h1);
  line-height: 1.4;
  letter-spacing: 0.01em;   /* 大きい文字は少し詰める */
  font-weight: 700;
  color: var(--on-surface);
  /* 全角16字で折り返す。実測の主コピーは11〜31字なので2〜3行に収まる。
     字送り 0.01em は1字ごとに幅を足すので、器を 16em にすると 16字は
     16.16em になって入らず、実際には**15字**で折り返していた。器にも字送りを足す。
     実測 2026-09-05: PC1280 で 640px → 646.4px。16字が収まるようになる。 */
  max-width: calc(16em + 16 * 0.01em);
}

/* 極小幅では見出しを1段小さくする。
   .hero__headline の器は「画面幅 - 左右の余白」まで潰れる。341px 未満だと
   文節ひとつ（11字前後）が2行目に収まらず、行末に1〜2字だけ残る形になる。
   実測 2026-09-05: 境目は 333px（320px幅で 11字に 298.6px 必要／器は 288px）。
   対象は iPhone SE 第1世代など 320px 端末。検査対象幅（390 / 1280）には当たらない。 */
@media (max-width: 340px){
  .hero__headline{ font-size: 1.55rem; }   /* 24.8px。11字 = 275.5px ≤ 288px */
}
.hero__sub{
  margin-top: var(--sp-5);
  font-size: var(--fs-lead);
  line-height: 1.8;
  color: var(--muted);
  max-width: var(--w-text);
}
.hero__ctas{
  display: flex;
  flex-wrap: wrap;          /* 既定で折り返す。字送り上書きで押し出されても崩れない */
  gap: var(--sp-3);
  margin-top: var(--sp-7);
}
.hero__ctas .btn{ flex: 1 1 16rem; min-height: var(--btn-h-lg); }
.hero__note{ margin-top: var(--sp-3); flex: 1 1 100%; }
.hero__media{ margin-top: var(--sp-7); }
.hero__media img{ width: 100%; border-radius: 0; }  /* 写真に角丸を付けない */
.hero__media figcaption{ margin-top: var(--sp-2); }


/* =====================================================================
   8. 内容の器
   ===================================================================== */

/* --- 箇条書き -------------------------------------------------------
   list-style:none にすると Safari の VoiceOver でリストの役割が落ちる。
   ::marker を色付けするだけにして、リスト semantics を触らない。
   （role="list" を書き戻す必要が無い＝レンダラ側の事故が減る） */
.stack{ list-style: disc; padding-inline-start: 1.4em; }
.stack > li{ padding-inline-start: 0.2em; }
.stack > li::marker{ color: var(--accent); }
.sec--tone-accent .stack > li::marker{ color: var(--on-surface); }
.stack > li + li{ margin-top: var(--sp-3); }

/* --- 数字 -----------------------------------------------------------
   **均等に並んだ大きい数字3つ** を作らない。先頭1つだけが主数値で、
   残りは1段小さい行になる。「全部大きい＝全部読まれない」を構造で防ぐ。 */
.stats{ display: grid; gap: var(--sp-5); }
.stat{ border-top: 2px solid var(--line); padding-top: var(--sp-4); }
.stat__value{
  font-size: var(--fs-num-s);
  line-height: var(--lh-tight);
  font-weight: 700;
  letter-spacing: 0.01em;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
}
.stats > .stat:first-child .stat__value{ font-size: var(--fs-num); }
.sec--tone-accent .stat__value{ color: var(--on-surface); }
.stat__unit{ font-size: 0.5em; font-weight: 700; margin-inline-start: 0.2em; }
.stat__label{ display: block; margin-top: var(--sp-2); font-size: var(--fs-sm); font-weight: 700; }
.stat__src{ display: block; margin-top: var(--sp-2); }

/* --- カード ---------------------------------------------------------
   箱にしない（枠・影・角丸を持たない）。上に罫線を1本引いた縦組みのブロック。
   最大2列。**3列の器はこのファイルに存在しない。**
   等高にもしない（align-items:start）。「同じ高さの箱が3つ並ぶ」がテンプレ感の中身。 */
.cards{ display: grid; gap: var(--gap-group); align-items: start; }
.card{ border-top: 2px solid var(--line); padding-top: var(--sp-4); }
.card__title{
  font-family: var(--font-head);
  font-size: var(--fs-h3);
  line-height: var(--lh-head);
  letter-spacing: var(--ls-head);
  font-weight: 700;
  color: var(--on-surface);
}
.card__body{ margin-top: var(--flow-tight); }
.card__media{ margin-top: var(--sp-4); }
.card__media img{ width: 100%; border-radius: 0; }

/* --- 手順 -----------------------------------------------------------
   番号は見えるテキスト（.step__no）。CSS counter は読み上げに乗らないことがある。
   .step__no を出す以上 <ol> の marker とは二重になるので marker は消す。
   → レンダラは <ol class="steps" role="list"> と .step__no に aria-hidden を書くこと。 */
.steps{ list-style: none; padding: 0; display: grid; gap: 0; }
.step{ position: relative; padding: 0 0 var(--sp-6) 3rem; }
.step::before{
  content: "";
  position: absolute;
  inset-block: 2.2rem 0;
  inset-inline-start: 0.9rem;
  width: 2px;
  background: var(--line);
}
.step:last-child{ padding-bottom: 0; }
.step:last-child::before{ display: none; }
.step__no{
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2rem;
  min-height: 2rem;
  border-radius: 999px;
  background: var(--accent);
  color: var(--accent-fg);
  font-size: var(--fs-sm);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.sec--tone-accent .step__no{ background: var(--accent-fg); color: var(--accent); }
.step__title{
  font-family: var(--font-head);
  font-size: var(--fs-h3);
  line-height: var(--lh-head);
  font-weight: 700;
  color: var(--on-surface);
}
.step__body{ margin-top: var(--sp-2); }

/* --- 料金 -----------------------------------------------------------
   最大2列。3プランを横に並べて「真ん中がおすすめ」にする定型を作らない。 */
.plans{ display: grid; gap: var(--sp-5); align-items: start; }
.plan{
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: var(--sp-5);
}
.plan__name{
  font-family: var(--font-head);
  font-size: var(--fs-h3);
  line-height: var(--lh-head);
  font-weight: 700;
  color: var(--on-surface);
}
.plan__price{
  margin-top: var(--sp-2);
  font-size: var(--fs-num-s);
  line-height: var(--lh-tight);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
}
.sec--tone-accent .plan__price{ color: var(--on-surface); }
.plan__note{ margin-top: var(--sp-2); font-size: var(--fs-cap); color: var(--muted); }
.plan__items{ margin-top: var(--sp-4); list-style: disc; padding-inline-start: 1.4em; font-size: var(--fs-sm); }
.plan__items > li::marker{ color: var(--accent); }
.plan__items > li + li{ margin-top: var(--sp-2); }

/* --- 声 -------------------------------------------------------------
   丸い顔写真＋名前＋星の定型を作らない。契約に .voice__avatar が無いのは意図的。 */
.voices{ display: grid; gap: var(--sp-5); align-items: start; }
.voice{
  background: var(--accent-weak);
  border-radius: var(--radius);
  padding: var(--sp-5);
}
.sec--tone-accent .voice{ background: transparent; border: 1px solid var(--line); }
.voice__body{ font-size: var(--fs-base); }
.voice__who{ display: block; margin-top: var(--sp-3); }
/* 所属・肩書き。レンダラは <figcaption class="voice__who"> の中の span で出す */
.voice__attr{
  display: block;
  margin-top: var(--sp-1);
  font-size: var(--fs-cap);
  line-height: 1.7;
  color: var(--muted);
}

/* --- FAQ ------------------------------------------------------------
   ネイティブの <details>。ARIA も JS も書かない（WCAG 4.1.2 を構造で満たす）。 */
.qa{ border-top: 1px solid var(--line); }
.qa__item{ border-bottom: 1px solid var(--line); }
.qa__q{
  display: flex;
  align-items: flex-start;
  gap: var(--sp-4);
  min-height: var(--tap);
  padding-block: var(--sp-4);
  font-weight: 700;
  cursor: pointer;
  list-style: none;
}
.qa__q::-webkit-details-marker{ display: none; }
.qa__q::after{
  content: "＋";
  margin-inline-start: auto;
  flex: none;
  color: var(--accent);
  font-weight: 700;
}
.sec--tone-accent .qa__q::after{ color: var(--on-surface); }
.qa__item[open] > .qa__q::after{ content: "−"; }
.qa__a{ padding-block: 0 var(--sp-5); }

/* --- 定義リスト -----------------------------------------------------
   値が長い項目は <table> ではなくこちら。<table> を display:block で縦積みにすると
   表の役割がアクセシビリティツリーから落ちる。 */
.deflist{ border-top: 1px solid var(--line); }
.deflist > div{
  display: grid;
  gap: var(--sp-1) var(--sp-5);
  padding-block: var(--sp-4);
  border-bottom: 1px solid var(--line);
}
.deflist dt{ font-weight: 700; font-size: var(--fs-sm); color: var(--on-surface); }
.deflist dd{ margin: 0; }
/* <dd> の中の注記。レンダラは span で出す（<dd> 直下でも <p> を入れ子にしない方針のため） */
.deflist__note{
  display: block;
  margin-top: var(--sp-1);
  font-size: var(--fs-cap);
  line-height: 1.7;
  color: var(--muted);
}

/* --- 表（richtext から来る素の <table> 用） -------------------------
   横スクロールさせない。狭い幅では列幅を固定して本文側を折る。
   overflow-x:auto にすると、スマホでは表の右側に何かある事に気づかれない。 */
:where(.lp) :where(table){ table-layout: fixed; }
:where(.lp) :where(th, td){
  padding: var(--sp-3) var(--sp-2);
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--line);
  font-size: var(--fs-sm);
}
:where(.lp) :where(th){ font-weight: 700; width: 34%; }


/* =====================================================================
   8-2. レンダラが出すが初版に規則が無かったクラス
   src/render/sections.mjs / page.mjs の出力と突き合わせて洗い出した分。
   規則が無いと「無指定で描画される」だけで、エラーにもコントラスト不足にもならず
   静かに崩れる。**器を用意した以上、器の名前は全部ここで受ける。**
   ===================================================================== */

/* --- ヒーローの器（レンダラは <div class="hero"> の中に __text と __media を出す） --- */
/* 器そのものにも規則を置く。__text にだけ書いて .hero を書き忘れており、
   クラス網羅の検査（audit/class_coverage.py）で「無指定1件」として出た唯一の残り。
   flow-root は見た目を変えない代わりに、子の上下マージンが器の外へ抜けて
   セクションの余白（--sec-pt / --sec-pb）を食うのを止める。
   overlay で先頭に来る .hero__media は margin-top を持つので、実際に抜ける形をしている。 */
.hero{ display: flow-root; }
.hero__text{ display: block; }
/* overlay:true のとき、レンダラは写真を先に出す。
   **それでも文字は写真の上に載せない**（判断10）。純広告LP4本が見出しを画像に焼いていた
   のを真似ない、というのがこの土台の立場なので、overlay は「順序が入れ替わるだけ」に留める。
   写真が差し替わってもコントラストが崩れない、が守れなくなるため。 */
.hero--overlay .hero__media{ margin-top: 0; margin-bottom: var(--sp-7); }

/* --- セクション内のCTA群（.hero__ctas の非ヒーロー版） --- */
.sec__ctas{
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3);
  margin-top: var(--gap-group);
}
.sec__ctas .btn{ flex: 1 1 15rem; min-height: var(--btn-h-lg); }

/* --- セクション末尾の注記・署名 --- */
.sec__note{ margin-top: var(--sp-5); font-size: var(--fs-cap); line-height: 1.7; color: var(--muted); }
/* richtext の中で、表や本文のすぐ下に添える注釈。
   帯の末尾に置く .sec__note と違って本文の一部なので、上の余白は狭くする。
   出典・但し書きはここに入れる（G8「実績の数字に出典がある」の受け皿）。 */
.note{ margin-top: var(--sp-3); font-size: var(--fs-cap); line-height: 1.7; color: var(--muted); }
.note:last-child{ margin-bottom: 0; }
.sec__sign{ margin-top: var(--sp-6); font-weight: 700; }   /* 右寄せにしない（中央・右揃えを持たない方針） */

/* --- 本文の器の変種 --- */
.sec__body--narrow{ max-width: 34rem; }      /* 共感・メッセージ。読み幅をさらに詰める */
.sec__body--rich > * + *{ margin-top: var(--flow); }  /* richtext。素の要素だけで組まれる */

/* --- 写真（figure + figcaption）。角丸は付けない --- */
.media{ display: block; }
.media img{ width: 100%; border-radius: 0; }
.media__cap{ margin-top: var(--sp-2); }
.voice__media{ margin-top: var(--sp-4); }
.voice__media img{ width: 100%; border-radius: 0; }

/* --- 漫画 ------------------------------------------------------------
   コマは縦1列。横に並べない。

   2026-09-13 に漫画LP制作会社3社の自社LPを実測して決めた寸法:
     アイコミックス 51,573px(61画面) / シンフィールド 30,258px(36画面) / LP COMIC 12,701px(15画面)
   どれも縦に長すぎて読み切られない。そこで
     ① コマ幅は本文と同じ読み幅（--w-text）に収める。全幅に広げない
     ② コマ間の余白は --sp-5。詰めすぎると1枚の壁画に見え、開けすぎると話が切れる
     ③ 画像に角丸・影を付けない。紙の質感を足すと「テンプレっぽさ」が出る

   コマ間CTA(.manga__mid)は、漫画を読み切らせる前に出口を作るためのもの。
   実測でシンフィールドは最初のCTAが2.7画面下にあり、そこまで到達しないと出口が無かった。 */
.manga{ max-width: var(--w-text); margin-inline: auto; }

/* 狭い画面ではコマを端まで使う（フルブリード）。
   本文に要る左右16pxのガターは、コマには要らない。漫画は元々ページを端まで使う。

   これは見た目の好みではなく、可読性の計算から来ている:
     コマ内の文字の大きさは「画像幅に対する比」で決まる。ガターを外すと
     表示幅が 358px → 390px になり、同じ絵でも文字が 9% 大きく出る。
     必要比は 13/358 = 3.6% から 13/390 = 3.3% に下がる。
     （13px は --fs-cap ＝ このCSSが決めている文字の下限。ここは動かさない）
   生成側の scripts/panel_text_check.py も同じ 390px を前提に測ること。 */
@media (max-width: 640px){
  .manga{
    margin-inline: calc(var(--gutter) * -1);
    max-width: calc(100% + var(--gutter) * 2);
  }
  /* コマ間CTAとキャプションは本文の一部なので、ガターの中に戻す */
  .manga__mid,
  .manga__cap{ margin-inline: var(--gutter); }
}
.manga__panel{ display: block; margin: 0; }
.manga__panel + .manga__panel{ margin-top: var(--sp-5); }
.manga__panel img{ width: 100%; height: auto; border-radius: 0; display: block; }
.manga__cap{
  margin-top: var(--sp-2);
  font-size: var(--fs-cap);
  line-height: 1.7;
  color: var(--muted);
}
/* コマとコマの間に差すCTA。上下を広めに空けて、コマの続きに見えないようにする */
.manga__mid{ margin-block: var(--sp-7); }
.manga__mid .btn{ width: 100%; min-height: var(--btn-h-lg); }
.manga + .sec__note{ max-width: var(--w-text); margin-inline: auto; }
.manga__ctas{ margin-top: var(--sp-6); }

/* 漫画の帯そのもの。コマの下端に絵の余白が入るので、帯の下側を標準より詰める。
   詰めないと「コマの余白 + 帯の余白」が二重になって、次の見出しまでが間延びする。 */
.sec--manga{ --sec-pb: var(--sp-8); }

/* FVに漫画を置くときのフルブリード。指定は lp.json の media.bleed:true。
   .manga と同じ計算（358px → 390px で吹き出しの文字が9%大きく出る）。 */
@media (max-width: 640px){
  .hero__media--bleed{
    margin-inline: calc(var(--gutter) * -1);
    max-width: calc(100% + var(--gutter) * 2);
  }
  .hero__media--bleed figcaption{ margin-inline: var(--gutter); }
}

/* --- お知らせ --------------------------------------------------------
   <ul class="newslist"> > <li class="news"> > <time class="news__date"> + .news__title。
   .steps と同じ理由で list-style を消しているので、
   **レンダラは <ul class="newslist" role="list"> を書くこと**（Safari VoiceOver 対策）。 */
.newslist{ list-style: none; padding: 0; border-top: 1px solid var(--line); }
.news{
  display: grid;
  gap: var(--sp-1) var(--sp-5);
  padding-block: var(--sp-4);
  border-bottom: 1px solid var(--line);
}
.news__date{
  font-size: var(--fs-cap);
  font-variant-numeric: tabular-nums;
  color: var(--muted);
}
.news__title{ font-weight: 700; }

/* --- 料金の内訳 --- */
.plan__badge{
  display: inline-block;
  margin-bottom: var(--sp-3);
  padding: var(--sp-1) var(--sp-3);
  border-radius: var(--radius);
  background: var(--accent);
  color: var(--accent-fg);
  font-size: var(--fs-cap);
  font-weight: 700;
  line-height: 1.5;
}
.sec--tone-accent .plan__badge{ background: var(--accent-fg); color: var(--accent); }
.plan--rec{ border-color: var(--accent); border-width: 2px; }
.plan__amount{ font-size: 1.3em; }
.plan__unit{ font-size: 0.6em; font-weight: 700; margin-inline-start: 0.2em; }

/* --- 変種フック（土台では見た目を変えない。案件CSSで足す用） -----------
   .stack--check / .cards--case / .deflist--company / .sec--{type} / .field--{type}
   規則を「わざと持たない」。記号や色を増やすとテンプレの指紋になるため。
   ここに書いてあるのは「洗った結果、意図的に空である」という記録。 */


/* =====================================================================
   9. フォーム
   EFO の実測（項目が1つ減るごとに通過率+約2%）に対して CSS ができるのは
   「1項目を短く見せること」だけ。ラベルは常に入力欄の上、横並びにしない。
   ===================================================================== */
.form{ display: grid; gap: var(--sp-5); }
.field{ display: grid; gap: var(--sp-2); }
.field__label{
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  font-size: var(--fs-sm);
  font-weight: 700;
  color: var(--on-surface);
}
/* 必須/任意は **色ではなく文字** で示す。バッジが読めなくても文言が残る（WCAG 1.4.1） */
.field__req,
.field__opt{
  font-size: var(--fs-cap);
  font-weight: 700;
  line-height: 1.5;
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--radius);
}
.field__req{ background: var(--accent); color: var(--accent-fg); }
.field__opt{ background: transparent; color: var(--muted); border: 1px solid var(--line); }
.field__help{ margin-top: 0; }
.field__error{
  font-size: var(--fs-sm);
  font-weight: 700;
  line-height: 1.7;
  padding-inline-start: var(--sp-3);
  border-inline-start: 3px solid currentColor;  /* 色だけに頼らず、形でも異常だと分かる */
}

/* 入力欄だけは面（--surface）に追従させず、常にページの地と文字色を使う。
   沈めた面やアクセント面の上でも「入力する場所」の見え方が変わらないため。 */
.form :where(input, select, textarea){
  width: 100%;
  min-height: var(--btn-h);
  padding: var(--sp-3);
  font-family: inherit;
  font-size: max(1rem, 16px);   /* 16px 未満で iOS Safari が自動ズームする。rem が縮んでも割れないように max() */
  line-height: 1.6;
  color: var(--fg);
  background: var(--bg);
  /* **操作部品の枠は --line-strong**（対 --bg 3:1・WCAG 1.4.11）。
     初版は装飾罫の --line を当てていて、実測 1.33:1 で不合格だった。
     --line は「区切り線」、--line-strong は「触れる部品の輪郭」。役割が違う。 */
  border: 1.5px solid var(--line-strong);
  border-radius: var(--radius);
}
.form :where(textarea){ min-height: 8rem; resize: vertical; }
.form :where(input[type="checkbox"], input[type="radio"]){
  width: 1.375rem;
  min-height: 1.375rem;
  height: 1.375rem;
  padding: 0;
  accent-color: var(--accent);
}
/* ラジオ/チェックの行は 44px 以上。入力欄そのものではなく <label> 側で確保する */
.form label:has(input[type="checkbox"]),
.form label:has(input[type="radio"]){
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  min-height: var(--tap);
  padding-block: var(--sp-2);
  cursor: pointer;
}
.form [aria-invalid="true"]{ border-width: 2px; }
.form .btn--primary{ width: 100%; min-height: var(--btn-h-lg); }
.form__submit{ margin-top: var(--sp-2); }
.form__privacy{ font-size: var(--fs-cap); line-height: 1.7; color: var(--muted); }

/* 罠の入力欄。人には見せず、機械にだけ見つけさせて、埋まっていたらサーバー側で捨てる。
   display:none にすると埋めずに通る機械がいるので、画面の外へ出す方法をとる。
   読み上げからは aria-hidden と tabindex="-1" で外してある（マークアップ側）。 */
.hp{
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}


/* =====================================================================
   10. 追従バー
   position:fixed のみ。スクロール量で出し入れしない（JSを持たせない）。
   地は半透明にしない。背後の写真や表が透けると文字のコントラストを保証できない。
   ===================================================================== */
.stickybar{
  position: fixed;
  inset-inline: 0;
  inset-block-end: 0;
  z-index: 70;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3);
  padding-block-end: calc(var(--sp-2) + env(safe-area-inset-bottom, 0px));
  background: var(--bg);
  border-top: 1px solid var(--line);
  text-align: center;
}
.stickybar__label{
  flex: 1 1 100%;
  min-width: 0;               /* 同上。兄弟が押し広げたときに巻き込まれない */
  font-size: var(--fs-cap);
  color: var(--muted);
}
/* min-width:0 は .btn 側にも入れたが、ここにも明示しておく。
   flex-basis は「そこまで伸びたい」であって「そこを下回らない」ではない、
   ということを読む側が取り違えないため。実測ではここが親を押し広げていた。

   flex-basis を 10rem → 8rem に、左右padding を 32px → 12px に下げた理由（実測）:
   10rem(160px) だと 320px 幅でボタン2つが1行に収まらず縦積みになり、
   バーの高さが 152px＝画面(844px)の18% を占めた。判断11（常駐するものが画面を潰さない）
   に反する。8rem+padding12px なら 320px でも横1行に収まる。 */
.stickybar__btn{
  flex: 1 1 8rem;
  min-width: 0;
  min-height: var(--tap);
  padding-inline: var(--sp-3);
  font-size: var(--fs-sm);
}


/* =====================================================================
   11. フッター
   ===================================================================== */
.lp-footer{
  background: var(--sunk);
  color: var(--fg);
  padding: var(--sp-8) var(--gutter);
  /* 追従バーの下に本文が隠れないための下駄。バーが消える幅で外す */
  padding-block-end: calc(var(--sp-8) + var(--stickybar-h));
  font-size: var(--fs-sm);
}
/* 電話番号の行。<p> 自体には nowrap を掛けない（中に受付時間の span が入るため、
   掛けると行全体が折れなくなって画面をはみ出す。.btn--tel で実際にそうなった）。
   **折らせないのは「番号そのもの」＝中の <a> だけ。** <a> が無ければ何も nowrap しない
   ＝安全側に壊れる。 */
.lp-footer__tel{
  font-size: var(--fs-num-s);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.lp-footer__tel > a{ white-space: nowrap; }
/* 受付時間。レンダラは <p class="lp-footer__tel"> の中の **inline の span** で出す
   （<p> の中に <div> を置けないため span で確定）。
   span のままだと margin-top が効かず、右へ流れてズレる（実測 +14px）。
   display:block を当てて行として成立させる。span に display:block は仕様上正当。 */
.lp-footer__hours{
  display: block;
  margin-top: var(--sp-1);
  font-size: var(--fs-cap);
  font-weight: 400;
  line-height: 1.7;
  letter-spacing: var(--ls-body);
  font-variant-numeric: normal;   /* 親の tabular-nums を継がない（時刻は等幅にしない） */
  color: var(--muted);
}
.lp-footer__name{ font-size: var(--fs-base); font-weight: 700; }
.lp-footer__addr,
.lp-footer__area{ margin-top: var(--sp-1); }
.lp-footer__links{
  list-style: none;      /* レンダラは role="list" を書くこと */
  padding: 0;
  margin-top: var(--sp-4);
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2) var(--sp-5);
}
.lp-footer__links a{ display: inline-block; min-height: var(--tap); line-height: var(--tap); }  /* タップ44px */
.lp-footer__note{ margin-top: var(--sp-5); padding-top: var(--sp-4); border-top: 1px solid var(--line); }
.lp-footer__copy{ margin-top: var(--sp-4); font-size: var(--fs-cap); color: var(--muted); }


/* =====================================================================
   12. ユーティリティ
   ===================================================================== */
.u-visually-hidden{
  position: absolute !important;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}


/* =====================================================================
   13. ブレークポイント
   2本しか無い。600px = 2列を許す最小幅（本文幅 --w-text の半分が全角17字を割らない）。
   960px = 追従バーを畳んでヘッダーを sticky にする幅。
   この2本の外側に @media は書かない（下の prefers-reduced-motion を除く）。
   ===================================================================== */
@media (min-width: 600px){
  :root{ --gutter: var(--sp-5); }

  /* 数字の先頭1つだけ全幅。残りが2列に並ぶので「均等な数字の列」にならない */
  .stats{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-6) var(--sp-7); }
  .stats > .stat:first-child{ grid-column: 1 / -1; }

  .plans{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-6); }
  .deflist > div{ grid-template-columns: 11em minmax(0, 1fr); }
  .form .btn--primary{ width: auto; min-width: 18rem; }
  .stickybar__label{ flex: 0 1 auto; text-align: start; }
}

@media (min-width: 960px){
  :root{ --gutter: var(--sp-6); }

  /* PC の縦余白。同じ3段のまま値だけ上げる。段は増やさない */
  .sec{ padding-block: var(--sec-pt-pc, 6rem) var(--sec-pb-pc, 5rem); }
  .sec--sp-s{ --sec-pt-pc: var(--sp-8); --sec-pb-pc: var(--sp-7); }  /* 56 / 40 */
  .sec--sp-m{ --sec-pt-pc: 6rem;        --sec-pb-pc: 5rem; }         /* 96 / 80 */
  .sec--sp-l{ --sec-pt-pc: 8rem;        --sec-pb-pc: 6.5rem; }       /* 128 / 104 */
  .sec--hero{ --sec-pt-pc: var(--sp-8); --sec-pb-pc: 6.5rem; }

  /* 常駐するものを1つにする。追従バーを消してヘッダーを sticky に入れ替える */
  .lp-header{ position: sticky; inset-block-start: 0; z-index: 60; min-height: 4.5rem; }
  .lp [id]{ scroll-margin-top: 5.5rem; }
  .stickybar{ display: none; }
  .lp-footer{ padding-block-end: var(--sp-8); }

  /* カードは最大2列。右列を1段下げて、格子に見えないようにする。
     （やり過ぎだと感じたらこの1行だけ消せばよい。他に影響しない） */
  .cards{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-9) var(--sp-8); }
  .cards > .card:nth-child(even){ margin-top: var(--sp-7); }

  .voices{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-6); }
  .steps{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--sp-8); }
  .hero__ctas .btn{ flex: 0 1 20rem; }
}


/* =====================================================================
   14. prefers-reduced-motion — 対応する
   このファイルにスクロール連動の演出は無いので、対象は
   ①ボタンの色のトランジション ②html の smooth scroll の2つだけ。
   それでも「動きを減らす」設定を無視しない（WCAG 2.3.3 / 前庭障害への配慮）。

   prefers-color-scheme — 対応しない（判断）。
   配色は案件ごとに写真とブランドから決めてコントラストを実測する。OSの設定で
   勝手に反転させると、その実測値が保証できなくなる。暗い配色で出す案件は
   :root のトークンを暗色で流し、--scheme:dark を書く。CSS は同じものが動く。
   ===================================================================== */
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior: auto; }
  .lp *,
  .lp *::before,
  .lp *::after{
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}


/* =====================================================================
   15. 追加部品（2026-09-23 ことばとコード / DESIGN.md §5 A〜D）
   ここに書いたクラスは、それを出す指定（header.nav / links / gallery /
   empathy.media / media.frame）がある案件にしか現れない。
   既存案件のHTMLにはこのクラスが1つも無いので、足しても見た目は変わらない。
   **既存クラスへの規則はここに書かない**（書くと既存案件の見た目が動く）。
   ===================================================================== */

/* --- A. ヘッダーのナビ（ページ内アンカー） ---------------------------
   SP: 屋号の下の2段目を全幅で使う。折り返す（横スクロールにしない）。
   PC: 1段にして右へ。ナビはリンク色にしない（本文中のリンクと見分けるため）。 */
.lp-header__nav{ grid-column: 1 / -1; grid-row: 2; min-width: 0; }
.lp-header__nav ul{
  list-style: none;
  margin: 0 calc(var(--sp-2) * -1);   /* 1項目目の文字の左端を屋号の左端に揃える */
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--sp-1);
}
.lp-header__nav a{
  display: inline-flex;
  align-items: center;
  min-height: var(--tap);
  padding-inline: var(--sp-2);
  font-size: var(--fs-sm);
  font-weight: 700;
  line-height: 1.4;
  color: var(--fg);
  text-decoration: none;
}
.lp-header__nav a:hover{ text-decoration: underline; text-decoration-thickness: 2px; }

/* --- B. カード末尾の文字リンク -----------------------------------------
   ボタンにしない（カードごとにボタンが並ぶと、ヒーローの主ボタンと強さが同じになる）。
   押せる高さは 44px を inline-flex で確保する。 */
.card__links{
  margin-top: var(--sp-4);
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--sp-5);
}
.card__links a{
  display: inline-flex;
  align-items: center;
  min-height: var(--tap);
  font-weight: 700;
  color: var(--accent-text, var(--accent));
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.3em;
}
.card__links a:hover{ text-decoration-thickness: 2px; }

/* --- C. カード内の複数画像。常に2列（3列の器は作らない） ---------------- */
.card__gallery{
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--sp-3);
  align-items: start;
  margin-top: var(--sp-4);
}
.card__gallery img{ width: 100%; border-radius: 0; }
.card__gallery + .card__title{ margin-top: var(--sp-5); }

/* 白い紙・白い画面が地に溶けるときだけ付ける 1px の罫（media.frame:true）。影は付けない */
.img--framed{ border: 1px solid var(--line); }

/* --- D. 共感セクションの写真 ---------------------------------------------
   写真に角丸・枠を付けない。無いときは .sec__portrait 自体が出ない。 */
.sec__portrait{ max-width: 15rem; }
.sec__portrait img{ width: 100%; border-radius: 0; }
.sec__portrait + .sec__body--narrow{ margin-top: var(--flow-loose); }

@media (min-width: 960px){
  .lp-header__nav{ grid-column: 2; grid-row: 1; }
  .lp-header__nav ul{ margin: 0 calc(var(--sp-3) * -1) 0 0; gap: 0 var(--sp-1); }
  .lp-header__nav a{ padding-inline: var(--sp-3); font-size: 0.9375rem; }

  /* 写真 16rem ＋ 本文幅。見出しは2列にまたがる */
  .sec--empathy .sec__inner:has(.sec__portrait){
    display: grid;
    grid-template-columns: 16rem minmax(0, var(--w-text));
    column-gap: var(--sp-8);
    align-items: start;
    max-width: calc(16rem + var(--sp-8) + var(--w-text) + var(--gutter) * 2);
  }
  .sec--empathy .sec__inner:has(.sec__portrait) > .sec__head{ grid-column: 1 / -1; }
  .sec--empathy .sec__inner:has(.sec__portrait) > .sec__sign{ grid-column: 2; }
  .sec__portrait{ max-width: none; }
}


/* ---- 案件固有 custom.css ---- */
/* 書体の確認: 見出しの書体は Noto Sans JP（Black 900）。SIL OFL 1.1・Reserved Font Name は "Source" のみ（https://raw.githubusercontent.com/google/fonts/main/ofl/notosansjp/OFL.txt 2026-10-28 確認）→ 名前に Source を使わない限り改変（900 への固定とサブセット化）してよい。見出し8つの58字だけに fontTools で絞り assets/noto-sans-jp-900-heading.woff2（14,964バイト）に置いた。著作権表示とライセンスは書体の中（name表）と assets/noto-sans-jp-OFL.txt。単体では売らない。旧 Dela Gothic One は「読みづらい」（本人）で外した */
/* みずき歯科（架空）比べ方LP の案件固有の CSS。
   見た目は同じ院の見本サイト（homepage-forge demo-dental-a）に合わせる。
   動きは lp.json の motion（相談の日の決まりのカードが重なる）と、末尾の「動き 9案」（2026-10-28）。 */

/* 画面には出さず、読み上げにだけ渡す（表の左上の見出し） */
.vh{
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap;
}

/* --- 比べた表 --- */
.hikaku{ margin-top: var(--gap-group); border-top: 2px solid var(--fg); }
.hikaku .hikaku__label{ width: 24%; }
.hikaku th, .hikaku td{ width: auto; line-height: 1.6; }
.hikaku thead th{ font-size: var(--fs-body); padding-top: var(--sp-4); }
.hikaku tbody th{ color: var(--muted); font-weight: 700; }
@media (max-width: 480px){
  .hikaku th, .hikaku td{ padding: var(--sp-3) var(--sp-1); }
  .hikaku .hikaku__label{ width: 22%; }
}

/* --- お渡しする紙の見本。紙らしさは細い罫とわずかな影だけ。手書き風にはしない --- */
.paper{
  background: #fffdf8;
  border: 1px solid var(--line);
  box-shadow: 0 1px 2px rgb(36 33 29 / .08), 0 8px 24px rgb(36 33 29 / .06);
  padding: var(--sp-6) var(--sp-5);
}
.paper > * + *{ margin-top: var(--sp-4); }
.paper__head{
  font-weight: 700; font-size: var(--fs-h3, 1.25rem);
  padding-bottom: var(--sp-3); border-bottom: 2px solid var(--fg);
  display: flex; justify-content: space-between; align-items: baseline; gap: var(--sp-3);
}
.paper__tag{
  font-size: var(--fs-cap); font-weight: 700; color: var(--accent);
  border: 1px solid var(--accent); padding: 0 var(--sp-2);
}
.paper__meta{ font-size: var(--fs-sm); color: var(--muted); }
.paper__table th, .paper__table td{ width: auto; }
.paper__table .paper__col1{ width: 28%; }
.paper__table .paper__col3{ width: 14%; }
.paper__table .paper__col4{ width: 20%; }
.paper__decide{ padding: var(--sp-3); border: 1px dashed var(--line); }
@media (max-width: 480px){
  .paper{ padding: var(--sp-5) var(--sp-3); }
  .paper__table th, .paper__table td{ padding: var(--sp-2) var(--sp-1); }
}

/* --- 迷ったときの3つの問い --- */
.toi{ padding-left: 1.5em; }
.toi > li + li{ margin-top: var(--sp-4); }

/* 箇条書き・紙の見本のすぐ下の文に、ひと呼吸の余白（実測で詰まって見えた 2026-10-28） */
.sec--problem .stack + .sec__body{ margin-top: var(--gap-group); }
.paper + p{ margin-top: var(--gap-group); }
/* 3つの方法のカード。項目ごとの段落の間は狭めに（空き過ぎると1枚に見えない） */
#hoho .card__body p + p{ margin-top: var(--sp-2); }

/* --- 左端を1本にそろえる（ダメ出し 2026-10-28: PCで x=96/212/368 の3か所に飛んでいた）---
   lp-forge は「カードのある節だけ広い器・ほかは中央の狭い器」。この案件は全部を広い器の左に寄せ、
   読む幅は中身ごとに絞る（本文の p は base.css が --w-text で止めている）。 */
.sec .sec__inner{ max-width: calc(var(--w-wide) + var(--gutter) * 2); }
@media (min-width: 960px){
  .sec--empathy .sec__inner:has(.sec__portrait){ max-width: calc(var(--w-wide) + var(--gutter) * 2); }
}
.hikaku, .paper{ max-width: 52rem; }
.qa, .form, .stack{ max-width: var(--w-text); }

/* 最初の画面の写真（overlay で文字の上に出る）。横長に切ってあるので、高さを取りすぎない */
.hero--overlay .hero__media img{ max-height: 22rem; object-fit: cover; }

/* 表の見出しが1文字だけ次の行に落ちるのを防ぐ（スマホ） */
@media (max-width: 480px){
  .hikaku thead th{ font-size: var(--fs-sm); letter-spacing: -0.02em; }
  .hikaku .hikaku__label{ width: 20%; }
}

/* 締めの帯: 電話番号をボタンから離す */
.sec--cta .sec__ctas + .sec__tel{ margin-top: var(--sp-6); }

/* --- 院の中と場所 --- */
.photos{ display: grid; grid-template-columns: 2fr 1fr; gap: var(--sp-3); }
.photos figure{ margin: 0; display: flex; flex-direction: column; }
.photos img{ width: 100%; aspect-ratio: 3 / 2; height: auto; object-fit: cover; }
@media (min-width: 560px){
  .photos__main img{ flex: 1 1 auto; min-height: 0; aspect-ratio: auto; }
}
.photos__main{ grid-row: span 2; }
.photos figcaption, .basho figcaption{ font-size: var(--fs-cap); color: var(--muted); margin-top: var(--sp-1); }
.basho{ display: grid; gap: var(--sp-6); margin-top: var(--gap-group); }
@media (min-width: 760px){ .basho{ grid-template-columns: 1fr 1fr; align-items: start; } }
.basho__map{ margin: 0; }
.basho__hours caption{ text-align: left; font-weight: 700; padding-bottom: var(--sp-2); }
.basho > *{ min-width: 0; }
.basho__hours{ table-layout: fixed; }
.basho__hours thead th:first-child{ width: 30%; }
.basho__hours th, .basho__hours td{ width: auto; text-align: center; padding: var(--sp-2) var(--sp-1); }
.basho__hours tbody th{ padding-right: var(--sp-3); }
.basho__info > * + *{ margin-top: var(--sp-4); }
.basho__hours tbody th{ text-align: left; }
@media (max-width: 559px){
  .photos{ grid-template-columns: 1fr 1fr; }
  .photos__main{ grid-column: 1 / -1; grid-row: auto; }
}

/* ダメ出し2周目（2026-10-28）で直したもの */
/* 紙の中の見出し行が本文幅（--w-text）で止まり、表より短かった */
.paper p{ max-width: none; }
/* 低い画面（780×450 など）でも、写真だけで最初の画面が埋まらないように */
@media (max-height: 560px){ .hero--overlay .hero__media img{ max-height: 18vh; } }
/* ヘッダーとフッターの左端を本文（広い器の左）にそろえる。PCで x=32 と x=96 に分かれていた */
.lp-header, .lp-footer{ padding-inline: max(var(--gutter), calc((100% - var(--w-wide)) / 2)); }

/* --- 3つの治療の図（比較表の上）。ダメ出し 2026-10-28 で組み直し ---
   PC・タブレット: 表の見出し列（24%）の分だけ右へ寄せ、図を表の3列にそろえる。
   スマホ: 3列だと1枚113pxで線が潰れるので、図と説明を1行ずつ縦に並べる。 */
.hikaku, .zu, .zu__legend{ max-width: none; }
.zu__legend{ margin-top: var(--gap-group); font-size: var(--fs-sm); }
.zu{ display: flex; margin-top: var(--sp-3); padding-left: 24%; }
.zu figure{ flex: 1 1 0; min-width: 0; margin: 0; padding-inline: var(--sp-2); }
.zu img{ width: 100%; height: auto; border: 1px solid var(--line); background: #fffdf8; }
.zu figcaption{ margin-top: var(--sp-2); font-size: var(--fs-sm); line-height: 1.6; color: var(--fg); }
.zu figcaption b{ display: block; font-size: var(--fs-body); }
@media (max-width: 559px){
  .zu{ flex-direction: column; padding-left: 0; gap: var(--sp-4); }
  .zu figure{ display: flex; align-items: center; gap: var(--sp-3); padding-inline: 0; }
  .zu img{ flex: 0 0 46%; width: 46%; }
  .zu figcaption{ margin-top: 0; font-size: var(--fs-body); }
}
/* 日本語の文節で折り返す（「つなげ/て」「ほ/ど」のような途中の折れを減らす。対応していないブラウザは今まで通り） */
.zu figcaption, .zu__legend, .hikaku th, .hikaku td{ word-break: auto-phrase; }

/* --- 残りの弱点の直し（2026-10-28 本人「２」）--- */
/* 1. スマホでは4列の表をやめ、治療ごとのカード（図＋項目）にする。表と図の列はPC・タブレットだけ。
      片方は display:none なので、読み上げにも1つしか出ない */
.hikaku-sp{ display: none; }
@media (max-width: 559px){
  .hikaku, .zu{ display: none; }
  .hikaku-sp{ display: block; margin-top: var(--sp-4); }
  .hikaku-sp__card{ border: 1px solid var(--line); background: #fffdf8; padding: var(--sp-5) var(--sp-4); }
  .hikaku-sp__card + .hikaku-sp__card{ margin-top: var(--sp-5); }
  .hikaku-sp__card h3{ font-size: var(--fs-h3, 1.25rem); }
  .hikaku-sp__cap{ margin-top: var(--sp-1); font-size: var(--fs-sm); }
  .hikaku-sp__card img{ width: 100%; height: auto; margin-top: var(--sp-3); border: 1px solid var(--line); }
  .hikaku-sp__card dl{ margin-top: var(--sp-4); border-top: 1px solid var(--line); }
  .hikaku-sp__card dl > div{ display: grid; grid-template-columns: min(8.5em, 40%) minmax(0, 1fr); gap: var(--sp-3);  /* 文字200%で項目名の列が欄を食わないよう 40% まで */
    padding-block: var(--sp-3); border-bottom: 1px solid var(--line); }
  .hikaku-sp__card dt{ font-weight: 700; color: var(--muted); font-size: var(--fs-sm); }
  .hikaku-sp__card dd{ margin: 0; font-size: var(--fs-body); line-height: 1.7; word-break: auto-phrase; }
  #hikaku .note{ font-size: var(--fs-sm); color: var(--fg); }
}

/* 2. PCで、よくある質問と予約フォームの右が空いていた → 見出しを左、中身を右の2列に */
@media (min-width: 960px){
  .sec--faq .sec__inner, .sec--form .sec__inner{
    display: grid; grid-template-columns: minmax(0, 18rem) minmax(0, 1fr); column-gap: var(--sp-8); align-items: start;
  }
  .sec--faq .sec__head, .sec--form .sec__head{ position: sticky; top: 7rem; }
  .sec--faq .sec__head + *, .sec--form .sec__head + *{ margin-top: 0; }
  .sec--faq .qa, .sec--form .form{ max-width: 42rem; min-width: 0; }
  .sec--form select, .sec--form input, .sec--form textarea{ max-width: 100%; min-width: 0; }
  .sec--form .form{ grid-template-columns: minmax(0, 1fr); }
  .sec--form .form__submit{ white-space: normal; max-width: 100%; min-width: 0; }  /* フォームの格子は列幅が固定（文字200%で576px）。2列の右の欄に合わせて縮める */
}

/* ==== 動き（2026-10-28 本人「なにも動きがない」）====
   同じ院の見本サイト（homepage-forge demo-dental-a theme.css）で本人が選んだ 案1・2・3・5 を、このLPにも同じ数値で入れる。
   lp-forge の既定は「スクロール連動の演出を書かない」だが、本人が選んだ動きなのでこの案件だけ custom.css に書く。
   決まりはサイトと同じ:
     - 全部 prefers-reduced-motion: no-preference の中。reduce では何も動かさず最初から見える
     - 画面に入ったときの動き（view()）は @supports の中だけ。効かないブラウザでは最初から見える
     - 画面に入る動きは entry 0% から forwards。画面の外にある間は普通に見えている（全体の撮影・検査で消えない）
   1) テロップ: 最初の画面の大見出しが幕の下からせり上がる 0.9秒。小見出し・説明・ボタンは 0.75〜1.05秒後に浮き上がる。各節の見出しも画面に入ったとき
   2) 写真の幕開け: 最初の写真が左から開く 0.7秒 → 0.7秒後から 5秒で 1 → 1.08倍（1回だけ）。ほかの写真には付けない（ダメ出し: 全部同じ動きは安っぽい）
   3) パララックス: 院の中の大きい写真（.px の枠）。枠が画面を通り抜ける間に、枠の高さの −30% → +30%
   5) 重なるカード: 相談の日の決まりの3枚（lp.json の motion・motion-kit） */
.hero__media{ overflow: hidden; overflow: clip; }
.px{ display: block; position: relative; overflow: hidden; overflow: clip; aspect-ratio: 3 / 2; }
.px img{ position: absolute; left: 0; top: -30%; width: 100%; height: 160% !important; aspect-ratio: auto !important; object-fit: cover; }
@media (min-width: 560px){ .photos__main .px{ flex: 1 1 auto; aspect-ratio: auto; min-height: 16rem; } }

@media (prefers-reduced-motion: no-preference){
  /* 最初の画面の動きは末尾の「動き 9案」に移した（2026-10-28） */
  @supports (animation-timeline: view()){
    .sec__title{ animation: mz-tl-up linear forwards; animation-timeline: view(); animation-range: entry 0% cover 25%; }
    .px{ view-timeline: --mz-px block; }
    .px img{ animation: mz-px linear both; animation-timeline: --mz-px; animation-range: cover 0% cover 100%; }
    /* スマホは画面の下 約64px が固定バー。見出しと幕開けはバーの上の範囲で動かす */
    @media (max-width: 959px){
      .sec__title{ animation-timeline: view(block 0px 64px); }
    }
  }
}
/* テロップは要素そのものを下から切り抜いて出す（lp-forge の見出しは中に包みを入れられないため） */
@keyframes mz-tl-up{ from{ clip-path: inset(0 0 100% 0); transform: translateY(.5em); } to{ clip-path: inset(0 0 -.2em 0); transform: none; } }
@keyframes mz-in{ from{ opacity: 0; transform: translateY(10px); } to{ opacity: 1; transform: none; } }
@keyframes mz-curtain{ from{ clip-path: inset(0 100% 0 0); } to{ clip-path: inset(0 0 0 0); } }
@keyframes mz-zoom{ from{ transform: scale(1); } to{ transform: scale(1.08); } }
@keyframes mz-px{ from{ transform: translateY(-18.75%); } to{ transform: translateY(18.75%); } }

/* ダメ出し（動き）2周目のあと: 重なるカードが地と同じ色で、重なりが見えず崩れに見えた。
   カードを紙の白にして影を付け、重なった前のカードとの段差が分かるようにする */
#kimari .card{ background: #fffdf8; box-shadow: 0 -1px 0 rgb(36 33 29 / .06), 0 12px 28px -16px rgb(36 33 29 / .45); }
/* 最初の画面の小見出し（何のページか）を読める大きさに。約11px → 15px */
.hero__kicker{ font-size: 0.9375rem; }


/* =====================================================================
   動き 9案を全部入れる（2026-10-28 本人「このまま全部入れて」）
   見本: motion-samples/index.html。最初の画面は案9（＋案1の写真の寄りと順に出る動き）。下の節に案2〜8。
   lp-forge には案件ごとの JS を入れる口が無いので、
     - 開いたときの動き（最初の画面）は時間で動く CSS アニメ
     - 下の節の動きは、スクロールの位置で進む動き（animation-timeline: view()。@supports の中だけ）
   見本の「画面に入ったら1回、決まった秒数で再生」は JS が要るので、ここでは「スクロールに連れて進む」に置き換えた。
   決まり（前からの約束と同じ）
     - 動きは全部 prefers-reduced-motion: no-preference の中。reduce では止まり、最初から全部見える
     - 画面に入る動きは entry 0% から始めて forwards。画面の外にある間は普通に見えている
       （途中の区間で隠すときは、キーフレームの頭に「隠したまま」を持たせて区間の頭から隠す）
     - スマホは画面の下 約64px が固定バー。スクロールで進む動きはバーの上の範囲で数える
   ===================================================================== */

/* ---------- 最初の画面（案9 ＋ 案1） ---------- */
@font-face{
  font-family: "MZ Heading";
  src: url("noto-sans-jp-900-heading.woff2") format("woff2");
  font-weight: 900; font-style: normal;
  font-display: block;   /* 帯の位置を字の幅で決めているので、別の書体で一瞬出さない（3KB なので待ちは短い） */
}
.sec--hero{
  --navy: #0a1020; --yellow: #f5b400; --paper-r: #f7f4ec;
  --surface: var(--navy); --on-surface: var(--paper-r); --muted: #c9ccd6; --line: rgb(247 244 236 / .35);
  --h1fs: min(clamp(2rem, 1.3rem + 3vw, 3.375rem), calc(100cqi / 9.9));  /* cqi = 文字の列（.hero__text）の幅。「3つを比べてから、」（Noto Sans JP 900 で 8.789字分）が必ず1行に入る。9.9 で割るのは、入るときの 1.07 倍の拡大でも列からはみ出さないため */
  position: relative; isolation: isolate; overflow: hidden; overflow: clip;
}
/* 点の層（6枚）。器にしている要素の ::before / ::after を、最初の画面いっぱいに広げて敷く */
.sec--hero::before,
.sec--hero::after,
.sec--hero > .sec__inner::before,
.sec--hero > .sec__inner::after,
.sec--hero .hero::before,
.sec--hero .hero::after{
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-repeat: repeat; background-size: 168px 168px; opacity: .15;
}
.sec--hero::before{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%274%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 2s; --bl: -0.00s; }
.sec--hero::after{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2760%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 2.4s; --bl: -0.53s; }
.sec--hero > .sec__inner::before{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2732%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 2.6s; --bl: -1.06s; }
.sec--hero > .sec__inner::after{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2788%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 3.2s; --bl: -1.59s; }
.sec--hero .hero::before{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2774%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 3.8s; --bl: -2.12s; }
.sec--hero .hero::after{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2774%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); --bd: 4.4s; --bl: -2.65s; }
.sec--hero .hero__text, .sec--hero .hero__media{ position: relative; z-index: 1; }
/* 文字の列の後ろは点をさらに薄く: 一色の濃紺の板（枠線の外側に広げるので並び方は変えない） */
/* 文字の後ろの板は、1920幅で縁がうっすら四角く見えた（ダメ出し）のでやめた。点を全体に薄くして読みやすさを保つ */
.sec--hero .hero__kicker{ position: relative; color: #ffe27a; }
.sec--hero .hero__kicker::before{ background: var(--yellow); }
.sec--hero .hero__headline{
  position: relative; z-index: 1;
  font-family: "MZ Heading", var(--font-head); font-weight: 900;
  font-size: var(--h1fs); line-height: 1.26; letter-spacing: .02em; word-break: keep-all;
  color: var(--paper-r);
  /* 帯の上の5字（比べてから）だけ濃紺の字にする。見出しの原稿は変えられないので、
     字の幅（Noto Sans JP 900 の実寸: 3つを=2.609em・比べてから=5em・字送り .02em）で場所を決め、
     濃紺の板と生成りの板を重ねて字の形で切り抜く */
  background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 10 10%27 preserveAspectRatio=%27none%27%3E%3Crect width=%2710%27 height=%2710%27 fill=%27%230a1020%27/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 10 10%27 preserveAspectRatio=%27none%27%3E%3Crect width=%2710%27 height=%2710%27 fill=%27%23f7f4ec%27/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: 2.66em 0, 0 0; background-size: 5.12em 1.26em, 100% 100%;
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
@media (max-width: 340px){ .sec--hero{ --h1fs: min(1.55rem, calc(100cqi / 9.9)); } }
/* 黄色の帯。見出しの1行目の「比べてから」の後ろ。小見出しの下端から測るので、小見出しが折り返しても位置がずれない */
.sec--hero .hero__kicker::after{
  content: ""; position: absolute; z-index: 0; pointer-events: none;
  left: calc(var(--h1fs) * 2.65); width: calc(var(--h1fs) * 5.1);
  top: calc(100% + var(--sp-3) + var(--h1fs) * .1); height: calc(var(--h1fs) * 1.06);
  background: var(--yellow); transform-origin: 0 50%;
}
.sec--hero .hero__sub{ color: var(--muted); }
.sec--hero .hero__note{ color: var(--muted); }
.sec--hero :focus-visible{ outline-color: var(--paper-r); }
/* ボタン: 太さ900・角丸16px・後ろに2pxの枠をずらして重ねる */
.sec--hero .hero__ctas .btn{ position: relative; border-radius: 16px; font-weight: 900; transition: transform .4s cubic-bezier(.34, 1.56, .64, 1); }
.sec--hero .hero__ctas .btn::after{
  content: ""; position: absolute; inset: -2px; z-index: -1; border-radius: inherit; pointer-events: none;
  border: 2px solid var(--yellow); transform: translate(4px, 4px); transition: transform .4s cubic-bezier(.34, 1.56, .64, 1);
}
.sec--hero .btn--primary{ background: var(--yellow); border-color: var(--yellow); color: var(--navy); }
.sec--hero .btn--ghost{ background: var(--navy); border-color: var(--paper-r); color: var(--paper-r); }
.sec--hero .btn--ghost::after{ border-color: rgb(247 244 236 / .45); }
.sec--hero .btn--ghost:hover{ background: var(--navy); }
@media (hover: hover){
  .sec--hero .hero__ctas .btn:hover{ transform: translate(-2px, -4px); }
  .sec--hero .hero__ctas .btn:hover::after{ transform: translate(6px, 8px); }
}
/* 写真。スマホは文字の下、PCは右の列の高さいっぱい */
.sec--hero .hero{ display: flex; flex-direction: column; }
.sec--hero .hero__media{ order: 2; margin: var(--sp-7) 0 0; border: 2px solid var(--paper-r); border-radius: 8px; }
.sec--hero .hero__media img{ display: block; }
@media (min-width: 760px){
  .sec--hero{ display: flex; align-items: center; min-height: min(calc(100svh - 4.5rem), 50rem); }
  .sec--hero .hero{ display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: stretch; gap: 3.5rem; }
  .sec--hero .hero__text{ align-self: center; }
  .sec--hero .hero__media{ margin: 0; min-height: 20rem; }
  .sec--hero .hero__media picture{ display: block; height: 100%; }
  .hero--overlay .hero__media img, .sec--hero .hero__media img{ max-height: none; height: 100%; object-fit: cover; object-position: 38% 50%; transform-origin: 40% 55%; }  /* 院長の顔と紙が入る位置（写真差し替え 2026-10-28） */
}
@media (min-width: 1360px){
  .sec--hero{ --h1fs: min(clamp(3.375rem, 1.6rem + 2.2vw, 4.5rem), calc(100cqi / 9.9)); }
  .sec--hero .hero__kicker{ font-size: 1.0625rem; }
  .sec--hero .hero__sub{ font-size: 1.1875rem; }
}
@media (max-height: 560px) and (min-width: 760px){ .sec--hero{ min-height: 0; } }

/* ---------- 案8 脈打つ目印（小見出しの頭の点） ---------- */
.sec__kicker::before, .hero__kicker::before{
  content: ""; display: inline-block; width: .55em; height: .55em; margin-right: .5em; border-radius: 50%;
  background: var(--accent); vertical-align: .05em;
}

/* ---------- 案6 見出しの帯（節の頭の差し色の線） ---------- */
.sec__head::before{ content: ""; display: block; height: 3px; margin-bottom: var(--sp-4); background: var(--accent); transform-origin: 0 50%; }

/* 案8 角の点（比べた表の節の右上）は、ダメ出し2周目でやめた */

/* 案8 縁を流れ落ちる線は、ダメ出し3周目で外した（何度見せても「線の残り」と読まれたため） */

/* ---------- 案7 ペンの帯（比べる要点の語） ---------- */
.pen{ position: relative; isolation: isolate; font-weight: 700; }
.pen::before{ content: ""; position: absolute; z-index: -1; left: -.15em; right: -.15em; bottom: .02em; height: .78em;
  background: #f6d77a; transform-origin: 0 50%; }  /* 黄色の帯（不透明）。上の字 #24211d とのコントラスト約12:1 */

/* ---------- 案8 3つの方法のカード（ポンと入る・ホバーで持ち上がる） ---------- */
#hoho .card{ background: #fffdf8; border: 1px solid var(--line); border-top: 4px solid var(--accent); border-radius: 8px; padding: var(--sp-5); }
@media (hover: hover){
  #hoho .card{ transition: transform .4s cubic-bezier(.34, 1.56, .64, 1), box-shadow .4s ease; }
  #hoho .card:hover{ transform: translateY(-6px); box-shadow: 0 10px 20px -14px rgb(36 33 29 / .35); }
}

/* ---------- 案4 図: 線の長さを 1 にそろえておく（描く動きの下ごしらえ） ---------- */
.zu-svg{ display: block; width: 100%; height: auto; border: 1px solid var(--line); background: #fffdf8; }
.hikaku-sp__card .zu-svg{ margin-top: var(--sp-3); }
.zu-svg .z-wipe{ transform-box: fill-box; transform-origin: 0 50%; }
.zu-svg .z-new, .zu-svg .z-base, .zu-svg .z-line{ pointer-events: none; }  /* 図の3つのまとまり（下地・ご自分の歯の線・新しく入れるもの）。茶色を塗る動きは中の切り抜き（.z-wipe）で行う */
@media (max-width: 559px){ .zu .zu-svg{ flex: 0 0 46%; width: 46%; } }

/* =========================== 動き =========================== */
@media (prefers-reduced-motion: no-preference){
  /* 最初の画面（開いたとき・時間で動く）: 1.2秒・少し行き過ぎて戻る（1.07倍→1倍・24〜31px）。写真は7秒で1.15倍まで寄る */
  .sec--hero::before,
.sec--hero::after,
.sec--hero > .sec__inner::before,
.sec--hero > .sec__inner::after,
.sec--hero .hero::before,
.sec--hero .hero::after{ animation: mz9-blink var(--bd) ease-in-out var(--bl) infinite; }
  .sec--hero .hero__kicker{ animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) both; }
  .sec--hero .hero__headline{ --pop-y: 31px; animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) .1s both, mz9-ink .7s cubic-bezier(.65, 0, .35, 1) 1.35s both; }
  .sec--hero .hero__kicker::after{ animation: mz9-wipe .7s cubic-bezier(.65, 0, .35, 1) 1.35s both; }
  .sec--hero .hero__sub{ animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) .3s both; }
  .sec--hero .hero__ctas{ animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) .45s both; }
  .sec--hero .hero__note{ animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) .55s both; }
  .sec--hero .hero__media{ animation: mz9-pop-r 1.2s cubic-bezier(.34, 1.56, .64, 1) .2s both; }
  .sec--hero .hero__media img{ animation: mz9-zoom 7s cubic-bezier(.22, .61, .36, 1) .2s both; }

  /* 案8 ずっと続く動き: 目印が脈打つ・角の点がまたたく・縁の線が流れ落ちる */
  .sec__kicker::before, .hero__kicker::before{ animation: mz9-pulse 2s ease-in-out infinite; }

  @supports (animation-timeline: view()){
    /* 案6 見出しの帯: 線が左から伸び、見出しが行の高さぶんせり上がる */
    .sec__head{ view-timeline: --mz-head block; }
    .sec__head::before{ animation: mz9-wipe-s linear forwards; animation-timeline: --mz-head; animation-range: entry 0% cover 30%; }
    .sec__title{ animation-name: mz9-rise; }

    /* 案2 写真の幕開け（院の中と場所の写真）: 左から開き、差し色の線が幕の先を走る */
    #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px{
      animation: mz9-curtain-s linear forwards; animation-timeline: view(); animation-range: entry 0% entry 100%; }
    /* 幕の先を走る縦の棒はやめた: スクロールを途中で止めると写真の横に残った（ダメ出し） */

    /* 案4 図が描かれる: 線 → 下地 → 茶色（入れるもの）が左から塗られる。左の図から順に終わる */
    .zu-svg{ view-timeline: --mz-zu block; }
    /* 線を描く途中で歯ぐきの線が歯を突き抜けて見えた（ダメ出し）→ 図全体を上から幕で出し、最後に茶色を左から塗る。
       図の下端が画面に入りきった所（entry 100%）で必ず完成形 */
    .zu-svg{ animation: mz9-zu-open linear forwards; animation-timeline: --mz-zu; animation-range: entry 0% entry 100%; }
    .zu-svg .z-wipe{ animation: mz9-paint linear forwards; animation-timeline: --mz-zu; animation-range: entry 0% entry 100%; }

    /* 案5 比較表が順に出る: 行が下から浮き上がる（スマホはカードの中の行） */
    table.hikaku tbody tr, .hikaku-sp__card dl > div{
      animation: mz9-row linear forwards; animation-timeline: view(); animation-range: entry 0% entry 100%; }

    /* 案7 ペンの帯 */
    .pen::before{ animation: mz9-pen linear forwards; animation-timeline: view(); animation-range: entry 0% cover 30%; }

    /* 案8 3つの方法のカードが「ポン」と入る（ホバーの transform と取り合わないよう translate と scale で動かす） */
    #hoho .card{ animation: mz9-pop-s cubic-bezier(.34, 1.56, .64, 1) forwards; animation-timeline: view(); animation-range: entry 0% entry 100%; }

    @media (max-width: 959px){
      .sec__head{ view-timeline-inset: 0px 64px; }
      .zu-svg{ view-timeline-inset: 0px 64px; }
      #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px,
      table.hikaku tbody tr, .hikaku-sp__card dl > div, .pen::before, #hoho .card{ animation-timeline: view(block 0px 64px); }
    }
  }
}
@keyframes mz9-blink{ 0%, 100%{ opacity: .12; } 50%{ opacity: .7; } }
@keyframes mz9-blink-c{ 0%, 100%{ opacity: .35; } 50%{ opacity: 1; } }
@keyframes mz9-pulse{ 0%, 100%{ opacity: 1; } 50%{ opacity: .5; } }
@keyframes mz9-pop{ from{ opacity: 0; translate: 0 var(--pop-y, 24px); scale: 1.07; } 30%{ opacity: 1; } to{ opacity: 1; translate: none; scale: none; } }
@keyframes mz9-pop-r{ from{ opacity: 0; translate: 31px 0; scale: 1.07; } 30%{ opacity: 1; } to{ opacity: 1; translate: none; scale: none; } }
@keyframes mz9-zoom{ from{ transform: scale(1); } to{ transform: scale(1.15); } }
@keyframes mz9-wipe{ from{ transform: scaleX(0); } to{ transform: scaleX(1); } }
@keyframes mz9-ink{ from{ background-size: 0 1.26em, 100% 100%; } to{ background-size: 5.12em 1.26em, 100% 100%; } }
/* スクロールで進む動き。頭の区間は「隠したまま」にして、画面の下端から少し入ってから動き出す */
@keyframes mz9-wipe-s{ 0%, 20%{ transform: scaleX(0); } 100%{ transform: scaleX(1); } }
@keyframes mz9-rise{ 0%{ clip-path: inset(0 0 100% 0); transform: translateY(.9em); } 100%{ clip-path: inset(0 0 -.2em 0); transform: none; } }
@keyframes mz9-curtain-s{ 0%, 15%{ clip-path: inset(0 100% 0 0); } 100%{ clip-path: inset(0 0 0 0); } }
@keyframes mz9-zu-open{ 0%, 10%{ clip-path: inset(0 0 100% 0); } 60%, 100%{ clip-path: inset(0 0 0 0); } }
@keyframes mz9-paint{ 0%, 60%{ transform: scaleX(0); } 95%, 100%{ transform: scaleX(1); } }
@keyframes mz9-row{ 0%, 15%{ opacity: 0; translate: 0 32px; } 100%{ opacity: 1; translate: none; } }
@keyframes mz9-pen{ 0%, 55%{ transform: scaleX(0); } 100%{ transform: scaleX(1); } }
@keyframes mz9-pop-s{ 0%, 10%{ opacity: 0; translate: 0 24px; scale: 1.07; } 40%{ opacity: 1; } 100%{ opacity: 1; translate: none; scale: none; } }


/* 撮って直したもの（2026-10-28）
   - 1920幅で最初の画面の左端（x=320）がヘッダーと下の節（x=416）とずれた → 最初の画面の中身も広い器（--w-wide）にそろえる
   - スマホで小見出しの最後の「へ」が1字だけ次の行に落ちた → 420px 以下は小見出しを 14px・字送りなしに */
@media (max-width: 420px){ .sec--hero .hero__kicker{ font-size: .875rem; letter-spacing: 0; } }

/* =====================================================================
   ダメ出し（2026-10-28・直してから出す）で直したもの
   ===================================================================== */
/* 4 見出しの最後の1字だけが次の行に落ちる（「…埋め／る」「…使／う」）→ 文節で折り、最後の行を短くしすぎない */
.sec__title, .card__title, .step__title, .qa__q, .hikaku-sp__card h3, .hero__headline{ text-wrap: pretty; word-break: auto-phrase; }

/* 5 それぞれの中身のカード: 2枚の下に1枚で右が空いた → PC は3枚を横に並べる（高さのずらしはやめる）。狭い画面は縦に1列 */
#hoho .cards{ display: flex; flex-direction: column; gap: var(--sp-5); }
#hoho .cards > .card{ margin-top: 0; }
@media (min-width: 1024px){
  #hoho .cards{ flex-direction: row; align-items: stretch; }
  #hoho .cards > .card{ flex: 1 1 0; min-width: 0; }
}
@media (min-width: 760px) and (max-width: 1023px){ #hoho .cards{ max-width: 46rem; } }

/* 6 上の帯: 医院名と町名が上下に離れて112pxに間延びした → PC は1行、スマホも詰める */
.lp-header{ row-gap: 0; padding-block: var(--sp-2); min-height: 0; }
.lp-header__brand, .lp-header__tag{ margin: 0; }
.lp-header__tag{ line-height: 1.4; }
@media (min-width: 960px){
  .lp-header{ grid-template-columns: auto minmax(0, 1fr) auto; column-gap: var(--sp-4); min-height: 0; align-items: center; }
  .lp-header__brand{ grid-column: 1; grid-row: 1; }
  .lp-header__tag{ grid-column: 2; grid-row: 1; }
  .lp-header__cta{ grid-column: 3; grid-row: 1; align-self: center; }
}

/* 8 スマホの最初の画面に写真が無かった → 小見出しの上に横長の帯で置く（ボタンが画面の中に残る高さ） */
@media (max-width: 759px){
  .sec--hero{ --sec-pt: var(--sp-4); }
  .sec--hero .hero__media{ order: -1; margin: 0 0 var(--sp-4); height: 5.5rem; }
  .sec--hero .hero__media picture, .sec--hero .hero__media img{ display: block; height: 100%; }
  .hero--overlay .hero__media img, .sec--hero .hero__media img{ max-height: none; width: 100%; object-fit: cover; object-position: 50% 50%; transform-origin: 40% 45%; }  /* 横長の帯でも院長の顔と紙が入る */
  .sec--hero .hero__ctas{ margin-top: var(--sp-5); }
}

/* 9 最初と最後を対にする: 締めの節を同じ濃紺の地・黄色のボタン（ずらした枠）・点の格子に */
#shime{
  --navy: #0a1020; --yellow: #f5b400; --paper-r: #f7f4ec;
  --surface: var(--navy); --on-surface: var(--paper-r); --muted: #c9ccd6; --line: rgb(247 244 236 / .35);
  position: relative; isolation: isolate; overflow: hidden; overflow: clip;
}
#shime::before, #shime::after{ content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background-repeat: repeat; background-size: 168px 168px; opacity: .12; }
#shime::before{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%274%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); }
#shime::after{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2788%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); }
#shime .sec__head::before{ background: var(--yellow); }
#shime .sec__title{ font-family: "MZ Heading", var(--font-head); font-weight: 900; letter-spacing: .02em; }
#shime .sec__ctas .btn--primary{ position: relative; background: var(--yellow); border-color: var(--yellow); color: var(--navy);
  border-radius: 16px; font-weight: 900; transition: transform .4s cubic-bezier(.34, 1.56, .64, 1); }
#shime .sec__ctas .btn--primary::after{ content: ""; position: absolute; inset: -2px; z-index: -1; border-radius: inherit; pointer-events: none;
  border: 2px solid var(--yellow); transform: translate(4px, 4px); transition: transform .4s cubic-bezier(.34, 1.56, .64, 1); }
@media (hover: hover){
  #shime .sec__ctas .btn--primary:hover{ transform: translate(-2px, -4px); }
  #shime .sec__ctas .btn--primary:hover::after{ transform: translate(6px, 8px); }
}
#shime a:not(.btn){ color: var(--paper-r); }
#shime :focus-visible{ outline-color: var(--paper-r); }
/* 下の節にも黄色をほんの少し: 小見出しの頭の点を黄色に（文字ではないのでコントラストの対象外。字は今までの色） */
.sec__kicker::before{ background: #f5b400; }
@media (prefers-reduced-motion: no-preference){
  #shime::before{ animation: mz9-blink 2.6s ease-in-out infinite; }
  #shime::after{ animation: mz9-blink 3.8s ease-in-out -1.3s infinite; }
}

/* =====================================================================
   ダメ出し2周目（2026-10-28 本人「ダメだし全てなおして」）
   ===================================================================== */
/* 3 図の左の空き（x=365から始まっていた）→ 図を全幅で3つ並べる */
@media (min-width: 560px){ .zu{ padding-left: 0; gap: var(--sp-4); } .zu figure{ padding-inline: 0; } }

/* 3 締めの極太の見出しが詰まっていた → 字間と行間を広げる（60代でも読めるように） */
#shime .sec__title{ font-size: clamp(1.625rem, 1.2rem + 1.6vw, 2.5rem); letter-spacing: .06em; line-height: 1.6; }


/* 2 最初の画面の見た目を下の節へ通す: 大事な見出し2つ（比べた表・紙）を 見出しの書体（今は Noto Sans JP 900）にし、1行目に黄色の印。
   見出しの原稿に印を入れられないので、1行目（::first-line）に地の色を敷く。字は印の上で濃い色にする */
#hikaku .sec__title, #kami .sec__title{
  font-family: "MZ Heading", var(--font-head); font-weight: 900;
  font-size: clamp(1.5rem, 1.1rem + 1.6vw, 2.25rem); letter-spacing: .04em; line-height: 1.55;
}
#hikaku .sec__title::first-line{ background: #f5b400; color: #24211d; }
#kami .sec__title::first-line{ background: #f5b400; color: #0a1020; }

/* 2 途中にもう1か所の濃紺の節: 「この紙を持って、帰ってください」。紙の見本は白い紙のまま（中の文字は今までの色） */
#kami{
  --navy: #0a1020; --yellow: #f5b400; --paper-r: #f7f4ec;
  --surface: var(--navy); --on-surface: var(--paper-r); --muted: #c9ccd6; --line: rgb(247 244 236 / .35);
  position: relative; isolation: isolate; overflow: hidden; overflow: clip;
}
#kami::before{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%274%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2788%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2732%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27130%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); }
#kami::after{ background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27168%27 height=%27168%27 fill=%27%23f5b400%27 fill-opacity=%27.3%27%3E%3Crect x=%2788%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%274%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2718%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2746%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2746%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%2760%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27158%27 y=%2774%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%274%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%2788%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27102%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27116%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27144%27 y=%27116%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27130%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2718%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2732%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2760%27 y=%27144%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%2774%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3Crect x=%27102%27 y=%27158%27 width=%276%27 height=%276%27 rx=%271%27/%3E%3C/svg%3E"); }
#kami::before, #kami::after{ content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background-repeat: repeat; background-size: 168px 168px; opacity: .1; }
#kami .sec__head::before{ background: var(--yellow); }
#kami .sec__kicker{ color: #ffe27a; }
#kami a:not(.btn){ color: var(--paper-r); }
#kami :focus-visible{ outline-color: var(--paper-r); }
#kami .paper{ --on-surface: #24211d; --muted: #64625d; --line: rgb(36 33 29 / .18); color: #24211d; }

/* 2 PC で文章が左の約640pxに寄り、右半分が空いていた節 → 見出しを左の列、中身を右の列に（よくある質問と同じ並べ方） */
@media (min-width: 1024px){
  #mayoi .sec__inner, #toi .sec__inner, #kami .sec__inner{
    display: grid; grid-template-columns: minmax(0, 20rem) minmax(0, 1fr); column-gap: var(--sp-8); align-items: start; }
  #mayoi .sec__head, #toi .sec__head, #kami .sec__head{ grid-column: 1; grid-row: 1 / span 6; position: sticky; top: 6rem; }
  #mayoi .sec__inner > :not(.sec__head), #toi .sec__inner > :not(.sec__head), #kami .sec__inner > :not(.sec__head){ grid-column: 2; min-width: 0; }
  #mayoi .sec__head + *, #toi .sec__head + *, #kami .sec__head + *{ margin-top: 0; }
  #mayoi .stack, #mayoi .sec__body, #toi .sec__body, #toi .toi{ max-width: 44rem; }
  #mayoi .sec__body p, #toi .sec__body p, #kami .sec__body p{ max-width: 44rem; }
  #kami .paper{ max-width: none; }
}

/* 1 スマホの最初の画面: 写真を主役の高さ（200px）に。2つのボタンは 390×844 の画面の中・下の固定バーより上に収める。
   そのために説明の2段落目だけ小さくし、相談料の行は固定バーにかからないよう、ボタンから離して画面の外に置く */
@media (max-width: 759px){
  .sec--hero .hero__media{ height: 200px; margin-bottom: var(--sp-3); }
  .sec--hero{ --sec-pt: var(--sp-3); --sec-pb: var(--sp-8); }
  .sec--hero .hero__kicker{ margin-bottom: var(--sp-2); }
  .sec--hero .hero__sub{ margin-top: var(--sp-3); line-height: 1.7; }
  .sec--hero .hero__sub p + p{ margin-top: var(--sp-2); font-size: var(--fs-sm); line-height: 1.7; }
  .sec--hero .hero__ctas{ margin-top: var(--sp-4); gap: var(--sp-2); }
  .sec--hero .hero__note{ margin-top: var(--sp-7); }
}
@media (prefers-reduced-motion: no-preference){
  #kami::before{ animation: mz9-blink 3.2s ease-in-out infinite; }
  #kami::after{ animation: mz9-blink 4.4s ease-in-out -1.7s infinite; }
}

/* =====================================================================
   ダメ出し3周目（2026-10-28 本人「ダメだし全てなおして」）
   ===================================================================== */
/* 1 PC の最初の写真: 先生1人に切られ、右端に患者の髪の切れ端が残った → 列を半々にし、写真の枠を 4:3 にして先生と患者の両方を入れる */
@media (min-width: 760px){
  .sec--hero .hero{ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .sec--hero .hero__media{ align-self: center; min-height: 0; aspect-ratio: 4 / 3; }
  .hero--overlay .hero__media img, .sec--hero .hero__media img{ object-position: 50% 50%; transform-origin: 48% 55%; }
}

/* 3 下の節の大事な見出しも 見出しの書体（今は Noto Sans JP 900）に（黄色の印は比べた表と紙の2つだけ）。字間と行間は広めにとる */
#mayoi .sec__title, #hoho .sec__title, #toi .sec__title, #basho .sec__title{
  font-family: "MZ Heading", var(--font-head); font-weight: 900;
  font-size: clamp(1.5rem, 1.1rem + 1.6vw, 2.25rem); letter-spacing: .04em; line-height: 1.55;
}
/* 3 ボタンの色: 濃紺の地の上は黄色、明るい地の上はレンガ色（ヘッダー・固定バー・フォームは今のレンガ色のまま） */

/* 4 締めのボタンが 1088px と横いっぱいだった → 文章と同じ幅（本文の器 --w-text）にそろえる */
#shime .sec__ctas{ max-width: var(--w-text); }

/* 5 語の途中の折れ（「ほ／ど」「ジルコニ／ア」「なか／った」「お渡しし／ます」）→ 文節で折る */
.lp :is(p, li, dd, dt, td, th, figcaption, .card__body, .paper){ word-break: auto-phrase; }
.lp :is(p, li, dd){ text-wrap: pretty; }
/* 紙の見本の表（スマホ）: 「費用の目／安」「約8,000／円」→ 列の幅を直す */
@media (max-width: 480px){
  .paper__table .paper__col1{ width: 26%; }
  .paper__table .paper__col3{ width: 15%; }
  .paper__table .paper__col4{ width: 25%; }
  .paper__table th, .paper__table td{ font-size: var(--fs-sm); }
}

/* 7 それぞれの中身のカード: 高さをそろえ、上にそれぞれの治療の小さい断面図を添える（比べた表の図と同じ絵） */
@media (min-width: 1024px){ #hoho .cards{ align-items: stretch; } #hoho .cards > .card{ display: flex; flex-direction: column; } }
#hoho .card::before{
  content: ""; display: block; aspect-ratio: 4 / 3; max-width: 15rem; margin-bottom: var(--sp-4);
  border: 1px solid var(--line); background: #fffdf8 no-repeat center / contain;
}
#hoho .card:nth-child(1)::before{ background-image: url("zu-ireba.svg"); }
#hoho .card:nth-child(2)::before{ background-image: url("zu-bridge.svg"); }
#hoho .card:nth-child(3)::before{ background-image: url("zu-implant.svg"); }
@media (min-width: 1024px){ #hoho .card::before{ max-width: none; } }

/* 8 スマホ: 「相談を予約する」が上の帯・写真の下・下の固定バーの3つ同時に出ていた → 固定バーが常にあるので、上の帯のボタンはスマホでは出さない */
@media (max-width: 959px){ .lp-header__cta{ display: none; } }
/* 8 濃紺の上の小さい注記: 14px 以上・明るい色に（#e3e5ec on #0a1020 は約15:1） */
.sec--hero .hero__note{ font-size: var(--fs-sm); color: #e3e5ec; }
#shime .sec__telhours{ font-size: var(--fs-sm); color: #e3e5ec; }
/* 撮って直したもの（3周目）: 2列の左に置いた「迷ったら、この3つを考えてみてください」が3行になり、最後の行が「い」1字だった
   → 極太の見出しは行の長さをそろえて折る。スマホの紙の見本の「4〜6／回」は回数の列を折らない */
#mayoi .sec__title, #hoho .sec__title, #toi .sec__title, #basho .sec__title, #hikaku .sec__title, #kami .sec__title, #shime .sec__title{ text-wrap: balance; }
.paper__table td:nth-child(3){ white-space: nowrap; }
/* 2列の左の見出し: 列（20rem）に「考えてみてください」の文節が入らず「…くださ／い」と折れた → 左の列を 22rem にし、字を一段小さく */
@media (min-width: 1024px){
  #mayoi .sec__inner, #toi .sec__inner, #kami .sec__inner{ grid-template-columns: minmax(0, 22rem) minmax(0, 1fr); }
  #mayoi .sec__title, #toi .sec__title, #kami .sec__title{ font-size: 1.875rem; }
}
/* スマホ: 相談料の行の1行目が固定バーの上端にかかった → ボタンからもう少し離し、最初の画面の外に置く */
@media (max-width: 759px){ .sec--hero .hero__note{ margin-top: 4.5rem; } }

/* =====================================================================
   ダメ出し4周目（2026-10-28）
   ===================================================================== */
/* 1 1920 で最初の大見出しが「3つを比べてか／ら、」と折れ、帯が右へ約70pxはみ出した（列を半々にしたため）
   → 見出しの大きさを文字の列の幅から決める（--h1fs の calc(100cqi / 9.9)）。cqi の基準にする器を文字の列にする */
.sec--hero .hero__text{ container-type: inline-size; }

/* 2 最初の画面のボタンの下: 注記をボタンから 20px 以上離し、15px に。濃い色のボタンの黄色のずらし影は外す */
.sec--hero .hero__note{ margin-top: 1.5rem; font-size: .9375rem; line-height: 1.7; }
.sec--hero .hero__ctas .btn--ghost::after{ content: none; }
@media (hover: hover){ .sec--hero .hero__ctas .btn--ghost:hover{ transform: none; } }

/* 3・5 カードの断面図は「同じ図の繰り返し」に見えたので外す。図が無いと高さをそろえた分だけ下が空くので、そろえるのもやめる */
#hoho .card::before{ content: none; }
@media (min-width: 1024px){ #hoho .cards{ align-items: start; } }

/* 4 スマホの紙の見本の表: 4列だと「インプラン／ト」「かみ合わ／せ」と折れ、回数と費用の列が詰まった
   → スマホでは1つの方法を1かたまりにして縦に並べる（方法 → 進め方 → 回数・費用）。
   列の見出しは表の頭（読み上げ用に残す）と同じ語を、各欄の頭に小さく出す（lp.json の data-label。文言は増やしていない） */
@media (max-width: 480px){
  .paper__table, .paper__table tbody{ display: block; width: 100%; }
  .paper__table colgroup{ display: none; }
  .paper__table thead{ position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .paper__table tbody tr{ display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--sp-3);
    padding-block: var(--sp-3); border-bottom: 1px solid var(--line); }
  .paper__table tbody th, .paper__table tbody td{ display: block; width: auto !important; padding: 0; border: 0; white-space: normal; font-size: var(--fs-base); }
  .paper__table tbody th{ grid-column: 1 / -1; font-weight: 700; margin-bottom: var(--sp-1); }
  .paper__table tbody td:nth-of-type(1){ grid-column: 1 / -1; margin-bottom: var(--sp-2); }
  .paper__table tbody td::before{ content: attr(data-label); display: block; font-size: var(--fs-cap); font-weight: 700; color: #64625d; }
}

/* 7 「相談の日は、約50分です」: PC で 1・2／3・4／5 と左右にジグザグだった → 上から下へ縦1列で番号の順に読む */
@media (min-width: 960px){
  #flow .steps{ grid-template-columns: minmax(0, 1fr); max-width: 44rem; }
  #flow .steps > .step{ margin-top: 0; }
}

/* =====================================================================
   書体の差し替え（2026-10-28 本人「見出しの大文字が読みづらい」）
   Dela Gothic One → Noto Sans JP Black（900）。濃紺の地で BIZ UDPGothic Bold と並べて見比べ、強さを保ったまま字の形がふつうに読める方を選んだ
   ===================================================================== */
/* 1024幅の注記で「2,500〜／4,000円」と金額の範囲が折れた → 文節ではなく句読点と括弧で折る（入りきらないときだけ字の間で折る） */
/*   語の途中では折らず、注記の幅を 24字分にして「相談は約50分。保険の診察として、」で1行目が終わるようにする（〜の後ろで折れない） */
@media (min-width: 760px){ .sec--hero .hero__note{ word-break: keep-all; overflow-wrap: anywhere; max-width: 24em; } }

/* =====================================================================
   下の節の動きを「スクロールで始まり、時間で1回再生する」形に（2026-10-28 本人「図解、動かないけど、なんで」）
   原因: スクロールに連れて進む形（animation-range: entry 0% entry 100% など）は、要素が画面の下の端から
         入ってくる約160pxの間に終わってしまい、読む位置（画面の中ほど）では止まって見えた。
   直し: CSS の scroll-triggered animations（timeline-trigger / animation-trigger。Chrome 145〜）で、
         要素が画面の下から入ったら、見本ページ（motion-samples）の秒数で1回だけ再生する（play-once）。
         出典 https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-trigger
              https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/timeline-trigger（2026-10-28）
   対応していないブラウザ（Firefox・Safari）は、上に書いたスクロールに連れて進む形のまま。
   対応しているブラウザでは、ここで animation を書き直す（shorthand で animation-timeline も戻し、range も戻す）ので、2つは重ならない。
   パララックス（.px img）はスクロールに連れて動くのが正しいので、そのまま。
   ===================================================================== */
@media (prefers-reduced-motion: no-preference){
  @supports (animation-trigger: --t play-once){
    /* --- 引き金: 要素が画面の下から入って約6割見えたとき（背の高い物は2〜3割）。
           終わりの位置（exit 100%）まで書く。書かないと「entry の中」だけが範囲になり、画面に入りきった物は動き出さなかった（実測）。
           引き金の名前は文書全体で共有されるので、trigger-scope で要素ごとに閉じる（同じ名前の別の見出しで動き出さないように） --- */
    .sec__head, .zu-svg, table.hikaku, .hikaku-sp__card dl, .pen, #hoho .card,
    #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px{ trigger-scope: all; }
    .sec__head{ timeline-trigger: --mzt-head view() entry 60% exit 100%; }
    .zu-svg{ timeline-trigger: --mzt-zu view() entry 60% exit 100%; }
    table.hikaku thead{ timeline-trigger: --mzt-tbl view() entry 100% exit 100%; }
    .hikaku-sp__card dl{ timeline-trigger: --mzt-dl view() entry 25% exit 100%; }
    .pen{ timeline-trigger: --mzt-pen view() entry 100% exit 100%; }
    #hoho .card{ timeline-trigger: --mzt-card view() entry 25% exit 100%; }
    #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px{ timeline-trigger: --mzt-photo view() entry 40% exit 100%; }
    @media (max-width: 959px){
      /* スマホは画面の下 約64px が固定バー。その上から数える */
      .sec__head{ timeline-trigger: --mzt-head view(block 0px 64px) entry 60% exit 100%; }
      .zu-svg{ timeline-trigger: --mzt-zu view(block 0px 64px) entry 60% exit 100%; }
      .hikaku-sp__card dl{ timeline-trigger: --mzt-dl view(block 0px 64px) entry 25% exit 100%; }
      .pen{ timeline-trigger: --mzt-pen view(block 0px 64px) entry 100% exit 100%; }
      #hoho .card{ timeline-trigger: --mzt-card view(block 0px 64px) entry 25% exit 100%; }
      #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px{ timeline-trigger: --mzt-photo view(block 0px 64px) entry 40% exit 100%; }
    }

    /* --- 案6 見出しの帯: 線 0.9秒 → 見出しが 0.15秒後から 1.0秒でせり上がる --- */
    .sec__head::before{ animation: mz9-wipe .9s cubic-bezier(.65, 0, .35, 1) both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-head play-once; }
    .sec__head .sec__title{ animation: mzt-rise 1s cubic-bezier(.16, 1, .3, 1) .15s both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-head play-once; }

    /* --- 案2 写真の幕開け: 1.1秒・左→右。並んだ写真は 0.15秒ずつずらす --- */
    #basho .photos figure:not(.photos__main) > img, #basho .basho__map > img, #basho .px{
      animation: mzt-curtain 1.1s cubic-bezier(.65, 0, .35, 1) both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-photo play-once; }
    #basho .photos figure:nth-child(2) > img{ animation-delay: .15s; }
    #basho .photos figure:nth-child(3) > img{ animation-delay: .3s; }

    /* --- 案4 図: 線 0.8秒 → 下地 0.3秒 → 茶色 0.55秒（1枚 約1.4秒）。PC の3枚は 1.2秒ずつずらす。
           歯の白い塗りは最初から出しておく（地と同じ色で見えない）。歯ぐきの線は歯より先に描かれているので、
           歯の塗りの下に隠れ、線を引く途中で歯を突き抜けて見えることはない --- */
    .zu-svg{ animation: none; clip-path: none; }
    .zu-svg .z-line path{ stroke-dasharray: 1; animation: mzt-draw .8s cubic-bezier(.45, 0, .25, 1) both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-zu play-once; }
    .zu-svg .z-base{ animation: mzt-fade .3s ease .7s both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-zu play-once; }
    .zu-svg .z-wipe{ animation: mz9-wipe .55s cubic-bezier(.65, 0, .35, 1) .85s both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-zu play-once; }
    .zu figure:nth-child(2) .zu-svg .z-line path{ animation-delay: 1.2s; }
    .zu figure:nth-child(2) .zu-svg .z-base{ animation-delay: 1.9s; }
    .zu figure:nth-child(2) .zu-svg .z-wipe{ animation-delay: 2.05s; }
    .zu figure:nth-child(3) .zu-svg .z-line path{ animation-delay: 2.4s; }
    .zu figure:nth-child(3) .zu-svg .z-base{ animation-delay: 3.1s; }
    .zu figure:nth-child(3) .zu-svg .z-wipe{ animation-delay: 3.25s; }

    /* --- 案5 表の行: 1行 0.6秒・32px 浮く・0.1秒ずつ（スマホはカードの中の行） --- */
    table.hikaku tbody tr, .hikaku-sp__card dl > div{ animation: mzt-row .6s cubic-bezier(.16, 1, .3, 1) both; animation-timeline: auto; animation-range: normal; }
    table.hikaku tbody tr{ animation-trigger: --mzt-tbl play-once; }
    .hikaku-sp__card dl > div{ animation-trigger: --mzt-dl play-once; }
    table.hikaku tbody tr:nth-child(2), .hikaku-sp__card dl > div:nth-child(2){ animation-delay: .1s; }
    table.hikaku tbody tr:nth-child(3), .hikaku-sp__card dl > div:nth-child(3){ animation-delay: .2s; }
    table.hikaku tbody tr:nth-child(4), .hikaku-sp__card dl > div:nth-child(4){ animation-delay: .3s; }
    table.hikaku tbody tr:nth-child(5), .hikaku-sp__card dl > div:nth-child(5){ animation-delay: .4s; }
    table.hikaku tbody tr:nth-child(6), .hikaku-sp__card dl > div:nth-child(6){ animation-delay: .5s; }
    table.hikaku tbody tr:nth-child(7), .hikaku-sp__card dl > div:nth-child(7){ animation-delay: .6s; }
    table.hikaku tbody tr:nth-child(8), .hikaku-sp__card dl > div:nth-child(8){ animation-delay: .7s; }

    /* --- 案7 ペン: 1本 0.6秒・左→右（0.3秒後から） --- */
    .pen::before{ animation: mz9-wipe .6s cubic-bezier(.5, 0, .3, 1) .3s both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-pen play-once; }

    /* --- 案8 カード: 1.2秒・少し行き過ぎて戻る（1.07倍→1倍・24px）。0.12秒ずつ --- */
    #hoho .card{ animation: mz9-pop 1.2s cubic-bezier(.34, 1.56, .64, 1) both; animation-timeline: auto; animation-range: normal; animation-trigger: --mzt-card play-once; }
    #hoho .card:nth-child(2){ animation-delay: .12s; }
    #hoho .card:nth-child(3){ animation-delay: .24s; }
  }
}
@keyframes mzt-rise{ from{ clip-path: inset(0 0 100% 0); transform: translateY(.9em); } to{ clip-path: inset(0 0 -.2em 0); transform: none; } }
@keyframes mzt-curtain{ from{ clip-path: inset(0 100% 0 0); } to{ clip-path: inset(0 0 0 0); } }
/* 描き始める前は線を消しておく（丸い線端だけが点で残って見えたため） */
@keyframes mzt-draw{ 0%{ stroke-dashoffset: 1; stroke-opacity: 0; } 4%{ stroke-opacity: 1; } 100%{ stroke-dashoffset: 0; stroke-opacity: 1; } }
@keyframes mzt-fade{ from{ opacity: 0; } to{ opacity: 1; } }
@keyframes mzt-row{ from{ opacity: 0; translate: 0 32px; } to{ opacity: 1; translate: none; } }
