@charset "UTF-8";
/*
 * FP(FunPhotos) スタイル 1/4 ―― 土台
 *
 * prototype-otanoshimi.css（7,586行）を4つに割ったうちの 1つめ
 * （2026-08-26 のリファクタリング。**中身は1文字も変えていない** ――
 * 4つをこの順に連結すると、割る前のファイルと一致する）。
 *
 * **読み込み順が意味を持つ。** 後ろの規則が前を上書きしている箇所が
 * 実在するので、hs_fp_head() は必ずこの順で4つの <link> を出す:
 *   1. fp-base.css    …… 土台。box-sizing の一覧・帯・撮影一覧・お試し
 *   2. fp-shop.css    …… 購入モーダル（従来と v2 の枠）
 *   3. fp-screens.css …… TOP反映・撮影開始/再生中/現像の演出・ご注意
 *   4. fp-late.css    …… あとから重ねた調整と上書き。**必ず最後**
 * 順を変えたいときは、先に該当の規則を1ファイルへ寄せてから。
 */

/* ↑ content の絵文字（🎁 等）のための明示。無いと、参照元の
   文字コード推定が外れた環境で「ðŸŽ·」のような文字化けになる。 */
:root {
  /* ダイアログの面の地色は**ここだけが持つ**（利用者の指示・2026-08-25
     「地の色 もう1つの濃紺グラデーションにそろえる」）。
     以前は面ごとに4通りへ割れていた ―― 180°と165°のグラデーション、
     単色の #2d1b9a と #24167f。並べて比べないと気づかない差だった。
     **各面はこの変数を見るだけにして、色はここで1回だけ決める。** */
  --fp-dialog-bg: linear-gradient(165deg, #1b1d52, #12143c);
}

/* お楽しみ動画フォト — 検証用プロトタイプのスタイル
   hs_fp_enabled が有効なサイトでのみ読み込まれる。 */

/* このプロトタイプが足す要素は、幅指定に padding が上乗せされて
   画面幅を超え、横スクロール（左右の揺れ）を起こしやすい。
   自前の要素はまとめて border-box にしておく。 */
#fp-develop-bar, #fp-develop-bar *,
#fp-shutter-bar, #fp-shutter-bar *,
#fp-shop-modal, #fp-shop-modal *,
#fp-dl-modal, #fp-dl-modal *,
#fp-refill, #fp-refill *,
#fp-toast,
#fp-devbar, #fp-devbar * {
  box-sizing: border-box;
}

/* 押すものの文字は選択できないようにする。
   スマホでボタンを長押し・二度押しすると文字が青く選択されてしまい、
   押せていないように見える（選択が残ったまま次の操作をすることになる）。
   読ませる文章ではないので、選択できて得るものが無い。
   対象は「押すもの」だけに絞る。注意書きや残数の文言まで止めると、
   利用者が控えたいときにコピーできなくなる。 */
.fp-dev-more,
.fp-plan,
.fp-shutter-btn,
.fp-modal-close,
.fp-trial-yes,
.fp-trial-no,
.fp-buy-shutter,
.fp-refill-btn,
.fp-goods-sample-link,
#fp-develop-bar button,
#fp-shutter-bar button,
#fp-shop-modal button,
.fp-dl-agree,
.fp-dl-submit,
.fp-devbox-dl,
.fp-devbox-dl * {
  -webkit-user-select: none;
  user-select: none;
  /* 長押しでiOSが出す「コピー/共有」の吹き出しも止める */
  -webkit-touch-callout: none;
}

/* 手書きマーカー体（Permanent Marker）。CDNに依存せずテーマ同梱で配信する。
   現像後のキャプション「Nice Capture !」「To: ◯◯」に使う。
   ※ @font-face はセレクタ列の途中に置かないこと。置くとその前の
     セレクタ列ごと丸ごと無効になり、border-box が効かなくなる。 */
@font-face {
  font-family: 'Permanent Marker';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/permanent-marker/PermanentMarker-Regular.woff2') format('woff2');
}

/* ---------------- シャッター: フラッシュ演出 ---------------- */

#fp-flash {
  position: fixed;
  inset: 0;
  z-index: 9500;
  background: #fff;
  opacity: 0;
  pointer-events: none;
}

#fp-flash.is-firing {
  animation: fp-flash-anim 420ms ease-out;
}

@keyframes fp-flash-anim {
  0%   { opacity: 0; }
  8%   { opacity: 0.95; }
  100% { opacity: 0; }
}

/* ---------------- トースト ---------------- */

#fp-toast {
  position: fixed;
  left: 50%;
  bottom: 120px;
  transform: translateX(-50%) translateY(10px);
  /* モーダル(購入=2147482900/案内=2147483000)の上にも出す。
     「決済画面へ移動します…」等はモーダル表示中に出るため。 */
  z-index: 2147483400;
  max-width: 88vw;
  padding: 10px 18px;
  border-radius: 999px;
  background: rgba(20, 20, 40, 0.92);
  /* **白は !important で固定する。** 明るい背景のサイトでは、全体の動的CSS
     （general_style_css）が全要素に `color:#000 !important` を当てるため、
     素の #fff は負けて黒い面に黒い文字になっていた
     （利用者の指摘・2026-08-18「ここは文字が白」）。CLAUDE.md の定石3。 */
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  font-size: 13px;
  text-align: center;
  opacity: 0;
  transition: opacity 220ms ease, transform 220ms ease;
  pointer-events: none;
}

#fp-toast.is-visible {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* スマホはシャッターボタンが画面下にあり、トーストと近くなる。少し上げる。 */
@media (max-width: 768px) {
  #fp-toast {
    bottom: 180px;
  }
}

/* ---------------- 撮影一覧: ポラロイド枠 ---------------- */

/* 装飾（マスク／ポラロイド化）が済むまでカードを見せない。
   読み込み直後に素の一覧が一瞬見えるチラつきを防ぐとともに、
   未現像の中身が装飾前に覗いてしまうのも防ぐ。
   decorateCard が付ける data-fp-done を目印にする。 */
body.hs-fp .capturedlist[data-capturetiming]:not([data-fp-done]),
body.hs-fp-develop .capturedlist[data-capturetiming]:not([data-fp-done]) {
  visibility: hidden;
}

/* 印画紙に見立てた枠。下だけ広いのがポラロイドの特徴。
   box-sizing を指定しないと padding のぶんカードが広がり、隣のカードと重なる。 */
.capturedlist.fp-polaroid {
  box-sizing: border-box;
  width: 100%;
  max-width: 100%;
  /* 印画紙の地色は白（利用者の指示・2026-08-18「ポロライドの背景色は#fff」）。
     以前はクリーム色（#f4f1e8）だった。 */
  background: #fff;
  padding: 12px 12px 48px;
  /* 撮影一覧側が .capturedlist に border-radius:10px !important を当てているため、
     こちらも !important で上書きする（印画紙なのでほぼ角のない見た目にする）。 */
  border-radius: 2px !important;
  /* 背景が明るいサイトでも印画紙が浮いて見えるよう、控えめな影を落とす */
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
}

.capturedlist.fp-polaroid .capturedlistImage {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 0;
  /* 印画紙の白地の上で写真が浮いて見えるように、薄い影を落とす */
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3);
  background: #0b0b18;
}

/* 撮影者と著作権の表示は、拡大表示と同じ組み立てにする。
   白帯ではなく写真の右下へ白で重ねる（帯は宛名の場所として空ける）。
   位置は下帯48px・左右の余白12pxから逆算する。絶対配置の基準は
   余白の外側なので、余白のぶんを足さないと写真の外に出る。 */
.capturedlist.fp-polaroid .copyright {
  position: absolute;
  left: auto;
  right: 18px;    /* 余白12px + 写真の内側へ6px */
  bottom: 54px;   /* 下帯48px + 写真の内側へ6px */
  top: auto;
  height: auto;
  display: block;
  margin: 0;
  /* サイト全体の動的CSSが本文の文字サイズを !important で当ててくるため、
     こちらも同じ強さで指定しないと拡大されてしまう。 */
  font-size: 10px !important;
  line-height: 1.45 !important;
  text-align: right;
  font-weight: 600;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  text-shadow: 0 1px 2px rgba(0, 0, 0, .95),
               1px 0 2px rgba(0, 0, 0, .8),
               -1px 0 2px rgba(0, 0, 0, .8);
}

/* 当たりを現像したカードの宛名。拡大表示と同じく帯の中央に置く。 */
.capturedlist.fp-polaroid .fp-card-to {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 12px;
  text-align: center;
  font-family: 'Permanent Marker', "Chakra Petch", cursive, sans-serif;
  font-size: 16px !important;
  letter-spacing: .04em;
  color: #e8b44a !important;
  -webkit-text-fill-color: #e8b44a !important;
  pointer-events: none;
}
/* PCは一覧のカードも大きく出るので、宛名も一回り大きくする */
@media (min-width: 900px) {
  .capturedlist.fp-polaroid .fp-card-to { bottom: 11px; font-size: 18px !important; }
}

/* ガチャの選択状態の札。**写真の右上**に置く（利用者の指示・2026-08-13
   「ラベルの位置を逆にして」―― 商品名タグと入れ替えた）。
   **枠（ポラロイド）の有無で出し分けない**（2026-08-24）――
   写真の見せ方を設定で選べるようにしたので、フレームレスにしただけで
   札が素の見た目に落ちないようにする。
   「購入商品を選定」タブの札と同じ言葉・同じ色分け
   （選択済＝緑／未選択＝灰）。 */
.capturedlist .fp-select-state,
#pageDetailsFramed .fp-select-state {
  position: absolute;
  top: 20px;
  right: 20px;
  padding: 3px 12px;
  border-radius: 999px;
  background: #8a8f98;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
  white-space: nowrap;
  z-index: 28;
}
.capturedlist .fp-select-state.is-done,
#pageDetailsFramed .fp-select-state.is-done { background: #4CAF50; }
/* 選定は済んだが送料はまだ（琥珀）。緑＝支払い済と混ざらない色にする
   （利用者の指示・2026-08-14）。 */
.capturedlist .fp-select-state.is-pending,
#pageDetailsFramed .fp-select-state.is-pending { background: #8a6520; }
/* 選べる枠がもう無い（選択不可）。灰のまま、**一段沈めて**押せないことを示す
   ―― 別の色を足すと状態が増えたように見える（利用者の指示・2026-08-15）。 */
.capturedlist .fp-select-state.is-locked,
#pageDetailsFramed .fp-select-state.is-locked { background: #5a5f68; opacity: .85; }
/* 拡大表示の札は、**広い画面だけ**一回り大きくする。スマホでは面が
   一覧のカードとほぼ同じ大きさなので、そろえたまま変えない（利用者の指示）。 */
@media (min-width: 769px) {
  #pageDetailsFramed .fp-select-state { font-size: 13px; padding: 4px 14px; }
}
/* 商品名タグ（トレカ／???）は**ポラロイド下辺の余白**へ（同じ入れ替えの片割れ）。
   基点の .fp-trial-tag（右上・top/right 20px）より強いセレクタで上書きする。

   見た目は黒い札をやめて「🎁 商品名」の素の文字にする（利用者の指示・
   2026-08-13）。余白は印画紙のクリーム色なので文字は濃色、字も一回り
   大きくして読ませる。アイコンは ::before で足す ―― マークアップ
   （React と 拡大表示のJS）を触らずに、両方へ同時に効かせるため。 */
body.hs-fp .capturedlist.fp-polaroid .fp-prize-tag {
  top: auto;
  right: auto;
  left: 50%;
  /* キャプション帯（padding-bottom: 48px）の上下中央に置く。
     中心を帯の半分（24px）に合わせ、自身の高さぶんを translate で戻す */
  bottom: 24px;
  transform: translate(-50%, 50%);
  z-index: 5;
  background: none;
  box-shadow: none;
  padding: 0;
  color: #1a1a1a !important;
  -webkit-text-fill-color: #1a1a1a !important;
  font-size: 15px;
}
/* **黒は ID を含めて宣言する**（利用者の指摘・2026-08-19「ここ文字が白に
   なっている」＝白い印画紙に白文字で、🎁だけが見えていた）。
   上の `.capturedlist.fp-polaroid .fp-prize-tag`（クラス4つ）は、サイト全体の
   動的CSS（text_color=白）が使う「:not() を7つ並べた長いセレクタ＋!important」に
   **特異度で負ける**。!important 同士の勝負はセレクタの強さで決まるので、
   一覧の入れ物の ID（#pagePhotoList）を足して勝たせる（CLAUDE.md 定石3）。

   **-webkit-text-fill-color にも !important を付ける。** color だけ勝っても、
   塗りのほうが動的CSSの `!important` に負けると文字は白いままで、
   🎁 だけが見えている状態になる（利用者の報告・2026-08-19「文字が消えてる」）。
   拡大表示側もセレクタに ID を含むので color は勝っていたが、塗りに
   !important が無く、そちらだけ負けていた。 */
body.hs-fp #pagePhotoList .capturedlist.fp-polaroid .fp-prize-tag {
  color: #000 !important;
  -webkit-text-fill-color: #000 !important;
}
body.hs-fp .capturedlist.fp-polaroid .fp-prize-tag::before,
body.hs-fp #pageDetailsFramed .fp-prize-tag::before {
  /* **絵文字は生で書かず、コードポイントで書く。**
     CSS の文字コードは HTTP の Content-Type が最優先で、@charset はその次。
     サーバーが text/css を charset 無し（や iso-8859-1）で返すと @charset が
     効かず、UTF-8 のバイト列が cp1252 として読まれて「ðŸŽ」に化ける
     （利用者の報告・2026-08-15）。エスケープなら文字コードに依存しない。
     \01F381 = 🎁 / \00A0 = 空白（6桁で書けば終端の空白が要らない）。 */
  content: "\01F381\00A0";
}
/* 商品名が入った瞬間のエフェクト。小さく生まれて弾み、金色がひと呼吸
   だけ差して落ち着く。scale/opacity は transform と独立したプロパティ
   なので、中央合わせの translate（transform）とは干渉しない。 */
@keyframes fp-prize-tag-in {
  0%   { scale: .4; opacity: 0; }
  55%  { scale: 1.18; opacity: 1; text-shadow: 0 0 14px rgba(232, 180, 74, .9); }
  100% { scale: 1; opacity: 1; text-shadow: none; }
}
.fp-prize-tag-in {
  animation: fp-prize-tag-in .55s cubic-bezier(.2, 1.1, .35, 1.1) both;
}
@media (prefers-reduced-motion: reduce) {
  .fp-prize-tag-in { animation: none; }
}
/* 拡大表示（詳細モーダル）も同じレイアウト: 印画紙下辺の余白に「🎁 商品名」。
   下の @media (min-width:769px) の右上指定（top/right 26px）より
   強いセレクタにしてある（.fp-prize-tag まで指定）。 */
