/* Form_v2 体験カタログ CSS
   採寸: docs/design-teardown.md の実測トークンに準拠（推測値は入れない） */
:root {
  --content-width: 1000px;
  --color-text: #404040;
  --color-placeholder: #B0A89C; /* 予約UI共通の淡色。入力済み文字(--color-text)とは別token */
  --color-heading: #000;
  --color-card-bg: #F2EEE7;   /* 採寸: カード背景 */
  --color-tab-active: #E9D78A;/* 採寸: 選択タブ金 */
  --color-reserve: #F4C5BF;   /* 採寸: 予約ボタン ピンク */
  --color-line: #d8d2c6;
  --font-serif: "Yu Mincho", "YuMincho", "游明朝", serif;
  --font-sans: "Yu Gothic", "游ゴシック体", "YuGothic", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}

* { box-sizing: border-box; }
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: 1.6;
  color: var(--color-text);
}
[x-cloak] { display: none !important; }

/* ---- 素タグの既定（★Form_v2 の領域だけに限定する・ADR-023） ----

   `:where()` で囲った部分は**詳細度に加算されない**ので、この2行の詳細度は素の `img{}` `a{}` と
   まったく同じ（0,0,1）＝下の `.ex_listImg img` などのクラス指定は従来どおり強いままになる。
   目的は詳細度ではなく**適用範囲**の限定で、囲わないとヘッダー/フッターまで巻き込む。

   本ファイルは `assets/css/vendor-scope.css` の**どのレイヤーよりも強い**（レイヤー無しのCSSは
   全レイヤーに優先する）ため、素の `img{}` のままだと詳細度で上のはずの本家ルール
   （`.headerLogo img { height: 30px }`・`.navSns li a img { width: 20px }` 等）まで負かしてしまう。
   実測: `height: auto` が本家のロゴ指定を上書きし、ヘッダーのロゴが 86x30 → 96x33 になっていた。
   ヘッダー/フッターは本家CSSだけで描く（＝本家と1pxも変えない）のが ADR-023 の方針なので、
   ここは Form_v2 が組み立てた領域だけに閉じる。 */
