/*
 * 人物選択モーダル共通スタイル。
 * 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; }
/* 「解析を続ける」: 続行系ボタンを開く控えめ（灰色小文字）なトグル。 */
.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);
}
/* 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;
}

.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;
}
