/**
 * OHDr. Plan Pricing フロントCSS（仕様書① §5・§8）
 * すべて .ohdr-ps / .ohdr-autoselect / .rsv-form-wrap 配下にスコープ。
 * !important は使用しない（干渉を実測確認した場合の最終手段のみ）。
 */

/* ---- 配色（カスタムプロパティ） ----
   ブランド緑を役割で分ける。文字に使う色は白地・tint地の両方で4.5:1以上、
   枠線などUI部品の色は3:1以上を満たす組み合わせにしている。
   非選択状態のグレー（#ccc / #666 / #ddd / #c5c5c5 / #f2f2f2）は
   ブランド色ではないため変数化せずそのまま残す。 */
.ohdr-ps,
.rsv-form-wrap {
  --ohdr-green-strong: #1F6B29; /* 文字・表ヘッダー背景・選択枠・ステップ現在 */
  --ohdr-green-mid:    #2E9C3F; /* hover枠・フォーカスリング（白地3.5:1） */
  --ohdr-brand:        #40BC50; /* 装飾専用（料金カード枠等）。文字は載せない */
  --ohdr-tint:         #E9F7EB; /* 選択ボタン背景・アクティブ行 */
  --ohdr-tint-strong:  #CBEBD0; /* アクティブセル */
  --ohdr-muted:        #6B6B6B; /* 注記・プレースホルダ文字 */
  --ohdr-error:        #C1272D; /* 検証エラー（白地5.8:1 / tint地5.3:1） */
}

/* ---- ステップバー（純装飾） ---- */
.ohdr-ps .ohdr-steps {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  margin: 0 0 1.5em;
  font-size: 14px;
  color: #666;
}
.ohdr-ps .ohdr-steps__item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.ohdr-ps .ohdr-steps__num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: #ccc;
  color: #fff;
  font-size: 12px;
  line-height: 1;
}
.ohdr-ps .ohdr-steps__item.is-current {
  color: var(--ohdr-green-strong);
  font-weight: 700;
}
.ohdr-ps .ohdr-steps__item.is-current .ohdr-steps__num {
  background: var(--ohdr-green-strong);
}
.ohdr-ps .ohdr-steps__sep {
  flex: 0 1 40px;
  height: 1px;
  background: #ccc;
  min-width: 16px;
}

/* ---- radioのボタン化（use_label_element前提・両対応スタイル） ---- */
.ohdr-ps .wpcf7-radio {
  display: grid;
  gap: 8px;
}
/* 人數グリッド（§5 v13）: 列数を固定しない自動折り返し。
   repeat(9, 1fr) は 1fr = minmax(auto, 1fr) で最小値が min-content になるため、
   9個の合計幅がコンテナを超えると右端が見切れる。auto-fit + minmax の下限を
   決め打ちすれば、収まらない分は必ず次行へ送られる（行数は問わない要件）。
   下限84px: 320px幅で3列、768pxで7〜8列、1440pxで9列がすべて1行に収まる。 */
.ohdr-ps .ohdr-num-grid .wpcf7-radio {
  grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
}
/* 天數は3択固定。minmax(0,1fr) で min-content の下限を外し、
   狭い画面でも横に溢れないようにする。 */
.ohdr-ps .ohdr-period-list .wpcf7-radio {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.ohdr-ps .wpcf7-radio .wpcf7-list-item {
  margin: 0;
}
.ohdr-ps .wpcf7-radio label {
  position: relative; /* 視覚的に隠したinputのabsolute基準 */
  display: flex;
  align-items: center;     /* 上下中央 */
  justify-content: center; /* 左右中央 */
  gap: 4px;                /* ラジオ円が見える環境で円と文字を離す */
  min-height: 44px; /* タップ領域 */
  padding: 8px 4px;
  border: 1px solid #c5c5c5;
  border-radius: 6px;
  background: #fff;
  cursor: pointer;
  font-size: 16px; /* iOSズーム防止 */
  line-height: 1.2;
  text-align: center;
  transition: border-color 0.15s, background-color 0.15s;
}
/* ラベル文字を上下中央で揃える（円が見える環境では円と並ぶ） */
.ohdr-ps .wpcf7-radio .wpcf7-list-item-label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1.2;
}
/* 1行固定は人數ボタンのみ。天數（「16〜30日」など長い）は
   狭い画面で折り返せるようにして横溢れを避ける。 */