body.hs-fp #pageDetailsFramed .fp-trial-tag.fp-prize-tag {
  /* 位置は **left:50% + translate(-50%,50%)** のまま。
     一度 left/right を 0 起点の箱に変えたが、この要素の包含ブロックは
     印画紙（#pageDetailsFramed）ではなく外側なので、左端へ飛び出した
     （利用者の報告・2026-08-14）。**包含ブロックを確かめずに
     left/right へ切り替えないこと。**

     「下にずれる」の元は2行への折り返し。中心を決め打ちしているので、
     行が増えたぶんだけ下へはみ出していた。折り返させなければ起きないので、
     1行に固定して、長い名前は端を省略する。 */
  top: auto;
  right: auto;
  left: 50%;
  bottom: 33px;                    /* 下帯（66px）の上下中央 */
  transform: translate(-50%, 50%);
  white-space: nowrap;
  max-width: calc(100% - 32px);
  overflow: hidden;
  text-overflow: ellipsis;
  background: none;
  box-shadow: none;
  padding: 0;
  color: #1a1a1a !important;
  -webkit-text-fill-color: #1a1a1a !important;
  /* スマホでは一覧のキャプション（15px）と同じ大きさのまま。
     20px への拡大は広い画面だけ（下の @media）。面がほぼ同じ大きさなのに
     字だけ大きいと、一覧と別の画面に見える（利用者の指示）。 */
  font-size: 15px;
  font-weight: 700;
  white-space: nowrap;
  z-index: 5;
}
@media (min-width: 769px) {
  /* 「プレゼント名が小さい」（2026-08-13）による拡大は広い画面だけ */
  body.hs-fp #pageDetailsFramed .fp-trial-tag.fp-prize-tag { font-size: 20px; }
}

/* ---------------- 拡大表示もポラロイドの見え方に揃える ---------------- */

/* 詳細のポラロイド化は **FPモードのときだけ**（お楽しみ動画フォト／ガチャ）。

   通常モードへ現像を持ち込んだサイト（body.hs-fp-develop）でも印画紙に
   していたが、外した（利用者の指示・2026-08-17
   「通常モードの時はポロライドの表示にしない」）。
   通常モードへ持ち込んでいるのは**現像の演出**であって、写真の見せ方は
   サイト本来のまま（素の写真）にする。
   伏せ／現像の演出そのもの（body.hs-fp-develop の他の指定）は残る。 */
body.hs-fp #pageDetails #pageDetailsFramed {
  box-sizing: border-box;
  /* 一覧のカードと同じ白（利用者の指示・2026-08-18）。 */
  background: #fff;
  /* 下帯（キャプション）の高さ。**ここが唯一の定義**。
     商品名の位置も撮影者表示の位置もこの値から逆算するので、
     3か所に 66px を書き写さない（書き写すと片方だけ直ってずれる）。 */
  --fp-caption-h: 66px;
  /* キャプションは2行ぶん(約39px)あるので、下の余白はそれより広く取る */
  padding: 12px 12px var(--fp-caption-h);
  border-radius: 2px !important;   /* captured.css の 15px を上書き */
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
}

/* 撮影一覧側は #pageDetails:not(.vertical) … に
   height:100% !important / object-fit:contain !important を当てている。
   そのままだと写真がレターボックスになり、印画紙の左右に無駄な余白が出る。
   body クラスを足して詳細度で上回り、幅なりの高さで表示させる。
   （hs-fp-develop は通常モードへの現像持ち込み時にJSが付ける同義のクラス） */
body.hs-fp #pageDetails #pageDetailsFramed #pageDetailsFramedImage {
  display: block;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3);   /* 一覧の写真と同じ薄い影 */
  /* **画面に収める**（利用者の報告・2026-08-20「verticalのとき、modalが
     画面外に出て操作できなくなる」）。
     max-height:none ＋ 幅なりの高さだと、9:16 の写真は枠の幅の1.8倍の高さに
     なる。縦のセッションは枠が 90vw まで広がるので、PCでは画面の何倍もの
     高さになり、下のボタンまで延々とスクロールすることになっていた。
     （背景は overflow-y:auto なので「届かない」ではないが、実質操作できない。）

     高さの上限を決めて、幅はそれに合わせる ―― 現像直後の写真と同じ考え方。
     引く 240px は、印画紙の下帯とその下のボタンのぶん。 */
  width: auto !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: calc(100dvh - 240px) !important;
  /* 縮めて全部見せる（切り取らない）。枠は下の fit-content で写真に合わせる。 */
  object-fit: contain !important;
  border-radius: 0;
}
/* 印画紙は写真の形に合わせて縮む（縦長のときに両脇へ白が余らないように）。 */
body.hs-fp #pageDetails #pageDetailsFramed {
  /* Safari は width の fit-content に前置きが要る版がある。無いと
     width が auto に倒れ、left/right:0 のぶん**横いっぱいに伸びる**
     （利用者の報告・2026-08-20「ダウンロードボタンがこわれてみえる」）。 */
  width: -webkit-fit-content;
  width: fit-content;
  margin-left: auto;
  margin-right: auto;
}
@media (max-width: 480px) {
  /* スマホはボタンが縦に積まれるので、そのぶん多めに空ける */
  body.hs-fp #pageDetails #pageDetailsFramed #pageDetailsFramedImage {
    max-height: calc(100dvh - 260px) !important;
  }
}

/* 枠の高さは中身なりにする。
   撮影一覧側は「画像ごとに表示サイズが変わらないように」と
   #pageDetailsFramed 自体へ aspect-ratio:16/9 を当てている。
   印画紙は下の余白が広いぶん枠全体の比率が変わるため、これを外さないと
   写真が余白へはみ出して下のキャプションに重なる。比率は画像側で持たせる。 */
body.hs-fp #pageDetails #pageDetailsFramed {
  aspect-ratio: auto !important;
  height: auto !important;
  min-height: 0 !important;
  /* overflow:hidden は付けない。前後の矢印はこの枠の内側にあり、
     left/right のマイナス値で枠の外に出しているため、クリップされて消えてしまう。 */
  overflow: visible;
}

/* キャプションは写真の上ではなく、下の印画紙の余白に置く */
/* 写真の中央に重ねていたID表示は出さない。
   同じ番号は右下のクレジット「Captured by ◯◯ (12345678)」に入っており、
   写真の真ん中に重なるぶん、見せたい部分が隠れてしまうため。 */
body.hs-fp #pageDetails #pageDetailsFramed .display-user-id,
body.hs-fp #zoom .display-user-id,
body.hs-fp-develop #zoom .display-user-id {
  display: none !important;
}

/* 撮影者と著作権の表示は、印画紙の下帯ではなく写真の右下に重ねる。
   bottom は下帯の高さ(--fp-caption-h)を基準に逆算する。
   帯の高さちょうどで写真の下端、それより大きくすると写真の中へ入る。 */
body.hs-fp #pageDetails #pageDetailsFramed .copyright_detailphoto {
  left: auto;
  right: 20px;   /* 左右の余白12px + 写真の内側へ8px */
  bottom: calc(var(--fp-caption-h, 66px) + 8px);
  top: auto;
  height: auto;
  display: block;
  margin: 0;
  font-size: 12px !important;
  line-height: 1.5 !important;
  text-align: right;
  font-weight: 600;
  /* 文字の塗りそのものを白に固定する。color だけだと、サイト全体の
     動的配色が別の色を当てていた場合に負けることがあるため。 */
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  /* 影は輪郭を締める程度にとどめる。3方向に濃く重ねていたので、
     文字のまわりが黒く縁取られて重く見えていた。
     写真の上でも読めればよいので、真下に1枚だけ薄く落とす。 */
  text-shadow: 0 1px 2px rgba(0, 0, 0, .55);
}

/* お楽しみ写真などのバッジは、一覧のカードと同じ位置に置く。
   一覧は枠の端から5px（＝写真の角より7px外側）に出ているので、
   拡大側も写真の角からの距離が同じになるよう、枠の余白に合わせて逆算する。
   スマホは余白12px → 12-7=5px、PCは余白18px → 18-7=11px。 */
body.hs-fp #pageDetails #pageDetailsFramed .top-right-container-detail {
  top: 5px !important;
  right: 5px !important;
}

/* **印画紙の余白は body.hs-fp（＝ガチャ／フォトの体験）だけ。**
   通常モードへ現像の演出だけを持ち込んだサイト（body.hs-fp-develop）は
   「ポラロイドの表示にしない」と決めてある（2026-08-17）が、下の2つの
   メディアクエリにだけ hs-fp-develop が残っていた。その結果、通常モードの
   拡大表示は**白い印画紙にならないまま余白（padding 18px/86px）だけが付き**、
   写真の下に用の無い空きが出ていた（利用者の報告・2026-08-22
   「表示がばぐってる?」）。余白を決める側と地色を決める側は必ず同じ条件で
   持たせること。

/* スマホでは拡大表示も一覧のカードと同じ入れ方に揃える。
   拡大側だけ余白と文字が大きいと、同じ印画紙なのに別物に見えてしまう。
   （一覧: padding 12/12/48・キャプション left/right 14px・高さ48px・11px） */
@media (max-width: 768px) {
  body.hs-fp #pageDetails #pageDetailsFramed {
    padding: 12px 12px 48px;
  }

  body.hs-fp #pageDetails #pageDetailsFramed .copyright_detailphoto {
    left: auto;
    right: 20px;    /* 余白12px + 写真の内側へ8px */
    bottom: 56px;   /* 下帯48px + 写真の内側へ8px */
    height: auto;
    font-size: 10px !important;
    line-height: 1.5 !important;
  }
}

/* PCでは横いっぱいに広がると余白が相対的に細くなり、印画紙に見えなくなる。
   最大幅を決めて中央に置き、余白も幅に見合う太さにする。 */
@media (min-width: 769px) {
  body.hs-fp #pageDetails #pageDetailsFramed {
    max-width: 720px;
    margin-left: auto;
    margin-right: auto;
    padding: 18px 18px 86px;
  }

  body.hs-fp #pageDetails #pageDetailsFramed .copyright_detailphoto {
    left: auto;
    right: 28px;    /* 余白18px + 写真の内側へ10px */
    bottom: 96px;   /* 下帯86px + 写真の内側へ10px */
    height: auto;
    font-size: 13px !important;
  }

  body.hs-fp #pageDetails #pageDetailsFramed .top-right-container-detail {
    top: 11px !important;
    right: 11px !important;
  }

  /* 前後の矢印は #pageDetailsFramed の内側にあり、left/right:-10px だと
     80px幅の大半が印画紙に重なる。枠の完全に外へ出す。 */
  body.hs-fp #pageDetails #pageDetailsFramed #prevButton {
    left: -96px !important;
  }

  body.hs-fp #pageDetails #pageDetailsFramed #nextButton {
    right: -96px !important;
  }
}

/* ---------------- 撮影一覧: マスク & 現像演出 ---------------- */

/* 未現像: フィルムのネガのように、うっすらとだけ像が分かる状態。
   色を反転させ、コントラストと彩度を落として何が写っているかは読み取れないようにする。
   blur はそのままだと画像の外側ににじみ出て印画紙の余白に影のように落ちるため、
   clip-path で自分の枠に閉じ込める。 */
.capturedlist.fp-undeveloped .capturedlistImage {
  clip-path: inset(0);
  filter:
    invert(1)
    sepia(0.3)
    hue-rotate(160deg)
    saturate(0.6)
    brightness(0.78)
    contrast(1.25)
    blur(2.2px);
  opacity: 0.78;
}

/* ---------------- 現像: プリンターのように上から下へ ---------------- */

/* カバーを上から順に切り落として、下に隠れている写真を出していく。 */
.fp-cover.is-printing {
  animation: fp-print-reveal 2600ms linear forwards;
}

@keyframes fp-print-reveal {
  from { clip-path: inset(0 0 0 0); }
  to   { clip-path: inset(100% 0 0 0); }
}

/* 走査線に合わせて上から出てくる、カラーの写真。
   未現像のネガの上に重ね、上端から下へ向かって見える範囲を広げる。
   カバー(25)より上・走査ヘッド(27)より下に置く。 */
.fp-reveal {
  position: absolute;
  inset: 0;
  z-index: 26;
  overflow: hidden;
  pointer-events: none;
  border-radius: inherit;
  /* 初期状態は完全に隠す。押した瞬間に全部見えないようにするため。
     削るのは「下」側。inset() の第1引数は上端から削る量なので、
     inset(100% 0 0 0) にすると下から生えてきて走査線と逆向きになる。 */
  clip-path: inset(0 0 100% 0);
}

/* ポラロイド枠では印画紙の余白を残し、写真面だけを覆う */
.capturedlist.fp-polaroid .fp-reveal {
  inset: 12px 12px 48px;
  border-radius: 0;
}

.fp-reveal img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.fp-reveal.is-printing {
  animation: fp-print-fill 2600ms linear forwards;
}

/* 走査線と同じく、上から下へ向かって見える範囲を広げる */
@keyframes fp-print-fill {
  from { clip-path: inset(0 0 100% 0); }
  to   { clip-path: inset(0 0 0 0); }
}

/* 走査ヘッドを走らせる領域。写真面に重ねる。 */
.fp-printer {
  position: absolute;
  inset: 0;
  z-index: 27;
  overflow: hidden;
  pointer-events: none;
}

.capturedlist.fp-polaroid .fp-printer {
  inset: 12px 12px 48px;
}

/* 走査ヘッド。粒子そのものは canvas(.fp-particles) が描くので、
   ここでは先端の光と、そのにじみだけを受け持つ。 */
.fp-printer-head {
  position: absolute;
  left: 0;
  right: 0;
  height: 36%;
  animation: fp-print-head 2600ms linear forwards;
}

/* 画像の画素から作った光の粒。走査線の手前に飛び込んでくる。 */
.fp-particles {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}

/* 先端まわりのにじんだ光。線を太く見せないよう、ごく薄く短く。 */
.fp-printer-head::before {
  content: "";
  position: absolute;
  left: -6%;
  right: -6%;
  bottom: -5px;
  height: 18px;
  background: radial-gradient(52% 100% at 50% 100%, rgba(186, 210, 255, 0.26), transparent 72%);
  filter: blur(4px);
}

/* 走査線そのもの。1pxの細い線として見せ、グローは最小限にとどめる。 */
.fp-printer-head::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.7) 12%, rgba(226, 238, 255, 0.85) 50%, rgba(255, 255, 255, 0.7) 88%, transparent);
  box-shadow:
    0 0 2px rgba(255, 255, 255, 0.5),
    0 0 7px rgba(170, 198, 255, 0.3);
  opacity: 0.82;
}

/* 帯の「下端」が走査線。カバーの剥がれ位置(0%→100%)と一致させるため、
   帯の高さ(36%)ぶん手前から始めて 64% で終える。
   （以前は 100% まで動かしていたので、線だけが表示領域より先行していた） */
@keyframes fp-print-head {
  from { top: -36%; }
  to   { top: 64%; }
}


@media (prefers-reduced-motion: reduce) {
  .fp-printer-head { animation: none; }
}

/* 現像中はカバーの文言を消す（走査の邪魔になるため） */
.fp-cover.is-printing .fp-cover-label,
.fp-cover.is-printing .fp-cover-sub {
  opacity: 0;
  transition: opacity 180ms ease;
}

/* 動きを控える設定では走査を出さず、すぐに表示する */
@media (prefers-reduced-motion: reduce) {
  .fp-cover.is-printing { animation-duration: 1ms; }
  .fp-reveal.is-printing { animation-duration: 1ms; }
  .fp-printer { display: none; }
}

