/*
 * 人物選択モーダル共通スタイル。
 * index.html (初回解析) / review.html (再解析) / asset.html (受け手向け作成)
 * で同じ id 構造を持ち、このファイル 1 つで全ページのスタイルを担当する。
 *
 * 重複対策のため、各ページの <style> ブロックには "Player selection modal"
 * セクションを残さないこと（重複定義の検査は tests/test_index_static.py の
 * test_review_static.py 系で担保）。
 */

/* Player selection モーダルが乗るオーバーレイと、ローディング spinner の
 * keyframe。元は review.css のみに置いていたが、asset.html (受け手向け)
 * でも同じ markup を使うため shared に集約した。
 * 注: ``[hidden]`` 属性ではなく ``.active`` クラスで開閉する設計。 */
.modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(16, 18, 21, 0.55);
  z-index: 100;
  align-items: center;
  justify-content: center;
}
.modal-overlay.active { display: flex; }

@keyframes spin { to { transform: rotate(360deg); } }
.player-selection-loading .spinner {
  width: 40px;
  height: 40px;
  border: 3px solid var(--kr-hair);
  border-top-color: var(--kr-rec);
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
  margin: 0 auto 16px;
}

.player-selection-box {
  position: relative;
  background: var(--kr-surface); border: 1px solid var(--kr-hair); border-radius: var(--kr-radius-lg); padding: 24px;
  max-width: min(960px, 95vw); width: 95%; max-height: 90vh; overflow-y: auto;
  box-shadow: var(--kr-shadow-pop);
}
.player-selection-box h2 { font-size: 1.05rem; margin-bottom: 6px; padding-right: 32px; }
.player-selection-close {
  position: absolute;
  top: 12px;
  right: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--kr-ink-dim);
  border-radius: var(--kr-radius-sm);
  cursor: pointer;
  transition: background 200ms cubic-bezier(.2,.7,.2,1), color 200ms cubic-bezier(.2,.7,.2,1);
}
.player-selection-close:hover,
.player-selection-close:focus-visible {
  background: var(--kr-accent-sub);
  color: var(--kr-ink);
  outline: none;
}
.player-selection-close[disabled] {
  opacity: .35;
  cursor: not-allowed;
}
.player-selection-close .material-symbols-outlined { font-size: 22px; }
.player-selection-caption { color: var(--kr-ink-dim); font-size: 0.8rem; margin-bottom: 14px; line-height: 1.5; }
.player-selection-caption strong { color: var(--kr-ink); font-weight: 600; }

/* 候補が多すぎる（既定 20 以上）とき、画像の下に出す「解析前の確認」パネル。
   5人制向けでない動画（11人制の引き画等）で選んでも有用な結果になりにくいので、
   あきらめるを主導線にし、解析を続ける系ボタンは「解析を続ける」トグルの中に隠す。
   REC red は使わず warn 寄りの穏やかな surface + ヘアラインで「注意」を示す
   （DESIGN.md 準拠）。footer は通常時は素の wrapper、警告時のみパネル化する。 */
.player-selection-footer {}
.player-selection-footer--warn {
  background: var(--kr-surface-2); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-sm); padding: 14px 16px; margin-top: 4px;
}
.player-selection-warn { margin: 0; }
.player-selection-warn[hidden] { display: none !important; }
.player-selection-warn__head {
  display: flex; align-items: center; gap: 8px; margin-bottom: 6px;
  color: var(--kr-ink); font-weight: 700; font-size: 0.92rem;
}
.player-selection-warn__head .material-symbols-outlined {
  font-size: 20px; color: #c2410c;
}
.player-selection-warn__body {
  color: var(--kr-ink-dim); font-size: 0.82rem; line-height: 1.6; margin: 0;
}
.player-selection-warn__row {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 12px;
}
.player-selection-warn__abandon {
  background: transparent; color: var(--kr-ink); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-md); padding: 8px 16px; cursor: pointer;
  font-size: 0.82rem; font-weight: 700;
  transition: background 200ms cubic-bezier(.2,.7,.2,1);
}
.player-selection-warn__abandon:hover:not(:disabled),
.player-selection-warn__abandon:focus-visible {
  background: var(--kr-accent-sub); outline: none;
}
.player-selection-warn__abandon:disabled { opacity: 0.4; cursor: not-allowed; }
/* 背番号の不一致確認パネル（confirm 直前に出す）。入力された背番号と選択候補の
   OCR 読み取り番号が食い違うと、pipeline に seed されるのは OCR 側なので解析が
   まるごと別人になる。候補が多すぎる警告と同じ warn 寄りの穏やかな面で示す
   （REC red は使わない。DESIGN.md 準拠）。 */