.ohdr-ps .ohdr-num-grid .wpcf7-radio label,
.ohdr-ps .ohdr-num-grid .wpcf7-radio .wpcf7-list-item-label {
  white-space: nowrap;
}
.ohdr-ps .wpcf7-radio label:hover {
  border-color: var(--ohdr-green-mid);
}
.ohdr-ps .wpcf7-radio input[type="radio"] {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  border: 0;
}
/* キーボード操作時のフォーカス可視化。
   inputを視覚的に隠しているため、フォーカスリングはラベル側に出す。 */
.ohdr-ps .wpcf7-radio label:has(input:focus-visible) {
  outline: 3px solid var(--ohdr-green-mid);
  outline-offset: 2px;
}
/* 選択状態: :has()対応ブラウザ */
.ohdr-ps .wpcf7-radio label:has(input:checked) {
  border-color: var(--ohdr-green-strong);
  background: var(--ohdr-tint);
  font-weight: 700;
  color: var(--ohdr-green-strong);
}
/* 選択状態: :has()非対応ブラウザ向けフォールバック。
   :has()対応時と二重装飾にならないよう @supports で切り分ける。
   @supports selector() 自体が非対応の旧ブラウザでは下の色・太字のみが効く。 */
.ohdr-ps .wpcf7-radio input:checked + .wpcf7-list-item-label {
  font-weight: 700;
  color: var(--ohdr-green-strong);
}
@supports not selector(:has(*)) {
  .ohdr-ps .wpcf7-radio .wpcf7-list-item-label {
    display: block;
    width: 100%;
    padding: 2px 0;
    border-radius: 4px;
  }
  .ohdr-ps .wpcf7-radio input:checked + .wpcf7-list-item-label {
    background: var(--ohdr-tint);
    box-shadow: 0 0 0 2px var(--ohdr-green-strong);
  }
  /* :focus-visible も使えない世代のため :focus で代替する */
  .ohdr-ps .wpcf7-radio input:focus + .wpcf7-list-item-label {
    outline: 3px solid var(--ohdr-green-mid);
    outline-offset: 2px;
  }
}

/* ---- 料金カード ---- */
.ohdr-ps .ohdr-price-card {
  margin: 1em 0 0.5em;
  padding: 16px;
  border: 2px solid var(--ohdr-brand);
  border-radius: 8px;
  background: var(--ohdr-tint);
  text-align: center;
}
.ohdr-ps .ohdr-price-card__placeholder {
  margin: 0;
  color: var(--ohdr-muted);
}
.ohdr-ps .ohdr-price-card__selected {
  margin: 0 0 4px;
  font-size: 14px;
}
.ohdr-ps .ohdr-price-card__amount {
  margin: 0;
  font-size: 28px;
  font-weight: 700;
  color: var(--ohdr-green-strong);
}
.ohdr-ps .ohdr-price-card__noscript {
  margin: 0;
}
.ohdr-ps .ohdr-price-note {
  margin: 0 0 1em;
  font-size: 12px;
  color: var(--ohdr-muted);
  text-align: center;
}
/* 方案有效期間（§5 A-1・v14）。來日時間と日數が揃うとJSが hidden を外す。 */
.ohdr-ps .ohdr-plan-period {
  margin: 0 0 0.25em;
  font-size: 15px;
  font-weight: 700;
  color: var(--ohdr-green-strong);
  text-align: center;
}
.ohdr-ps .ohdr-plan-period[hidden] {
  display: none;
}

/* 料金表直下の案内1行（§6-1 追加処置E）。ショートコード出力ではなく
   フォームタブ側に置く <p> のため、.ohdr-price 外にスコープする。 */
.ohdr-ps .ohdr-price-note-sub {
  margin: 0 0 1.25em;
  font-size: 13px;
  line-height: 1.6;
  color: var(--ohdr-muted);
}