/* 未現像カードに重ねるカバー */
.fp-cover {
  position: absolute;
  inset: 0;
  z-index: 25;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-radius: inherit;
  cursor: pointer;
  color: #fff;
  font-family: "M PLUS 2", sans-serif;
  text-align: center;
  /* 下のネガが透けるよう半透明にする（不透明だと像が完全に隠れてしまう） */
  background:
    repeating-linear-gradient(135deg, rgba(255,255,255,0.05) 0 10px, rgba(255,255,255,0) 10px 20px),
    linear-gradient(160deg, rgba(27, 28, 70, 0.40) 0%, rgba(14, 15, 52, 0.48) 100%);
  transition: opacity 700ms ease;
}

/* ポラロイド枠では印画紙の余白を残し、写真面だけを覆う */
.capturedlist.fp-polaroid .fp-cover {
  inset: 12px 12px 48px;
  border-radius: 0;
}

.fp-cover .fp-cover-label {
  display: inline-block;
  padding: 6px 18px;
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.06em;
  /* 背景が白のサイトでは、動的配色の文字色(黒系)を継いで読めなくなる。
     覆いの上は常に暗い写真なので、白で固定する（塗りごと固定。
     JS側でもインラインの !important を入れており、二重の保険）。 */
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
}

.fp-cover .fp-cover-sub {
  font-size: 10px;
  letter-spacing: 0.14em;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  opacity: 0.6;
}

/* 現像枠を使い切ったコマ。押しても開かないので、押せる見た目をやめる。
   pointer-events は切らない ―― 切るとカードの拡大表示へクリックが
   通り抜けて、未現像の中身が見えてしまう。タップの無効化は
   prototype-otanoshimi.js 側（.fp-cover-locked を見て伝播を止める）が行う。 */
.fp-cover.fp-cover-locked {
  cursor: default;
}
.fp-cover.fp-cover-locked .fp-cover-label {
  border-color: rgba(255, 255, 255, 0.28);
  opacity: 0.72;
  font-weight: 600;
}

/* ガチャの「商品にする1枚」を選ぶチェックと画面下の受け取りバー
   （.fp-pick-* / .fp-pickbar）は、導入した当日に廃止した
   （利用者の判断・2026-08-13「複雑になるため」）。
   選定は当選ダイアログの「◯◯を購入する」1本。 */

/* 現像中のインジケータ */
.fp-developing-note {
  position: absolute;
  left: 50%;
  bottom: 10px;
  transform: translateX(-50%);
  z-index: 26;
  padding: 3px 12px;
  border-radius: 999px;
  background: rgba(0, 0, 0, 0.6);
  color: #fff;
  font-size: 11px;
  letter-spacing: 0.06em;
  pointer-events: none;
  animation: fp-pulse 1.4s ease-in-out infinite;
}

@keyframes fp-pulse {
  0%, 100% { opacity: 0.45; }
  50%      { opacity: 1; }
}

/* ポラロイド枠では、印画紙の白帯にあるキャプションと重ならないよう写真面の中に置く */
.capturedlist.fp-polaroid .fp-developing-note {
  bottom: 58px;
}

/* ---------------- お楽しみ動画フォトの見え方 ---------------- */

/* お楽しみ写真（当たり）のカード枠。
   .fp-special / .fp-special-item は現像したあとにしか付かないので、
   現像前の一覧では当たりが分からないまま（伏せたまま）になる。
   ※ ここは以前セレクタが壊れていて（閉じ忘れで後続と繋がっていた）
      どのカードにも当たっていなかった。 */
.capturedlist.fp-special,
.captured-item.fp-special-item .capturedlist {
  outline: 3px solid #e8b44a;
  outline-offset: -3px;
  box-shadow: 0 0 16px rgba(232, 180, 74, .55);
}

/* ---------------- 濃い背景では同梱の線画素材を白抜きにする ---------------- */

/* step1_bk.png / step3_frame.png は黒の線画なので、濃い背景では沈んで見えない。
   反転して白線にする。対象は同梱プリセットだけで、
   管理画面からアップロードした写真（.is-preset が付かない）は触らない。 */
body.hs-fp.hs-dark-bg .lp-step-img.is-preset,
body.hs-fp.hs-dark-bg .lp-step3-frame-img {
  filter: invert(1);
}


/* ---------------- LP: ステップの写真を小さめに ---------------- */

/* 既定サイズだと写真が主張しすぎるので、少し小さくして周囲に余白を取る。
   本番サイトのLPは変えないよう、プロトタイプ稼働中のサイトに限定する。 */
body.hs-fp .lp-steps .lp-step-img {
  max-width: 66% !important;
  padding: 14px 0 6px;
}

/* スマホは1列が狭く、そこからさらに66%にすると絵が潰れる。列幅なりに出す。 */
@media (max-width: 768px) {
  body.hs-fp .lp-steps .lp-step-img {
    max-width: 100% !important;
    padding: 10px 0 4px;
  }
}

body.hs-fp .lp-steps .lp-step2-stack {
  max-width: 84px !important;
  margin-top: 14px !important;
  margin-bottom: 6px !important;
}

/* ステップの見出しの改行位置をPCでもスマホと同じにする。
   lp-styles.php は .lp-sp-br をスマホ限定にしているが、
   PCで自然に折り返すと語の途中で切れて読みにくいため。 */
body.hs-fp .lp-steps .lp-sp-br {
  display: block;
}

/* PCは列幅に余裕があるので、写真を小さくしすぎない。
   列の左右 padding が 30px あり、それが実質の上限になっていたので合わせて詰める。 */
@media (min-width: 769px) {
  body.hs-fp .lp-steps .lp-step {
    padding-left: 14px;
    padding-right: 14px;
  }

  body.hs-fp .lp-steps .lp-step-img {
    max-width: 100% !important;
  }

  /* 写真2枚重ねは面積が大きく見えるので、ステップ1の線画より控えめにする。 */
  body.hs-fp .lp-steps .lp-step2-stack {
    max-width: 125px !important;
  }
}

/* ---------------- PC: LPがヘッダーに食い込むのを防ぐ ---------------- */

/* lp-styles.php はPCで .lp-wrapper に margin-top:-90px を当てている。
   これは「ロゴ画像が大きいと本文が下がりすぎる」ための調整なので、
   ロゴ画像が未設定のサイトでは詰めすぎてヘッダーと重なる。
   本番のレイアウトを変えないよう、プロトタイプ稼働中のサイトに限って打ち消す。 */
@media (min-width: 769px) {
  body.hs-fp:not(.hs-has-logo-image) .lp-wrapper {
    margin-top: 0;
  }
}

/* ---------------- デジタル画像提供のみ: グッズ導線を隠す ---------------- */

/* 実物グッズを提供しないモードなので、スペシャルグッズの購入ボタンは出さない。
   （選択ダイアログ内のグッズ項目は JS 側で非表示にしている） */
body.hs-fp-digital #fixedfooter {
  display: none !important;
}

/* ---------------- 撮影一覧: 隠す既存UI ---------------- */

/* シャッターを有料で買って撮る体系（お楽しみ動画フォト）では、
   撮影データのリセットと写真の削除を出さない。
   買ったぶんを消せてしまうと、回数制限も現像枠も意味を失うため。

   条件を body.hs-fp に付けているのは、**シャッターが有料のときだけ**の
   話だから。このCSSは「通常モードに演出だけ持ち込んだサイト」でも
   読み込まれる（hs_fp_presentation_only）。そちらはシャッターが無料なので、
   リセットも削除もあってよい。
   以前は条件なしで隠していたため、無料のサイトでも消せなくなっていた。 */
body.hs-fp #managePhotos,
body.hs-fp p.reset-notice {
  display: none !important;
}

/* 写真の複数選択（購入用チェックボックス）も使わない。
   1枚ずつ現像して手に入れる体験なので、まとめ選択の概念が合わない。
   買ったシャッターで撮った写真を消させない、という意味でもある。

   ラベルは **クラス** で指す。以前は label[name="CapturedImagesFrame"] と
   属性で指していたが、label の name はHTMLとして何の働きも持たない
   「この CSS のためだけに置かれた属性」だった。そうと知らずに消されると
   チェックが表に出てしまう（実際に一度そうなった）。
   意味のある目印（class="checkbox_label"）で指しておけば、この形で壊れない。 */
/* **通常モードへの持ち込み（body.hs-fp-develop）はここに入れない**
   （利用者の指示・2026-08-22「通常モードで、写真の左上にチェックボックスを
   用意して、選択した写真を削除できるように」）。
   隠す理由は「買ったシャッターで撮った写真を消させない」ことなので、
   シャッターが無料の通常モードには当てはまらない。すぐ上の #managePhotos
   （リセット／削除のリンク）が既に body.hs-fp だけを条件にしており、
   こちらだけ hs-fp-develop を含んでいたため、**リンクは出ているのに
   選ぶ手段が無い**という食い違いになっていた。 */
body.hs-fp .captured-item .checkbox.capturedImages,
body.hs-fp .captured-item label.checkbox_label,
body.hs-fp .captured-item .checkmark,
body.hs-fp #pageDetailsFramed .checkboxDetail,
body.hs-fp #pageDetailsFramed label[for="CapturedImagesFrameDetail"],
/* 「選択した写真を削除」のフッターも出さない。
   上のチェックが隠れていれば選べないので普段は出ないが、
   隠し忘れが1つでもあると削除の導線だけが生き残ってしまう
   （実際に label の name を落としたときにそうなった）。
   買ったシャッターで撮った写真を消させない、が守りたいことなので、
   選ばせない側と、出さない側の両方で塞いでおく。 */
body.hs-fp #footer_delete {
  display: none !important;
}

/* **タブは出す**（利用者の指示・2026-08-22）。
   かつては「デジタル画像提供のみのときは切り替え先が無い」として
   タブ行を丸ごと隠していた。いまは「購入した写真」タブが
   **ダウンロードして受け取った写真**を並べるので、行き先がある。
   隠す規則と対だった body.hs-fp-digital #fp-develop-slot の
   margin-top:20px も一緒に外した（下の帯エリアの説明を参照）。 */

/* 開始前の「写真集／アクスタは撮影された画像から選ばれます。」。
   デジタル画像提供のみのモードでは売る現物が無いので出さない。 */
body.hs-fp-digital #taptostart > p {
  display: none !important;
}

/* スマホでは手順を画面いっぱいに使う。
   lp-styles.php が .lp-steps と .lp-step の両方に左右の余白を入れていて、
   3列に分けると1列あたりが狭くなり、本文がひどく折り返すため。 */
@media (max-width: 768px) {
  /* 親の .wrapeer が width:90% なので、100% にしても画面端まで届かない。
     手順の帯だけ左右に食い出させて画面いっぱいに使う。 */
  body.hs-fp .lp-steps {
    /* 端に文字が触れないぶんだけ内側に余白を取る。
       content-box のままだと 100vw + 10px になって横スクロールが出る。 */
    box-sizing: border-box;
    padding-left: 5px;
    padding-right: 5px;
    width: 100vw;
    max-width: none;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
  }

  /* 各列にも余白を入れて、文字が区切りの点線に触れないようにする。
     lp-styles.php は最後の列だけ padding-right:0 にしているので、そこも揃える。 */
  body.hs-fp .lp-step,
  body.hs-fp .lp-step:last-child {
    padding-left: 5px;
    padding-right: 5px;
  }
}

/* お楽しみフォトの総数。本文より少しだけ目立たせる。 */
body.hs-fp .lp-step-count {
  display: inline-block;
  margin-top: 4px;
  font-weight: 700;
}

/* LPのステップから記号のアイコンを外し、番号だけにする。
   番号と絵の二重表示になっていて、意味の足しになっていないため。 */
body.hs-fp .lp-step-icon .material-symbols-outlined {
  display: none !important;
}

/* アイコンが消えたぶん、番号だけが左に寄らないよう中央のままにする
   （gap は要素が1つになれば効かないので、余白の調整だけ行う）。 */
body.hs-fp .lp-step-icon {
  gap: 0;
}

/* デジタル画像提供のみのときは、ヘッダーのスペシャルグッズ（買い物袋）も出さない。
   購入できるものが無いので、押しても行き止まりになる。
   リンク先は固定ページ Photobook（/captured-photobook/）。 */
body.hs-fp-digital #header li:has(> a[href*="photobook"]) {
  display: none !important;
}

/* :has() が使えない環境向けの保険。リンク自体を消して枠だけ残さないようにする。 */
body.hs-fp-digital #header a[href*="photobook"] {
  display: none !important;
}

/* お問い合わせの一文。_photo-header-styles.php が座布団（背景と余白）を
   付けているが、タブが無くなると見出しの直下に浮いて見えるため地の色に戻す。
   向こうが !important なので、こちらも同じ強さで上書きする。 */
body.hs-fp .notice {
  background: transparent !important;
  padding: 0 !important;
  border-radius: 0 !important;
}

/* 見出しとお問い合わせを近づける */
body.hs-fp h3.head {
  margin-bottom: 10px !important;
}

body.hs-fp .head {
  margin-bottom: 10px !important;
}

/* お楽しみ動画フォト（デジタル画像提供のみ）では、拡大表示のアクションを
   ダウンロードだけにする（グッズ購入と商品サンプルは出さない）。
   グッズ提供モード(photo_goods)や通常モードでは出る。 */
body.hs-fp-digital #purchase_goodsController a[onclick*="openGoodsSelection"],
body.hs-fp-digital #purchase_goodsController a[onclick*="openGoodsSample"] {
  display: none !important;
}

/* 登録・ログインのボタン。
   テーマの動的配色が a 要素すべてに color:#fff !important を当てるため、
   副ボタン（<a>）が薄いグレー地に白文字になって読めなくなる。
   濃い背景でも見える配色に置き換える（モーダルのボタンと同じ考え方）。 */
/* 主ボタンはオレンジの塗り。影は付けない。
   既存CTAの #ff8400 は白文字とのコントラストが2.46しかないので、
   同系で少し深い #ea580c にする（白文字3.56・背景の紺4.09・入力欄の白3.56）。
   文字は19pxの太字なので、大きい文字の基準(3.0)を満たす。 */
body.hs-fp .hs-auth-button {
  background: #ea580c !important;
  color: #fff !important;
  border: 0 !important;
  box-shadow: none !important;
}

body.hs-fp .hs-auth-button:hover {
  background: #d24d0a !important;
}

body.hs-fp .hs-auth-button--secondary {
  background: transparent !important;
  color: #fff !important;
  border: 1px solid rgba(255, 255, 255, 0.6) !important;
  box-shadow: none !important;
}

body.hs-fp .hs-auth-button--secondary:hover {
  background: rgba(255, 255, 255, 0.12) !important;
}

/* **明るい背景のサイトでは塗りの白にする**（利用者の指示・2026-08-18）。
   透明＋白い細枠は、地色が明るいと枠が消えてボタンに見えない。 */
body.hs-fp:not(.hs-dark-bg) .hs-auth-button--secondary {
  background: #fff !important;
  color: #1a1a1a !important;
  -webkit-text-fill-color: #1a1a1a !important;
  border: 1px solid rgba(0, 0, 0, .16) !important;
}
body.hs-fp:not(.hs-dark-bg) .hs-auth-button--secondary:hover {
  background: #f1f1f1 !important;
}

/* 2つのボタンは対になるものなので、間隔を詰めて高さを揃える。
   <button> と <a> で行の高さの扱いが違い、そのままだと高さがずれる。 */