:where(main.site-main, #cart-widget) img { max-width: 100%; height: auto; display: block; }
:where(main.site-main, #cart-widget) a { color: inherit; text-decoration: none; }

/* ---- フォーム共通 ----
   ブラウザ既定の半透明化には依存せず、入力済み文字の色や focus/error/disabled 状態を
   上書きしない。現Vue予約UIのselectには未選択状態がないためinput/textareaだけが対象。 */
input::placeholder,
textarea::placeholder {
  color: var(--color-placeholder);
  opacity: 1;
}

/* ---- ヘッダー / フッター ----
   ここには**何も書かない**。ヘッダー(.header)とフッター(.footer)は本家サイトの
   マークアップそのもの＋本家CSS（assets/css/vendor/original_style.css）で描画する（ADR-023）。
   旧 `.site-header` / `.site-logo` / `.site-nav` / `.site-footer` は自作の簡易版で、
   本物への置き換えに伴い**マークアップごと削除済み**（ADR-023）。
   ここへ .header / .footer 向けの上書きを足すと、本家との差分が
   「本家CSS」と「Form_v2 CSS」の2か所に散って追随できなくなるので足さないこと。 */

/* ---- 本体 ---- */
/* --content-width(1000px) は採寸(docs/design-teardown.md §1)の「コンテンツ幅」＝**内寸**。
   採寸は一覧グリッド親 .ex_listContainer が max-width:1000px、詳細 .ex_pageContainer が
   width:1000px と、一覧・詳細とも同じ1000pxで実測されている。
   本レイアウトは box-sizing:border-box のうえで .site-main に左右20pxのパディングを置くため、
   max-width をそのまま1000pxにすると内寸が960pxしか残らず、一覧グリッドも詳細コンテナも
   採寸より40px狭くなっていた。これが「一覧が常に2カラムに落ちる」原因でもある
   （3カラムに必要な 320×3+gap20×2=1000px が960pxに入らない）。
   したがってパディングぶんを max-width に足し、**内寸を採寸どおり1000px**にする。
   左右20pxの余白はそのまま残るので、カード背景が画面端に接することはない。 */
.site-main { max-width: calc(var(--content-width) + 40px); margin: 0 auto; padding: 0 20px 64px; }
/* パンくず（ADR-027）。区切りは `views/layout.php` が地の文の「 &gt; 」で出す。
   旧 `.breadcrumb__sep { margin: 0 .5em }` は**削除した**（本家より区切りが広がる原因だった）。
   上下の余白は本家のデスクトップ実測に合わせる（`original_style.css:9237`
   `@media (min-width:1200px) { .breadcrumb { margin: 2em auto } }` ＝ 実測 25.6px。
   旧値 20px より広い＝本家のほうが余白がある、というCEO指摘と同じ向き）。
   `margin` ではなく `padding` で置くのは、`.site-main` の上パディングが 0 のため
   `margin-top` が親へ**マージン相殺で抜けて**しまい、余白が `<main>` の外側に出るのを避けるため。

   ★文字色は `#000`（旧 `#777`）。本家の実測に合わせる（ADR-027 追記・CEO判断「色も合わせます」）。
   本家 `original_style.css`（**ライブ版を再取得して確認**）は `.breadcrumb` にも `.breadcrumb a`
   にも色を1つも書いておらず、素タグの規則だけで色が決まっている:
       p, …, a, span, … { color: #000000 }        ← 区切り「>」と最後の要素（現在地）
       a / a:link / a:visited / a:hover / a:active { color: #000000 }
       a:hover { text-decoration: none }
   ＝**リンクと非リンクで色は変わらず、hover でも変わらない**（実測: 本家の `<p>` も `<a>` も
   `rgb(0,0,0)`・`text-decoration-line: none`）。したがって Form_v2 側も
   **`.breadcrumb` に色を1つ置くだけ**でよく、`.breadcrumb a` の個別指定は足さない
   （足すとリンクだけ別扱いになり、本家と構造がずれる）。

   リンクがこの色を継ぐ実体は39行目の
       :where(main.site-main, #cart-widget) a { color: inherit; text-decoration: none }
   で、`:where()`（詳細度0）かつレイヤー無しのため `neutralize` の `all: revert`（＝UA既定の
   青リンク＋下線）に勝つ。**この1行が消えるとパンくずのリンクだけ青くなって下線が出る**ので、
   `tests/php/ViewRenderTest.php` J節が `.breadcrumb` の色と一緒にこの行も固定している。

   サイズと上下余白は**本家の実測値**（Issue#260・2026-09-20 採寸。推測で入れない）:
     font-size 12.8px / line-height 23.04px（1.8）/ 上下 19.2px
   当方は 13px・行高 20.8px・上下 26px で、タイトルの開始位置が 7px ぶんずれていた。 */
.breadcrumb { font-size: 12.8px; line-height: 1.8; padding: 19.2px 0; color: #000; }

/* ---- ヒーロー ---- */
/* 上の余白は**本家の実測値 96px**（Issue#260・CEO指示 2026-09-20「微妙に文字のタイトルの位置、
   余白がことなる。ほとんどいいけどもう少し揃えたい」）。当方は 24px で、パンくずから
   タイトルまでが本家より 72px 詰まっていた。下の 48px は元から本家と一致している。 */
.ex_hero { display: flex; gap: 40px; align-items: flex-end; margin: 96px 0 48px; }
.ex_hero__text { flex: 1; }
/* Issue#182 A-1/A-2。サイズは**現行HPの実測値**に合わせる（2026-09-16 採寸。推測で入れない）:
     `.page_headerTitle`（H2「体験する」）  19.2px / weight 400 / #000
     その中の `<span>`（"Experience"）      12.8px / weight 400
   A-1「見出しの『体験する』が太い」は weight ではなくサイズ差だった（HP も当方も 400 で、
   当方が 24px と大きかった）。 */
/* 行高と下余白も本家の実測に合わせる（Issue#260・2026-09-20 採寸）:
     本家 line-height 34.56px（1.8）/ タイトル下 48px
     当方 line-height 30.72px（1.6）/ タイトル下 4px
   下余白が 4px だったのは、下に続く `.ex_hero__lead` の margin-top 24px と相殺されて
   実効 24px になる書き方だったため。本家は 48px なので、**片側に寄せて 48px** にする
   （相殺に頼ると、あいだに要素が増えたときに黙って間隔が変わる）。 */
.ex_hero__title { font-family: var(--font-serif); font-size: 19.2px; font-weight: 400; line-height: 1.8; color: var(--color-heading); margin: 0 0 48px; }
/* ---- 文字の濃さ（Issue#260・CEO指示 2026-09-20 逐語「位置はわりとどうでも／文字の濃さだよ」）----
   本家を実測したところ、**読ませる文字はほぼすべて #000（真っ黒）／当方はグレー**だった。
   これが「薄い」の正体で、位置や余白の差ではない（2026-09-20 採寸・推測値は入れていない）:

     要素                本家                         当方（修正前）
     Experience          #000                         #888
     リード              #000 / 16px                  #404040 / 18px
     本文                #000 / 12.8px / lh 23.04px   #404040 / 14px / lh 1.9
     カードのカテゴリ    #000 / weight 700 / 12.8px   #666 / weight 400 / 12px
     カードの名前        #000 / weight 700 / 16px     #000 / weight 600 / 15px
     カードの説明        #000 / 12.8px                #555 / 13px
     カードの所要時間    #000 / 12.8px                #404040 / 13px

   `body` の既定色は本家も #404040 で同じ。本家は**この7か所だけ #000 に上げている**ので、
   同じ場所だけを上げる（全部を黒にすると本家より濃くなる）。

   価格（`.ex_listPrice`）だけは当方のほうが濃く大きい（本家 12.8px/400 ↔ 当方 16px/700）。
   「薄い」の指摘には当たらず、意図的に目立たせている箇所なので**そのままにしてある**。 */
.ex_hero__en { display: block; font-family: var(--font-serif); font-size: 12.8px; line-height: 1.8; letter-spacing: .1em; color: #000; }
/* リード文は本家 16px（当方は 18px で 2px 大きかった）。下の余白も本家の 24px に合わせる。
   上の余白は 0（タイトル側の 48px が間隔を決める。上で書いた相殺回避）。 */
.ex_hero__lead { font-family: var(--font-serif); font-size: 16px; line-height: 1.8; color: #000; margin: 0 0 24px; }
.ex_hero__desc { font-size: 12.8px; line-height: 1.8; color: #000; }
/* Issue#182 A-3「右側の画像に下揃えする」。`.ex_hero` は align-items:flex-end なので箱の下端は
   既に画像と揃っているが、**最後の段落の margin-bottom が残って文字だけ 14px 浮いていた**
   （2026-09-16 実測: 画像の下端 539 に対し本文の下端 525）。末尾の余白だけ落とす。 */
.ex_hero__text > :last-child { margin-bottom: 0; }
/* ヒーロー画像は本家スナップショット 480×372（ADR-027）。デスクトップでは列幅が
   (1000-40)/2 = 480px でちょうど原寸だが、`@media` で1カラムに落ちたとき（184行目）に
   480px のまま左寄せで残らないよう幅を伸ばす。`assets/css/school.css:41` と同じ指定。 */
.ex_hero__img { flex: 1; }
.ex_hero__img img { width: 100%; height: auto; }

.ex_notice { text-align: center; font-size: 14px; margin: 32px 0; }

/* ---- 体験メニュー / タブ ---- */
.ex_menu { margin-top: 48px; }
/* Issue#182 A-5。現行HPの見出しは 19.2px（`docs/design-teardown.md` の採寸と一致） */
.ex_menu__title { font-family: var(--font-serif); font-size: 19.2px; font-weight: 400; text-align: center; letter-spacing: .2em; color: var(--color-heading); margin-bottom: 4px; }
.ex_menu__note { text-align: center; font-size: 12px; color: #888; margin-bottom: 24px; }
.ex_tabs { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-start; margin-bottom: 32px; }
/* ★min-width は採寸値 121px（Issue#132・CEO指摘「サイズに最低サイズを指定。長いものは長くなっていい」）。
   根拠は同梱の本家CSS `assets/css/vendor/original_style.css:7204`（デスクトップ分岐）:
       @media (min-width: 769px) { .ex_listNavmain li { width: 121px } }
       @media (min-width: 769px) { .ex_listNavmain li a  { width: 100%; ... } }
   本家のタブは `li` が 121px 固定で、中の `a` が `width:100%`。**本家も Form_v2 も
   `box-sizing: border-box`**（本家 `original_style.css:606` ほか / 本文 16行目 `* { box-sizing: border-box }`）
   なので、この 121px は枠線・パディング込みの**外寸**であり、`.ex_tab`（＝Form_v2 では `a` 自身が
   タブの箱）の `min-width` にそのまま移せる。Chrome実測で本家の各タブが**ちょうど 121.0px**、
   `a` の computed `box-sizing: border-box` であることを確認済み（2026-09-01）。

   **`width` ではなく `min-width` にする理由**: 本家は 121px 固定なので、長いラベル
   （`7・８・9月開催の体験` ＝ 11文字）は 121px の箱の中で**2行に折り返る**（実測: 高さ 30.8px → 43.6px）。
   CEO指示は「長いものは長くなっていい」なので、下限だけを 121px に置き、上限は付けない。
   したがって **`max-width` も `width` も足さないこと**。足すと長いラベルが折り返す／切れる。
   （`docs/design-teardown.md` §カテゴリタブの実測値・`tests/php/ViewRenderTest.php` L節が固定している） */
.ex_tab {
  border: 1px solid #000; padding: 10px 16px; font-size: 13px; background: #fff;
  min-width: 121px; text-align: center;
  transition: background .15s;
}
.ex_tab:hover { background: #f5f2ec; }
.ex_tab.is-active { background: var(--color-tab-active); }

/* ---- カードグリッド（採寸: flex-wrap, card 320px） ---- */
/* ★余裕ゼロの設計（意図的・採寸準拠）: 3カラムの必要幅は 320×3 + gap20×2 = **ちょうど1000px** で、
   コンテナ内寸（= .site-main の内寸 1000px）と完全に一致する。**余白は1pxも無い**。
   カード幅320px・gap20px・カードpadding20px・コンテンツ幅1000px はいずれも
   docs/design-teardown.md の実測値なので、この一致は偶然ではなく採寸どおりの結果。
   ただしこの4値のどれかが1pxでも増える／このコンテナに border・padding が付く／
   .site-main の内寸が1000pxを割ると、**即座に2カラムへ落ちる**（PR#74で実際に起きた回帰）。
   これら4値と .site-main の内寸は必ずセットで見直すこと。
   なお .ex_listContainer は一覧だけでなく詳細ページの「おすすめの体験」
   (views/experience-detail.php) でも使われる共有クラスなので、一覧専用の調整をここに書かない。 */
.ex_listContainer { display: flex; flex-wrap: wrap; gap: 20px; max-width: var(--content-width); }
.ex_listCol { width: 320px; padding: 20px; background: var(--color-card-bg); }
/* 体験画像は一覧/詳細とも 1:1（CEO決定 2026-07-29・ADR-011）。
   object-fit は cover で統一。商品マスタ(takOpe)の体験画像は1:1入稿が前提 */
.ex_listImg { margin-bottom: 12px; aspect-ratio: 1/1; overflow: hidden; background: #f7f5f0; }
.ex_listImg img { width: 100%; height: 100%; object-fit: cover; }
/* 画像が無い商品用（一覧カード・詳細主画像で共用）。旧仕様の /img/img-loading.gif フォールバックは
   80px のローディングスピナーが枠いっぱいに拡大され「読み込み中」に誤読される＆背景が黒く不気味
   なため廃止（ADR-012 PR#32レビュー N-1で組み合わせ画像は既に廃止済み。本件は商品主画像にも適用。
   詳細は ADR-018）。
   親要素(.ex_listImg/.ex_gallery__main)が既に淡色背景とaspect-ratioを持つため、テキストのみ重ねる。
   表示テキストは「準備中」ではなく「写真準備中」にする（PR#77レビュー NB-2）。有効な価格・稼働中の
   予約ボタンの隣に置かれるため、主語を省いた「準備中」だと「体験自体が受付前」と誤読され得る。
   ADR-012の同種プレースホルダー文言（「この組み合わせの完成イメージ写真は…」）にならい、
   準備中なのは「写真」であって体験・予約ではないことを明示する。
   色は背景#f7f5f0に対しコントラスト比 4.686:1（実測。#756d60 vs #f7f5f0）。
   WCAG AA(4.5:1)の余裕は0.19しかないため、この色を変更するときは必ず再計算すること。
   （本文色#404040の約9.5:1より意図的に控えめ）。 */
.ex_img-empty {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; letter-spacing: .1em; color: #756d60;
}
/* カテゴリのタグ表示（Issue#260 / CEO指示 2026-09-20「メニューのカテゴリがタグのような表示に
   合わせたい。色も設定から」）。**本家の採寸に合わせる**（2026-09-20 実測・推測値を入れない）:
     p.ex_listCategory     margin-bottom 6.4px
     タグ本体              inline-block / 12.8px / weight 700 / #000 / 背景 #fff
                           padding 2.56px 6.4px / 角丸なし / 枠線なし
   カード背景（#F2EEE7）の上に白い箱が乗ることでタグに見える。複数カテゴリは全部並べる（#228）。
   背景色は上流の設定（`GET /api/categories` の `color`）が `style` で個別に上書きする。
   設定が無ければこの既定色（＝本家と同じ白）。 */
.ex_listCategory { margin: 0 0 6.4px; display: flex; flex-wrap: wrap; gap: 4px; }
.ex_listCategory__tag {
  display: inline-block; padding: 2.56px 6.4px;
  background: #fff; color: #000; font-size: 12.8px; font-weight: 700; line-height: 1.8;
}
.ex_listName { font-family: var(--font-sans); font-size: 16px; font-weight: 700; color: #000; margin: 0 0 8px; line-height: 1.5; }
.ex_listCopy { font-size: 12.8px; color: #000; margin: 0 0 8px; }
/* Issue#237: 予約に必要な日数。所要時間・難易度と同じ地味さで並べる */
.ex_listTime, .ex_listDifficulty_level, .ex_listLead { font-size: 12.8px; color: #000; margin: 2px 0; }
.ex_listPrice { text-align: right; font-size: 16px; font-weight: 700; color: #000; margin: 8px 0 0; }

/* 無限スクロール / ページ送り */
.ex_more { text-align: center; margin: 40px 0; }
.ex_moreBtn { border: 1px solid #000; background: #fff; padding: 12px 32px; font-size: 14px; cursor: pointer; }
.ex_moreBtn:hover { background: #f5f2ec; }
/* 番号ページャ（クローラ用のSSRたどり導線・ADR-008）。
   Issue#133: JS が動く環境では上の無限スクロールと役目が重複し、最後のページまで読み込んだあと
   「もっと見る」が消えた下にこれだけが残るため、CEO から「どこかで止まってページングが出てくる」と
   指摘された。そこで **既定は非表示** にする。

   ★マークアップは消していない。`display:none` にしているだけで、`<a href="?page=N">` は DOM に
     残るのでクローラは従来どおり全ページをたどれる（ADR-008 の前提を壊さない）。

   表示に戻すのは次の2通りだけ:
     (a) JS 無効 … `views/experience-list.php` の `<noscript><style>` が display を戻す
     (b) JS 有効だが catalog.js / Alpine CDN が起動しなかった … 同ファイルの保険スクリプトが
         `.ex_menu` に `is-catalogFallback` を付ける

   Alpine の `x-show` で制御しない理由: Alpine は `defer` + CDN なので初回ペイントに間に合わず、
   ページャが**一瞬見えてから消える**（チラつく）。CSS だけで初回ペイント前に決める。 */
.ex_pagenavi { display: none; gap: 8px; justify-content: center; margin: 24px 0; }
.ex_menu.is-catalogFallback .ex_pagenavi { display: flex; }
.ex_pagenavi .page { border: 1px solid var(--color-line); padding: 6px 12px; font-size: 14px; }
.ex_pagenavi .page.current { background: var(--color-tab-active); border-color: #000; }

/* ---- 詳細 ---- */
.ex_pageContainer { display: flex; gap: 40px; margin-bottom: 32px; align-items: flex-start; }
.ex_pageCol { flex: 1; min-width: 0; }
/* 詳細の主画像も 1:1。object-fit は一覧カードと揃えて cover（ADR-011） */
.ex_gallery__main { aspect-ratio: 1/1; background: #f7f5f0; overflow: hidden; }
.ex_gallery__main img { width: 100%; height: 100%; object-fit: cover; }
/* サムネイルは**折り返す**（#255）。`flex-wrap` が無いと、1行に収まらない枚数のとき
   flex が各サムネを縮めて列幅ぴったりに詰める＝右の余白が消え、`height` だけ 76px のまま
   残るので**正方形でなくなる**（写真が縦に潰れる）。ギャラリー列が 76n+10(n-1) px を
   下回るときに起きる＝5枚なら 420px 未満、つまり1カラムに落ちたスマホ幅のほぼ全部。
   縮めさせないために `flex: 0 0 auto` も要る（`flex-wrap` だけでは既定の flex-shrink:1 が残る）。 */
.ex_gallery__thumbs { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.ex_gallery__thumb { flex: 0 0 auto; width: 76px; height: 76px; padding: 0; border: 1px solid var(--color-line); background: none; cursor: pointer; overflow: hidden; }
.ex_gallery__thumb.is-active { border-color: #000; }
.ex_gallery__thumb img { width: 100%; height: 100%; object-fit: cover; }

/* 詳細ページのカテゴリタグ（Issue#305。CEO指示「・で繋げず、一覧と同じで」）。
   一覧と同じ `.ex_listCategory__tag` を使うが、**既定の背景だけは変える**:
   一覧はカード背景 #F2EEE7 の上に白い箱が乗ってタグに見えるのに対し、詳細ページは
   地が白いので、白い箱のままでは**見えなくなる**。そこで地と違う色（カード背景）を既定にする。
   ★`:where()` で囲って詳細度を 0 にしているので、この規則は (0,1,0) にとどまり、
     上流の色（`.ex_listCategory__tag[data-cat="…"]` ＝ (0,2,0)）が**並び順に関係なく必ず勝つ**。
     旧 `.ex_pageCategory`（「・」区切り1行）はこの変更で使われなくなったので削除した。 */
.ex_pageInfo :where(.ex_listCategory__tag) { background: var(--color-card-bg); }
.ex_pageHead { display: block; }
.ex_pageName { font-family: var(--font-sans); font-size: 19px; font-weight: 600; color: #000; margin: 0; }
.ex_pageFee { font-size: 19px; font-weight: 700; color: #000; margin: 4px 0 0; white-space: nowrap; }
.ex_pageWorkshop { font-size: 14px; margin: 16px 0 8px; }
.ex_pageTime, .ex_pageDifficulty_level, .ex_pageLead { font-size: 14px; margin: 4px 0; }
/* Issue#182 B-2「キャッチコピーのフォントを游ゴシックに変更」。**フォント自体は既に游ゴシック**
   （`--font-sans`）で、現行HPとの差はサイズだった（HP 19.2px / 当方 17px。2026-09-16 採寸）。 */
.ex_pageCopy { font-family: var(--font-sans); font-size: 19.2px; color: #000; margin: 20px 0 12px; }
.ex_pageTxt { font-size: 14px; line-height: 1.9; }
/* 特設サイトへのリンク枠（Issue#186）。説明・注意事項の後、「ご予約はこちら」の前。
   バナーは**縦横比を保ったまま横幅に収める**（契約の明文。スマホで溢れさせない）。 */
/* 難易度の「?」（Issue#216）。★の並びを崩さない小さめの丸ボタン */
.ex_levelHelp__btn { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; margin-left: 6px; padding: 0; border: 1px solid #999; border-radius: 50%; background: #fff; color: #666; font-size: 11px; line-height: 1; cursor: pointer; vertical-align: middle; }
/* 難易度の「?」の吹き出し（CEO報告 2026-09-15「バルーンやツールチップと呼ばれるようなイメージ」）。
   以前は行の下に文字が生えるだけだった（.ex_levelHelp__text）。矢印つきのポップオーバーにする。

   幅は親（右カラム）いっぱいにする。「?」の位置は「難易度」の文字数で動き、翻訳でさらに動くので、
   ボタン基準で置くと狭い画面で右へはみ出す。**行の左端から右端まで**に固定し、矢印だけを
   ボタンの中心（JS が測って --ex-levelHelp-arrow に入れる）へ寄せる。 */
/* 吹き出しの位置の基準。詳細（.ex_pageDifficulty_level）と一覧のカード
   （.ex_listDifficulty_level）で同じ部品を使うので、共通クラスで持つ（Issue#293） */
.ex_levelHelp__host { position: relative; }
.ex_levelHelp__balloon {
  position: absolute; z-index: 20; top: calc(100% + 12px); left: 0; right: 0;
  /* flex にするのは並べるためだけではない。**ブロックにすると PHP テンプレートの改行と
     インデントが空行として出て、上下に40px以上の隙間ができる**（実測）。
     flex コンテナは空白だけのテキストノードを無視するので、それが起きない。 */
  display: flex; align-items: flex-start; gap: 10px;
  padding: 12px 14px;
  border: 1px solid #c9c0ad; border-radius: 8px; background: #fff;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .12);
  font-size: 13px; line-height: 1.8; color: #444; white-space: pre-wrap; text-align: left;
}
.ex_levelHelp__body { flex: 1 1 auto; min-width: 0; }
/* 矢印。**45度回した正方形**で作る（枠線つきの三角を2枚重ねる方式にはしない）。
   2枚重ねだと内側の白い三角が白い背景に溶けて、実測でほぼ見えなかった（2026-09-15）。
   回した正方形なら左上の2辺に吹き出しと同じ枠線が入り、**吹き出しの輪郭が矢印まで続いて見える**。
   はみ出す下半分は吹き出し本体（背景 #fff）が隠す。 */
.ex_levelHelp__balloon::before {
  content: ""; position: absolute; width: 12px; height: 12px;
  top: -7px; left: var(--ex-levelHelp-arrow, 24px); margin-left: -6px;
  background: #fff;
  border-left: 1px solid #c9c0ad; border-top: 1px solid #c9c0ad;
  /* 吹き出し本体の影（0 6px 20px）は疑似要素には掛からない。矢印にも同じ向きの薄い影を足し、
     白い背景の上でも輪郭が沈まないようにする */
  box-shadow: -2px -2px 4px rgba(0, 0, 0, .05);
  transform: rotate(45deg);
}
.ex_levelHelp__close {
  flex: 0 0 auto; width: 24px; height: 24px; margin: -4px -4px 0 0; padding: 0;
  border: 0; background: none; color: #999; font-size: 16px; line-height: 1; cursor: pointer;
}
.ex_levelHelp__close:hover { color: #444; }
/* カテゴリ切替中（Issue#213）。前の一覧を素のまま見せず、押したことが分かるようにする */
[x-cloak] { display: none !important; }
.ex_switching { text-align: center; font-size: 13px; color: #666; margin: 12px 0 0; }
.ex_listContainer.is-switching { opacity: .35; transition: opacity .12s linear; pointer-events: none; }
.ex_pageSpecial { margin: 20px 0 18px; text-align: center; }
.ex_pageSpecial__link { display: inline-block; max-width: 100%; font-size: 14px; line-height: 1.9; overflow-wrap: anywhere; }
.ex_pageSpecial__banner { display: block; max-width: 100%; height: auto; margin: 0 auto; }
.ex_pageCaution { margin: 20px 0 18px; padding: 12px 14px; background: #FBF7F0; border-left: 3px solid #F4C5BF; font-size: 14px; line-height: 1.9; white-space: pre-wrap; overflow-wrap: anywhere; }
.ex_pageSize { margin-top: 12px; }
.ex_pageArtist { margin-top: 20px; padding: 16px; background: #f7f5f0; }
.ex_pageArtist__name { font-weight: 600; margin: 0 0 4px; }

.ex_pageReserve_btn {
  display: block; width: 100%; max-width: 480px; margin: 28px 0 16px;
  background: var(--color-reserve); color: #000; border: none; padding: 14px;
  font-size: 14px; text-align: center; cursor: pointer;
}
.ex_pageReserve_btn:hover { filter: brightness(0.97); }
/* 在庫なし（Issue#144）。押せないことが見た目でも分かるようにする */
.ex_pageReserve_btn:disabled { background: #ccc; color: #666; cursor: not-allowed; }
.ex_pageReserve_btn:disabled:hover { filter: none; }
/* LINE予約モードの見出し（Issue#308）。予約ボタンの代わりに特設サイトのリンクを出すとき、
   そこが予約の入口であることを示す。ボタンと同じ上余白・同じ最大幅に合わせ、
   ボタンが見出し＋リンクに置き換わったように見せる（別の場所に見えないように）。 */
.ex_pageReserveHead {
  max-width: 480px; margin: 28px 0 0;
  font-size: 14px; font-weight: 700; color: #000; text-align: center;
}
.ex_pageReserveHead + .ex_pageSpecial { margin-top: 8px; }
/* メンテナンス中の案内（Issue#314）。押せないボタンの理由なので、在庫なしの案内と同じ
   地味さに揃える（煽らない・色で驚かせない）。文言は契約の固定文。 */
.ex_pageMaintenance { max-width: 480px; }
.ex_pageContact { font-size: 14px; }
.ex_pageContact strong { font-size: 18px; }

/* ---- インライン予約 ---- */
.ex_booking { border-top: 1px solid var(--color-line); margin-top: 32px; padding-top: 32px; }
.ex_booking__loading { text-align: center; color: #888; padding: 40px; }

/* ---- おすすめ ---- */
.ex_recommend { border-top: 1px solid var(--color-line); margin-top: 48px; padding-top: 40px; }
.ex_recommend__title { font-family: var(--font-serif); font-size: 20px; text-align: center; letter-spacing: .1em; margin-bottom: 24px; }

/* ---- レスポンシブ ---- */
@media (max-width: 900px) {
  .ex_hero, .ex_pageContainer { flex-direction: column; }
  .ex_listContainer { justify-content: center; }
}
@media (max-width: 700px) {
  .ex_listCol { width: 100%; max-width: 360px; }
}

/* ---- 言語切替（ADR-025）----
   マークアップは本家のまま（`.nav_lang` / `#translator` / `#language_menu`）で、見た目も本家CSS
   （`assets/css/vendor/original_style.css` の `.header .nav_lang` 系）がそのまま作る。
   ここで足すのは**開閉の仕組みだけ**。

   本家CSSの `#language_menu` は `opacity: 0`（`display:none` はコメントアウトされている）で、
   jQuery が `.show` を付けて `opacity: 1` にする実装だった。つまりJSを外すと
   **透明なまま重なった当たり判定**がヘッダー右上に残る（ADR-023 決定4がマークアップごと
   省いた理由そのもの）。本ファイルはカスケードレイヤーに属さないので vendor レイヤーより強く、
   既定を `display: none` に上書きできる。

   開くのは `:focus-within` **だけ**（Issue#260・CEO指示 2026-09-20 逐語「いまのホームページは、
   マウスオーバーだけでは言語がドロップしません。タップでドロップし、そのままとどまります。
   一方新のほうはタップしなくてもマウスオーバーで出て選択使用とすると消える。（中略）
   オーバーででないほうが親切」）。

   `:hover` を外した理由は見た目の好みではなく**操作が成立しないため**。ボタンとメニューの
   あいだにカーソルが外れる隙間があり、選ぼうとして動かすと閉じてしまう。
   `:focus-within` なら、クリック／タップでボタンにフォーカスが入って開き、**カーソルを
   動かしても閉じない**（フォーカスは動かないため）。外をクリックすればフォーカスが外れて閉じる。
   本番で実測して確認済み（2026-09-20。クリックで開く → 移動しても開いたまま → 外クリックで閉じる）。

   jQuery も JS も使わない（ADR-008 の jQuery全廃 / 切替の実体はただのリンク）。 */
.header #language_menu { display: none; }
.header .nav_lang:focus-within #language_menu { display: block; opacity: 1; }
.header #trans_btn { background: none; padding: 0; cursor: pointer; }
.header #language_menu li { list-style: none; text-align: center; }
.header #language_menu li[aria-current="true"] a { font-weight: 700; text-decoration: underline; }

/* ---- 体験料の減免基準（Issue#135）----
   マークアップは本家 `/experience/` の `#ex_info` の転記（`views/_exemption.php`）だが、
   **見た目は本家CSSでは出ない**。本文領域は `vendor-scope.css` の `neutralize`
   （`main.site-main * { all: revert }`）で本家CSSを打ち消しているため、
   `original_style.css:2004-2057` の `.ex_info` 系は1つも効かない。そこで本家の実測値
   （背景 #E1F2FC / 2カラム / PDFボタンは白地・黒枠・最大250px）をここへ写す。

   サイズは本家の rem 指定（`p{font-size:.8rem}` 前提）をそのまま持ってくると Form_v2 の
   本文（16px 基準）の中で極端に小さくなるため、Form_v2 側の本文スケール
   （`.ex_pageTxt` = 14px、補助テキスト = 13px）に合わせて px で書く。
   `.bl_container` / `.bl_col` も neutralize 済みなので、2カラムはここで組む
   （本家は `.bl_container{flex-flow:row wrap;justify-content:space-between}`・`.bl_col{width:100%}` で、
   `#ex_info` 用の幅指定は本家にも無く 100% ＝ 実質1カラムだった。Form_v2 は採寸どおり
   左右2カラムにし、狭い画面で縦積みにする）。

   ★クラス名: 本家の `.ex_infoList` は使えない（`list-style-type: disc !important` が
   vendor レイヤーにあり、`!important` はレイヤー優先度を反転させて neutralize を破る。
   `tests/php/VendorCssSnapshotTest.php` F4 が使用を禁止）。`.ex_infoItems` に改名してある。 */
.ex_info {
  background: #E1F2FC;
  margin: 32px 0;
  padding: 24px 32px;
  font-size: 14px;
  line-height: 1.8;
}
.ex_infoTitle { font-size: 19px; font-weight: 700; color: var(--color-heading); margin: 0 0 16px; }
.ex_infoTitle span { display: inline-block; padding-left: 16px; font-size: 13px; font-weight: 400; color: var(--color-text); }
.ex_info .bl_container { display: flex; flex-flow: row wrap; align-items: flex-start; justify-content: space-between; gap: 24px; }
.ex_info .bl_col { width: calc(50% - 12px); }
.ex_infoTxt { margin: 0 0 16px; }
.ex_infoItems { margin: 0 0 16px; padding-left: 1.2em; }
.ex_infoItems li { list-style: disc outside; }
.ex_infoNote { font-weight: 700; margin: 10px 0 5px; }
/* 学校減免申込書PDFへの導線。本家 `.ex_infoTxt a`（白地・黒枠・幅90%/最大250px・中央寄せ）を踏襲 */
.ex_infoTxt a {
  display: block;
  width: 90%;
  max-width: 250px;
  margin: 24px auto;
  padding: 16px 13px;
  border: 1px solid #000;
  background: #fff;
  text-align: center;
  font-size: 13px;
  transition: background-color .3s;
}
.ex_infoTxt a:hover,
.ex_infoTxt a:focus { background: rgba(255, 255, 255, .7); }

/* 詳細ページ側は本文を持たず、料金直下からこのブロックへ送るリンクだけ（CEO判断D案） */
.ex_pageExemption { font-size: 13px; margin: 8px 0 14px; }
.ex_pageExemption a { text-decoration: underline; }

@media (max-width: 700px) {
  .ex_info { margin: 24px 0; padding: 20px; }
  .ex_info .bl_col { width: 100%; }
  .ex_infoTxt a { margin: 16px auto 0; padding: 8px; }
}