/* ---- 料金一覧表 ---- */
.ohdr-ps .ohdr-price-table-wrap {
  overflow-x: auto;
  margin-bottom: 1.5em;
}
.ohdr-ps .ohdr-price-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}
.ohdr-ps .ohdr-price-table th,
.ohdr-ps .ohdr-price-table td {
  border: 1px solid #ddd;
  padding: 8px 6px;
  text-align: center;
  white-space: nowrap;
}
.ohdr-ps .ohdr-price-table thead th {
  background: var(--ohdr-green-strong);
  color: #fff;
}
.ohdr-ps .ohdr-price-table tbody th {
  background: #f2f2f2;
  font-weight: 400;
}
.ohdr-ps .ohdr-price-table tbody tr.is-active th,
.ohdr-ps .ohdr-price-table tbody tr.is-active td {
  background: var(--ohdr-tint);
}
.ohdr-ps .ohdr-price-table tbody td.is-active {
  background: var(--ohdr-tint-strong);
  font-weight: 700;
  color: var(--ohdr-green-strong);
}

/* ---- cf-rsv-type 自動選択の説明（JS有効時のみJSが .is-visible を付与） ---- */
.ohdr-autoselect .ohdr-autoselect-note {
  display: none;
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--ohdr-muted);
}
.ohdr-autoselect .ohdr-autoselect-note.is-visible {
  display: block;
}

/* ---- 検証エラーの視認性（§5・v7。対象フォーム内にのみスコープ） ---- */
/* CF7既定のtipは小さく淡いため、文字サイズと前後の余白を確保する */
.rsv-form-wrap .wpcf7-not-valid-tip {
  display: block;
  margin: 6px 0 8px;
  font-size: 14px;
  font-weight: 700;
  line-height: 1.5;
  color: var(--ohdr-error);
}

/* エラー欄そのものの強調。border-colorの変更とinsetの左バーで、
   幅を変えずに（レイアウトを動かさずに）赤い左端を出す。
   :has()非対応ブラウザでもここは効く。 */
.rsv-form-wrap .wpcf7-not-valid {
  border-color: var(--ohdr-error);
  box-shadow: inset 4px 0 0 var(--ohdr-error);
}

/* エラー欄ラッパーの左ボーダー強調（:has()対応ブラウザ）。
   ラッパーはラベル直下の入力ブロック全体を指すため、tipまで含めて赤帯が付く。
   display:block は dd / li の内側で完結し、生年月日の横並び（.flex）は
   flexアイテムが dd 側のため崩れない。 */
@supports selector(:has(*)) {
  .rsv-form-wrap .wpcf7-form-control-wrap:has(.wpcf7-not-valid) {
    display: block;
    box-sizing: border-box;
    border-left: 4px solid var(--ohdr-error);
    padding-left: 10px;
  }
  /* ラッパー側で左帯を出せた場合は、欄内側のバーは重複するので消す */
  .rsv-form-wrap .wpcf7-form-control-wrap:has(.wpcf7-not-valid) .wpcf7-not-valid {
    box-shadow: none;
  }
}

/* ---- 同意ボタン（.cf-agreement 内の acceptance）の中央寄せ ----
   このボタンだけテーマ側で別デザインになっている。
   ・緑のボタン本体は `.select-rsv-type .wpcf7-list-item-label`
     （フォームの <fieldset class="select-rsv-type"> が閉じられていないため、
       同意欄もこのセレクタの配下に入る）
   ・`.cf-agreement .wpcf7-acceptance …:before/:after { content: none !important }`
     でチェック四角の擬似要素は消されている

   左に寄っていた理由は2つ:
   (1) `.cf-agreement { text-align: left }` によりボタン（inline-block）が左寄せ。
       すぐ下の注記は `.note { text-align: center }` で中央のため揃って見えない
   (2) ボタン内の文字が `text-indent: -1rem` で左へずれている。これは消された
       チェック四角のぶんを詰めるための指定で、四角が無いここでは効きすぎている */