body.hs-fp .hs-auth-button,
body.hs-fp .hs-auth-button--secondary {
  box-sizing: border-box !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 58px !important;
  padding: 0 17px !important;
  line-height: 1.2 !important;
  /* 入力欄（角丸8px）と役割が違うことが形でも分かるよう、丸みを強くする */
  border-radius: 999px !important;
}

/* 入力欄の並びと送信ボタンの間は、区切りとして少し広くとる。
   逆に「登録」と「ログイン」は対になるものなので、間隔を詰めて一組に見せる。
   フォームは flex の gap:20px で並ぶので、その上に足し引きする。 */
body.hs-fp .hs-auth-button {
  margin-top: 14px !important;   /* 20 + 14 = 34px */
}

body.hs-fp .hs-auth-button--secondary {
  margin-top: -10px !important;  /* 20 - 10 = 10px */
}

/* PCでは見出しの語（ニックネーム等）が入力欄に対して大きいので、少し落とす。
   スマホは指で触る幅が狭く、今の大きさのほうが読みやすいので触らない。 */
@media (min-width: 769px) {
  body.hs-fp .hs-auth-label {
    font-size: 15px !important;
  }
}

/* 登録画面の注意書き。
   入れ物が 500px しかないため一文が収まらず「ご確認く / ださい。」と
   語の途中で折り返してしまう。PCでは一文が1行に収まる幅まで広げる。 */
@media (min-width: 769px) {
  body.hs-fp .registration_notice {
    max-width: 620px !important;
  }
}

/* ダウンロードのご注意（白背景のボックス）。
   スマホでは画面いっぱいに近く、角も大きいので、少し内側に収めて角を小さくする。
   インラインの style で書かれているため、!important で上書きする。 */
@media (max-width: 768px) {
  body.hs-fp #notice_download {
    /* padding が幅に上乗せされると 83% に収まらないので border-box にする */
    box-sizing: border-box !important;
    width: 83% !important;
    max-width: 83% !important;
    border-radius: 6px !important;
  }

  /* 箇条書きはスマホでは少し小さく */
  body.hs-fp #notice_download ul {
    font-size: 12px !important;
  }
}

/* 1枚も無いときの案内。
   「購入した商品がありません」と同じ位置・同じ見た目にそろえる
   （上30px・font-size 15px・薄くしない。書体はページに合わせて継承）。 */
/* 「〜がありません」の空表示。**撮影タブと選定タブで同じ体裁にする**
   （利用者の指示・2026-08-14）。body クラスに関係なく効かせる ――
   選定タブは通常モードでも出るので、hs-fp が付いていない状態でも
   撮影タブと同じ見え方でなければならない。 */
#fp-empty,
body.hs-fp #fp-empty,
body.hs-fp-develop #fp-empty,
/* タブSPA（spa-tabs.js）が /purchased/ から取り寄せた空状態。
   id を #fp-empty のままにすると、撮影一覧側の showEmptyNoticeIfNeeded が
   「写真があるのに空の案内がいる」と判断して消してしまうため、
   取り寄せ側はクラス名に付け替える。見た目の定義はこの1か所のまま。 */
#hs-spa-purchased .hs-spa-empty {
  /* 上下の余白は**同じ値**にする。タブとの間・下の規約リンクとの間が
     タブごとに違うと、同じ画面の別の状態に見えない。 */
  margin: 56px auto;
  padding: 0 20px;
  max-width: 600px;
  font-size: 15px;
  line-height: 1.9;
  text-align: center;
  opacity: 1;
}

/* =========================================================
   撮影一覧の残数パネル v2（利用者の指示・2026-08-25）
   設定 fp_captured_band = 'v2' のときだけ当たる。
   従来の帯（#fp-develop-bar の素の姿）には一切かからないよう、
   すべて .fp-develop-bar-v2 の下に置く。
   ========================================================= */
#fp-develop-bar.fp-develop-bar-v2 {
  display: block;
  width: min(680px, 92%);
  margin: 0 auto;
  padding: 14px 18px 12px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 16px;
  background: rgba(0, 0, 0, 0.28);
  text-align: center;
}
.fp-develop-bar-v2 .fp-b2-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
}
.fp-develop-bar-v2 .fp-b2-cell {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-width: 0;
}
/* 2つの間は縦罫で切る。余白だけだと「撮影できる回数 あと4回 ダウンロード
   可能枚数 あと2枚」が一続きに読める。 */
.fp-develop-bar-v2 .fp-b2-cell + .fp-b2-cell {
  border-left: 1px solid rgba(255, 255, 255, 0.16);
}
.fp-develop-bar-v2 .fp-b2-ic { flex: none; display: inline-flex; opacity: .85; }
.fp-develop-bar-v2 .fp-b2-col { text-align: left; min-width: 0; }
.fp-develop-bar-v2 .fp-b2-label {
  display: block;
  font-size: 12px;
  opacity: .8;
  line-height: 1.6;
  white-space: nowrap;
}
/* 数字は行の余りを殺してから、上下の余白をそろえる（利用者の標準ルール）。 */
.fp-develop-bar-v2 .fp-b2-num {
  display: block;
  font-size: 13px;
  line-height: 1;
  padding-top: 4px;
  white-space: nowrap;
}
.fp-develop-bar-v2 .fp-b2-num b {
  font-size: 22px;
  font-weight: 700;
  color: #f5c451;
  padding: 0 2px;
  line-height: 1;
}
.fp-develop-bar-v2 .fp-b2-unit { font-size: 12px; opacity: .8; margin-left: 2px; }
.fp-develop-bar-v2 .fp-b2-note {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  font-size: 11.5px;
  line-height: 1.8;
  opacity: .85;
  /* 1文字だけ次の行に落ちる（「…ありませ／ん。」）のを避ける。 */
  text-wrap: balance;
}
/* アイコンは数字と釣り合う大きさにする（利用者の指示・2026-08-25）。
   SVG の width/height 属性より CSS が勝つので、ここだけで決められる。 */
.fp-develop-bar-v2 .fp-b2-ic svg { width: 27px; height: 27px; }
.fp-develop-bar-v2 .fp-b2-note b { color: #f5c451; }

@media (max-width: 430px) {
  #fp-develop-bar.fp-develop-bar-v2 { padding: 12px 12px 10px; }
  .fp-develop-bar-v2 .fp-b2-cell { gap: 7px; }
  .fp-develop-bar-v2 .fp-b2-ic svg { width: 23px; height: 23px; }
  .fp-develop-bar-v2 .fp-b2-label { font-size: 11px; }
  .fp-develop-bar-v2 .fp-b2-num b { font-size: 19px; }
  .fp-develop-bar-v2 .fp-b2-note { font-size: 11px; }
}

/* ---------------- 撮影一覧: 残り現像枚数 ---------------- */

#fp-develop-bar,
#fp-shutter-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  /* **字間はギフト帯（🎁 商品を1つ選定いただけます）を標準形にそろえる**
     （利用者の指示・2026-08-15）。あちらは1行目を gap:6px の一続きの文と
     して組んでいる。ここだけ 14px 空けていたため、「シャッター　のこり
     3 回」と語のあいだが割れて、別の作りの帯に見えていた。
     行間（6px）はそのまま ―― 2行組の見え方も標準形と同じになる。 */
  gap: 6px;
  width: min(92%, 560px);
  /* 上の余白。18px だと、すぐ上の「トラブルなどのお問い合わせはこちら」と
     枠の罫線が接して見えた（利用者の指摘・2026-08-14）。 */
  /* 帯の上を広く、下は詰める（利用者の指示・2026-08-14。2枚の見比べ）。
     上が詰まっていると問い合わせリンクと帯がひと塊に見え、
     下が空きすぎると帯と一覧が別の話に見える。 */
  /* 上の余白も !important で確定させる（利用者の指摘・2026-08-14）。
     padding と同じく、サイト全体の動的CSSに負けて効いておらず、
     問い合わせリンクと帯の罫線がくっついて見えていた。 */
  /* 上の余白は小さく。置き場（#fp-develop-slot）が先に高さを確保しており、
     帯はその中で**下寄せ**なので、余ったぶんが帯の上に空きとして出る。
     ここで大きく取ると二重に空いて、不自然な余白になる
     （利用者の指摘・2026-08-14）。 */
  margin: 14px auto 14px !important;
  /* 内側の余白。10px → 18px → 24px と広げても「文字と枠がくっつく」の指摘が
     続いた（2026-08-13, 2026-08-14 に2回）。**値が足りないのではなく、
     サイト全体の動的CSS（general_style_css）に負けて効いていなかった。**
     CLAUDE.md の定石どおり ID セレクタ＋!important で確定させる。
     上下もひと回り広げて、2行になっても罫線に触れないようにする。 */
  /* 上下は詰めぎみ、左右はゆったり（利用者の指示・2026-08-14。
     スマホの見え方を基準にそろえる）。上下を広く取ると、帯だけが
     間延びして一覧から浮いて見えた。 */
  /* **上下の余白は同値**（利用者の指示・2026-08-14「見た目上の上下の
     余白が均等になるように。このルールはずっと徹底」）。
     非対称に見える原因は padding ではなく、大きい数字の行ボックスの余り
     （.fp-dev-count b の line-height で殺してある）。ここは対称に保つ。 */
  padding: 14px 26px !important;
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 255, 255, 0.06);
  font-family: "M PLUS 2", sans-serif;
  color: #fff;
  font-size: 13px;
}

/* 「次に何をすればいいか」の一文。
   数字より控えめにし、**行を分けて**置く（同じ行に続けると
   数字が埋もれて、どれが残数なのか分からなくなる）。 */
.fp-dev-hint {
  flex-basis: 100%;
  /* **2行目の体裁はギフト帯の添え書き（.hs-gift-bar-sub）を標準形にする**
     （利用者の指示・2026-08-15）。あちらは 11px / 行間1.5 / 少し落とした白で、
     行間は入れ物の gap(6px) が持つ。ここも同じにして、上マージンは持たない
     ―― 持つと gap と足し合わさり、2行の塊だけ縦に伸びる。 */
  margin-top: 0;
  font-size: 11px;
  line-height: 1.5;
  text-align: center;
  opacity: 1;
  /* 金色の帯の中でも、案内は白のまま（金だと数字と競合して読みにくい）。
     濃さは opacity ではなく色そのもので落とす（標準形と同じ指定）。 */
  color: rgba(255, 255, 255, .78) !important;
}
@media (min-width: 600px) {
  .fp-dev-hint { font-size: 11px; }
}

/* ラベルの見せ方は置き場所で変えない。
   帯の中でも単独の枠でも、同じ薄さで並ぶようにする。 */
.fp-dev-label { opacity: 0.75; }

/* 現像枠の帯では、「ダウンロード可能数」と「のこり N 枚」を**同じ行・同じ見た目**にする。
   これまではラベルだけ薄く（opacity .75）、かつ帯が align-items:center だったため、
   大きい数字の高さに引っ張られてラベルの位置が上下にずれ、別の字面に見えていた。
   文字の基準線でそろえ、濃さも合わせる（フォントは帯から継いだ M PLUS 2 で共通）。 */
#fp-develop-bar { align-items: baseline; }
#fp-develop-bar .fp-dev-label {
  opacity: 1;
  font-size: 13px;
  font-weight: 400;
}
/* 見出しの左のアイコン（いまはシャッターのカメラだけ・2026-08-21）。
   **絵文字**なので、ギフト帯の 🎁（.hs-gift-bar-icon）と同じ扱いにそろえる
   ―― 大きさは 15px、色は端末の絵文字そのまま（text-fill-color を初期値に
   戻さないと、帯の白文字指定で塗りつぶされて出ない）。
   帯は align-items:baseline なので、**中央そろえ**にして行の高さも 1 に
   殺してから置く（矩形の中の文字は上下の余白を均等に、の標準ルール）。
   間隔は帯の gap(6px) が持つので、自前のマージンは持たせない。 */
#fp-develop-bar .fp-dev-icon {
  align-self: center;
  font-size: 15px;
  line-height: 1;
  -webkit-text-fill-color: initial;
}
/* 案内文は次の行に置くので、基準線そろえの対象から外す */
#fp-develop-bar .fp-dev-hint { align-self: stretch; }

/* 現像を使い切ったあとの見出し（「商品を選んでください」）。
   数を出す場面ではないので、ラベル＋数字の代わりにこれ1つが行を占める。
   残数を読む場面から、次の操作へ誘う場面に変わったことが分かるよう、
   数字と同じくらいの強さで出す。 */
#fp-develop-bar .fp-dev-lead {
  flex-basis: 100%;
  text-align: center;
  font-size: 16px;
  font-weight: 700;
  opacity: 1;
  color: #f2c14e !important;
  -webkit-text-fill-color: #f2c14e;
}

/* 帯を入れる枠。**先に高さを取っておく**ための場所で、中身はJSが差し込む。
   枠が無いと、差し込んだ瞬間に下の写真が押し下げられて画面が跳ねる。

   高さは「案内文がある2行の状態」に合わせる。残りがあるうちは案内文を
   出さないので帯自体は1行だが、使い切って案内文が出たときに高さが変わると、
   そこでもう一度跳ねる。最初から2行ぶん取っておけば、どちらの状態でも動かない。
   帯は枠の中で下寄せにして、余った空きが写真との間の余白として効くようにする。

   高さを取るかどうかは **PHP が付ける .is-reserved** で決める
   （photos-captured.php の $hs_dev_reserve）。以前は `:empty` で畳んでいたが、
   枠は初回描画では必ず空なので**常に高さ0**になり、JSが差し込んだ瞬間に
   写真一覧が一段ぶんガタッと下がっていた（利用者の報告・2026-08-14）。
   「まだ入っていない」と「入る予定が無い」を CSS では区別できない。 */
#fp-develop-slot {
  display: flex;
  flex-direction: column;
  /* **中央寄せ。** 以前は下寄せ（flex-end）で、確保した高さの余りが
     ぜんぶ帯の**上**に溜まり、外側の余白が上だけ広く見えた
     （利用者の指摘・2026-08-14「上下のmarginが不均一」）。
     中央なら余りが上下に半分ずつ割れ、帯の実際の高さが確保と多少
     ずれても見た目の余白は均等のまま。 */
  justify-content: center;
  min-height: 0;
}
/* 帯が入る画面だけ、描画の時点で場所を取っておく */
/* 確保する高さは、実際の帯の高さに合わせる。大きすぎると、その差が
   そのまま帯の上の空きになる（帯は下寄せ）。2行の案内文が入った状態で
   だいたい 76px。 */
#fp-develop-slot.is-reserved { min-height: 76px; }

/* ---- 帯エリアの縦の間隔（利用者の指示・2026-08-15「常に均一に」） ----
   タブ→帯／帯→赤枠／赤枠→一覧 の3つを同じ 14px にそろえる。
   決め方は**各要素が「下」だけを持ち、「上」は誰も持たない**。
   隣り合う margin が足し合わさらないので、どれが出ていても間隔は一定。
   （上下の両方を持たせると 14+14=28px になり、置き場の確保ぶんも乗って
   離れていた。ページ側の p.button-links と #capturedlists も同じ規則で
   photos-captured.php / captured.css にそろえてある。） */
