@charset "utf-8";

/* ============================================================
   ピックアップ関連
   index.php … TOPの「PICK UP」スライダー
   cast.php  … 女の子一覧の「ピックアップのみ表示」トグル

   スライダー本体の見た目（.oz_topSlide_list*）は css/style.css と
   css/sp_style.css に元から入っているものをそのまま使っているので、
   ここにはそれだけでは足りないぶんだけを書いている。
   ============================================================ */

/* ---- TOPのPICK UPスライダー ------------------------------- */
/* カード自体は cast.php と同じ .oz_castListItem をそのまま使うので、
   見た目は css/style.css 側の定義がそのまま効く。ここはスライダーの器だけ。
   （旧スライダー .oz_topSlide_list は overflow: visible ＋ JSで幅を直接指定する作りで
     枠からはみ出したため使わず、slickの標準的な形で組み直した 2026-08-22） */

.oz_pickupList {
  position: relative;
  margin-bottom: 30px;
}

/* スライド間の余白。カードに直接 padding を付けると
   .oz_castListItem の背景・角丸・影が余白まで広がってしまうので、
   1枚外側のラッパーで取る。15px×2＝30px で一覧のグリッド（gap: 30px）と揃う */
.oz_pickupSlide {
  padding: 0 5px;
  box-sizing: border-box;
}

/* slickの初期化前に全カードが縦積みで一瞬見えるのを防ぐ。
   初期化されると .slick-initialized が付いてこの指定は外れる */
.oz_pickupSlider:not(.slick-initialized) {
  display: flex;
  overflow: hidden;
}

.oz_pickupSlider:not(.slick-initialized) .oz_pickupSlide {
  flex: 0 0 25%;
}

/* .slick-list は overflow: hidden なので、カードのホバー時の浮き上がり
   （.oz_castListItem:hover の translateY(-8px)）と影が切れてしまう。
   上下に余白を作って逃がす */
.oz_pickupSlider .slick-list {
  padding: 12px 0 20px;
}

/* 矢印。旧スライダーと同じ画像（images/oz_prev.png / oz_next.png）を使う */
.oz_pickupSlider .prev,
.oz_pickupSlider .next {
  position: absolute;
  top: 38%; /* 50% だとカード下部の出勤時間に被るので上げる 20261106 */
  transform: translateY(-50%);
  z-index: 10;
  cursor: pointer;
}

.oz_pickupSlider .prev {
  left: -20px;
}

.oz_pickupSlider .next {
  right: -20px;
}

.oz_pickupSlider .prev img,
.oz_pickupSlider .next img {
  display: block;
}

/* 画面が狭いときは矢印がカードに重なるので内側に寄せる */
@media (max-width: 1200px) {
  .oz_pickupSlider .prev {
    left: 0;
  }

  .oz_pickupSlider .next {
    right: 0;
  }
}

/* ---- ランキングの順位バッジ -------------------------------- */
/* カードは PICK UP と同じ .oz_castListItem。左上に順位を重ねる。
   .oz_castListItem は position: relative / overflow: hidden なのでカード内に収まる */

.oz_rankBadge {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 3;
  width: 46px;
  height: 46px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-bottom-right-radius: 12px;
  background: #6b5f5c;
  color: #fff;
  font-family: "Castoro Titling", serif;
  line-height: 1;
}

.oz_rankBadge__num {
  font-size: 20px;
  font-weight: bold;
}