.player-selection-jersey-mismatch {
  background: var(--kr-surface-2); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-sm); padding: 14px 16px; margin: 4px 0 0;
}
/* flex/grid を持たないが、後続の media query 等で display 指定が入っても
   hidden を効かせる（DESIGN.md「[hidden] を CSS で上書き」）。 */
.player-selection-jersey-mismatch[hidden] { display: none !important; }
.player-selection-jersey-mismatch__head {
  display: flex; align-items: center; gap: 8px; margin-bottom: 6px;
  color: var(--kr-ink); font-weight: 700; font-size: 0.92rem;
}
.player-selection-jersey-mismatch__head .material-symbols-outlined {
  font-size: 20px; color: #c2410c;
}
.player-selection-jersey-mismatch__body {
  color: var(--kr-ink-dim); font-size: 0.82rem; line-height: 1.6; margin: 0;
}
.player-selection-jersey-mismatch__row {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px;
}
.player-selection-jersey-mismatch__row[hidden] { display: none !important; }
.player-selection-jersey-mismatch__row .kr-btn[hidden] { display: none !important; }
.player-selection-jersey-mismatch__keep {
  background: transparent; border: 0; padding: 4px 2px;
  color: var(--kr-ink-dim); font-size: 0.8rem; cursor: pointer;
  text-decoration: underline; text-underline-offset: 2px;
  transition: color 200ms cubic-bezier(.2,.7,.2,1);
}
.player-selection-jersey-mismatch__keep:hover,
.player-selection-jersey-mismatch__keep:focus-visible { color: var(--kr-ink); outline: none; }

/* 「解析を続ける」: 続行系ボタンを開く控えめ（灰色小文字）なトグル。 */
.player-selection-continue-toggle {
  background: transparent; border: 0; padding: 4px 2px;
  color: var(--kr-ink-dimmer); font-size: 0.78rem; cursor: pointer;
  text-decoration: underline; text-underline-offset: 2px;
  transition: color 200ms cubic-bezier(.2,.7,.2,1);
}
.player-selection-continue-toggle:hover:not(:disabled),
.player-selection-continue-toggle:focus-visible { color: var(--kr-ink-dim); outline: none; }
.player-selection-continue-toggle[hidden] { display: none !important; }
/* 警告パネルの中で続行系ボタンを開いたときは、上に区切りを入れて分かりやすく。 */
.player-selection-footer--warn .player-selection-actions {
  margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--kr-hair);
}
/* flex を持つので [hidden] を確実に効かせる（DESIGN.md「[hidden] を CSS で上書き」）。 */
.player-selection-actions[hidden] { display: none !important; }
.player-selection-auto-note[hidden] { display: none !important; }

.player-selection-frame-wrap {
  position: relative; width: 100%; background: var(--kr-surface-2); border: 1px solid var(--kr-hair); border-radius: var(--kr-radius-md); overflow: hidden;
  margin-bottom: 14px;
}
.player-selection-frame-wrap img { display: block; width: 100%; height: auto; }
.player-selection-frame-wrap svg {
  position: absolute; inset: 0; width: 100%; height: 100%;
  pointer-events: none;
}
/* 検出ボックスは芝の緑と被って見えづらいので REC red を使う。
   DESIGN.md「REC Red の例外」セクション参照。 */