/* **間隔は置き場（#fp-develop-slot）が gap で持つ。**
   帯と赤枠はテンプレート上 230行ほど離れていて、間にセッション選択や
   管理ブロック（FPでは display:none）が挟まる。隣り合う margin で
   詰めようとすると、その並びに左右されて中央だけ広くなった
   （利用者の指摘・2026-08-15「真ん中あいてないですか」）。
   赤枠は表示するとき JS が置き場の中へ入れる（updateShutterLeftNote）ので、
   何が間にあっても間隔は gap の 14px で確定する。 */
#fp-develop-slot {
  gap: 14px;
  /* **上の余白は置き場が持つ**（利用者の指摘・2026-08-16
     「赤の枠は margin のところです。padding ではありません」）。

     すぐ上にあるのは「トラブルなどのお問い合わせはこちら →」で、
     0 のままだと帯の罫線と接して見えていた（2026-08-14 にも同じ指摘）。
     箱の内側（padding）をいくら広げてもこの隙間は空かない ――
     空けるべきは箱の**外**。

     「上は誰も持たず、各要素が下だけを持つ」という帯エリアの規則の
     例外はここだけにする。置き場より上はこのページの見出し・リンクで、
     帯エリアの規則の外側にあるため。

     **2026-08-21: 上の 20px はやめた。** この例外を入れた当時、置き場の
     すぐ上は「トラブルなどのお問い合わせはこちら」だったが、いまは
     あいだにタブ（p.button-links）が入り、そのタブが下に 14px を持って
     いる。20px を足すと帯エリアの規則（14px でそろえる）から外れ、
     タブと帯だけが離れて見えていた。上は誰も持たない、に戻す。

     ただし**タブを出さないモードでは話が別**（下の規則）。 */
  margin: 0 0 14px !important;
}
/* **PCでは上に 15px・下は 0**（利用者の指示・2026-08-26
   「margin: 15px 0 0px; PCのとき」）。

   帯エリアの規則（上は誰も持たず、各要素が下だけを持つ）の**例外**。
   PCではタブと帯の間が詰まって見えるので、ここだけ上に持たせる。
   スマホは規則どおりのまま（上の宣言が効く）。
   区切りは 769px ―― このテーマのPC判定はここでそろえてある。 */
@media (min-width: 769px) {
  #fp-develop-slot { margin: 15px 0 0 !important; }
}

/* **2026-08-22: フォトモードの上余白（20px）はやめた。**
   これはタブを丸ごと隠していたときの手当てで、置き場のすぐ上が
   「トラブルなどのお問い合わせはこちら」に戻って余白を誰も持たなく
   なるのを埋めるものだった（利用者の指摘・2026-08-21「フォトモードの
   とき余白がおかしい」）。タブを出すようにしたので、上にはタブが居て
   自分の下 14px を持つ ―― ここで 20px を足すと、帯エリアの規則
   （14px でそろえる）から外れてタブと帯だけが離れる。
   タブを隠す規則と対だったので、**同時に**外している。 */
#fp-develop-bar { margin: 0 auto !important; }
/* #fp-shutter-left-note の margin は**この下の自分の宣言**が持つ。
   ここに書くと、後ろにある自分の宣言に負けて効かなかった
   （同じ !important なら後勝ち・2026-08-15 に踏んだ）。 */

/* 枠に入れた帯は、枠側が余白を持つので自前の上下マージンを詰める */
/* 枠に入れた帯は、枠側が余白を持つので自前の上下マージンを詰める。
   **!important が要る**（2026-08-21）―― 帯側の `margin: 14px auto 14px
   !important` は、こちらがIDを2つ並べていても打ち消せない
   （詳細度より !important が強い）。そのため長らく効いておらず、
   タブ→帯のあいだが 14(タブ) + 20(枠) + 14(帯) = 48px と開いていた
   （利用者の指摘「タブと矩形の間に妙な間がある」）。

   下も同じ理由で二重（帯14 + 枠14 = 28px）だったので、あわせて 0 にする。
   帯の下の間隔は枠が持つ（枠の gap 14px と margin-bottom 14px）。 */
#fp-develop-slot > #fp-develop-bar { margin-top: 0 !important; margin-bottom: 0 !important; }

@media (max-width: 768px) {
  /* 文字が折り返して3行になることがあるぶん、少しだけ高く取る */
  #fp-develop-slot.is-reserved { min-height: 88px; }
}

/* 残りシャッターの警告（利用者の指示・2026-08-14）。
   ガチャは商品を選んだ時点でその回が終わり、残ったシャッターは次の購入で
   **置き換えられて消える**。使い切らずに選ぶと、そのぶんは戻らない。

   **枠付き・赤で出す**（利用者の指示）。以前は帯の下に添える控えめな
   一行にしていたが、これは「損をしないための注意」なので、
   案内ではなく警告として立たせる。
   シャッターが残っている間は現像可能数の帯を畳んで、**この枠だけ**を出す
   （updateShutterLeftNote）―― 次にすることを1つに絞る。

   赤はサイト全体の動的CSS（general_style_css）の color:#fff !important に
   負けるので、!important と -webkit-text-fill-color の両方で押さえる。 */
/* **組み立ては現像可能数の帯（#fp-develop-bar）と同じ**にする（利用者の指示・
   2026-08-15「一貫性をもたせたデザインに」）。中身も帯と同じクラス
   （.fp-dev-label / .fp-dev-count / .fp-dev-hint）で組み、ここでは
   **配置を帯からそのまま写し、色だけ赤系に上書き**する。
   以前の flex(縦積み)は、文中の <b>N</b> が独立した項目になって
   「シャッターがあと / 6 / 回…」と数字だけ別の行に割れていた。 */
#fp-shutter-left-note {
  box-sizing: border-box;
  display: flex;
  align-items: baseline;
  justify-content: center;
  flex-wrap: wrap;
  /* 字間はギフト帯にそろえる（上の #fp-develop-bar と同じ理由・2026-08-15） */
  gap: 6px;
  width: min(92%, 560px);
  /* 上下は持たない。間隔は置き場（#fp-develop-slot）の gap と
     その下マージンが受け持つ ―― ここで 14px を持つと足し合わさって
     28px になる（利用者の指摘・2026-08-15「満たされてますか？」）。 */
  margin: 0 auto !important;
  padding: 14px 26px !important;
  border: 1px solid rgba(255, 120, 120, .55);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(190, 40, 40, .16);
  font-family: "M PLUS 2", sans-serif;
  font-size: 13px !important;
  text-align: center;
  color: #ff9b9b !important;
  -webkit-text-fill-color: #ff9b9b;
}
/* 1行目「シャッター のこり N 回」は**白**、数字は**黄色**
   （利用者の指示・2026-08-15）。現像可能数の帯とまったく同じ配色にして、
   2つの矩形で数の読み方をそろえる。枠が注意であることは罫線・地色と
   2行目の文（赤）が伝えるので、数まで赤くしない。 */
#fp-shutter-left-note .fp-dev-label,
#fp-shutter-left-note .fp-dev-count {
  opacity: 1;
  font-size: 13px;
  font-weight: 400;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
}
/* 数字は帯と同じ 22px/700/line-height:1（.fp-dev-count b）。色も帯と同じ黄色 */
#fp-shutter-left-note .fp-dev-count b {
  color: #ffe14d !important;
  -webkit-text-fill-color: #ffe14d;
}
/* 2行目も**白**にして、現像可能数の帯とまったく同じ体裁にする
   （利用者の指示・2026-08-15）。文字サイズ・行間・薄さ（opacity .7）は
   共通の .fp-dev-hint がすでに持っているので、ここでは色だけを合わせる。
   -webkit-text-fill-color を明示するのは、枠の地色指定（赤系）を
   継いでしまうため ―― これが無いと iOS/Safari では赤のまま出る。 */
#fp-shutter-left-note .fp-dev-hint {
  align-self: stretch;
  /* 濃さも標準形（ギフト帯の添え書き）と同じ。白のベタだと1行目と
     同じ強さになり、どちらが主役か読み取れない。 */
  color: rgba(255, 255, 255, .78) !important;
  -webkit-text-fill-color: rgba(255, 255, 255, .78);
}
/* 帯と並ぶときの上の余白は **JS（updateShutterLeftNote）が決める**。
   隣接セレクタ（+）で詰めていたが、間に script や非表示のギフト帯が
   挟まると外れる ―― どちらの帯を見せるかを知っているのは
   updateShutterLeftNote ひとつなので、そこで marginTop を明示する
   （利用者の指摘・2026-08-15「余白を整えて」）。 */
@media (max-width: 768px) {
  #fp-shutter-left-note { font-size: 12px !important; }
}

/* サムネイルの直上に置くため、下に余白を取って詰まって見えないようにする */
#fp-shutter-bar {
  margin-bottom: 22px;
}

/* スマホでは「シャッター回数／のこりN回／追加する」が折り返して2行になる。
   横幅と文字を詰めて1行に収める。 */
@media (max-width: 768px) {
  #fp-shutter-bar {
    flex-wrap: nowrap;
    gap: 8px;
    width: calc(100% - 20px);
    padding: 9px 12px;
    font-size: 12px;
    white-space: nowrap;
  }

  #fp-shutter-bar .fp-dev-count b {
    font-size: 18px;
  }

  #fp-shutter-bar .fp-dev-more {
    flex: 0 0 auto;
    padding: 6px 12px;
    font-size: 11px;
  }
}

/* 数字も置き場所で変えない。商品ガチャの帯だけ小さいと、
   隣に並べたときに揃わない（実際そう見えていた）。 */
.fp-dev-count b {
  font-size: 22px;
  font-weight: 700;
  color: #ffe14d;
  padding: 0 3px;
  /* **行ボックスの余りを殺す。** 既定の line-height(約1.4)だと 22px の
     数字の行が縦に膨らみ、余りが行の上側に溜まって「上の余白だけ広い」
     ように見える（利用者の指摘・2026-08-14）。padding をいくら対称に
     しても、ここを殺さないと見た目は対称にならない。 */
  line-height: 1;
  display: inline-block;
}
/* 数字の差し替えを「下からせり上がる」形で見せる。
   現像から戻ったときに最初から変わっていると、減ったことに気づけない。
   is-rolling が付いている間だけ2つの数字を重ねて動かし、終わったら素に戻す。 */
.fp-develops-value.is-rolling,
.fp-shots-count b.is-rolling {
  display: inline-block;
  position: relative;
  overflow: hidden;
  vertical-align: bottom;
  /* 高さが要る。行の高さぶんだけ切り取って、その外は見せない。 */
  line-height: 1.15;
}
.fp-develops-value.is-rolling .fp-roll-old,
.fp-develops-value.is-rolling .fp-roll-new,
.fp-shots-count b.is-rolling .fp-roll-old,
.fp-shots-count b.is-rolling .fp-roll-new {
  display: block;
  transition: transform .42s cubic-bezier(.2, .8, .2, 1);
}
/* 古い数字は上へ抜ける */
.fp-develops-value.is-rolling .fp-roll-old,
.fp-shots-count b.is-rolling .fp-roll-old { transform: translateY(-100%); }
/* 新しい数字は下から入る（開始位置は下、終了位置は0） */
.fp-develops-value.is-rolling .fp-roll-new,
.fp-shots-count b.is-rolling .fp-roll-new {
  position: absolute;
  left: 0;
  top: 0;
  transform: translateY(0);
}
.fp-develops-value .fp-roll-new,
.fp-shots-count b .fp-roll-new { transform: translateY(100%); }

@media (prefers-reduced-motion: reduce) {
  .fp-develops-value.is-rolling .fp-roll-old,
  .fp-develops-value.is-rolling .fp-roll-new,
  .fp-shots-count b.is-rolling .fp-roll-old,
  .fp-shots-count b.is-rolling .fp-roll-new { transition: none; }
}

/* 回っている間だけ数字が白くなるのを止める（利用者の指摘・2026-08-16
   「カウンターが回るとき、文字が白になり、終わった後黄色になる」）。

   原因は**包み直し**。rollNumber は数字を <span> 2枚に作り替えるので、
   サイト全体の自由CSS（general_style_css）の `color:#fff !important` が
   その span に当たる。回り終わって素のテキストへ戻すと親の色に戻るため、
   「回っている間だけ白い」という見え方になっていた。

   色は**親から継ぐ**（inherit）。黄色を直に書かないのは、置き場所で色が
   違うため ―― 通常の帯は #ffe14d、商品ガチャの金色帯は #f2c14e。
   直に書くと、どちらかで必ず食い違う。
   ID セレクタ＋!important で取り返すのは CLAUDE.md の定石3。 */
#fp-develop-bar .fp-roll-old,
#fp-develop-bar .fp-roll-new,
#fp-shutter-bar .fp-roll-old,
#fp-shutter-bar .fp-roll-new,
#fp-shutter-left-note .fp-roll-old,
#fp-shutter-left-note .fp-roll-new,
/* ID の外に置かれた帯（ギフト帯など）にも効かせる保険。
   クラス2つ＋!important で、素の `span{color:#fff!important}` には勝つ。 */
.fp-dev-count .fp-roll-old,
.fp-dev-count .fp-roll-new,
.fp-shots-count .fp-roll-old,
.fp-shots-count .fp-roll-new {
  color: inherit !important;
  -webkit-text-fill-color: currentColor !important;
}

#fp-develop-bar .fp-dev-more,
#fp-shutter-bar .fp-dev-more {
  padding: 6px 16px;
  border: 0;
  border-radius: 999px;
  background: linear-gradient(100deg, #ff0055, #ff8400);
  color: #fff;
  font-family: inherit;
  font-size: 12px;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
}

/* ---------------- 購入モーダル ---------------- */

/* ---------------- お試し体験モード ---------------- */

/* 案内だけのモーダル。お試しのモーダルと同じ見た目を使う。 */
/* 閉じるボタンの位置（自動撮影の確認だけ×を出す） */
#fp-autoshot-modal .fp-modal-close {
  position: absolute;
  top: 10px;
  right: 12px;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: #fff;
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}

#fp-autoshot-modal .fp-modal-panel { position: relative; }

#fp-autoshot-modal,
#fp-notice-modal,
#fp-trial-modal {
  position: fixed;
  inset: 0;
  z-index: 9960;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(6, 6, 24, 0.72);
  backdrop-filter: blur(8px);
}

/* 案内は拡大表示(#zoom は 99999)の上に出す必要がある。
   拡大中に押されることがあり、後ろに回ると何も起きないように見えてしまう。

   **確認ダイアログ（撮影をやめますか／お試し）も同じ高さに上げる。**
   9960 のままだと、画面下部に追従するシャッターの帯（2147482800）に
   前を取られ、ボタンが帯の後ろに隠れていた
   （利用者の指摘・2026-08-18「ダイアログが最前面にくるように」）。
   トースト(2147483400)より下は保つ。 */
#fp-notice-modal,
#fp-autoshot-modal,
#fp-trial-modal {
  z-index: 2147483000;
}

/* 「商品にする1枚を選ぶ」専用のダイアログ(#fp-pick-modal)は廃止した。
   商品は現像した瞬間にコマごとで決まるようになり、複数枚現像したプランでは
   「どの写真のグッズをみてみるボタンを押すか」自体が選ぶことになったため、
   全商品／全現像済み写真から選ばせる別画面が不要になった（仕様変更）。 */