/* 1〜3位は色を変えて目立たせる */
.oz_rankBadge--1 {
  background: linear-gradient(135deg, #d4af37, #f0d97a);
  color: #4a3b12;
}

.oz_rankBadge--2 {
  background: linear-gradient(135deg, #9a9a9a, #d5d5d5);
  color: #3a3a3a;
}

.oz_rankBadge--3 {
  background: linear-gradient(135deg, #a4703c, #d3a06a);
  color: #3d2a15;
}

/* ---- ranking.php（下層ページ）でのセクション余白 ------------ */
/* .oz_TopSecCupon はTOPページ用に padding: 100px 0 120px を持っているため、
   そのままだとページタイトル「ランキング」との間が大きく空いてしまう。
   news.php / events.php など他の下層ページと同じ詰まり方に揃える */

.oz_rankingSec--page {
  padding: 0 0 50px;
}

/* 2つ目以降は見出しの前に区切りの余白を入れる */
.oz_rankingSec--page + .oz_rankingSec--page {
  padding-top: 10px;
}

/* ---- 女の子一覧の絞り込みバー ----------------------------- */

.oz_castFilter {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin: 0 auto 20px;
}

.oz_castFilterBtn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 22px;
  border: 1px solid #f17066;
  border-radius: 100px;
  background: #fff;
  color: #f17066;
  font-family: inherit;
  font-size: 14px;
  line-height: 1;
  letter-spacing: 0.04em;
  cursor: pointer;
  transition: background-color 0.25s ease, color 0.25s ease;
}

/* 押されている状態。aria-pressed をそのまま見た目に使うことで、
   JS側でクラスの付け外しを二重管理しなくて済む */
.oz_castFilterBtn[aria-pressed="true"] {
  background: #f17066;
  color: #fff;
}

.oz_castFilterBtn:hover {
  opacity: 0.85;
}

/* フリータグのチップ。件数が読めないので、ピックアップより一回り小さく控えめにする。
   タグは管理画面（config.php）で自由に増やせるため、行が増えても崩れないよう wrap 前提 */
.oz_castFilter--tag {
  gap: 8px;
  margin-bottom: 24px;
}

/* 区分の見出し（個性／プレイスタイル）。チップと同じ行の左端に置く */
.oz_castFilterLabel {
  display: inline-flex;
  align-items: center;
  padding-right: 4px;
  font-size: 13px;
  font-weight: bold;
  color: #6b5f5c;
}

.oz_castTagBtn {
  padding: 8px 16px;
  border-color: rgba(58, 50, 48, 0.25);
  color: #6b5f5c;
  font-size: 13px;
}

.oz_castTagBtn[aria-pressed="true"] {
  border-color: #f17066;
  background: #f17066;
  color: #fff;
}

/* 新人ボタン。ピックアップ（コーラル）と横に並ぶので、色で見分けられるようにする */
.oz_castFilterBtn--newface {
  border-color: #4bb3a5;
  color: #4bb3a5;
}

.oz_castFilterBtn--newface[aria-pressed="true"] {
  background: #4bb3a5;
  border-color: #4bb3a5;
  color: #fff;
}

/* ---- 新人のNEWバッジ --------------------------------------- */
/* カードは cast / schedule / waiting 共通の .oz_castListItem。
   左上は .oz_shopLogo（position:absolute / z-index:10）が占有しているので右上に置く。
   .oz_castListItem は position:relative / overflow:hidden なのでカード内に収まる */

.oz_newBadge {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 11;
  padding: 5px 12px;
  border-bottom-left-radius: 12px;
  background: #4bb3a5;
  color: #fff;
  font-size: 12px;
  font-weight: bold;
  letter-spacing: 0.06em;
  line-height: 1;
}

/* ---- カードの一言コメント（1行マーキー）20260908 ---------------- */
/* 女の子カードのスリーサイズ行（.oz_castListSize）の直後に1行だけ出す。
   cast.php / schedule.php / waiting.php / index.php（PICK UP）/
   include/ranking_section.php の5箇所で共通。

   収まっていれば左揃えで静止し、はみ出したときだけ右→左へ流れる。
   はみ出し判定・テキストの複製・アニメーションは js/common_ui.js の
   ozSetupCastCommentMarquee()。

   値は API の girl_short_comment（管理画面 girlData.php の基本設定タブ、
   またはキャストマイページ mypage/profile.php で入力）。 */

.oz_castComment {
  /* 左右の余白は padding ではなく margin。
     padding は clientWidth に含まれてしまい、JSのはみ出し判定
     （track.scrollWidth > box.clientWidth）が実際より広い幅で行われてズレる */
  margin: 0 20px 12px;
  height: 1.4em;          /* 未入力でも1行ぶん確保して、グリッドのカード高さを揃える */
  overflow: hidden;
  font-size: 12px;        /* サイズ行（14px）より一段小さく、添え書きとして読ませる */
  line-height: 1.4;
  color: #7d7370;         /* 白カード用の暖色グレー。白地でコントラスト比 約4.7:1（AA） */
  text-align: left;       /* .oz_castListSize は text-align:center なので明示的に上書きする */
  white-space: nowrap;
}

/* .oz_castListSize は css/style.css:2650 で padding: 0 20px 15px を持つ。
   style.css は本番 ikenai.jp と共用で触れないので、
   詰めるぶんはこちら側の負マージンで吸収する（15px → 実質6px） */
.oz_castListSize + .oz_castComment {
  margin-top: -9px;
}

.oz_castComment__track {
  display: inline-flex;   /* 収縮幅＝中身の最大幅になるので scrollWidth が素直に取れる */
  vertical-align: top;    /* ベースライン合わせで下にずれて切れるのを防ぐ */
  white-space: nowrap;
}

/* ループのつなぎ目（文末と次の文頭）の間隔。
   複製にも同じ padding が付くので translateX(-50%) が「複製1つぶん」と正確に一致する */
.oz_castComment__text {
  padding-right: 3em;
}

/* 実際に流れているものだけレイヤーに上げる。
   女性一覧は150枚以上あるので、全カードに will-change を付けると重くなる */
.oz_castComment.is-flowing .oz_castComment__track {
  will-change: transform;
}

/* element.animate が無い端末向けのフォールバック（先頭の3秒静止は無し） */
.oz_castComment.is-marquee .oz_castComment__track {
  animation: ozCastCommentMarquee var(--ozCastCommentDur, 20s) linear infinite;
}

@keyframes ozCastCommentMarquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
  .oz_castComment.is-marquee .oz_castComment__track {
    animation: none;
  }
}

/* タブレット。css/style.css:2754 で .oz_castListSize が
   padding: 0 15px 12px / font-size: 13px になるのに合わせる */
@media (max-width: 768px) {
  .oz_castComment {
    margin: 0 15px 10px;
    font-size: 11px;
  }

  .oz_castListSize + .oz_castComment {
    margin-top: -6px;   /* 12px → 実質6px */
  }
}

/* ---- SP: 絞り込みのアコーディオン（2026-11-06） ------------------
   cast.php / schedule.php / waiting.php で、名前検索〜フリータグを
   .oz_filterPanel > .oz_filterPanelInner で囲み、SP（768px以下）では
   「項目検索」ボタン（.oz_filterToggleBtn）で開閉する。
   PC ではボタンを出さず、ラッパー2つを display:contents にして
   以前と同じ流れ（schedule.php は .oz_scheduleTools の flex 子）にする。
   開閉状態は .oz_filterPanel.is-open とボタンの aria-expanded（js/cast_filter.js） */

.oz_filterToggleBtn {
  display: none;
}

.oz_filterPanel,
.oz_filterPanelInner {
  display: contents;
}

@media (max-width: 768px) {
  .oz_filterToggleBtn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    box-sizing: border-box;
    width: 100%;
    max-width: 350px;
    margin: 0 auto 20px;
    padding: 10px 16px 10px 18px;
    border: 2px solid #ddd;
    border-radius: 25px;
    background: #fff;
    color: #333;
    font-family: inherit;
    font-size: 14px;
    font-weight: bold;
    line-height: 1.4;
    letter-spacing: 0.04em;
    cursor: pointer;
    transition: border-color 0.3s ease;
  }

  .oz_filterToggleBtn i {
    color: #f17066;
    transition: transform 0.3s ease;
  }

  .oz_filterToggleBtn[aria-expanded="true"] {
    border-color: #f17066;
  }

  .oz_filterToggleBtn[aria-expanded="true"] i {
    transform: rotate(180deg);
  }

  /* 選択中の条件数。何も選んでいないときは JS が hidden を付ける */
  .oz_filterToggleCount {
    display: inline-block;
    min-width: 20px;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 10px;
    background: #f17066;
    color: #fff;
    font-size: 11px;
    font-weight: bold;
    line-height: 18px;
    text-align: center;
    vertical-align: 1px;
  }

  .oz_filterToggleCount[hidden] {
    display: none;
  }

  /* 高さ 0fr → 1fr で滑らかに開閉する（内側は overflow:hidden が必要） */
  .oz_filterPanel {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.3s ease;
  }

  .oz_filterPanel.is-open {
    grid-template-rows: 1fr;
  }

  .oz_filterPanelInner {
    display: block;
    min-height: 0;
    overflow: hidden;
    visibility: hidden;
    transition: visibility 0s linear 0.3s;
  }

  /* 開いたときは入力欄のフォーカス枠（box-shadow 3px）が overflow で切れないよう少し余白を取る */
  .oz_filterPanel.is-open .oz_filterPanelInner {
    padding: 4px 0;
    visibility: visible;
    transition: none;
  }
}

@media (max-width: 480px) {
  .oz_filterToggleBtn {
    max-width: none;
    width: calc(100% - 30px);
    margin-bottom: 15px;
    font-size: 13px;
  }
}