.player-selection-frame-wrap svg rect {
  fill: transparent; stroke: var(--kr-rec); stroke-width: 3; pointer-events: auto; cursor: pointer;
  transition: stroke 0.15s, fill 0.15s;
}
.player-selection-frame-wrap svg rect:hover { fill: rgba(255,59,48,0.18); }
.player-selection-frame-wrap svg rect.selected {
  stroke: var(--kr-rec); stroke-width: 5; fill: rgba(255,59,48,0.28);
}
/* サンプル疑似体験でロックされた候補（selectableTrackIds 非含有）。
   REC Red を落とした ink の薄枠で「見えるが選べない」を示す。タップは
   JS 側で選択させず案内文言を出す（正本 drafts/sample-experience-design.md D3）。 */
.player-selection-frame-wrap svg rect.player-selection-rect--locked {
  stroke: var(--kr-ink-dimmer); stroke-width: 2; stroke-dasharray: 6 4;
  cursor: not-allowed;
}
.player-selection-frame-wrap svg rect.player-selection-rect--locked:hover {
  fill: transparent;
}
/* OCR で背番号が locked された候補にだけ出すバッジ。識別層を効かせるには
   anchor_jersey が seed される必要があるので、ユーザーに「番号が読めてる候補」
   を選んでもらうための視覚的ヒント。 */
.player-selection-frame-wrap svg .player-selection-jersey-badge circle {
  fill: var(--kr-rec); stroke: #fff; stroke-width: 1.5;
}
.player-selection-frame-wrap svg .player-selection-jersey-badge text {
  fill: #fff; font-family: var(--kr-font-mono); font-weight: 700;
  letter-spacing: 0;
}
/* faint バッジ: OCR で番号が locked だが「同番号で最多読み」の勝者ではない候補。
   勝者バッジ（shirt_color 塗りつぶし + 太字白/黒文字）と明確に区別するため、
   色付きの塗りは使わず、ink 系の半透明な中立背景＋細字の控えめな見た目にする
   （「読み取り候補あり」であって確定ではないと伝える）。REC red は使わず ink の
   薄さで表現（DESIGN.md 準拠）。芝・シャツ等どんな背景でも文字が読めるよう、
   背景は暗め半透明、文字は明るめ半透明にして最低限のコントラストを確保する。
   `.player-selection-jersey-badge` と同じ 1 class + 1 element の specificity
   だとソース順依存になるため、2 class 連結で確実に上書きする
   （AGENTS.md「Modifier クラスは base クラスを再宣言する @media より specificity
   を上げる」と同じ作法）。 */
.player-selection-frame-wrap svg
  .player-selection-jersey-badge.player-selection-jersey-badge--faint circle {
  fill: rgba(16, 18, 21, 0.45); stroke: rgba(16, 18, 21, 0.65); stroke-width: 1;
}
.player-selection-frame-wrap svg
  .player-selection-jersey-badge.player-selection-jersey-badge--faint text {
  fill: rgba(255, 255, 255, 0.92); font-family: var(--kr-font-mono); font-weight: 500;
  letter-spacing: 0;
}

.player-selection-empty {
  color: var(--kr-ink-dim); font-size: 0.85rem; text-align: center; padding: 24px 0;
}
.player-selection-actions {
  display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; align-items: center;
}
/* btn-secondary / btn-primary はモーダル内（候補側 + video preview 側）の
   両方のアクション行に適用する。スコープを広めに取らないと、別の場面から
   探す UI のボタンが unstyled になる regression を踏む。 */
.player-selection-actions .btn-secondary,
.player-selection-video-row .btn-secondary {
  background: transparent; color: var(--kr-ink-dim); border: 1px solid var(--kr-hair); border-radius: var(--kr-radius-md);
  padding: 8px 14px; cursor: pointer; font-size: 0.82rem;
}
.player-selection-actions .btn-secondary:hover:not(:disabled),
.player-selection-video-row .btn-secondary:hover:not(:disabled) {
  background: var(--kr-accent-sub); color: var(--kr-ink);
}
.player-selection-actions .btn-secondary:disabled,
.player-selection-video-row .btn-secondary:disabled {
  opacity: 0.4; cursor: not-allowed;
}
.player-selection-actions .btn-primary,
.player-selection-video-row .btn-primary {
  background: var(--kr-accent); color: var(--kr-accent-ink); border: none; border-radius: var(--kr-radius-md);
  padding: 8px 20px; cursor: pointer; font-size: 0.85rem; font-weight: 700;
  transition: filter 0.15s;
}
.player-selection-actions .btn-primary:hover:not(:disabled),
.player-selection-video-row .btn-primary:hover:not(:disabled) {
  filter: brightness(1.06);
}
.player-selection-actions .btn-primary:disabled,
.player-selection-video-row .btn-primary:disabled {
  opacity: 0.4; cursor: not-allowed;
}
.player-selection-status {
  color: var(--kr-ink-dim); font-size: 0.8rem;
}
/* 「この動画の解析をあきらめる」: 11 人制等で選手が小さすぎて選べないと
   分かったときに無駄解析を避けるための控えめな導線。左下にグレーの小さい
   テキストリンクとして置き、margin-right:auto で右側のアクション群と分ける。
   破壊的操作なので JS 側で confirm を挟む。 */