.rsv-form-wrap .cf-agreement .wpcf7-form-control-wrap {
  display: block;
  text-align: center;
}
.rsv-form-wrap .cf-agreement .wpcf7-acceptance .wpcf7-list-item-label {
  text-indent: 0;
}
/* チェックボックス用に足した flex 中央揃えとタップ領域の左右パディングは、
   四角が無いこのボタンでは中央寄せを崩すだけなので打ち消す。 */
.rsv-form-wrap .cf-agreement .wpcf7-acceptance .wpcf7-list-item label {
  display: inline-block;
  padding-left: 0;
  padding-right: 0;
}

/* ---- スマホCSS改善（§8 低リスク分・対象フォーム要素にスコープ） ---- */
/* iOSズーム防止: 16px未満のフォントで入力にフォーカスするとズームするため */
.rsv-form-wrap input[type="text"],
.rsv-form-wrap input[type="email"],
.rsv-form-wrap input[type="date"],
.rsv-form-wrap select,
.rsv-form-wrap textarea {
  font-size: 16px;
}

/* radio・checkboxラベルのタップ領域。
   .ohdr-ps のボタン化radio（cf-num-users / cf-period）には当てない。
   詳細度で上書きし合うのを避けるため、対象を既存フィールドのラッパーに限定する。
   ラッパーの指定はCF7の版で書式が違うため両対応にする:
   CF7 5.3以前 = class="wpcf7-form-control-wrap cf-gender"
   CF7 5.4以降 = class="wpcf7-form-control-wrap" data-name="cf-gender" */
.rsv-form-wrap .wpcf7-checkbox .wpcf7-list-item label,
.rsv-form-wrap .wpcf7-acceptance .wpcf7-list-item label,
.rsv-form-wrap .wpcf7-form-control-wrap.cf-gender .wpcf7-list-item label,
.rsv-form-wrap .wpcf7-form-control-wrap[data-name="cf-gender"] .wpcf7-list-item label {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 4px 8px 4px 0;
}

/* ---- .alt-group（グレー背景ブロック）の左右余白 ----
   テーマ側に `.form-body .alt-group { padding: 1rem 0 0.5rem !important }` があり、
   padding-left / padding-right が 0 の !important で固定されている。
   !important を使わない方針のため .alt-group 自身の padding は上書きできない。

   余白は内側の .wpcf7-form-control（radioのgrid / checkboxのflex / select）に付ける。
   ひとつ外側の .wpcf7-form-control-wrap は display:inline のため、
   そこに左右マージンを入れるとブロックレベルの中身の前後に空のインラインフラグメントが
   生まれ、上下にも余白が増えてしまう（実測で確認）。内側のブロック/グリッド側に
   padding を付ければ左右だけが変わり、上下は元のまま保たれる。

   人數・天數のボタングリッドを含む全ブロックに一様に効かせる。 */
.rsv-form-wrap .form-body .alt-group > .wpcf7-form-control-wrap > .wpcf7-form-control {
  padding-left: 3px;
  padding-right: 3px;
}

/* チェックボックス群（過去病史・女性關聯詢問）の折り返しと行間 */
.rsv-form-wrap .alt-group .wpcf7-checkbox {
  display: flex;
  flex-wrap: wrap;
  column-gap: 12px;
  row-gap: 4px;
}
.rsv-form-wrap .alt-group .wpcf7-checkbox .wpcf7-list-item {
  margin-left: 0;
}
/* ---- チェックボックスの四角とテキストの上下中央揃え ----
   テーマ（extention-child/asset/css/custom.css）は
     input[type=checkbox] { position:absolute; visibility:hidden }
   で実物のチェックボックスを隠し、
     .wpcf7-list-item-label の ::before（四角）と ::after（チェック）
   でカスタムチェックボックスを描画している。
   この擬似要素は label（テーマが position:relative を付与）を基準に
   `top: 0` で固定されているため、ラベル側を flex で中央揃えにしても
   文字だけが動いて四角は上端に残る＝ずれて見える。
   四角とチェックを同じ量だけ下げ、ラベルの高さの中央に来るようにする。 */