/* --- 商品を決める前の確認（現像枠が残っているとき） -------------------
   当選ダイアログ(2147482800)の**上**に出す。当選ダイアログの
   「商品を受け取る」から開くので、後ろに回ると何も起きないように見える。
   案内(2147483000)より下に置き、案内の優先は変えない。 */
.fp-confirm-modal {
  position: fixed;
  inset: 0;
  /* 未現像の写真を削除する確認は、操作を確定／中止するまで他のUIで
     隠れたり押せたりしてはいけないため、全モーダルの最前面に置く。 */
  z-index: 2147483647;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(6, 6, 24, 0.86);
  backdrop-filter: blur(8px);
}
.fp-confirm-modal.is-open { display: flex; }
.fp-confirm-modal .fp-modal-panel {
  box-sizing: border-box;
  width: min(100%, 420px);
  padding: 24px 22px 20px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: var(--hs-radius-surface, 16px);
  background: var(--fp-dialog-bg);
  text-align: center;
  color: #fff;
}
.fp-confirm-modal .fp-confirm-title {
  margin: 0 0 12px;
  font-size: 17px;
  font-weight: 700;
  line-height: 1.5;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
}
.fp-confirm-modal .fp-confirm-lead {
  margin: 0 0 18px;
  font-size: 13px;
  line-height: 1.9;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
  opacity: .9;
}
/* 戻せないことは、他の行と同じ濃さで書くと読み飛ばされる */
.fp-confirm-modal .fp-confirm-warn {
  display: inline-block;
  margin-top: 6px;
  font-size: 12px;
  color: #ffc9c9 !important;
  -webkit-text-fill-color: #ffc9c9;
}
.fp-confirm-modal .fp-prize-actions {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.fp-confirm-modal .fp-prize-receive,
.fp-confirm-modal .fp-prize-again {
  padding: 13px 18px;
  border-radius: 999px;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid transparent;
}
/* 金色（fp-prize-receive）が付くのは上の「この商品に決める」
   （利用者の指示・2026-08-15 に入れ替え）。 */
.fp-confirm-modal .fp-prize-receive {
  background: linear-gradient(135deg, #f5c451, #e0952a);
  color: #241a05 !important;
  -webkit-text-fill-color: #241a05;
}
.fp-confirm-modal .fp-prize-again {
  background: transparent;
  border-color: rgba(255, 255, 255, .4);
  color: #fff !important;
  -webkit-text-fill-color: #fff;
}

/* --- 追加現像（現像を1枚だけ買い足す・お楽しみ動画フォトのみ） ---------
   見た目の骨は確認ダイアログ(.fp-confirm-modal)を借りる。**プランの購入
   モーダルとは別物**として作ってあり（利用者の指示・2026-08-16
   「同じモーダルにプランと並べずに別にして」）、買うものは1つだけなので
   プランのカード列は出さない。

   層は購入モーダルと同じ 2147482900。現像のライトボックス(#fp-devbox)や
   当選(2147482800)の上から開く導線なので、下に置くと押しても何も
   起きないように見える。 */
.fp-extradev-modal { z-index: 2147482900; }

/* 買うものの1行（現像／1枚／金額）。カードを並べる代わりに、
   何をいくらで買うのかをこの1行だけで見せる。 */
.fp-extradev-modal .fp-extradev-item {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 14px;
  padding: 14px 16px;
  border: 1px solid rgba(255, 255, 255, .18);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 255, 255, .06);
}
.fp-extradev-modal .fp-extradev-name {
  font-size: 14px;
  font-weight: 700;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
}
.fp-extradev-modal .fp-extradev-qty {
  font-size: 13px;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
  opacity: .85;
}
/* 金額は右端。数字は line-height:1 で行ボックスの余りを殺してから、
   上下の padding を同値にする（矩形の中の文字は上下の余白を均等に）。 */
.fp-extradev-modal .fp-extradev-price {
  margin-left: auto;
  font-size: 22px;
  font-weight: 800;
  line-height: 1;
  color: #f5c451 !important;
  -webkit-text-fill-color: #f5c451;
}
.fp-extradev-modal .fp-extradev-yen {
  margin-left: 2px;
  font-size: 13px;
  font-weight: 700;
  color: #f5c451 !important;
  -webkit-text-fill-color: #f5c451;
}
/* 「撮ったものは消えない」の但し書き。プランの購入と起きることが違うので
   必ず出すが、本文より一段落として読ませる。 */
.fp-extradev-modal .fp-extradev-note {
  margin: 0 0 18px;
  font-size: 12px;
  line-height: 1.8;
  text-align: center;
  color: #fff !important;
  -webkit-text-fill-color: #fff;
  opacity: .72;
}

/* --- RESULT（当選発表・仕様06） ---------------------------------------
   現像のライトボックス(#fp-devbox)の上に出す。当選は現像の直後に出るので、
   後ろに回ると「押しても何も起きない」ように見える。
   購入モーダル(2147482900)より下、案内(2147483000)より下に置き、
   受け取りを押したあとに開く購入の導線が前に来るようにする。 */
#fp-prize-modal {
  position: fixed;
  inset: 0;
  z-index: 2147482800;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(6, 6, 24, 0.82);
  backdrop-filter: blur(8px);
}
#fp-prize-modal.is-open,
#fp-prize-modal.is-closing { display: flex; }

/* 開閉はズームで見せる（利用者の指示・2026-08-14）。
   開く＝手前に寄ってくる、閉じる＝奥に引いていく。
   閉じる側に is-closing という別クラスが要るのは、is-open を外すと
   display:none で即座に消えてしまい、閉じる動きが一切見えないため。
   JS側は is-open を外して is-closing を付け、220ms 後にDOMから外す
   （閉じアニメ 200ms ＋ 余白）。 */
#fp-prize-modal.is-open    { animation: fpModalFade .18s ease both; }
#fp-prize-modal.is-closing { animation: fpModalFadeOut .2s ease both; }
#fp-prize-modal.is-open .fp-modal-panel {
  animation: fpModalZoom .3s cubic-bezier(.2, .9, .3, 1.15) both;
}
#fp-prize-modal.is-closing .fp-modal-panel {
  animation: fpModalZoomOut .2s cubic-bezier(.4, .0, .7, .2) both;
}
/* 動きを減らす設定では出入りを付けない（中身は変わらない） */
@media (prefers-reduced-motion: reduce) {
  #fp-prize-modal.is-open,
  #fp-prize-modal.is-closing,
  #fp-prize-modal.is-open .fp-modal-panel,
  #fp-prize-modal.is-closing .fp-modal-panel { animation: none; }
}

#fp-prize-modal .fp-modal-panel {
  box-sizing: border-box;
  width: min(100%, 420px);
  padding: 24px 22px 20px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: var(--hs-radius-surface, 16px);
  background: var(--fp-dialog-bg);
  text-align: center;
  color: #fff;
}
#fp-prize-modal .fp-prize-eyebrow {
  font-size: 11px;
  letter-spacing: .18em;
  opacity: .7;
}
#fp-prize-modal .fp-prize-title {
  margin: 8px 0 14px;
  font-size: 20px;
  font-weight: 800;
  line-height: 1.5;
}
/* 商品画像は形がばらばら（円・縦長・横長）なので、正方形の枠に収める
   （ラインナップのタイルと同じ考え方）。 */
#fp-prize-modal .fp-prize-image {
  width: 180px;
  aspect-ratio: 1 / 1;
  margin: 0 auto 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 10px;
  box-sizing: border-box;
  /* **白で塗る。** 商品画像は背景が透過（PNG）のものがあり、半透明の枠だと
     後ろのダイアログの濃い地色が透けて商品が沈む
     （ラインナップの扇形カード・プランカードの枠と同じ扱い）。 */
  background: #fff;
  border-radius: 14px;
}
/* 紙吹雪はダイアログの**後ろ**へ。中身（見出し・画像・ボタン）に重ねると
   商品が読み取りにくくなる。 */
.fp-prize-modal .fp-devbox-confetti { z-index: 0; }
.fp-prize-modal .fp-modal-panel { position: relative; z-index: 1; }
#fp-prize-modal .fp-prize-image img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}
/* 複数画像のフェード送り（メイン画像が無くサンプルを順に見せるとき）。
   flex の流れに任せると横に並んでしまうので、重ねて置いて
   opacity だけで入れ替える。枠の大きさは1枚のときと同じ。 */
#fp-prize-modal .fp-prize-image.is-multi { position: relative; }
#fp-prize-modal .fp-prize-image.is-multi img {
  position: absolute;
  inset: 10px;               /* 枠の padding と同じだけ内側に */
  width: calc(100% - 20px);
  height: calc(100% - 20px);
  object-fit: contain;
  opacity: 0;
  transition: opacity .6s ease;
}
#fp-prize-modal .fp-prize-image.is-multi img.is-on { opacity: 1; }
#fp-prize-modal .fp-prize-lead {
  margin: 0 0 18px;
  font-size: 13px;
  line-height: 1.8;
  opacity: .9;
}
#fp-prize-modal .fp-prize-actions {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
#fp-prize-modal .fp-prize-receive,
#fp-prize-modal .fp-prize-again {
  padding: 13px 18px;
  border-radius: 999px;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid transparent;
}
#fp-prize-modal .fp-prize-receive {
  background: linear-gradient(135deg, #f5c451, #e0952a);
  color: #241a05;
}
#fp-prize-modal .fp-prize-again {
  background: transparent;
  border-color: rgba(255, 255, 255, .4);
  color: #fff;
}
#fp-prize-modal .fp-prize-note {
  margin: 14px 0 0;
  font-size: 11px;
  line-height: 1.7;
  opacity: .65;
}
/* すでに他の写真の商品を受け取り済み／このコマ自体を受け取り済みのとき。
   「受け取る」ボタンの代わりに出す一文。悪い知らせではないので、
   note(灰色)より少し目立たせつつ、当たりの金色(fp-prize-receive)とは
   区別が付くよう控えめな色にする。 */
#fp-prize-modal .fp-prize-locked {
  margin: 0 0 18px;
  padding: 10px 14px;
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 255, 255, .08);
  font-size: 13px;
  line-height: 1.7;
  opacity: .9;
}

#fp-autoshot-modal.is-open,
#fp-notice-modal.is-open,
#fp-trial-modal.is-open { display: flex; }

#fp-autoshot-modal .fp-modal-panel,
#fp-notice-modal .fp-modal-panel,
#fp-trial-modal .fp-modal-panel {
  box-sizing: border-box;
  width: min(100%, 420px);
  padding: 26px 24px 22px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 16px;
  /* 面の地色は変数 --fp-dialog-bg が唯一の持ち主（ファイル冒頭の :root）。
     ここで直値を書かないこと ―― 面ごとに色が割れた原因がそれだった。 */
  background: var(--fp-dialog-bg);
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.5);
  font-family: "M PLUS 2", sans-serif;
  color: #fff;
  text-align: left;
  animation: fp-modal-in 260ms cubic-bezier(0.2, 1, 0.4, 1);
}

#fp-autoshot-modal .fp-trial-title,
#fp-notice-modal .fp-trial-title,
#fp-trial-modal .fp-trial-title {
  margin: 0 0 6px;
  font-size: 18px;
  font-weight: 700;
}

#fp-notice-modal .fp-trial-lead b { color: #ffe14d; }

#fp-autoshot-modal .fp-trial-lead,
#fp-notice-modal .fp-trial-lead,
#fp-trial-modal .fp-trial-lead {
  margin: 0 0 20px;
  font-size: 12px;
  line-height: 1.8;
  opacity: 0.78;
  /* 本文の折り返しは汎用ダイアログ（.fp-confirm-lead）と同じ扱い。
     同じ器に出る文なので、片方だけ違う折り方をしない。 */
  word-break: auto-phrase;
  text-wrap: pretty;
}

#fp-trial-modal .fp-trial-points {
  margin: 0 0 20px;
  padding: 14px 16px;
  list-style: none;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 255, 255, 0.05);
  font-size: 13px;
  line-height: 2;
  text-align: center;
}

#fp-trial-modal .fp-trial-points b { color: #ffe14d; }

#fp-autoshot-modal .fp-trial-actions,
#fp-notice-modal .fp-trial-actions,
#fp-preshoot-guide .fp-trial-actions,
#fp-trial-modal .fp-trial-actions {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

#fp-autoshot-modal .fp-trial-yes,
#fp-notice-modal .fp-trial-yes,
#fp-preshoot-guide .fp-trial-yes,
#fp-trial-modal .fp-trial-yes,
#fp-trial-modal .fp-trial-no {
  width: 100%;
  padding: 13px;
  border-radius: 999px;
  font-family: inherit;
  /* 押しどころの文字（利用者の指示・2026-08-25「文字をもう少し大きく」）。
     枠は最大 680px まで広がるので、14px だと帯の中で文字が小さく沈んで
     いた。**押しどころは案内の中でいちばん読ませたいもの**なので、
     本文（14px）より一段大きい 16px に置く。 */
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
}

#fp-autoshot-modal .fp-trial-yes,
#fp-notice-modal .fp-trial-yes {
  border: 0;
  background: #fff;
  color: #14163c;
}

/* 「お試しで体験する」は進めるほうの選択なので、登録ボタンと同じオレンジにする。
   白文字を載せるため、明るい #ff8400（白と2.46）ではなく
   登録ボタンと同じ #ea580c（白と3.56）にして読める側へ寄せる。 */
#fp-trial-modal .fp-trial-yes,
#fp-preshoot-guide .fp-trial-yes{
  border: 0;
  background: #ea580c;
  color: #fff;
}

#fp-trial-modal .fp-trial-yes:hover,
#fp-preshoot-guide .fp-trial-yes:hover{
  background: #d24d0a;
}

/* **撮影前のガイダンスのボタンはゴールドに黒文字**（利用者の指示・2026-08-24
   「ボタンの配色はゴールド」→ 見本を受けて配色を確定「デフォルトの
   ボタンの配色はこれにして」）。

   お試しの説明（#fp-trial-intro）とは**別の色にする** ―― あちらは
   「買う前の方への誘い」で、こちらは撮影の入口。同じ色だとどちらの流れに
   いるのか分からなくなる。
   上のオレンジの規則より**あと**に置くこと（同じ詳細度なので後ろが勝つ）。
   管理画面で色を指定したときは hs_fp_trial_dialog_css() がさらに上書きする。 */
#fp-preshoot-guide .fp-trial-yes {
  /* 左上が明るく右下へ深くなる、斜めのゴールド。 */
  background: linear-gradient(135deg, #eec25f 0%, #e0aa42 46%, #d09731 100%);
  /* **文字は黒**（利用者の指示・2026-08-24「文字が黒」）。
     金地には黒のほうが明度差が大きく、縁取りに頼らず読める。
     サイト全体の自由CSSが `color:#fff !important` を撒いていることが
     あるので、ID セレクタ＋`!important` と -webkit-text-fill-color の
     両方で確実に黒にする（CLAUDE.md「UI/アニメーション修正の定石」3）。
     **影は置かない** ―― 黒文字に濃い影を足すと輪郭が潰れる。 */
  color: #000 !important;
  -webkit-text-fill-color: #000;
  text-shadow: none;
}
#fp-preshoot-guide .fp-trial-yes:hover {
  background: linear-gradient(135deg, #e5b551 0%, #d69c36 46%, #c48a28 100%);
}