.player-selection-abandon {
  margin-right: auto;
  background: transparent; border: 0; padding: 4px 2px;
  color: var(--kr-ink-dimmer); font-size: 0.75rem; cursor: pointer;
  text-decoration: underline; text-underline-offset: 2px;
  transition: color 200ms cubic-bezier(.2,.7,.2,1);
}
.player-selection-abandon:hover:not(:disabled),
.player-selection-abandon:focus-visible {
  color: var(--kr-ink-dim); outline: none;
}
.player-selection-abandon:disabled { opacity: 0.4; cursor: not-allowed; }
.player-selection-abandon[hidden] { display: none !important; }
.player-selection-auto-note {
  color: var(--kr-ink-dim); font-size: 0.75rem; text-align: center; margin: 8px 0 0;
}
.player-selection-loading {
  display: none; text-align: center; padding: 40px 20px; color: var(--kr-ink-dim); font-size: 0.85rem;
}
.player-selection-loading.active { display: block; }
.player-selection-loading .spinner { margin: 0 auto 16px; }
.player-selection-frame-wrap .frame-overlay {
  /* 検出待ち中は不透明にして旧フレーム + 旧 bbox を完全に隠す。
     半透明 (旧 rgba(242,241,234,0.72)) だと旧候補が透けて見え、ユーザーが
     「候補選択に戻った」と勘違いして「別の場面から探す」を再操作してしまう
     (issue #413)。frame-wrap と同じ surface-2 で塗り、ただの読み込みパネルに
     見せる。 */
  display: none; position: absolute; inset: 0; z-index: 3;
  background: var(--kr-surface-2);
  align-items: center; justify-content: center; flex-direction: column; gap: 12px;
  color: var(--kr-ink); font-size: 0.85rem;
}
.player-selection-frame-wrap .frame-overlay.active { display: flex; }
.player-selection-frame-wrap .frame-overlay .spinner {
  width: 44px; height: 44px; border: 3px solid var(--kr-hair); border-top-color: var(--kr-rec);
  border-radius: 50%; animation: spin 0.8s linear infinite;
}
.player-selection-frame-wrap.busy svg rect { pointer-events: none; cursor: default; }

/* 「別の場面から探す」を押した後に出る video プレビュー */
.player-selection-video-wrap {
  position: relative; background: var(--kr-surface-2); border: 1px solid var(--kr-hair); border-radius: var(--kr-radius-md);
  padding: 14px; margin-bottom: 14px;
}
.player-selection-video-wrap[hidden] { display: none; }
.player-selection-video-wrap video {
  display: block; width: 100%; max-width: 100%; background: #000; border-radius: var(--kr-radius-sm);
}
.player-selection-video-hint {
  color: var(--kr-ink-dim); font-size: 0.8rem; margin: 10px 0 0; line-height: 1.5;
}
.player-selection-video-row {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px;
}
.player-selection-video-time {
  font-family: var(--kr-font-mono); letter-spacing: .18em; color: var(--kr-ink);
  font-size: 0.9rem; min-width: 60px;
}

/* ── 見分けポイント（distinguish）──────────────────────────────────
   候補タップ後に confirm ボタンの直上へ出すセクション。DOM は
   player-selection.js が動的生成する（index / review / lp-embed 共通）。
   色=真円 / 選択=ピル、REC Red は bbox のみ（DESIGN.md 準拠）。 */