.rsv-form-wrap .wpcf7-checkbox .wpcf7-list-item label,
.rsv-form-wrap .wpcf7-acceptance .wpcf7-list-item label {
  display: inline-flex;
  align-items: center;
  line-height: 1.4;
}
/* 四角: 元は top:0。高さ1.8remの半分だけ持ち上げて中央に置く。
   クラスを重ねているのは、テーマの
   `.select-rsv-type .wpcf7-checkbox input+span:before`（0,3,3）と
   詳細度が並ぶのを避け、読み込み順に依存せず確実に上書きするため
   （!important を使わずに済ませる）。 */
.rsv-form-wrap .wpcf7-checkbox.wpcf7-checkbox input[type="checkbox"] + span::before,
.rsv-form-wrap .wpcf7-acceptance.wpcf7-acceptance input[type="checkbox"] + span::before {
  top: calc(50% - 0.9rem);
}
/* チェック: 元は四角の上端から 0.4rem の位置。
   四角が 0.9rem 上がったぶんを差し引いて相対位置を保つ（0.9 − 0.4 = 0.5rem）。
   transform: rotate(45deg) はテーマ側のまま触らない。 */
.rsv-form-wrap .wpcf7-checkbox.wpcf7-checkbox input[type="checkbox"] + span::after,
.rsv-form-wrap .wpcf7-acceptance.wpcf7-acceptance input[type="checkbox"] + span::after {
  top: calc(50% - 0.5rem);
}

/* ---- チェックボックスのチェック色を1色に統一 ----
   テーマ（custom.css）はチェック時の四角（::before）の背景を位置で塗り分けている:
     ・汎用（代表者ブロック等）      : #2aa1c0（青緑）  … 3201行
     ・.select-rsv-type 配下の中間   : #0081a2（濃い青）… 3086行
     ・同 .first（最初の項目）       : #0faad8（明るい青）… 3091行
     ・同 .last（最後の項目）        : #40BC50（緑）    … 3095行
   フォームの <fieldset class="select-rsv-type"> が閉じられていないため、
   同行者ブロック・同意チェックはすべてこの塗り分けの配下に入り、
   1つのチェックボックス群の中で3色に分かれて見える。
   ブランド緑（--ohdr-green-strong）に統一する。白いチェックマーク（::after）
   とのコントラストは 6.58:1 で十分。
   各セレクタはテーマ側の対応セレクタに .rsv-form-wrap を足して
   詳細度で1段ずつ上回る（読み込み順に依存しない・!important不使用）。 */
.rsv-form-wrap .wpcf7-checkbox input[type="checkbox"]:checked + span::before,
.rsv-form-wrap .wpcf7-acceptance input[type="checkbox"]:checked + span::before,
.rsv-form-wrap .select-rsv-type .wpcf7-checkbox input[type="checkbox"]:checked + span::before,
.rsv-form-wrap .select-rsv-type .wpcf7-checkbox .first input[type="checkbox"]:checked + span::before,
.rsv-form-wrap .select-rsv-type .wpcf7-checkbox .last input[type="checkbox"]:checked + span::before {
  background: var(--ohdr-green-strong);
  border-color: var(--ohdr-green-strong);
}

/* 生年月日selectの幅・並び。
   テーマ側に `.form-body dd:not(:last-child) { padding: 0 0 12px 0 }` があり、
   年・月（＝not last-child）にだけ下パディング12pxが付く。
   そこへ align-items:center を掛けると高さの違う箱を中央で揃えるため、
   最後の「日」だけが下にずれて見える。パディングを打ち消したうえで
   上端揃えにして、3つのselectの上端と高さを一致させる。
   セレクタは `> dd` まで含めてテーマ側(0,2,1)より詳細度を高くしている。 */
.rsv-form-wrap .form-body .flex {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: flex-start;
}
.rsv-form-wrap .form-body .flex > dd {
  margin: 0;
  padding-top: 0;
  padding-bottom: 0;
}
/* ラッパー側の余白も揃える（テーマの .inline > * は inline-block） */
.rsv-form-wrap .form-body .flex > dd .selectbox-arrow,
.rsv-form-wrap .form-body .flex > dd .inline {
  margin: 0;
  padding: 0;
  vertical-align: top;
}
.rsv-form-wrap .form-body .flex .selectbox-arrow select {
  min-width: 5.5em;
  vertical-align: top;
}