/* **開くときはフェードイン＋ズームイン、閉じるときはその逆**
   （利用者の指示・2026-08-24「このモーダルはフェードインズームで」）。

   暗幕は明るさだけ、枠は少し小さいところから寄ってくる ―― 2つを
   同じ動きにすると、画面全体が拡大したように見えて内容が読みにくい。
   **閉じる側は JS が is-closing を付けているあいだだけ**（display を
   先に落とすと、閉じる動きが一切見えない。お知らせのポップアップと同じ作法）。 */
@keyframes fpGuideVeilIn  { from { opacity: 0; } to { opacity: 1; } }
@keyframes fpGuideVeilOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes fpGuidePanelIn {
  from { opacity: 0; transform: scale(.92); }
  to   { opacity: 1; transform: none; }
}
@keyframes fpGuidePanelOut {
  from { opacity: 1; transform: none; }
  to   { opacity: 0; transform: scale(.94); }
}
#fp-preshoot-guide.is-open  { animation: fpGuideVeilIn .22s ease both; }
#fp-preshoot-guide.is-closing {
  display: flex;
  animation: fpGuideVeilOut .18s ease both;
}
#fp-preshoot-guide.is-open .fp-modal-panel {
  animation: fpGuidePanelIn .28s cubic-bezier(.2, .8, .3, 1) both;
}
#fp-preshoot-guide.is-closing .fp-modal-panel {
  animation: fpGuidePanelOut .18s ease both;
}
/* 動きを減らす設定では、出入りの動きは付けない（出ること自体は変えない）。 */
@media (prefers-reduced-motion: reduce) {
  #fp-preshoot-guide.is-open,
  #fp-preshoot-guide.is-closing,
  #fp-preshoot-guide.is-open .fp-modal-panel,
  #fp-preshoot-guide.is-closing .fp-modal-panel { animation: none; }
}

/* 撮影前のガイダンス（2026-08-24）。中身は画像1枚か、管理画面で書いたHTML。
   お試しの説明ダイアログ（#fp-trial-intro）と同じ見せ方にそろえる ――
   「案内を読んで『はじめる』を押す」という所作が同じものなので、
   別の形にすると同じ体験の中で作りが2つに割れる。 */
#fp-preshoot-guide .fp-modal-panel {
  /* 上限は変数（既定 640px）。テンプレートや広い画面では書き換わる。 */
  width: min(100%, var(--fp-guide-max, 640px));
  padding: 16px 16px 18px;
}
#fp-preshoot-guide .fp-preshoot-img {
  display: block;
  width: 100%;
  height: auto;
  /* 縦に長い案内でも1画面に収める（切り取ると下の一文が読めなくなる）。 */
  max-height: calc(100vh - 160px);
  object-fit: contain;
  margin: 0 auto 16px;
  border-radius: 10px;
}
/* ---- 案内の中身（.fp-preshoot-html）は3つの器で同じレイアウトにする ----
   （利用者の指示・2026-08-25「ボタン以外の要素は共通のレイアウトにしたい」）

   出す器は3つある（撮影前のガイダンス #fp-preshoot-guide ／お試しの説明
   #fp-trial-intro ／お試しの確認 #fp-trial-modal）が、**中身は同じ1つの部品**
   （hs_fp_guide_template_html、または管理画面で書いたHTML）。
   器ごとに余白を書き分けると、同じ案内なのに器によって内側の寸法が変わる
   ―― 実際、確認ダイアログだけ左右の余白が無く、手順の箱が面の縁まで
   届いていた（利用者の報告・2026-08-25）。

   **ここが3つぶんの唯一の持ち主。** 器ごとの上書きを足さないこと。
   以前は「ガイダンス＋説明」と「確認」で同じ内容の規則が2組に割れており、
   しかも前者は `#fp-trial-intro .fp-preshoot-html,` が単独行で挟まる書き方に
   なっていて、子要素向けの指定が親にも当たっていた。両方ともここで畳む。

   **違ってよいのはボタンだけ**（.fp-trial-actions / .fp-trial-yes ほか）。
   入口ごとに文言も色も変える ―― 撮影の入口＝金地に黒文字、
   買う前の誘い＝オレンジ。そちらは下の別の節が持つ。 */
#fp-preshoot-guide .fp-preshoot-html,
#fp-trial-modal .fp-preshoot-html {
  /* 書いた分だけ伸びるので、収まらないぶんはこの中でスクロールさせる
     ―― パネルごと伸ばすと「はじめる」が画面の外へ出る。 */
  max-height: calc(100vh - 190px);
  overflow: auto;
  padding: 18px 16px 0;
  /* **下の余白は持たない**（利用者の指示・2026-08-25）。枠（.fp-modal-panel）が
     ボタンぶんの padding-bottom:16px をすでに持っており、ここにも足すと二重に空く。 */
  margin: 0;
  font-size: 14px;
  line-height: 1.85;
  text-align: left;
  color: inherit;
}
/* 広い画面では中身の左右を空ける（利用者の指示・2026-08-25）。
   枠は最大 840px まで広がるのに中身が枠に貼り付いていて、手順の箱が
   面の縁まで届いていた。狭い画面は触らない ―― あちらは元から
   目一杯で、空けるとその分だけ中身が細くなる。 */
@media (min-width: 769px) {
  #fp-preshoot-guide .fp-preshoot-html,
  #fp-trial-modal .fp-preshoot-html {
    padding: 22px 20px 0;
  }
}
#fp-preshoot-guide .fp-preshoot-html :first-child,
#fp-trial-modal .fp-preshoot-html :first-child { margin-top: 0; }
#fp-preshoot-guide .fp-preshoot-html :last-child,
#fp-trial-modal .fp-preshoot-html :last-child {
  margin-bottom: 0;
  /* 最後の要素の下に余白は要らないが、上には少し欲しい（利用者の指示・2026-08-25）。
     直前の要素と地続きに見えていたぶんを離す。 */
  padding-top: 10px;
}
#fp-preshoot-guide .fp-preshoot-html h1,
#fp-trial-modal .fp-preshoot-html h1,
#fp-preshoot-guide .fp-preshoot-html h2,
#fp-trial-modal .fp-preshoot-html h2,
#fp-preshoot-guide .fp-preshoot-html h3,
#fp-trial-modal .fp-preshoot-html h3 {
  margin: 0 0 10px;
  font-size: 17px;
  line-height: 1.5;
  text-align: center;
}
#fp-preshoot-guide .fp-preshoot-html p,
#fp-trial-modal .fp-preshoot-html p { margin: 0 0 12px; }
#fp-preshoot-guide .fp-preshoot-html ul,
#fp-trial-modal .fp-preshoot-html ul,
#fp-preshoot-guide .fp-preshoot-html ol,
#fp-trial-modal .fp-preshoot-html ol { margin: 0 0 12px; padding-left: 1.3em; }
#fp-preshoot-guide .fp-preshoot-html li,
#fp-trial-modal .fp-preshoot-html li { margin: 0 0 6px; }
#fp-preshoot-guide .fp-preshoot-html img,
#fp-trial-modal .fp-preshoot-html img { max-width: 100%; height: auto; border-radius: 8px; }
#fp-preshoot-guide .fp-preshoot-html a,
#fp-trial-modal .fp-preshoot-html a { color: inherit; }

/* ---- お試しの確認ダイアログが、撮影前のガイダンスと同じ中身を出すとき
   （利用者の指示・2026-08-24「撮影前のガイダンスの設定が、お試し確認
   ダイアログと同じになるように」）----

   器は #fp-trial-modal のままなので、**枠の側だけ**をここで名指しする。
   中身（.fp-preshoot-html）の整形は上の共通の節が3つまとめて持つ ――
   2026-08-25「ボタン以外の要素は共通のレイアウトにしたい」で畳んだ。
   以前はここに同じ内容の写しが並んでおり、片方だけ直すと器によって
   案内の寸法が変わっていた。**ここに中身の整形を書き戻さないこと。**

   **数字は写さない。** 幅の持ち主は変数（--fp-guide-max）で、
   テンプレートのときだけ guide-template.css が書き換える。
   余白はガイダンス／説明の枠と同じ 0 0 16px ―― 中身が自前の余白を
   持つので、枠側はボタンのぶんだけ残す。
   テンプレートは .fp-preshoot-html の中に入るので、この1本で両方に効く。 */
#fp-trial-modal .fp-modal-panel:has(.fp-preshoot-html) {
  width: min(100%, var(--fp-guide-max));
  padding: 0 0 16px;
  overflow: hidden;
}

/* （お試しの説明ダイアログ #fp-trial-intro の見た目はここに在ったが、
   機能ごと廃止した・2026-08-25。） */

/* お試しの**選択ダイアログ**に説明画像を出すとき（利用者の指示・2026-08-20）。
   説明ダイアログ（#fp-trial-intro）と同じ見せ方にそろえる ―― 同じ画像を
   PC/スマホで出し分けるので、枠だけ別の形にすると設計し直しになる。
   画像があるときは文字を出さないので、枠は画像の幅に合わせて広く取る。
   ボタン2つぶんの高さを見込んで、画像の高さの上限を少し低くしてある。 */
#fp-trial-modal .fp-modal-panel.has-img {
  /* 上限は変数（既定 640px）。テンプレートや広い画面では書き換わる。 */
  width: min(100%, var(--fp-guide-max, 640px));
  padding: 16px 16px 18px;
}
#fp-trial-modal .fp-trial-ask-img {
  display: block;
  width: 100%;
  height: auto;
  max-height: calc(100vh - 230px);
  object-fit: contain;
  margin: 0 auto 16px;
  border-radius: 10px;
}

/* **画像はダイアログの端まで**（利用者の指示・2026-08-24
   「画像には余白がなく、ダイアログの端まであつかえるように」）。

   枠の余白（padding）を画像の周りだけ 0 にし、ボタンのぶんだけ
   下と左右に戻す。角の丸みは枠の overflow:hidden が切るので、
   画像側の border-radius は要らない（半径を二重に持つと、
   枠の丸みを変えたときに画像だけ角が残る）。
   HTMLベースの案内は文章なので、読みやすさのため左右の余白は残す。 */
#fp-trial-modal .fp-modal-panel.has-img,
#fp-preshoot-guide .fp-modal-panel {
  padding: 0 0 16px;
  overflow: hidden;
}
/* **実寸より大きく引き伸ばさない**（利用者の指示・2026-08-24
   「画像サイズ以上に引き延ばされないように」）。
   width:100% だと、小さい画像が枠いっぱいまで拡大されて粗く見えていた。
   width:auto にすると画像は実寸で描かれ、枠より大きいときだけ
   max-width:100% が縮める。 */
#fp-trial-modal .fp-trial-ask-img,
#fp-preshoot-guide .fp-preshoot-img {
  display: block;
  width: auto;
  max-width: 100%;
  /* **縦スクロールを出さない**（同日「縦スクロールが発生しないように
     画像のサイズを調整して」）。引く 150px はボタンとその余白のぶん。
     広い画面では下のメディアクエリが同じ考え方で置き直す。
     dvh を使うのは、スマホのアドレスバーが隠れている間に
     画面外へはみ出さないようにするため。 */
  max-height: calc(100dvh - 150px);
  margin: 0 0 16px;
  border-radius: 0;
}
/* **横幅の上限は変数ひとつが持ち主**。ここが基本の値で、広い画面と
   テンプレートのときだけ、より強いセレクタで書き換わる
   （PC=500px は下のメディアクエリ、テンプレート=680px は
   guide-template.css、管理画面の指定は hs_fp_trial_dialog_css）。
   **フォールバック（var の第2引数）に頼らない** ―― 規則ごとに違う値を
   書くことになり、どれが効くのか読めなくなる。 */
#fp-trial-modal .fp-modal-panel,
#fp-preshoot-guide .fp-modal-panel {
  --fp-guide-max: 640px;
}

/* 枠は画像の実寸まで縮める（左右に地色を出さないため。同日
   「画像の左右に余白がでないように」）。**画面の広さに関わらず**当てる ――
   PCだけにしていたころ、スマホでは枠が幅いっぱいのまま残っていた。
   :has() を読めないブラウザでは、これまでどおり枠が幅いっぱいになるだけ
   （画像が引き伸ばされることはない。上の width:auto が効く）。 */
#fp-trial-modal .fp-modal-panel.has-img:has(.fp-trial-ask-img),
#fp-preshoot-guide .fp-modal-panel:has(.fp-preshoot-img) {
  /* Safari は width の fit-content に前置きが要る版がある。
     無いと宣言ごと落ちて、枠が幅いっぱいのまま残る。 */
  width: -webkit-fit-content;
  width: fit-content;
  max-width: min(100%, var(--fp-guide-max));
}
#fp-trial-modal .fp-modal-panel.has-img .fp-trial-actions,
#fp-preshoot-guide .fp-trial-actions {
  padding: 0 16px;
}
/* **ボタンは枠いっぱいまで伸ばさない**（利用者の指示・2026-08-24
   「ボタンが横幅に伸びすぎないようにする」）。案内やテンプレートを出すと
   枠は最大 680px まで広がるので、そのままだと押しどころが横に間延びして、
   何を押す場所なのか一目で掴めなくなる。
   上限は**確認ダイアログ本来の幅（420px）**にそろえ、中央へ置く
   ―― 新しい数字を持ち出さず、既にこの画面が持っている幅を使う。
   3つのダイアログに同じ規則を当てる（中身も設定も1つにそろえてあるので、
   ボタンだけ別の幅にすると同じ体験の中で見た目が割れる）。 */
#fp-trial-modal .fp-trial-actions,
#fp-preshoot-guide .fp-trial-actions {
  box-sizing: border-box;
  max-width: 420px;
  margin-left: auto;
  margin-right: auto;
  width: 100%;
}
/* 案内やテンプレートを出すときは、枠の余白を 0 にしてある（中身が自前で
   持つため）。ボタンの左右だけは案内の器と同じ 16px を戻す ―― ここを
   揃えないと、同じ中身なのに確認ダイアログだけ端に寄って見える。 */
#fp-trial-modal .fp-modal-panel:has(.fp-guide-tpl) .fp-trial-actions,
#fp-trial-modal .fp-modal-panel:has(.fp-preshoot-html) .fp-trial-actions {
  padding: 0 16px;
}
/* （ここにあった #fp-trial-intro / #fp-preshoot-guide だけの
   padding / margin は、上の「3つの器で同じレイアウトにする」節へ畳んだ
   ―― 利用者の指示・2026-08-25。ここに残っていると、共通の節より後ろに
   あるぶんだけ勝ってしまい、確認ダイアログだけ余白が違う状態に戻る。） */
/* **スマホでは左右の余白を取らない**（利用者の指示・2026-08-24
   「スマホ時、fp-preshoot-html のpadding不要」）。
   狭い画面では3つの手順が横に並んだままなので、ここで16px×2を取ると
   1つあたりが読めない幅になり、見出しが不自然な位置で折り返す。
   枠（.fp-modal-panel）とテンプレート（.fp-guide-tpl）が自前の余白を
   持っているので、中の箱は幅いっぱいに使ってよい。
   境目はテンプレートが並びを詰める 520px にそろえる
   （guide-template.css と同じ数字を見ている）。 */