.player-selection-distinguish {
  background: var(--kr-surface-2); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-sm); padding: 12px 14px; margin: 12px 0 0;
}
.player-selection-distinguish[hidden] { display: none !important; }
.player-selection-distinguish__head {
  display: flex; align-items: center; gap: 6px; margin-bottom: 10px;
}
.player-selection-distinguish__title {
  font-size: 0.85rem; font-weight: 700; color: var(--kr-ink);
}
/* 色スウォッチ（帯ごと。タップで色ピッカーを開く） */
.player-selection-distinguish__swatches {
  display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 10px;
}
.player-selection-distinguish__swatches[hidden] { display: none !important; }
.player-selection-distinguish__swatch {
  display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 2px; background: none; border: 0; cursor: pointer;
  font-family: var(--kr-font-sans);
}
.player-selection-distinguish__swatch:focus-visible {
  outline: none;
}
.player-selection-distinguish__swatch:focus-visible .player-selection-distinguish__dot {
  box-shadow: 0 0 0 3px var(--kr-accent-sub);
}
.player-selection-distinguish__dot {
  display: flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%;
  border: 1px solid var(--kr-hair);
  font-size: 0.72rem; font-weight: 700; color: var(--kr-ink-dim);
  transition: box-shadow .12s, border-color .12s;
}
.player-selection-distinguish__swatch[data-empty="true"] .player-selection-distinguish__dot {
  background: var(--kr-surface); border-style: dashed;
}
.player-selection-distinguish__swatch[data-chosen="true"] .player-selection-distinguish__dot {
  border-color: var(--kr-accent); box-shadow: 0 0 0 2px var(--kr-accent-sub);
}
.player-selection-distinguish__swatch[aria-expanded="true"] .player-selection-distinguish__dot {
  border-color: var(--kr-accent); box-shadow: 0 0 0 3px var(--kr-accent-sub);
}
.player-selection-distinguish__band-label {
  font-size: 0.66rem; color: var(--kr-ink-dim);
}
/* 色ピッカー（選んだ帯の候補色を出す。手風琴でスウォッチ直下に開く） */
.player-selection-distinguish__picker {
  background: var(--kr-surface); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-sm); box-shadow: var(--kr-shadow-card);
  padding: 10px 12px; margin: 0 0 10px;
}
.player-selection-distinguish__picker[hidden] { display: none !important; }
.player-selection-distinguish__picker-title {
  display: flex; align-items: baseline; gap: 8px;
  font-size: 0.78rem; font-weight: 700; color: var(--kr-ink); margin-bottom: 8px;
}
.player-selection-distinguish__picker-hint {
  font-family: var(--kr-font-mono); letter-spacing: .12em; text-transform: uppercase;
  font-size: 0.62rem; color: var(--kr-ink-dimmer);
}
.player-selection-distinguish__picker-swatches {
  display: flex; gap: 8px; flex-wrap: wrap;
}
.player-selection-distinguish__chip-color {
  display: inline-flex; flex-direction: column; align-items: center; gap: 4px;
  padding: 4px; background: none; border: 1px solid transparent;
  border-radius: var(--kr-radius-sm); cursor: pointer;
  transition: border-color .12s, box-shadow .12s;
}
.player-selection-distinguish__chip-color[data-on="true"] {
  border-color: var(--kr-accent); box-shadow: 0 0 0 2px var(--kr-accent-sub);
}
.player-selection-distinguish__chip-color:focus-visible {
  outline: none; box-shadow: 0 0 0 3px var(--kr-accent-sub);
}
.player-selection-distinguish__chip-color-dot {
  width: 24px; height: 24px; border-radius: 50%; border: 1px solid var(--kr-hair);
}
/* その帯に占める割合。数値ラベルなので mono + tracking（末尾の字間ぶん左に寄るのを margin で戻す） */
.player-selection-distinguish__chip-color-pct {
  font-family: var(--kr-font-mono); font-size: 0.62rem; line-height: 1;
  letter-spacing: .18em; margin-right: -.18em; color: var(--kr-ink-dim);
}
.player-selection-distinguish__chip-color[data-on="true"] .player-selection-distinguish__chip-color-pct {
  color: var(--kr-accent);
}
.player-selection-distinguish__picker-empty {
  font-size: 0.72rem; color: var(--kr-ink-dim); margin: 0;
}
/* 「指定なし」チップ: 色の無さを斜線で示す（色を足さずに空を表す） */
.player-selection-distinguish__chip-color-dot[data-none="true"] {
  background: linear-gradient(135deg,
    transparent 0 46%, var(--kr-ink-dimmer) 46% 54%, transparent 54% 100%);
}
/* 背番号（常時入力） */
.player-selection-distinguish__jersey {
  display: flex; align-items: center; gap: 8px; margin: 0 0 12px;
}
.player-selection-distinguish__jersey-label {
  font-size: 0.78rem; font-weight: 500; color: var(--kr-ink);
}
.player-selection-distinguish__jersey-input {
  width: 64px; padding: 5px 8px;
  font-family: var(--kr-font-mono); letter-spacing: .1em; font-size: 0.9rem;
  text-align: center; color: var(--kr-ink);
  background: var(--kr-surface); border: 1px solid var(--kr-hair);
  border-radius: var(--kr-radius-sm);
}
.player-selection-distinguish__jersey-input:focus-visible {
  outline: none; border-color: var(--kr-accent); box-shadow: 0 0 0 3px var(--kr-accent-sub);
}
.player-selection-distinguish__jersey-ocr {
  font-family: var(--kr-font-mono); letter-spacing: .12em; text-transform: uppercase;
  font-size: 0.6rem; color: var(--kr-accent);
  padding: 2px 8px; background: var(--kr-accent-sub); border-radius: 999px;
}
.player-selection-distinguish__jersey-ocr[hidden] { display: none !important; }
/* OCR 誤読などで入った背番号を空に戻す薄いリンク（値があるときだけ表示） */
.player-selection-distinguish__jersey-clear {
  appearance: none; border: none; background: none; padding: 0; cursor: pointer;
  font-family: var(--kr-font-sans); font-size: 0.72rem; color: var(--kr-ink-dimmer);
  text-decoration: underline; text-underline-offset: 2px;
}
.player-selection-distinguish__jersey-clear:hover { color: var(--kr-ink-dim); }
.player-selection-distinguish__jersey-clear:focus-visible {
  outline: 2px solid var(--kr-accent); outline-offset: 2px; border-radius: 2px;
}
.player-selection-distinguish__jersey-clear[hidden] { display: none !important; }
/* 主に何で見分ける（複数選択・選択順＝優先） */
.player-selection-distinguish__primary-head {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  font-size: 0.78rem; font-weight: 500; color: var(--kr-ink); margin-bottom: 8px;
}
.player-selection-distinguish__primary-hint {
  font-size: 0.68rem; color: var(--kr-ink-dimmer);
}
.player-selection-distinguish__chips {
  display: flex; gap: 8px; flex-wrap: wrap;
}
.player-selection-distinguish__chips .kr-chip {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--kr-font-sans); font-size: 0.82rem; font-weight: 500;
  padding: 5px 12px; background: var(--kr-surface); color: var(--kr-ink);
  border: 1px solid var(--kr-hair); border-radius: 999px; cursor: pointer;
  transition: background .12s, border-color .12s;
}
.player-selection-distinguish__chips .kr-chip[data-active="true"] {
  background: var(--kr-accent); color: var(--kr-accent-ink); border-color: var(--kr-accent);
}
.player-selection-distinguish__chips .kr-chip:disabled {
  opacity: .45; cursor: not-allowed;
}
.player-selection-distinguish__chips .kr-chip .material-symbols-outlined {
  font-size: 16px;
}
/* 優先度の順番バッジ（選択順）。選択時のみ内容が入る */
.player-selection-distinguish__order {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 15px; height: 15px; padding: 0 3px;
  font-family: var(--kr-font-mono); font-size: 0.6rem; line-height: 1;
  border-radius: 999px; background: var(--kr-accent-ink); color: var(--kr-accent);
}
.player-selection-distinguish__order:empty { display: none; }
.player-selection-distinguish__note {
  font-size: 0.72rem; color: var(--kr-ink-dimmer); margin: 8px 0 0;
}

/* ── 候補の大きさ（案4改 + 案5）───────────────────────────────────
   anchor が小さいと再取得ゲートに届かず identity が全落ちする（正本:
   docs/accuracy-2026-08-15-anchor-reacquisition-overview.md）。枠の上に情報を
   載せる案は 390px で bbox が 4.9px にしかならず成立しないため、候補を実スケールの
   サムネで切り出して並べる。寸法は JS (_renderSizeStrip) が体高比から決める。

   目安のゴーストは**左端に固定**し、その上辺から点線を右へ引く。スクロールするのは
   候補側だけなので、横に流しても比較の基準が画面から消えない。 */
.player-selection-size { margin-top: 10px; }
.player-selection-size[hidden] { display: none !important; }
.player-selection-size__row {
  position: relative; display: flex; align-items: flex-end; gap: 8px;
}
/* 目安のゴースト（左端固定・スクロールしない）。寸法は JS が入れる。 */
.player-selection-size__anchor {
  flex: 0 0 auto; display: flex; flex-direction: column; align-items: center;
}
.player-selection-size__ghost {
  border: 1px dashed var(--kr-ink-dimmer); border-radius: 3px;
  background: repeating-linear-gradient(
    135deg, rgba(16, 18, 21, .05) 0 6px, transparent 6px 12px);
}
/* bbox 下のラベル行（「目安」「選択中」）。未選択のカードも空のまま高さを確保して
   全体の底辺を揃える。 */