@media (max-width: 520px) {
  #fp-trial-modal .fp-preshoot-html,
  #fp-preshoot-guide .fp-preshoot-html {
    padding-left: 0;
    padding-right: 0;
  }
}

/* **PCでは画像を大きく出す**（利用者の指示・2026-08-24
   「画像はPCのとき、より大きく」）。

   画像1枚で説明する作りなので、枠が狭いと文字が小さくなって読めない。
   スマホは画面幅いっぱい（min(100%,640px) の 100% 側）で既に目一杯なので、
   **広い画面のときだけ**枠と画像の上限を上げる。
   高さの引き算（-160 / -230px）はボタンのぶん ―― ここを詰めると
   「はじめる」や2つのボタンが画面の外へ出る。 */
@media (min-width: 769px) {
  #fp-trial-modal .fp-modal-panel.has-img,
  #fp-trial-modal .fp-modal-panel:has(.fp-preshoot-html),
  #fp-preshoot-guide .fp-modal-panel {
    /* 上限の数値は**変数ひとつが持ち主**。管理画面で指定したときは
       hs_fp_trial_dialog_css() がこの変数だけを書き換える ――
       width と max-width の両方を上書きすると、下の「画像に合わせて縮める」
       規則と詳細度を取り合うことになる。 */
    /* 既定は 500px（利用者の指示・2026-08-24「デフォルトを500px」）。
       広げすぎると1枚画像が実寸を超えず中央に浮き、文字も1行が長くなる。
       テンプレートのときは guide-template.css が 840px で上書きする。
       **確認ダイアログ（#fp-trial-modal）もここに並べる**（利用者の指示・
       2026-08-25「ボタン以外の要素は共通のレイアウト」）―― 外していたため、
       HTML直書きの案内だけ確認ダイアログが 640px、他の2つが 500px と
       器によって幅が変わっていた。 */
    --fp-guide-max: 500px;
    width: min(100%, var(--fp-guide-max));
    max-width: min(100%, var(--fp-guide-max));
    padding: 0 0 20px;
  }
  /* **画像のときの幅の決まり方（width:auto／枠は fit-content）は、
     画面の広さによらない。** 上の基本の規則が唯一の持ち主で、
     ここでは上限（--fp-guide-max）だけが広い画面用に変わる。
     ここに同じ宣言を書き足すと、直す場所が2つに割れる。 */
  /* **ボタンは横に広げすぎない**（利用者の指示・2026-08-24
     「ボタンは過度に横を拡げすぎないで」）。枠が広がったぶん幅100%の
     ボタンが1200pxの帯になり、押す所というより仕切りに見えていた。
     枠は画像のために広く取り、ボタンだけ読める幅で中央に置く。 */
  #fp-trial-modal .fp-modal-panel.has-img .fp-trial-actions,
  #fp-preshoot-guide .fp-trial-actions {
    padding: 0 20px;
    align-items: center;
  }
  #fp-trial-modal .fp-modal-panel.has-img .fp-trial-yes,
  #fp-trial-modal .fp-modal-panel.has-img .fp-trial-no,
  #fp-preshoot-guide .fp-trial-yes {
    max-width: 420px;
  }
  /* （広い画面の padding も上の共通の節が3つまとめて持つ。
     ここに器を2つだけ並べると、確認ダイアログだけ余白が違う状態に戻る。） */
  #fp-trial-modal .fp-trial-ask-img { max-height: calc(100dvh - 210px); }
  #fp-preshoot-guide .fp-preshoot-img { max-height: calc(100dvh - 150px); }
}

/* 押したときの枠（ブラウザ既定のフォーカスリング）は出さない。
   開いた直後に自動で当てているだけで、選び直しの目印にはならないため。 */
#fp-trial-modal .fp-trial-yes:focus,
#fp-trial-modal .fp-trial-no:focus,
#fp-trial-modal .fp-trial-yes:focus-visible,
#fp-trial-modal .fp-trial-no:focus-visible {
  outline: none;
  box-shadow: none;
}

#fp-trial-modal .fp-trial-no {
  border: 1px solid rgba(255, 255, 255, 0.45);
  background: transparent;
  color: #fff;
}

#fp-trial-modal button[disabled] { opacity: 0.6; cursor: default; }

/* 撮影一覧で「お試しで撮った写真」に付ける印。
   印画紙の外ではなく写真面の右上に置くため、枠の余白ぶんを差し引く。 */
/* 拡大表示の枠にも印を置けるように、位置の基準を持たせる */
body.hs-fp #pageDetailsFramed {
  position: relative;
}

body.hs-fp .fp-trial-tag {
  position: absolute;
  top: 20px;
  right: 20px;
  z-index: 28;
  padding: 4px 9px;
  border-radius: 999px;
  background: #e11d48;
  /* 明るい背景のサイトでは全体の動的CSSが全要素へ color:#000 !important を
     当てるため、素の #fff は負けて赤い札に黒文字になっていた
     （利用者の指摘・2026-08-18「ここ文字は白」）。CLAUDE.md の定石3。 */
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  font-family: "M PLUS 2", sans-serif;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
  white-space: nowrap;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
  pointer-events: none;
}

/* 「購入した写真」の印。緑地×白文字（利用者の指示・2026-08-19。
   2026-08-26 に「ダウンロード可能」から改称 ―― 何ができるかではなく、
   **何であるか**で呼ぶ）。
   お試しの赤・当たりの黒とは意味が違うので色で分ける。
   置き場は**左上** ―― 右上はお試しと当たりが使っており、重ねると読めない。
   明るい背景のサイトでは全体の動的CSSが color:#000 !important を当てるので、
   白は !important と -webkit-text-fill-color の両方で押さえる（定石3）。 */
body.hs-fp .fp-dl-tag {
  position: absolute;
  top: 20px;
  left: 20px;
  z-index: 28;
  padding: 4px 9px;
  border-radius: 999px;
  background: #16a34a;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  font-family: "M PLUS 2", sans-serif;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
  white-space: nowrap;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
  pointer-events: none;
}
/* まだ枠を使っていないコマ（利用者の指示・2026-08-20「ダウンロード可能で
   ないものは、グレイで未ダウンロード」）。緑＝もう自分のもの、灰＝これから、
   と色で区別する。押せば買える／使えるので、消えて見えるほど薄くはしない。 */
body.hs-fp .fp-dl-tag.is-pending {
  background: #6b7280;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}

/* ガチャの当たり商品タグ（コマ右上の「トレカ」「??? 」等）は黒地×白文字
   （利用者の指示・2026-08-13）。お試しの赤い印とは意味が違うので色で分ける。 */
body.hs-fp .fp-prize-tag {
  background: #000;
  color: #fff;
}

/* カード内の要素は絶対配置で置かれているので、基準を確実にしておく。
   （もとは「お試し体験可」の印の基準だったが、印を廃止したあとも
   他の重ねものが基準にするので残す・2026-08-25） */
body.hs-fp .list-session {
  position: relative;
}

/* （セッションカードの「お試し体験可」の印 .fp-trial-badge の見た目は
   ここに在ったが、印ごと廃止した・2026-08-25。お試しへの入口は
   購入モーダルの「お試しで体験する」が持つ。 */

/* LP v2 のPCだけカードの角が 28px だったころは、同心円を保つために
   ここで余白を広げていた。2026-08-21 にカードも16pxへそろえたので、
   上の既定（5.5px）と同じ値になり、この上書きは要らなくなった。 */

/* 拡大表示は印画紙の余白が広いので、写真面の角に合わせる */
@media (min-width: 769px) {
  body.hs-fp #pageDetailsFramed .fp-trial-tag {
    top: 26px;
    right: 26px;
    padding: 5px 11px;
    font-size: 11px;
  }
}

/* ---------------- 購入完了モーダル ---------------- */

#fp-done-modal {
  position: fixed;
  inset: 0;
  z-index: 9950;   /* 購入モーダルより上に出す */
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(6, 6, 24, 0.72);
  backdrop-filter: blur(8px);
}

#fp-done-modal.is-open { display: flex; }

#fp-done-modal .fp-modal-panel {
  position: relative;
  box-sizing: border-box;
  width: min(100%, 420px);
  padding: 30px 24px 24px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 16px;
  background: var(--fp-dialog-bg);
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.5);
  font-family: "M PLUS 2", sans-serif;
  color: #fff;
  text-align: center;
  animation: fp-modal-in 260ms cubic-bezier(0.2, 1, 0.4, 1);
}

#fp-done-modal .fp-done-mark {
  width: 54px;
  height: 54px;
  margin: 0 auto 14px;
  border-radius: 50%;
  background: #2fbf71;
  color: #fff;
  font-size: 30px;
  line-height: 54px;
  font-weight: 700;
}

#fp-done-modal .fp-done-title {
  margin: 0 0 4px;
  font-size: 18px;
  font-weight: 700;
}

#fp-done-modal .fp-done-plan {
  margin: 0 0 18px;
  font-size: 12px;
  line-height: 1.7;
  opacity: 0.72;
}

#fp-done-modal .fp-done-rows {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 20px;
  text-align: left;
}

/* 見出し・増加数・残数の3つを流し込む。
   flex + width:100% だと残数が同じ行の幅を奪い、見出しが1文字ずつ
   縦に折り返してしまうため、行と列を明示できる grid にする。 */
#fp-done-modal .fp-done-row {
  box-sizing: border-box;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: 2px 12px;
  padding: 12px 14px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 255, 255, 0.05);
}

#fp-done-modal .fp-done-label {
  min-width: 0;
  font-size: 13px;
}

#fp-done-modal .fp-done-gain {
  font-size: 20px;
  font-weight: 700;
  color: #ffe14d;
  white-space: nowrap;
  text-align: right;
}

/* 残数は次の行いっぱいを使って右寄せ */
#fp-done-modal .fp-done-left {
  grid-column: 1 / -1;
  font-size: 11px;
  opacity: 0.62;
  text-align: right;
}

/* 開いたときに自動でフォーカスを当てているぶん、ブラウザの標準の枠が
   出てしまう。押す場所は白い大きなボタンで明らかなので枠は出さない。
   （フォーカス自体は残すので、そのままEnterで進める） */
#fp-done-modal .fp-done-ok:focus,
#fp-done-modal .fp-done-ok:focus-visible {
  outline: none !important;
  box-shadow: none !important;
}
#fp-done-modal .fp-done-ok {
  width: 100%;
  padding: 13px;
  border: 0;
  border-radius: 999px;
  background: #fff;
  color: #14163c;
  font-family: inherit;
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
}

#fp-done-modal .fp-modal-close {
  position: absolute;
  top: 10px;
  right: 12px;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: #fff;
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}

#fp-shop-modal {
  position: fixed;
  inset: 0;
  /* 撮影一覧の拡大表示(#zoom=99999)の上からも開けるようにする。
     保存不可の案内(#fp-notice-modal=2147483000)から遷移してくるため、
     その直下に置く（案内→購入の順で重なっても隠れない）。 */
  z-index: 2147482900;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(6, 6, 24, 0.72);
  backdrop-filter: blur(8px);
}

#fp-shop-modal.is-open { display: flex; }

#fp-shop-modal .fp-modal-panel {
  position: relative;
  /* 3枚のプランを横に並べる画面なので、狭いとカードの中が縦に伸びて
     商品名まで読みにくくなる。広い画面ではもっと使う。 */
  width: min(100%, 860px);
  max-height: 88vh;
  overflow-y: auto;
  padding: 26px 22px 20px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 16px;
  /* 面の色（利用者の指示・2026-08-25「24167f」）。グラデーションだと
     カードの下ほど暗くなり、3枚のカードの地が同じ色に見えなかった。 */
  background: var(--fp-dialog-bg);
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.5);
  font-family: "M PLUS 2", sans-serif;
  color: #fff;
  animation: fp-modal-in 260ms cubic-bezier(0.2, 1, 0.4, 1);
}

@keyframes fp-modal-in {
  from { transform: translateY(12px) scale(0.98); opacity: 0; }
  to   { transform: none; opacity: 1; }
}

#fp-shop-modal .fp-modal-close {
  position: absolute;
  top: 10px;
  right: 12px;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  color: #fff;
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}

#fp-shop-modal .fp-modal-close:hover { background: rgba(255, 255, 255, 0.2); }

/* 枠切れで開いたときの案内 */
#fp-shop-modal .fp-shop-alert {
  margin: 0 0 16px;
  padding: 10px 14px;
  border: 1px solid rgba(255, 92, 138, 0.5);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(255, 0, 85, 0.12);
  color: #ffd0dd;
  font-size: 12.5px;
  line-height: 1.7;
  text-align: center;
}

@media (prefers-reduced-motion: reduce) {
  #fp-shop-modal .fp-modal-panel { animation: none; }
}

/* 使い切ったときは面ごと色を変える。枠線と数字の色だけだと、
   帯そのものは他と同じ見た目のままで「もう開けない」ことが伝わりにくい。 */
#fp-develop-bar.is-empty {
  border-color: rgba(255, 92, 138, 0.6);
  background: rgb(126 0 36 / 47%);
}
/* 数字はここでも黄色のまま。面の色と枠線で「もう開けない」ことは伝わるので、
   数字まで赤にすると、読ませたい数（0）が警告色に埋もれて読みにくくなる。 */

/* ---------------- TOP: 現像の追加購入 ---------------- */

#fp-shop {
  max-width: 720px;
  margin: 32px auto 8px;
  padding: 22px 20px 18px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: var(--hs-radius-surface, 16px);
  background: linear-gradient(165deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.02));
  font-family: "M PLUS 2", sans-serif;
  color: #fff;
}

.fp-shop-head { text-align: center; }

.fp-shop-title {
  margin: 0;
  font-size: 19px;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: #fff;
}

.fp-shop-lead {
  margin: 6px 0 0;
  font-size: 12px;
  line-height: 1.75;
  opacity: 0.75;
}

.fp-shop-balance {
  margin-top: 12px;
  font-size: 12px;
  opacity: 0.9;
}

.fp-shop-balance b {
  font-size: 20px;
  font-weight: 700;
  color: #ffe14d;
  padding: 0 3px;
}

.fp-plans {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  margin-top: 18px;
}

.fp-plan {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 14px 10px 15px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: var(--hs-radius-surface, 16px);
  background: rgba(0, 0, 0, 0.25);
  color: #fff;
  font-family: inherit;
  cursor: pointer;
  transition: border-color 180ms ease, background 180ms ease, transform 180ms ease;
}

.fp-plan:hover { border-color: #ff5c8a; background: rgba(255, 0, 85, 0.14); }
.fp-plan:active { transform: translateY(1px); }
.fp-plan[disabled] { opacity: .5; cursor: default; }

/* 商品名は途中で折り返さない（「スタンダー／ド」のような割れ方を防ぐ）。
   改行してよい箇所は JS が <br> で明示しているので、行の中では折らない。 */
.fp-plan-name { font-size: 12px; letter-spacing: .06em; opacity: .8; white-space: nowrap; }
.fp-plan-price { font-size: 22px; font-weight: 700; letter-spacing: -.01em; }
.fp-plan-shots { font-size: 12px; color: #ffe14d; white-space: nowrap; }
.fp-plan-shots small { display: block; font-size: 10px; opacity: .65; color: #fff; }