.player-selection-size__tag {
  display: block; height: 15px; line-height: 15px; white-space: nowrap;
  font-family: var(--kr-font-mono); font-size: 0.5rem; letter-spacing: .06em;
  color: var(--kr-ink-dim); text-align: center;
}
.player-selection-size__card.is-selected .player-selection-size__tag {
  color: var(--kr-accent); font-weight: 700;
}
/* ゴーストの上辺から右端まで引く点線。ラベルは置かない（高さを使わない）。 */
.player-selection-size__ref {
  position: absolute; right: 0; z-index: 1;
  border-top: 1px dashed var(--kr-ink-dimmer); pointer-events: none;
}
.player-selection-size__scroll {
  flex: 1 1 auto; min-width: 0;
  overflow-x: auto; -webkit-overflow-scrolling: touch;
}
.player-selection-size__strip {
  display: flex; align-items: flex-end; gap: 6px; width: max-content;
}
.player-selection-size__card {
  display: flex; flex-direction: column; justify-content: flex-end; align-items: center;
  padding: 0; border: 0; background: none; cursor: pointer;
  font-family: inherit; flex: 0 0 auto;
}
.player-selection-size__card.is-locked { cursor: not-allowed; }
.player-selection-size__box {
  display: block;
  border-radius: var(--kr-radius-sm); background: var(--kr-surface);
  border: 1px solid var(--kr-hair); overflow: hidden; line-height: 0;
}
/* 選択中は枠（accent）とラベルの両方で示す。 */
.player-selection-size__card.is-selected .player-selection-size__box {
  border-color: var(--kr-accent); box-shadow: 0 0 0 2px rgba(11, 61, 46, .16);
}
.player-selection-size__card:focus-visible .player-selection-size__box {
  outline: 2px solid var(--kr-accent); outline-offset: 2px;
}
.player-selection-size__crop {
  position: relative; overflow: hidden;
  background: var(--kr-surface-2); border-radius: 4px;
}
.player-selection-size__crop i {
  position: absolute; top: 0; display: block; background-repeat: no-repeat;
}
/* 選択中が目安に届かないときだけ出る補足。届いていれば出さない
   （毎回出る注意書きは読まれなくなる）。 */
/* 警告は場所を取らない。1〜2 行に収まる小さめの注記に留める（毎回出るものでは
   ないが、出たときに modal が伸びると選択操作そのものが遠のく）。 */
.player-selection-size__note {
  margin: 6px 0 0; font-size: 0.72rem; line-height: 1.5; color: var(--kr-ink-dim);
}
.player-selection-size__note[hidden] { display: none !important; }
.player-selection-size__note b { color: var(--kr-ink); }
