/* =====================================================================
 * CSS 目次 (詳細は MAP.md)
 *   [CSS-0] 変数・base・共通 (.btn / ボタンの読み込み中 .btn.is-loading + .spinner)
 *   [CSS-1] レイアウト (header / main / card / overlay / modal / drawer / toast)
 *   [CSS-2] 台帳 (#pl-* / 並び替え .pl-sort / 表示設定 .pl-cols / レーンセル多段 .ln / 2026-09-15: 参加列 .col-partake / 2026-09-17: 旧チーム指定列 .desig は事前配置に一本化され撤去)
 *   [CSS-3] 参加者 (#pt-*)
 *   [CSS-4] 結果 (#rs-*)
 *   [CSS-5] フォーム (#pm-* / #cfg-*)
 * ===================================================================== */

/* ===================== [CSS-0] 変数・base・共通 ===================== */
:root{
  --bg:#0f1420; --bg2:#161d2c; --bg3:#1e2740; --line:#2b3550;
  --fg:#e7ecf5; --muted:#8c99b5; --accent:#5b8cff; --accent2:#3a6bff;
  --good:#3fbf7f; --warn:#e0a53a; --bad:#e0603a;
  --teamA:#4a8cff; --teamB:#ff7a59;
  --radius:12px; --shadow:0 8px 24px rgba(0,0,0,.35);
  --font-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans JP",sans-serif;
  --font-display:var(--font-body);
}
/* 2026-09-22: テーマ・書体（#cfg-drawer「表示設定」・uiPrefsStore）。html[data-theme]/[data-font]属性で
   このrootの色/フォント変数だけを差し替える方式＝コンポーネント側のCSSはvar()参照のみで変更不要。 */
:root[data-theme="hextech"]{   /* ヘクステック: 青×金 */
  --bg:#0a1428; --bg2:#0f2044; --bg3:#1b3255; --line:#3a5a8f;
  --fg:#f0e6d2; --muted:#9aa8c4;
  /* 2026-09-23: 当初は#c8aa6e/#f0c94a（LoLクライアント風の明るい金）だったが、多くのボタンが
     この色を背景に白文字を乗せる作り（.pt-preset-add等）のため、明るすぎて白文字が読みにくかった。
     金の色味は保ちつつ、白文字と十分なコントラストが出る濃さまで暗くした。 */
  --accent:#8a6d1f; --accent2:#6e5619;
  --teamA:#0ac8b9; --teamB:#c8aa6e;
}
:root[data-theme="bloodmoon"]{   /* ブラッドムーン: 赤×黒 */
  --bg:#120808; --bg2:#1c0d0d; --bg3:#2a1414; --line:#4a1f1f;
  --fg:#f5e6e6; --muted:#a98a8a; --accent:#e0334a; --accent2:#ff4d6a;
  --bad:#ff2e2e; --teamA:#4a8cff; --teamB:#e0334a;
}
:root[data-theme="arena"]{   /* アリーナ: ライト */
  --bg:#f5f6fa; --bg2:#ffffff; --bg3:#e9ecf5; --line:#d3d9ea;
  --fg:#1a2030; --muted:#5a6480; --accent:#3a6bff; --accent2:#2851d6;
  --good:#1f9d5c; --warn:#c9860a; --bad:#c93a1f; --teamA:#3a6bff; --teamB:#e0603a;
}
:root[data-theme="emerald"]{   /* エメラルド: 緑×グレー */
  --bg:#0f1a16; --bg2:#16241f; --bg3:#1e332b; --line:#2e4a3f;
  --fg:#e6f2ec; --muted:#8fae9f;
  /* 2026-09-23: --accentは元は--teamAと同じ#2fbf82（明るい緑）だったが、白文字を乗せるボタンの
     背景として使うと明るすぎてコントラストが低かったため、少し濃い緑に調整（--teamAは表示用の
     アクセント色として据え置き、ボタン背景用の--accentだけ分離した）。 */
  --accent:#1f8f61; --accent2:#22a06d;
  --teamA:#2fbf82; --teamB:#e0a53a;
}
:root[data-font="rounded"]{ --font-body:"Hiragino Maru Gothic ProN","BIZ UDGothic","M PLUS Rounded 1c","Segoe UI",sans-serif; }
:root[data-font="mincho"]{ --font-body:"Hiragino Mincho ProN","Yu Mincho","Noto Serif JP",serif; }
:root[data-font="esports"]{ --font-display:"Eurostile","Arial Narrow","Segoe UI",sans-serif; }
:root[data-font="mono"]{ --font-body:"SFMono-Regular","Cascadia Code",Consolas,Monaco,"Noto Sans Mono JP",monospace; }
*{box-sizing:border-box}
/* 2026-09-18: ユーザー報告「D&Dでプレイヤーの枠に落とすと、半分幅のウィンドウでプレイヤー/事前配置の横並びが
   縦積みになり、リロードしないと戻らない」。原因は`syncHeadActionsLayout`と同系統だが別物のバグ：
   `syncPreplaceLayout()`は`.pp-layout`の**幅**を実測して横並び⇔縦積みを判定するが、Windows版Chrome等の
   スクロールバーは表示領域の幅を実際に削る（オーバーレイでなく専有型）。境界付近の幅で、D&Dによる再描画が
   ページの縦の高さをほんの少し増やして縦スクロールバーが新たに出現すると、その分だけ`.pp-layout`の実測幅が
   減り縦積みへ倒れる→縦積みになるとページがさらに縦に伸びる→スクロールバーが出続ける、という自己強化ループに
   陥り、ウィンドウ幅自体は変えていないので再測定のきっかけ（resizeイベント）が来ず戻れなくなっていた。
   `scrollbar-gutter:stable`でスクロールバー分の幅を常に一定に予約しておけば、縦スクロールバーの出現/消失で
   `.pp-layout`の実測幅が変動しなくなり、このループの発生源そのものを断つ。 */
html{scrollbar-gutter:stable}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--fg);
  font:14px/1.5 var(--font-body);
  padding-bottom:80px;
}
/* 2026-09-25: タブ「参加」はsyncJoinFitHeightNow()（[js/07-roster.js]）が.tab-actionsの位置を
   ウィンドウ内にきっちり収まるよう毎回実測調整しているが、body自体が持つこの80pxの下余白は
   どの子要素のgetBoundingClientRect()にも現れず、それでいてdocument.documentElement.scrollHeight
   には確実に加算されるため、計算に含めないと必ず80px前後の余分なページスクロールが残ってしまう
   （ユーザー報告：「全体が表示されている状態なのに、上下に少しだけスクロールする」）。かといって
   単純にその分だけ一覧の高さを削ると、今度は逆に「下が空きすぎ」に見えてしまう（別のユーザー報告）。
   この80pxは元々スクロールする他の画面向けの余白であり、常に画面内に収まる設計のタブ「参加」表示中
   だけは不要なので、表示中だけ0にして一覧側の高さを削らずに済むようにする（syncJoinFitHeightNow()が
   #lt-joinの表示/非表示に応じてbody.jn-fit-activeを付け外しする）。 */
body.jn-fit-active{padding-bottom:0}
h1,h2,h3,h4{margin:0;font-weight:700;font-family:var(--font-display)}
h1{font-size:18px} h2{font-size:15px} h3{font-size:16px} h4{font-size:13px;color:var(--muted)}
.muted{color:var(--muted);font-weight:400}
.hint{font-size:12px}
.hidden{display:none !important}
sup{font-size:9px;color:var(--accent);margin-left:1px}
hr{border:none;border-top:1px solid var(--line);margin:16px 0}
/* 2026-09-18: ユーザー指摘「プレイヤー達/事前配置のスクロールバーの見た目が悪く浮いている」＝Windows既定の
   白っぽい太いスクロールバーがダークテーマの箱の中で浮いて見える問題。アプリ全体（ページ本体＋.pp-players-list/
   .pp-teams等の内側スクロール枠すべて）に細くダーク基調のスクロールバーを統一適用して馴染ませる。
   トラックは透明＝どの背景色の箱に乗っても浮いて見えない。つまみは既定var(--line)（地味）・hoverでvar(--accent)。 */
html{scrollbar-width:thin;scrollbar-color:var(--line) transparent}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:var(--accent)}
::-webkit-scrollbar-corner{background:transparent}

.btn{
  appearance:none;border:1px solid var(--line);background:var(--bg3);color:var(--fg);
  padding:7px 12px;border-radius:9px;font-size:13px;cursor:pointer;font-weight:600;
  transition:filter .12s ease, background .12s ease;
  white-space:nowrap;   /* 2026-09-28: ウィンドウを狭めた時にボタン自身の文字が2〜3行に折り返して崩れるのを防ぐ */
}
.btn:hover{filter:brightness(1.15)}
.btn:disabled{opacity:.4;cursor:not-allowed;filter:none}
/* 2026-09-23: .btn.primaryは元々colorを明示せずbase(.btnのvar(--fg))任せだった。ダークテーマは--fgが
   明るい色なので偶然読めていただけで、アリーナ(ライト)のように--fgが暗い色のテーマでは
   塗り潰し背景(--accent2)の上で暗文字になり読みにくくなる。他の塗り潰しボタン(.pt-preset-add等)と
   同じく明示的に白文字にする。 */
.btn.primary{background:var(--accent2);border-color:var(--accent);color:#fff}
.btn.ghost{background:transparent}
.btn.danger{background:transparent;border-color:var(--bad);color:var(--bad)}
.btn.sm{padding:3px 8px;font-size:12px}
/* 2026-09-23: 旧#cfe0ff/#ffd9cdはダークテーマの暗い背景(--bg3)を前提にした固定の薄色で、
   アリーナ(ライト)のように--bg3が明るいテーマだと背景に溶けて見えなくなっていた（ユーザー報告）。
   .btn.dangerと同じく、枠線と同じ変数(--teamA/--teamB)をそのまま文字色にすることで、
   どのテーマでも背景(--bg3)との間に一定のコントラストが出るようにした。 */
.btn.team-a{border-color:var(--teamA);color:var(--teamA)}
.btn.team-b{border-color:var(--teamB);color:var(--teamB)}
/* 読み込み中ボタン（setBtnBusy）: disabled の減光は上書きしてスピナーをはっきり見せる */
.btn.is-loading:disabled{opacity:1;filter:none;cursor:wait}
.spinner{
  display:inline-block;width:13px;height:13px;margin-right:2px;vertical-align:-2px;
  border:2px solid currentColor;border-right-color:transparent;border-radius:50%;
  animation:spin .7s linear infinite;
}
@keyframes spin{ to{ transform:rotate(360deg); } }

/* ===================== [CSS-1] レイアウト ===================== */
#app-header{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 18px;border-bottom:1px solid var(--line);
  position:sticky;top:0;background:var(--bg);z-index:5;
  flex-wrap:wrap;   /* 2026-09-28: ウィンドウを狭めるとhdr-left/hdr-rightが2行に折り返すようにし、
                       無理に1行へ収めようとして文字や配置が崩れるのを防ぐ（ユーザー報告） */
}
#app-header .tag{font-size:10px;background:var(--bg3);border:1px solid var(--line);border-radius:6px;padding:1px 6px;color:var(--muted);vertical-align:middle}
/* 2026-09-23: #app-headerは.hdr-left（h1＋タブ）と.hdr-right（部屋バナー＋🏠/⚙️ボタン）の2要素だけにして
   justify-content:space-betweenで両端に振り分け、各ラッパー内部は自身のflexで横並びにする。 */
#app-header .hdr-left{display:flex;align-items:center;gap:16px;min-width:0;flex-wrap:wrap}
/* 2026-09-28: hdr-right（部屋バナー＋🛠️/🏠/⚙️ボタン群）も同様にflex-wrap:wrapへ。狭い幅では部屋バナーの
   下にボタン群が回り込む形で2行になり、個々のボタンが押し潰されて文字が折り返すのを防ぐ。 */
#app-header .hdr-right{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}
#app-header .hdr-btns{display:flex;gap:8px;flex-shrink:0}
/* 2026-09-23: ユーザー要望「見出しの横にタブ」。localビュー内の切替（登録/参加/チーム分け）。
   見た目は既存の.pt-order-switch/.pt-order-opt（セグメント式の切替ボタン）と同じパターンを流用。 */
.local-tabs{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:var(--bg)}
.local-tab{border:none;background:transparent;color:var(--muted);font-size:12px;padding:5px 14px;cursor:pointer;white-space:nowrap;line-height:1.2;transition:background .18s ease,color .18s ease}
.local-tab.on{background:var(--accent);color:#fff;font-weight:700}
/* 2026-09-24: ユーザー要望「全画面にしたときにボーダーに合わせてサイズを変更できたりしない？ボーダーから
   〇〇位の距離の上に全体枠のボーダーを持ってくるみたいな感じ」＝固定max-width:1000pxだと、画面を大きく
   （フルスクリーン等）した時に左右に大きな余白ができてしまっていた（例: 1920px幅で左右各460px前後が空白）。
   `main`にはwidthの指定が無くブロック要素として既定でコンテナ幅いっぱいまで伸びる性質のため、max-widthを
   大きく引き上げるだけで「ウィンドウが小さい間は今までどおり画面いっぱい＋固定余白（padding）」「ウィンドウが
   非常に大きい時だけ、際限なく伸びきらないよう2000pxで頭打ちして中央寄せ」という挙動になる。 */
main{max-width:2000px;margin:0 auto;padding:18px}
.view{display:none}
.view.active{display:block}
#view-local.view.active{display:flex;flex-direction:column;gap:16px}
.card{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
/* 2026-09-16: 「チーム分け設定」ヘッダ＝見出しの横に「チーム数」「詳細設定」（.pl-cols流用の開閉ボタン）、右端に「チーム分け実行」。
   2026-09-16後続: 「チーム数」はボタンで開閉させず、常時見えるドロップダウンに変更（ユーザー要望）。 */
.pl-head-left{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pl-teams-inline{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.pl-teams-inline select{font-size:12px;padding:3px 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
/* 2026-09-18: ユーザー要望「チーム分け設定の題名の下に、おすすめ設定という小さな枠をおいてください。＋を○で
   囲ったような記号をその中に用意して、押すとチーム分け設定を作って保存できるようになります」。
   `.pl-head-left`は`flex-wrap:wrap`の横並びのため、この枠だけ`flex-basis:100%`にして自分の行だけで
   折り返させる＝「他の項目より下の行」という配置をレイアウトの再構築なしで実現している。
   2026-09-18後続: ユーザー要望「ウィンドウを半分にした時、題名の横にチーム数・詳細設定・プレイヤー情報更新・
   チーム分け実行が来るように」で、この枠をDOM順序上`.pl-head-left`の**末尾**（詳細設定/プレイヤー情報更新/
   チーム分け実行の後）へ移動。
   2026-09-18後続後続: ユーザー要望「チーム分け実行はおすすめ設定の右側左端に出してほしい」で`#pt-run`を
   枠の右隣へ一時的に移設したが、2026-09-18後続後続後続でユーザー報告「全画面にしたときに横に引っ付いてる
   のがダサい。右下端寄りにできる？」＝全画面だと枠が横に広がりボタンが遠く離れて間延びして見えるとのことで、
   この配置は撤回。`#pt-run`は`.pl-head-left`から出して`.card-head`の直接の子（`.pl-head-left`の直後）に戻し、
   `align-self:flex-end`だけ追加（`.card-head`は`justify-content:space-between`のため右端に寄り、
   `align-items:center`を`#pt-run`だけ`align-self`で上書きして`.pl-head-left`の高さ全体の**下端**に揃う＝
   「右下端寄り」を絶対配置なしで実現）。`.pt-presets-box`は`flex-basis:100%`のまま`.pl-head-left`内の
   独立行に戻った（`.pt-presets-row`は廃止）。
   2026-09-18後続後続後続後続: ユーザー要望「チーム分け実行の一行上くらいにプレイヤー情報更新を持ってこれる？」で、
   `#lv-reimport`（プレイヤー情報更新）を`.pl-head-left`（詳細設定の直後）から出し、新設`.pt-actions-col`
   （`#pt-run`と2人で1つの縦積みグループ）の中・`#pt-run`の直前へ移設。`.pt-actions-col`が`.card-head`の
   直接の子として`.pl-head-left`の右に並び、`align-self:flex-end`+`margin-left:auto`は`#pt-run`個別ではなく
   このグループ全体に付け直した（2ボタンをまとめて同じルールで右下寄せする）。
   2026-09-18後続後続後続後続後続: ユーザー報告「ウィンドウの幅を半分にしたときに、題名・チーム数・詳細設定・
   おすすめ設定欄の横方向にプレイヤー更新やチーム分け実行が来ているようにしてほしい」＝`flex-wrap`のままだと、
   `.pl-head-left`（おすすめ設定の枠を含み幅が広い）と`.pt-actions-col`（2ボタン）が同じ行に収まりきらない
   中間幅（実測700px前後〜1000px弱）で`.pt-actions-col`だけ丸ごと下の行に折り返ってしまい、「横に来る」という
   要望を満たせないケースがあった（`margin-left:auto`で右寄せ自体は直っていたが、折り返って“下”に来ることまでは
   防げていなかった）。flex-wrapは「入りきらなければ折り返す」挙動そのものが前提のため、これをやめて
   `#pl-section .card-head`だけ**CSS Grid（2カラム）**に変更＝`.pl-head-left`（左カラム・残り幅いっぱい）と
   `.pt-actions-col`（右カラム・内容幅）を明示的に別カラムとして固定し、`.pl-head-left`内がどれだけ幅を
   使っても`.pt-actions-col`は原理的に折り返れない（＝常に右に居続ける）ようにした。極端に狭い画面
   （スマホ縦向き想定）では2カラムを維持するとかえって窮屈になるため、`@media (min-width:700px)`でのみ
   Gridを適用していたが、2026-09-18後続後続後続後続後続後続でユーザー要望「幅を小さくしたときに、詳細設定の
   所まで被らないなら、詳細設定やおすすめ設定の真横で右端に出てほしい」＝700pxという固定値は根拠のない
   決め打ちで、実際に見出し行（見出し＋チーム数＋詳細設定）とボタン列が本当に収まるかどうかとは無関係だった
   ため、`syncPreplaceLayout()`と同じ「実測して判定しclassを付け外す」方式に変更（`.pt-head-stacked`が
   付いていなければGrid＝2カラム、それ以外はflex-wrapのまま下に落ちる）。 */
/* margin-left:auto は`.pt-head-stacked`のときのための保険（`.card-head`が`flex-wrap`で折り返し、
   `.pt-actions-col`だけがその行に単独で残った場合、space-betweenは「同じ行に複数アイテムがある時だけ」
   効くため素だとflex-start＝左寄せになってしまう。margin-leftを自動で埋めさせて右寄せを維持する）。 */
.pt-actions-col{display:flex;flex-direction:column;align-items:stretch;gap:6px;align-self:flex-end;margin-left:auto}
#pl-section .card-head:not(.pt-head-stacked){display:grid;grid-template-columns:1fr auto;align-items:end;column-gap:12px}
#pl-section .card-head:not(.pt-head-stacked) .pt-actions-col{margin-left:0}
.pt-presets-box{flex-basis:100%;border:1px solid var(--line);border-radius:10px;padding:6px 8px;display:flex;flex-direction:column;gap:6px}
.pt-presets-head{display:flex;align-items:center;gap:8px}
.pt-presets-title{font-size:12px;font-weight:700;color:var(--muted)}
.pt-preset-add{
  flex:0 0 auto;width:20px;height:20px;border-radius:50%;padding:0;
  border:1px solid var(--accent);color:var(--accent);background:transparent;
  display:inline-flex;align-items:center;justify-content:center;font-size:14px;line-height:1;cursor:pointer;
}
.pt-preset-add:hover{background:var(--accent);color:#fff}
.pt-presets-list{display:flex;flex-wrap:wrap;gap:6px}
.pt-presets-list:empty::before{content:'まだありません（＋で現在の詳細設定を保存できます）';font-size:11px;color:var(--muted)}
.pt-preset-chip{display:inline-flex;align-items:center;background:var(--bg3);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.pt-preset-apply{background:transparent;border:none;color:var(--fg);font-size:11px;padding:3px 6px;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:4px}
.pt-preset-apply:hover{background:var(--accent2);color:#fff}
.pt-preset-tag{font-size:9px;color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:0 4px;line-height:1.4}
.pt-preset-apply:hover .pt-preset-tag{color:#fff;border-color:rgba(255,255,255,.5)}
.pt-preset-del{background:transparent;border:none;border-left:1px solid var(--line);color:var(--muted);font-size:11px;padding:3px 6px;cursor:pointer;line-height:1}
.pt-preset-del:hover{color:var(--bad)}

.overlay{
  position:fixed;inset:0;background:rgba(4,7,14,.6);
  display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:20;overflow:auto;
}
.modal,.drawer{
  background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);width:100%;max-width:440px;padding:20px;display:flex;flex-direction:column;gap:12px;
}
.drawer{max-width:520px}

.toast{
  position:fixed;left:50%;bottom:24px;transform:translateX(-50%);
  background:var(--bg3);border:1px solid var(--line);border-radius:10px;
  padding:10px 16px;font-size:13px;box-shadow:var(--shadow);z-index:40;
}
/* 2026-09-18: 「希望レーンを有効化」の上限超過トーストで、要点（事前配置／超過したレーン名／上限人数／超えている）
   だけ大きく見せるための強調用クラス。toast()にHTMLを渡す場合だけ使う想定（通常のトーストはtextContentのまま）。 */
.toast-em{font-size:1.3em;font-weight:700}

/* ===================== [CSS-2] 台帳 ===================== */
/* 2026-09-16: 「チーム分け設定」＝左=プレイヤー(ベンチ風カード一覧)・右=事前配置(詳細仕様は後日)の2カラム。
   2026-09-16後続後続: 台帳表⇔事前配置の切替タブは廃止し、常時この事前配置ビューのみを表示する。 */
/* 2026-09-16後続: 結果画面のチームカード＋ベンチ（.rs-layout/.rs-cards-col/.rs-bench-col）と同じ配置パターンに変更。
   左=プレイヤー枠(可変幅・.rs-cards-col相当)、右=事前配置枠(内容にフィットする幅・.rs-bench-col相当・スクロール中も
   上部に追従するsticky)。 */
/* 2026-09-16後続後続後続後続: ユーザー要望「プレイヤー枠を小さく・事前配置を大きくしてほしい」。
   プレイヤー枠を可変(1fr)→固定幅(220px。旧事前配置枠のmin-widthと同じ値)に、事前配置枠を内容フィット(auto)→
   可変(1fr)に入替＝残り幅をすべて事前配置側が受け取るようにした。 */
/* 2026-09-16後続後続後続後続後続: ユーザー報告「プレイヤーの枠が狭くて名前が見えない。全画面の時は半々くらいに」。
   固定220pxだと名前が省略されやすかったため`1fr 1fr`（常に半々）に変更。 */
/* 2026-09-16後続後続後続後続後続後続: ユーザー報告「ウィンドウを最大の半分にした時の大きさはちょうどよい。
   全画面にした時はプレイヤーの枠が余っているので、名前が日本語で6文字表現できるくらいのサイズで良い」。
   `1fr 1fr`だと画面が広いほどプレイヤー枠も際限なく広がってしまっていた（全画面で名前欄が無駄に余る原因）ため、
   プレイヤー枠を固定幅（`.pp-nm-name`と同じフォントで日本語6文字を実測≒84px＋レーン列5列(32px×5=160px)＋
   `.pp-players`の左右パディング(20px)等 ≒ 280px）に変更、事前配置枠(1fr)だけが画面の余り幅を全部受け取るように
   した。半分幅の時にどのみち十分収まっていたサイズ感（狭すぎて名前が見えない、ということはない幅）を、
   画面幅に関わらず一定にした形。 */
/* 2026-09-17: ユーザー要望「プレイヤー達の枠と事前配置の枠の上、チーム分け実行との間に横長の枠を作ってほしい。
   本人希望レーンという名前で、希望レーンを出した人の名前をそのレーンのアイコンの下に表示」。
   .pp-layout（プレイヤー/事前配置の2カラム）の直前・横いっぱいに配置する独立ブロック。
   2026-09-17後続: ユーザー要望「題名の横にレーンアイコンを並べて、その下にプレイヤーを並べて。名前も『本人希望』に」。
   2026-09-17後続後続: ユーザー要望「折りたためるようにする。デフォルトは折りたたまれている状態」。
   `<details class="pref-lanes-box"><summary>本人希望</summary>...`のネイティブdetails/summaryに変更（open属性なし
   ＝初期状態は閉。既存の.pl-cols/.rs-benchと同じ仕組み）。タイトルはsummary側に固定表示となったため、
   `.pref-lanes`本体はレーンアイコン×5＋名前リスト×5だけのシンプルな5列グリッドに戻した（タイトル分の
   auto列・空欄セルは不要になった）。#pref-lanesの中身だけをinnerHTMLで差し替える仕組みは変わらないため、
   .rs-benchのような「再描画のたびopen属性を保存/復元する」手当ては不要（<details>自体は再生成されない）。 */
.pref-lanes-box{border:1px solid var(--line);border-radius:10px;padding:10px;margin-top:8px}
.pref-lanes-box summary{cursor:pointer;font-size:13px;font-weight:700;list-style:revert;display:flex;align-items:center;gap:8px;padding-right:78px}
.pref-lanes-box[open] summary{margin-bottom:8px}
/* 2026-09-18: ユーザー要望「表示設定の場所を本人希望の枠の中の右上へ変えてほしい」。summary内には入れ子の
   <details>を置けない（<summary>のコンテンツモデルはphrasing content限定）ため、position:absoluteで枠の右上へ
   重ねて配置する別要素として実装。position:relativeは`.pref-lanes-box`自身（<details>）ではなく、それを包む
   `.pref-lanes-wrap`（ただのdiv）に付与する＝<details>を絶対配置の基準にすると、モダンブラウザの開閉アニメーション
   対応（closed状態でも中身のサイズを裏で計測する仕組み）の影響で、top指定どおりの位置に来ない不具合が実機で
   発生したため（div一枚挟むだけで解消）。summary側にpadding-rightを足して、閉じている間のチップ一覧
   (.pref-lanes-summary・syncSummaryFitでel.clientWidthを実測)がバッジの下に潜り込まないよう先に幅を確保しておく。 */
.pref-lanes-wrap{position:relative}
.pp-cols-corner{position:absolute;top:10px;right:10px;z-index:3}
.pp-cols-corner[open]{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:8px;
  max-width:min(300px,calc(100vw - 40px));box-shadow:var(--shadow)}
.pref-lanes{display:grid;grid-template-columns:repeat(5,1fr);gap:4px 8px;align-items:center}
.pref-ic{font-size:10px;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:2px}
.pref-names{display:flex;flex-direction:column;gap:2px;align-items:center;width:100%;min-width:0}
.pref-chip{display:inline-flex;align-items:center;gap:3px;font-size:11px;background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:1px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pref-empty{font-size:11px}
/* 2026-09-18: 「表示設定」（プレイヤー枠と共通のppColsPref）を「本人希望」/「事前配置」のチップにも適用。
   .pref-chip-sub/.pp-chip-sub＝今日の試合数・各レーンの数値項目をチップ内に小さく追記する用（アイコンは
   名前の前・数値系は名前の後ろにまとめる）。「どこオプ」枠（lane==='flex'）はレーン非依存のtodayGames以外
   非表示（特定のレーンが無いため、レーン依存の値を出すと誤解を招く）。 */
.pref-chip-sub,.pp-chip-sub{font-size:9px;color:var(--muted);white-space:nowrap}
/* 2026-09-18: ユーザー要望「本人希望の欄を閉じているときに、隙間に表示できるだけ、希望レーンを指定している
   プレイヤーをレーンアイコン＋名前で表示してほしい」。summary行の「本人希望」の右側に余っている隙間を使い、
   閉じている間だけ希望者チップを並べる。開いている間は中身（.pref-lanes）と二重表示になるため非表示にする。
   幅に入りきらない分は syncPrefLanesSummary()（JS）で丸ごと非表示にし、チップが半端に切れて見えないようにする。 */
.pref-lanes-summary{flex:1;min-width:0;overflow:hidden;display:flex;flex-wrap:nowrap;gap:6px;font-weight:400}
.pref-lanes-box[open] .pref-lanes-summary{display:none}
.pref-sum-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:400;color:var(--muted);background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:1px 6px 1px 4px;white-space:nowrap}
.pref-sum-chip .lane-ic{width:12px;height:12px}
/* 2026-09-18: 「本人希望」「事前配置」のsummaryチップが幅に収まりきらない時に末尾へ出す「まだ表示されていない
   人がいる」マーカー（syncSummaryFit参照）。 */
.pref-sum-more{flex:0 0 auto;color:var(--muted);font-weight:700;font-size:13px;line-height:1;padding:0 1px}
.pp-layout{display:grid;grid-template-columns:280px 1fr;gap:12px;align-items:start;margin-top:8px}
.pp-players{min-width:0}
.pp-area{position:sticky;top:70px;min-width:220px}
.pp-players,.pp-area{border:1px solid var(--line);border-radius:10px;padding:10px}
/* 2026-09-16後続後続: ユーザー要望「半分くらいの幅でも横並びのままにしてほしい」で、固定640pxブレークポイントを
   syncPreplaceLayout()（実際に必要な幅を計算するJS判定。syncCardGridLayoutと同じ考え方）に置き換え。 */
.pp-layout.pp-stack{grid-template-columns:1fr}
.pp-layout.pp-stack .pp-area{position:static}
/* 2026-09-17: ユーザー要望「プレイヤー達と事前配置も折りたためるようにして」。.pref-lanes-boxと同じ
   <details>/<summary>パターンに変更（既定はopen＝これまでどおり常時表示のまま、折りたたみ可能になっただけ）。 */
.pp-players summary,.pp-area summary{margin:0;font-size:13px;font-weight:700;cursor:pointer;list-style:revert}
.pp-players[open] summary,.pp-area[open] summary{margin-bottom:8px}
.pp-players-list{max-height:60vh;overflow:auto}
/* 2026-09-18: ユーザー要望「事前配置が閉じられているときに、本人希望のように省力した形で表示してほしい。
   例：Any レーンマーク プレイヤー名／A レーンマーク プレイヤー名, C レーンマーク プレイヤー名」。
   `.pref-lanes-summary`（本人希望）と同じ「summaryの隙間にチップを詰める」仕組みを`.pp-area`にも追加。
   チップ自体の見た目（`.pref-sum-chip`）は共用し、チーム名ラベル用に`.pref-sum-team`だけ追加する。 */
.pp-area summary{display:flex;align-items:center;gap:8px}
.pp-area-summary{flex:1;min-width:0;overflow:hidden;display:flex;flex-wrap:nowrap;gap:6px;font-weight:400}
.pp-area[open] .pp-area-summary{display:none}
.pref-sum-team{font-weight:700}
/* 2026-09-17: ユーザー要望「プレイヤー達の枠にソート機能を追加。ランク・Top〜Supのそれぞれの得意度・試合数」。
   参加者一覧（.pv-sort/#pv-sort等）と同じ「並びキー＋レーン得意度の時だけ出すレーン選択＋方向反転ボタン」の
   パターンを流用。<summary>内に置くとクリックがdetailsの開閉と競合するため、中身側（<summary>の外・
   一覧の直前）に配置。 */
.pp-sort{display:flex;gap:6px;align-items:center;margin:0 0 8px;font-size:12px;flex-wrap:wrap}
.pp-sort label{color:var(--muted);white-space:nowrap}
.pp-sort select{font-size:12px;padding:3px 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.pp-sort #pp-sort-dir{flex:0 0 auto;min-width:34px;font-size:13px;line-height:1}
/* 2026-09-17: 「事前配置」<details>の中身側（<summary>の外）にリセットボタン。<summary>内に置くと
   .pp-sortと同じ理由（クリックがdetailsの開閉と競合）で配置できないため。 */
#pp-reset{display:block;margin:0 0 8px}
/* 2026-09-23・LoLクライアント風UI刷新Phase D: 「プレイヤー」一覧を、台帳のような列そろえテーブル
   （旧: display:contentsで全行を1グリッドに相乗りさせる方式）から、1人=1枚の独立したカードへ再構成した。
   カード同士で列を揃える必要が無い分、.pp-rowは実体を持つ通常の箱に戻り、draggableもカード自身に一本化
   （旧: .pp-nm/各レーンセルに個別付与）。ドラッグ判定(prePlaceDragSourceOf)はclosest()で.pp-row[data-pp-id]を
   辿るだけなのでJS側の変更は不要だった。 */
.pp-table{display:flex;flex-direction:column;gap:8px}
.pp-row.pp-card{
  display:flex;flex-direction:column;gap:6px;cursor:grab;
  background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;
}
.pp-row.pp-card.pp-drag-src{opacity:.4}
.pp-card-head{display:flex;align-items:flex-start;gap:8px}
/* アバターはプレイヤー個人の画像が存在しないための代替表示（avatarPlaceholderHtml参照）。 */
.pp-avatar{flex:0 0 auto;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:700;color:#fff;line-height:1}
.pp-card-id{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:1px;overflow:hidden;flex:1 1 auto;min-width:0}
.pp-nm-name{font-weight:700;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pp-nm-sub{font-size:11px;white-space:nowrap}
/* M6（2026-09-22・Phase C）: 名前行の参加チェック・編集ボタン・RiotID表示 */
.pp-nm-head{display:flex;align-items:center;gap:4px;min-width:0;max-width:100%}
.pp-nm-head .pp-nm-name{flex:1 1 auto;min-width:0}
.pp-partake-chk{flex:0 0 auto;width:14px;height:14px;accent-color:var(--accent);cursor:pointer}
.pp-partake-chk:disabled{cursor:default;opacity:.5}
.pp-edit-btn{flex:0 0 auto;background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;line-height:1;padding:0 2px}
.pp-edit-btn:hover{color:var(--accent)}
.pp-nm-riotid{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:block}
.pp-sel-chk{flex:0 0 auto;width:15px;height:15px;accent-color:var(--bad);cursor:pointer}
.pp-card-id.pp-nm-selected{background:color-mix(in srgb,var(--bad) 16%,transparent);border-radius:6px}
.pp-chip-edit{background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;line-height:1;padding:0 2px;flex:0 0 auto}
.pp-chip-edit:hover{color:var(--accent)}
.pp-lncell.pp-pref{background:color-mix(in srgb,var(--accent) 14%,var(--bg3));font-weight:700}
/* 2026-09-19: 「プレイヤー達」枠でのみ見学・一回休みを名前下に表示＋カード全体を色分け（表示設定でOnOff）。
   カードが実体を持つ箱になった（Phase D）ため、色は直接.pp-row.pp-cardへ適用する。
   .pp-prefより後に書くことで、優先レーンセルと重なった場合もこの色を優先（1枚のカードとしての一体感を保つ）。 */
.pp-nm-status{font-size:10px;font-weight:700;line-height:1.3}
.pp-nm-status-rest{color:var(--warn)}
.pp-nm-status-out{color:var(--bad)}
.pp-row.pp-card.pp-row-rest{background:color-mix(in srgb,var(--warn) 12%,var(--bg2))}
.pp-row.pp-card.pp-row-out{background:color-mix(in srgb,var(--bad) 12%,var(--bg2))}
/* 2026-09-22: 「これは自分です」claim（個人ログインではなく端末が覚えるだけの軽量な識別）。
   .pp-row-mineは他のpp-row-*状態色と重ねられるよう、そちらより後に書いて優先させる。 */
.pp-row.pp-card.pp-row-mine{background:color-mix(in srgb,var(--accent) 18%,var(--bg2));border-color:var(--accent)}
.pp-nm-mine-tag{font-size:10px;font-weight:700;color:var(--accent);white-space:nowrap}
.pp-nm-lock-tag{font-size:10px;line-height:1}
.pp-claim-btn{flex:0 0 auto;background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;line-height:1;padding:0 2px}
.pp-claim-btn:hover{color:var(--accent)}
/* 2026-09-19後続後続後続: 「俺より強いやつに会いに来た」(boostDiv)。プレイヤー達は過去最高ランク行の末尾に
   矢印だけ続ける（.pp-nm-boost-inline）、事前配置は名前の下、結果カード/ベンチは名前の文字列の手前に合体
   （表示設定でOnOff・既定ON）。 */
.pp-nm-boost-inline{color:var(--accent);font-weight:700}
/* 2026-09-18: 「プレイヤー」表示設定でランクポイント/勝敗ポイント/合計ポイント/勝率/強さを追加表示できるように。
   .pp-lncell が1レーン分の枠（旧: アイコンのspan単体）、中に.pp-ln（アイコン行・数値行）を縦積み。
   #pl-table td.lane の .ln1/.ln2 スタックと同じ考え方（台帳の表示設定と統一感を持たせる）。
   2026-09-23・Phase D: カード内で複数並ぶバッジとして見えるよう、背景付きの丸みのある小箱に変更。 */
.pp-card-lanes{display:flex;gap:4px;flex-wrap:wrap}
.pp-lncell{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  min-width:30px;padding:3px 4px;border-radius:6px;background:var(--bg3)}
.pp-ln-pt{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.pp-ln-empty{color:var(--muted)}
/* 2026-09-16後続後続後続: 事前配置エリアに「Any/TeamA〜J」の枠（骨格・D&D未配線）を追加。
   .pp-slot-drop が実際のドロップ先（data-pp-team/data-pp-lane）＝将来のD&D実装はこの要素を対象にする想定。 */
/* 2026-09-16後続後続後続後続: 事前配置枠が.pp-layoutの可変(1fr)列になり横幅に余裕が出たため、
   縦1列積み(flex)→折返しグリッド(auto-fill)に変更＝幅が広い時はチームカードが複数列に並び、
   狭い時（縦積みモード等）は1列に自然に戻る。 */
/* 2026-09-16後続後続後続後続後続: ユーザー要望「Anyは横長、その下にTeamA〜Jが2列くらいで並ぶように」。
   auto-fillの折返しグリッドをやめ、Any単体はフルwidthのカード（.pp-teamsのflex子として自然に横いっぱい）、
   TeamA〜Jだけを別の.pp-team-grid（常に2列固定）にまとめる構成に変更。 */
.pp-teams{max-height:60vh;overflow:auto;display:flex;flex-direction:column;gap:8px}
.pp-team-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.pp-team{border:1px solid var(--line);border-radius:8px;padding:8px}
.pp-team-any{border-color:var(--accent)}
.pp-team-head{font-weight:700;font-size:12px;margin-bottom:6px}
.pp-slot-row{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.pp-slot-row:last-child{margin-bottom:0}
.pp-slot-lane{flex:0 0 34px;font-size:9px;color:var(--muted);display:flex;align-items:center;gap:2px;line-height:1.1}
.pp-slot-drop{flex:1;min-width:0;border:1px dashed var(--line);border-radius:6px;min-height:22px;display:flex;flex-wrap:wrap;align-content:flex-start;gap:3px;padding:2px 4px}
.pp-slot-drop.pp-slot-multi{min-height:34px}
.pp-slot-flex{flex-wrap:wrap;border-top:1px dashed var(--line);padding-top:6px;margin-top:2px}
.pp-slot-note{flex:0 0 100%;font-size:9px;color:var(--muted)}
/* 2026-09-16後続: ドロップ枠に入った人＝チップ表示。.pp-drop-hover はドラッグ中に対象枠の上に来た時のハイライト。 */
.pp-slot-drop.pp-drop-hover{border-style:solid;border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.pp-players.pp-drop-hover{border-color:var(--accent)}
.pp-chip{display:inline-flex;align-items:center;gap:2px;max-width:100%;background:var(--bg3);border:1px solid var(--line);border-radius:10px;padding:1px 2px 1px 6px;font-size:10px;line-height:1.6;cursor:grab;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 2026-09-19後続: 「俺より強いやつに会いに来た」を名前の下に表示するとき用（.pp-chipは横並びinline-flexなので、
   名前とこの行だけを縦積みのサブflexにして「下」に見せる。表示設定OFF時はnameBlockが素のテキストになり無関係）。 */
.pp-chip-nm{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.pp-chip-boost{font-size:8px;color:var(--accent);font-weight:700;white-space:nowrap}
.pp-chip-x{background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;line-height:1;padding:0 3px;flex:0 0 auto}
.pp-chip-x:hover{color:var(--bad)}
.pp-chip.pp-chip-mine{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 16%,var(--bg3))}
.pp-chip-claim{background:none;border:none;color:var(--muted);cursor:pointer;font-size:11px;line-height:1;padding:0 2px;flex:0 0 auto}
.pp-chip-claim:hover{color:var(--accent)}
.pp-chip.pp-drag-src{opacity:.4}
.table-wrap{overflow-x:auto}
/* 折りたたみ: 高さを約7名分に制限し、中を縦スクロール。ヘッダは sticky で残す */
.table-wrap.pl-collapsed{overflow-y:auto;max-height:300px}
.table-wrap.pl-collapsed #pl-table thead th{position:sticky;top:0;z-index:2;background:var(--bg2);box-shadow:inset 0 -1px 0 var(--line)}
#pl-table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}
#pl-table th,#pl-table td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:center}
#pl-table th{color:var(--muted);font-weight:600;font-size:11px}
#pl-table td.nm{text-align:left;font-weight:600;max-width:160px;overflow:hidden;text-overflow:ellipsis}
#pl-table td.lane{color:var(--muted);font-size:12px}
#pl-table td.lane .g-ic{font-size:13px;color:var(--fg)}
#pl-table td.lane.g-main .g-ic,#pl-table td.lane.g-sub .g-ic{color:var(--good)}
/* 「今日の参加」で優先レーンを表明した人：そのレーンのアイコン＋ランクを枠で囲って強調 */
#pl-table td.lane.ll-on{background:color-mix(in srgb,var(--accent) 12%,transparent)}
#pl-table td.lane .ll-box{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;
  border:1px solid var(--accent);border-radius:999px;color:var(--fg);font-weight:600;line-height:1.5}
#pl-table td.rk{font-variant-numeric:tabular-nums}
#pl-table td.wl{font-variant-numeric:tabular-nums}
/* ランク列 / W–L列: 2値のときは1値=1行で縦に積む */
#pl-table td.rk .cl,#pl-table td.wl .cl{display:block}
#pl-table td.rk.multi,#pl-table td.wl.multi{line-height:1.35}
#pl-table td.rk .r-pt,#pl-table td.wl .wl-wr{color:var(--muted);font-size:11px}
#pl-table td.gt{font-variant-numeric:tabular-nums;color:var(--muted)}
#pl-table td.ps{font-variant-numeric:tabular-nums;color:var(--muted)}
#pl-table td.ps .ps-bar{display:inline-block;height:5px;border-radius:3px;background:var(--accent);vertical-align:middle;margin-left:5px;min-width:2px}
/* レーンセルの多段スタック（表示設定でレーン別 勝敗/勝率/勝率Pt を足したとき） */
#pl-table td.lane.lane-multi{white-space:normal;line-height:1.35}
#pl-table td.lane .ln{display:block}
#pl-table td.lane .ln1{white-space:nowrap}
#pl-table td.lane .ln2{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
#pl-table td.lane .ln-empty{color:var(--muted)}
#pl-table td.lane .ln-hist{letter-spacing:1px}
#pl-table td.lane .ln-hist .hm{font-size:10px}
#pl-table td.lane .ln-hist .hw{color:var(--good)}
#pl-table td.lane .ln-hist .hl{color:var(--bad)}
#pl-table td.lane .ll-box.ll-col{flex-direction:column;align-items:center;gap:1px;line-height:1.3}
/* 2026-09-16: 自評マークのボタン化（台帳・チーム結果カード・ベンチ共通）。押すと固定レーン(pinLane)をトグル。
   希望レーン(lockedLane・.ll-on/--accent)とは別の概念なので、固定レーンは --warn で見分けられるようにする。 */
.gradebtn{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;line-height:1}
.gradebtn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.gradebtn.pin-on{outline:2px solid var(--warn);outline-offset:2px;border-radius:50%}
#pl-table td.lane.pin-on{background:color-mix(in srgb,var(--warn) 14%,transparent)}
.pl-sort{display:flex;gap:6px;align-items:center;font-size:12px;flex-wrap:wrap}
.pl-sort label{color:var(--muted);white-space:nowrap}
.pl-sort select{font-size:12px;padding:3px 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.pl-sort #pl-sort-dir{flex:0 0 auto;min-width:34px;font-size:13px;line-height:1}
/* 「表示設定」ディスクロージャ（.jv-host / .pv-key パターン） */
.pl-cols{font-size:12px;color:var(--muted)}
.pl-cols>summary{cursor:pointer;list-style:none;padding:3px 8px;border:1px solid var(--line);border-radius:8px;
  background:var(--bg3);color:var(--fg);font-weight:600;white-space:nowrap}
.pl-cols>summary::-webkit-details-marker{display:none}
.pl-cols[open]{flex-basis:100%;order:99;display:flex;flex-direction:column;gap:8px;margin-top:6px}
.pl-cols-body{display:flex;flex-wrap:wrap;gap:12px}
.pl-cols-grp{margin:0;border:1px solid var(--line);border-radius:8px;padding:6px 10px;display:flex;flex-direction:column;gap:3px}
.pl-cols-grp legend{font-size:11px;color:var(--muted);padding:0 4px}
.pl-cols-grp label{display:flex;align-items:center;gap:5px;cursor:pointer;color:var(--fg);white-space:nowrap}
.pl-cols-grp input[type=checkbox]{width:14px;height:14px;accent-color:var(--accent)}
/* M6（2026-09-22・Phase C）: 台帳「参加」列＝プルダウン→単純なチェックボックスに戻す（真偽値のみ・
   部屋のパスワードを知っている人=canEdit()なら誰でも編集可・部屋のpartakeへ同期）。 */
#pl-table td.col-partake input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}
#pl-table td.col-partake input[type=checkbox]:disabled{opacity:.5;cursor:default}
#pl-table td.col-sel,#pl-table th.col-sel{width:24px}
#pl-table td.col-sel input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}
/* 行クリックで編集（RiotIDは名前の下に小さく表示）。チェックボックス自体のクリックは編集を開かない（JS側で判定） */
#pl-tbody tr.pl-editable{cursor:pointer}
#pl-tbody tr.pl-editable:hover td{background:color-mix(in srgb,var(--accent) 8%,transparent)}
#pl-tbody td.nm .pl-riotid{display:block;font-size:11px;color:var(--muted)}
#pl-tbody tr.pl-selected td{background:color-mix(in srgb,var(--accent) 16%,transparent)}

/* ===================== [CSS-3] 参加者 ===================== */
.pt-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
#pt-count{font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted);
  border:1px solid var(--line);border-radius:8px;padding:4px 10px}
#pt-count.ok{color:var(--good);border-color:var(--good)}
/* 2026-09-17: ユーザー要望「チーム分け設定の下にある、今日の参加者を削除」で「今日の参加者」カード（見出し・
   枠）を撤去。#pt-count/#pt-clear/#pt-msg（人数の可否・チーム分け実行が無効な理由等の有用な情報）は
   idそのままチーム分け設定カードのcard-head直下へ移設（新規実装なし・JSは無改修）。
   2026-09-17後続: ユーザー要望「〇〇人選択解除の部分を見えなくして」で、この.pt-status（#pt-count/#pt-clear）
   だけを.hiddenで非表示に（#pt-msgは「あと◯人」等チーム分け実行が無効な理由を説明する情報のため対象外＝
   引き続き表示）。renderParticipants()はJS側から直接#pt-count/#pt-clearのDOMを書き換えているだけで
   無改修（要素はDOMに残るがdisplay:noneで見えないだけ）。 */
.pt-status{display:flex;align-items:center;gap:10px;margin-top:8px}

/* 2026-09-23: 「参加」タブ＝3カラム候補者管理画面。.pp-layout（280px 1fr）と同じ考え方で、
   左パネル(.jn-detail)だけ固定幅・中央/右(.jn-col)は均等（1fr 1fr）。カードの見た目はPhase Dの
   .pp-row.pp-cardと揃えるが、事前配置のD&D判定と衝突しないようクラス・スコープを独立させている。 */
/* 2026-09-23後続: 「参加」タブのカード表示設定コーナー。.pref-lanes-wrap/.pp-cols-cornerと同じ考え方
   （<details>を絶対配置の基準にすると開閉アニメーションでズレるため、包む.jn-toolbarにposition:relativeを持たせる）。
   2026-09-25訂正: 「ラベルが唯一の兄弟要素で高さを確保するので、コーナー自体には高さ指定不要」としていたが
   誤りだった。.pp-cols-corner（[CSS]line282）は`position:absolute;top:10px`＋ボタン自身の高さ(約25px)で
   計35px前後必要なのに対し、ラベル(.jn-toolbar-label、12px)基準のmin-height:24pxでは足りず、ボタンが
   .jn-toolbar自身の下端からはみ出して下の.jn-layout（参加候補/全プレイヤーの見出し行）に重なって見えて
   いた（ユーザー報告：「表示設定がずれている」＝ボタン自体の位置がおかしい）。ボタンの実際の必要高さに
   合わせてmin-heightを引き上げ、はみ出しを解消する。 */
.jn-layout{display:grid;grid-template-columns:260px 1fr 1fr;gap:12px;align-items:start;margin-top:8px}
/* 2026-09-28: ユーザー要望「詳細の枠(左パネル・固定260px)の方が参加候補/全プレイヤー(1fr 1fr)より大きく
   なってしまう時は、全体のサイズが等倍(3列均等)になるようにしてほしい」。js/07-roster.jsのsyncJoinLayoutCols()
   が実測して付け外す（固定ブレークポイントではなく、実際に260pxが1fr側を上回るかどうかで判定）。 */
.jn-layout.jn-layout-eq{grid-template-columns:1fr 1fr 1fr}
.jn-detail{position:sticky;top:70px;border:1px solid var(--line);border-radius:10px;padding:12px;min-height:120px}
.jn-detail-empty{color:var(--muted);font-size:13px}
.jn-detail-name{font-weight:700;font-size:15px}
.jn-detail-riotid{font-size:11px;color:var(--muted)}
.jn-detail-lock-tag{font-size:11px}
/* 2026-09-25: .jn-layout の1fr 1fr（参加候補/全プレイヤー）は中央列の左端がウィンドウ幅によって
   非整数のCSS px位置になりやすく、既定の1px border(var(--line)、地味な色)がアンチエイリアスで
   薄まって実質見えなくなることがある（右列はたまたま整数位置に来て濃く見える＝2列の見た目が揃わない
   というユーザー報告）。太さを2pxにし、colorをvar(--line)そのものではなくvar(--fg)寄りに少し
   明るくした color-mix にすることで、どちらの列でも安定して視認できるようにした（テーマ変数のみ使用
   のためどのテーマでも自然に馴染む）。 */
.jn-col{border:2px solid color-mix(in srgb, var(--line) 65%, var(--fg) 35%);border-radius:10px;padding:10px;min-width:0}
/* 2026-09-23後続: ユーザー要望「参加候補と全プレイヤーのスライドバーを消さないようにしてほしい。カードの横サイズが
   変わって使いづらい」＝overflow:autoだとコンテンツの高さが60vhを跨ぐたびスクロールバーの出現/消失で使える横幅が
   変わりカードが伸び縮みしていた。overflow-y:scrollで常時スクロールバー分の幅を確保し、scrollbar-gutter:stableで
   オーバーレイ型スクロールバー環境でも同様に幅を固定して横サイズのガタつきを防ぐ。 */
.jn-list{display:flex;flex-direction:column;gap:6px;max-height:60vh;overflow-y:scroll;overflow-x:hidden;scrollbar-gutter:stable}
.jn-card{display:flex;flex-direction:column;gap:4px;cursor:grab;
  background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:6px 8px}
.jn-card.jn-selected{border-color:var(--accent)}
.jn-card.jn-drag-src{opacity:.4}
.jn-card-head{display:flex;align-items:center;gap:6px}
.jn-card-head .pp-avatar{width:22px;height:22px;font-size:9px}
.jn-card-name{font-weight:600;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}
.jn-card-lock-tag{font-size:10px;line-height:1;margin-right:2px}
.jn-empty{color:var(--muted);font-size:12px;padding:8px 0}
/* 2026-09-23後続: ユーザー要望「全プレイヤーで、アイコンと名前のみ／2列で表示できるようにしてほしい」。
   .jn-list（#jn-mid/#jn-right共通のクラス）にクラスが付いたときだけ効くスコープ。
   カードHTML自体は変えず、ランク/今日の試合数(.jn-card-meta)とレーン行(.jn-card-lanes)をCSSで隠すだけ。
   2026-09-24さらに後続: ユーザー要望「参加候補にも同じ機能を」で、#jn-right専用スコープから
   .jn-list共通スコープへ変更（#jn-mid/#jn-rightそれぞれ独立した設定・クラス付け外しなので見た目には影響なし）。 */
.jn-list.jn-compact .jn-card-meta,
.jn-list.jn-compact .jn-card-lanes{display:none}
/* 2026-09-23さらに後続: ユーザー報告「2列がきれいに出るようにしてほしい」＝CSS Gridの既定
   min-width:autoにより、名前が長いカードが1つあるとそのグリッド列（トラック）がその分だけ広がり、
   2列の幅が不揃いになっていた（.rg-home-rowで踏んだのと同じ「グリッドの意図しない拡幅」）。
   .jn-cardにmin-width:0を明示してこの拡幅を止める＝はみ出す名前は子の.jn-card-nameが省略記号で
   省略する（ユーザー許可済み：「名前は省略してもらってよい」）。 */
/* 2026-09-25後続: 参加候補の人数が少ない状態でsyncJoinFitHeightNow()が.jn-listの高さを
   （全プレイヤー列に下端を揃えるため）実際のカード分より大きく伸ばすと、CSS Gridの既定
   align-items:stretchにより、余った1行だけのグリッド行いっぱいにカードの枠線まで縦に伸びて
   しまう（ユーザー報告：「参加候補の中のプレイヤーのボーダーラインが参加候補の下に合わせて
   伸びてしまっている」）。align-items:startでカードを自然な高さのまま行の先頭に留める。 */
/* 2026-09-25さらに後続: align-items:startだけではカード個々の伸びは止まるが、複数行ある場合は
   grid既定のalign-content:stretch（normal相当）で行同士の間隔が均等に広がり「等間隔配置」に
   見える不具合が別途あった（ユーザー報告：「参加候補のプレイヤー達が等間隔配置されているので、
   出来るだけ左上に詰めて配置してほしい」）。align-content:startを追加し、行の集合を先頭（左上）へ
   詰め、余ったスペースは最後の行より下の空白としてまとめる。 */
.jn-list.jn-cols-2{grid-template-columns:1fr 1fr}
.jn-list.jn-cols-3{grid-template-columns:1fr 1fr 1fr}
.jn-list.jn-cols-4{grid-template-columns:1fr 1fr 1fr 1fr}
/* 2026-09-25さらに後続: ユーザー要望「三列化四列化も出来るようにしてほしい」で2列と同じ仕組みを
   3列・4列へ拡張。align-items/align-content/.jn-card{min-width:0}は列数に関わらず共通のため、
   .jn-cols-2〜.jn-cols-4をまとめて1つのセレクタで宣言する（個別の列数だけgrid-template-columnsで上書き）。 */
.jn-list.jn-cols-2,.jn-list.jn-cols-3,.jn-list.jn-cols-4{display:grid;align-items:start;align-content:start}
.jn-list.jn-cols-2 .jn-card,.jn-list.jn-cols-3 .jn-card,.jn-list.jn-cols-4 .jn-card{min-width:0}
/* 「1列/2列/3列/4列」の切替アイコン（.pt-order-switch/.pt-order-optを流用し見た目を統一）。バーの本数で
   列数を表現＝Unicode記号の実測サイズ差（過去の「○」問題）を避けて確実に同じ見た目にする。 */
.jn-col-icon{display:flex;gap:2px;width:16px;height:12px}
.jn-col-icon i{flex:1;display:block;background:var(--muted);border-radius:1px}
.pt-order-opt.on .jn-col-icon i,.jn-seg-opt.on .jn-col-icon i{background:#fff}

/* 2026-10-02: 「参加」タブのレイアウト整理。高さ28pxの操作部品（検索・select・セグメント・一括ボタン）に統一し、
   両列とも同じ3段の見出し（①タイトル・人数・一括 ②検索・並び替え ③詳細/簡易・列数）。カードは
   1段目=アバター・名前・参加スイッチ、2段目=チップ（ピーク/今日/通算）＋右端にOP.GG、その下に表。 */
:root{--jn-ctl-h:28px}
.jn-toolbar{display:flex;align-items:center;gap:12px;margin:8px 0 10px}
.jn-toolbar-hint{margin:0;font-size:12px;color:var(--muted);flex:1 1 auto;min-width:0}
.jn-toolbar-btns{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.jn-pop>summary{height:var(--jn-ctl-h);box-sizing:border-box;display:flex;align-items:center}
.jn-col{display:flex;flex-direction:column;gap:6px}
.jn-col-title{display:flex;align-items:center;gap:8px;min-height:var(--jn-ctl-h)}
.jn-col-title h3{margin:0;font-size:14px;font-weight:700}
.jn-count{font-size:11px;font-weight:600;color:var(--muted);background:var(--bg3);border-radius:999px;padding:1px 8px;font-variant-numeric:tabular-nums}
.jn-col-in .jn-col-title h3,.jn-col-mid .jn-col-title h3{color:var(--fg)}
.jn-col-mid .jn-count{background:color-mix(in srgb,var(--good) 20%,var(--bg3));color:var(--fg)}
.jn-bulk-btn{margin-left:auto;height:var(--jn-ctl-h);box-sizing:border-box;font:inherit;font-size:11px;font-weight:600;padding:0 12px;
  border-radius:999px;cursor:pointer;background:transparent;border:1px solid var(--line);color:var(--fg);white-space:nowrap}
.jn-bulk-in{border-color:color-mix(in srgb,var(--good) 60%,transparent);color:var(--good)}
.jn-bulk-in:hover:not(:disabled){background:color-mix(in srgb,var(--good) 14%,transparent)}
.jn-bulk-out:hover:not(:disabled){background:var(--bg3)}
.jn-bulk-btn:disabled{opacity:.35;cursor:default}
/* 2026-10-24: 全プレイヤー見出しの「📋 ロビーから参加」 */
.jn-col-right .jn-col-title{flex-wrap:wrap}
.jn-col-title h3{white-space:nowrap}
.jn-pop>.jn-lobby-body{width:min(420px,calc(100vw - 32px));display:flex;flex-direction:column;gap:8px}
.jn-lobby-hint{margin:0;font-size:11px;line-height:1.45}
.jn-lobby-text{width:100%;box-sizing:border-box;resize:vertical;font:inherit;font-size:12px;background:var(--bg);color:var(--fg);
  border:1px solid var(--line);border-radius:8px;padding:6px 8px}
.jn-lobby-actions{display:flex;justify-content:flex-end}
.jn-lobby-result p{margin:0 0 4px;font-size:12px}
.jn-lobby-missing{margin:0;padding-left:18px;font-size:12px;max-height:160px;overflow:auto}
.jn-col-search{display:flex;gap:4px;align-items:center}
.jn-col-search input{flex:1 1 auto;min-width:0;width:auto;height:var(--jn-ctl-h);box-sizing:border-box;background:var(--bg);border:1px solid var(--line);
  color:var(--fg);border-radius:8px;padding:0 10px;font-size:12px}
.jn-col-search input:focus{outline:none;border-color:var(--accent)}
.jn-col-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.jn-sort{display:flex;gap:4px;align-items:center;flex:0 0 auto}
.jn-sort select{height:var(--jn-ctl-h);font-size:11px;padding:0 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.jn-icon-btn{width:var(--jn-ctl-h);height:var(--jn-ctl-h);display:inline-flex;align-items:center;justify-content:center;font-size:11px;
  background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;cursor:pointer;padding:0}
.jn-icon-btn:hover{border-color:var(--accent)}
.jn-view{display:flex;gap:6px;align-items:center}
.jn-seg{display:inline-flex;height:var(--jn-ctl-h);box-sizing:border-box;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--bg)}
.jn-seg-opt{font:inherit;font-size:11px;padding:0 9px;border:0;background:transparent;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center}
.jn-seg-opt+.jn-seg-opt{border-left:1px solid var(--line)}
.jn-seg-opt.on{background:var(--accent);color:#fff}
.jn-seg-opt:not(.on):hover{color:var(--fg)}
/* カード */
.jn-card{gap:6px;padding:8px 10px}
.jn-card-head{display:flex;align-items:center;gap:8px;min-width:0}
.jn-card-head .pp-avatar{width:24px;height:24px;font-size:9px;flex:0 0 auto}
.jn-card-name{font-size:13px}
.jn-card-head .jn-pk{margin-left:auto;min-width:96px}
.jn-card-head .jn-pk-opt{padding:4px 8px;font-size:10px}
.jn-chips{align-items:center}
.jn-chips-end{margin-left:auto;display:inline-flex}
.jn-chip-link{color:var(--accent);text-decoration:none;font-weight:600;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);background:transparent;cursor:pointer}
.jn-chip-link:hover{background:color-mix(in srgb,var(--accent) 15%,transparent)}
.jn-list.jn-compact .jn-card{gap:4px;padding:6px 8px}
/* 狭いカード（要約表示）は名前の下にスイッチを全幅で */
.jn-list.jn-d-summary .jn-card-head{flex-wrap:wrap}
.jn-list.jn-d-summary .jn-card-head .jn-card-name{flex:1 1 0}
.jn-list.jn-d-summary .jn-card-head .jn-pk{margin-left:0;flex:1 0 100%;min-width:0}
.jn-list.jn-d-summary .jn-chips-end{margin-left:0}
/* 左の詳細パネル: 見出し → 参加スイッチ → チップ → 指標 → 表 → 編集系ボタン */
.jn-detail{display:flex;flex-direction:column;gap:10px}
.jn-detail-head{display:flex;align-items:center;gap:10px}
.jn-detail-head .pp-avatar{width:36px;height:36px;font-size:12px;flex:0 0 auto}
.jn-detail-id{display:flex;flex-direction:column;min-width:0}
.jn-detail-name{font-weight:700;font-size:15px;overflow-wrap:anywhere}
.jn-detail-riotid{font-size:11px;color:var(--muted);overflow-wrap:anywhere}
/* 2026-10-05: OP.GG の過去最高（ソロ/フレックス・LP込み） */
.jn-detail-peak{display:block;font-size:11px;color:var(--muted);overflow-wrap:anywhere}
.jn-detail-pk{display:flex;flex-direction:column;align-items:stretch;gap:6px;padding:8px;border-radius:10px;background:var(--bg3)}
.jn-detail-pk.on{background:color-mix(in srgb,var(--good) 14%,var(--bg3))}
.jn-detail-pk-l{font-size:11px;color:var(--muted)}
.jn-detail-pk .jn-pk{width:100%}
.jn-detail .jn-chips,.jn-detail .jn-kpis{margin:0}
.jn-detail-tbl{margin-top:0}
.jn-detail-actions{display:flex;flex-wrap:wrap;gap:6px;border-top:1px solid var(--line);padding-top:10px}
.jn-detail-actions .btn{flex:1 1 auto}
/* スマホ幅: 縦積み（syncJoinLayoutCols が .jn-layout-stack を付ける）。未選択の詳細パネルは隠す */
.jn-layout.jn-layout-stack{grid-template-columns:1fr}
.jn-layout-stack .jn-detail{position:static}
.jn-layout-stack .jn-detail:has(.jn-detail-empty){display:none}
.jn-layout-stack .jn-list{max-height:65vh}
@media (max-width:640px){ .jn-toolbar{flex-wrap:wrap} .jn-toolbar-hint{flex-basis:100%} .jn-toolbar-btns{margin-left:auto} }

/* 2026-10-02: 「参加」タブのカード・詳細・表示設定を新規実装（js/19-join-ui.js）。
   各カードのレーン情報を「レーン=列・指標=行」のミニ表(.jn-tbl)にし、行ラベル・レーン見出し・グループ区切り・
   符号色で値の意味を示す。密度クラス(.jn-d-full/.jn-d-short/.jn-d-summary)はsyncJoinDensity()が一覧(.jn-list)と
   #jn-detailに付ける＝カード幅が狭いと行ラベルを略記、さらに狭いと要約行(.jn-sum)だけ残す。 */
.jn-pop{position:relative;font-size:12px}
.jn-pop>summary{cursor:pointer;list-style:none;padding:3px 10px;border:1px solid var(--line);border-radius:8px;
  background:var(--bg3);color:var(--fg);font-weight:600;white-space:nowrap}
.jn-pop>summary::-webkit-details-marker{display:none}
.jn-pop[open]>summary{border-color:var(--accent)}
.jn-pop-body{position:absolute;right:0;top:calc(100% + 6px);z-index:30;width:min(720px,calc(100vw - 32px));
  max-height:min(70vh,640px);overflow:auto;box-sizing:border-box;background:var(--bg2);border:1px solid var(--line);
  border-radius:10px;padding:12px;box-shadow:var(--shadow);color:var(--fg)}
.jn-presets{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.jn-preset{font:inherit;font-size:12px;padding:4px 12px;border-radius:999px;border:1px solid var(--line);
  background:var(--bg);color:var(--fg);cursor:pointer}
.jn-preset.on{background:var(--accent);border-color:var(--accent);color:#fff}
.jn-opt-cols{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:12px;align-items:start}
.jn-opt-list{display:flex;flex-direction:column;gap:8px;min-width:0}
.jn-opt-grp{margin:0;border:1px solid var(--line);border-radius:8px;padding:6px 10px 8px;display:flex;flex-direction:column;gap:4px}
.jn-opt-grp legend{font-size:11px;color:var(--muted);padding:0 4px;font-weight:600}
.jn-opt-record{background:color-mix(in srgb,var(--fg) 4%,transparent)}
.jn-opt-note{margin:0 0 2px;font-size:11px;color:var(--accent)}
.jn-opt{display:flex;gap:6px;align-items:flex-start;cursor:pointer}
.jn-opt input{flex:0 0 auto;width:14px;height:14px;margin-top:2px;accent-color:var(--accent)}
.jn-opt span{display:flex;flex-direction:column;gap:1px;min-width:0}
.jn-opt b{font-weight:600}
.jn-opt em{font-style:normal;font-size:10px;color:var(--warn)}
.jn-opt small{font-size:11px;color:var(--muted);line-height:1.35}
.jn-preview{position:sticky;top:0}
.jn-preview-h{font-size:11px;color:var(--muted);margin-bottom:4px}
.jn-card.jn-card-preview{cursor:default}
@media (max-width:640px){ .jn-opt-cols{grid-template-columns:1fr} .jn-preview{position:static}
  .jn-pop-body{position:fixed;left:16px;right:16px;top:72px;width:auto} }
/* 用語の説明 */
.jn-gl{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.jn-gl h4{margin:0 0 4px;font-size:12px}
.jn-gl ul{margin:0;padding-left:16px;display:flex;flex-direction:column;gap:3px;font-size:12px;line-height:1.45}
.jn-gl-short{font-size:10px;color:var(--muted);margin-left:4px}
.jn-gl-pref{color:var(--accent);font-weight:700}
.jn-gl-best{background:color-mix(in srgb,var(--accent) 24%,transparent);border-radius:4px;padding:0 3px}
/* カード: 見出し下のラベル付きチップ */
.jn-chips{display:flex;flex-wrap:wrap;gap:4px}
.jn-chip{display:inline-flex;align-items:baseline;gap:3px;font-size:10px;line-height:1.5;padding:0 6px;border-radius:999px;
  background:var(--bg3);color:var(--fg);white-space:nowrap}
.jn-chip b{font-weight:400;color:var(--muted)}
.jn-mine{color:var(--warn);margin-right:2px}
/* 2026-10-02: 検索で名前以外に当たったときのバッジ（searchHitBadgeHtml・js/01-util.js）。RiotID=青系・スクショ名=黄系 */
.jn-card-hit{min-width:0}
/* 2026-10-02: 参加/不参加セグメントスイッチ（旧チェックボックスを置換）。2つのボタンの下につまみ(.jn-pk-thumb)を敷き、
   .on で右（参加・緑）へスライド。選ばれている側の文字だけ濃く、もう片方は薄い＝状態が文字でも色でも読める。 */
.jn-pk{--pk-in:var(--good);position:relative;display:inline-grid;grid-template-columns:1fr 1fr;flex:0 0 auto;
  border-radius:999px;background:var(--bg);border:1px solid var(--line);padding:2px;min-width:112px;user-select:none}
.jn-pk-thumb{position:absolute;top:2px;bottom:2px;left:2px;width:calc(50% - 2px);border-radius:999px;
  background:color-mix(in srgb,var(--muted) 30%,var(--bg3));box-shadow:0 1px 3px rgba(0,0,0,.35);
  transition:transform .17s ease,background-color .17s ease}
.jn-pk.on .jn-pk-thumb{transform:translateX(100%);background:var(--pk-in)}
.jn-pk-opt{position:relative;z-index:1;font:inherit;font-size:11px;font-weight:600;line-height:1;padding:5px 10px;
  border:0;background:transparent;color:var(--muted);cursor:pointer;border-radius:999px;white-space:nowrap;transition:color .17s}
.jn-pk:not(.on) .jn-pk-out{color:var(--fg)}
.jn-pk.on .jn-pk-in{color:#fff}
.jn-pk:not(.on) .jn-pk-in:hover{color:var(--good)}
.jn-pk.on .jn-pk-out:hover{color:var(--fg)}
.jn-pk-opt:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.jn-pk.busy{pointer-events:none}
.jn-pk-lg{min-width:150px}
.jn-pk-lg .jn-pk-opt{font-size:13px;padding:7px 14px}
/* 参加候補のカード: 左端に緑の帯 */
.jn-card.jn-card-in{box-shadow:inset 3px 0 0 var(--good)}
/* 移動直後のカードを一瞬光らせる */
@keyframes jnFlash{0%{background:color-mix(in srgb,var(--good) 35%,var(--bg2))}100%{background:var(--bg2)}}
.jn-card.jn-flash{animation:jnFlash 1.2s ease-out}
.jn-list.jn-d-summary .jn-pk{min-width:0;width:100%}
.jn-list.jn-d-summary .jn-pk-opt{padding:5px 4px;font-size:10px}
/* 列見出しの一括ボタン */
.search-hit{display:inline-flex;align-items:baseline;gap:5px;max-width:100%;box-sizing:border-box;padding:0 7px;border-radius:999px;
  font-size:10px;line-height:1.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--fg);
  border:1px solid color-mix(in srgb,var(--accent) 60%,transparent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.search-hit b{font-weight:700;color:var(--accent)}
.search-hit-alias{border-color:color-mix(in srgb,var(--warn) 60%,transparent);background:color-mix(in srgb,var(--warn) 12%,transparent)}
.search-hit-alias b{color:var(--warn)}
.search-hit mark{background:color-mix(in srgb,var(--accent) 35%,transparent);color:var(--fg);border-radius:3px;padding:0 1px}
.search-hit-alias mark{background:color-mix(in srgb,var(--warn) 35%,transparent)}
/* ミニ表 */
.jn-card-lanes{min-width:0;display:block}
.jn-tbl{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;font-size:10px;line-height:1.5;
  font-variant-numeric:tabular-nums}
.jn-tbl col.jn-c-lab{width:46px}
.jn-tbl th,.jn-tbl td{padding:0 1px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:clip}
.jn-tbl thead th{font-size:9px;font-weight:700;color:var(--muted);letter-spacing:.02em;border-bottom:1px solid var(--line)}
.jn-tbl thead th.jn-pref{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}
.jn-tbl th.jn-lab{text-align:left;font-size:9px;font-weight:600;color:var(--muted);padding-left:2px}
.jn-tbl th.jn-lab small{display:block;font-size:8px;line-height:1;color:var(--warn);font-weight:400}
.jn-tbl tr.jn-grp-start>*{border-top:1px solid var(--line)}
.jn-tbl td+td,.jn-tbl thead th+th{border-left:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.jn-tbl tr.jn-g-record>*{background:color-mix(in srgb,var(--fg) 5%,transparent)}
.jn-tbl tr.jn-r-grade td{font-size:11px;color:var(--fg)}
.jn-tbl tr.jn-r-total td{font-weight:700;color:var(--fg)}
.jn-tbl tr.jn-r-total th.jn-lab{color:var(--fg)}
.jn-tbl td.jn-best{background:color-mix(in srgb,var(--accent) 24%,transparent);border-radius:4px}
.jn-tbl tr.jn-r-tier td{color:var(--fg)}
.jn-tbl .jn-pos{color:var(--good)}
.jn-tbl .jn-neg{color:var(--bad)}
.jn-tbl .jn-zero{color:var(--muted)}
.jn-tbl tr.jn-off td{opacity:.45;text-decoration:line-through}
.jn-l-short,.jn-v-short{display:none}
.jn-d-short .jn-l-full,.jn-d-summary .jn-l-full,.jn-d-short .jn-v-full,.jn-d-summary .jn-v-full{display:none}
.jn-d-short .jn-l-short,.jn-d-summary .jn-l-short,.jn-d-short .jn-v-short,.jn-d-summary .jn-v-short{display:inline}
.jn-d-short .jn-tbl col.jn-c-lab{width:18px}
.jn-d-summary .jn-tbl col.jn-c-lab{width:0}
.jn-d-summary .jn-tbl th.jn-lab{padding:0;font-size:0}
.jn-d-summary .jn-tbl thead th{letter-spacing:0}
.jn-d-summary .jn-tbl tbody tr:not(.jn-sum){display:none}
.jn-h-mini{display:none}
.jn-d-summary .jn-h-full{display:none}
.jn-d-summary .jn-h-mini{display:inline}
.jn-sumline{display:none;flex-wrap:wrap;gap:3px;margin-top:3px}
.jn-d-summary .jn-sumline{display:flex}
/* 略記・要約表示中の凡例（列見出しの下） */
.jn-legend{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:10px;color:var(--muted);margin:-2px 0 6px}
.jn-legend b{color:var(--fg);font-weight:600}
.jn-legend.hidden{display:none}
/* 左パネル */
.jn-detail .jn-chips{margin:6px 0}
.jn-kpis{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:8px 0}
.jn-kpi{display:flex;flex-direction:column;gap:1px;padding:5px 8px;border-radius:8px;background:var(--bg3);cursor:help}
.jn-kpi-l{font-size:10px;color:var(--muted)}
.jn-kpi-v{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
.jn-q{display:inline-flex;align-items:center;justify-content:center;width:12px;height:12px;border-radius:50%;
  border:1px solid var(--muted);font-size:8px;line-height:1;vertical-align:1px}
.jn-detail-tbl{border-top:1px solid var(--line);padding-top:6px;margin-top:4px}
.jn-detail-tbl .jn-tbl{font-size:11px}

/* 2026-09-23後続: 「登録」タブを0から再設計。#rg-home（2つの大きいボタンだけ）⇔#rg-add（登録フォーム）の
   2画面。プレビューカードは.pp-row.pp-card（Phase D）をそのまま流用するが、D&D対象ではないため
   cursor:grabを.rg-cardで打ち消す。 */
/* 2026-09-23後続: ユーザー要望「配置が気に入らない」→A案「画面ど真ん中」を採用。
   .rg-home-row{height:100%}で中央寄せを試みたが、親.rg-homeがmin-heightしか持たず高さが不定
   （contentサイズに委ねられる）ため、子のheight:100%は解決できず実質無視され、行がカード上端に
   張り付いたままだった（実測で検証し発覚）。.rg-home自身をflexコンテナにして子を直接中央寄せする
   方式に変更し、min-heightだけの不定な高さでも正しく中央に来るようにした。 */
/* .rg-home-rowはflexアイテムのため既定では横幅がcontentにfit-shrinkし、内側の.rg-home-btnの
   `45%`が「不定な幅の45%」という循環参照になって解決できず、ボタンが極端に狭くなって縦積みに
   なってしまっていた（実測で発覚）。width:100%を明示してこの循環を切る。 */
.rg-home{position:relative;min-height:420px;padding:24px 0;display:flex;align-items:center;justify-content:center}
/* 2026-09-23さらに後続（CSV一括登録追加）: #rg-homeの直接の子は「画面ど真ん中」センタリングの前提
   （唯一の子であること）を保つため常に1つ（.rg-home-inner）のまま、その中で行(.rg-home-row)と
   結果表示(#rg-csv-result)を縦に積む。.rg-home-innerもflexアイテムなので同じ理由でwidth:100%が必要。 */
.rg-home-inner{width:100%;display:flex;flex-direction:column;align-items:center;gap:16px}
/* 2026-09-23さらに後続: ユーザー報告「プレイヤー登録がログインとずれる」＝align-items:centerだと、
   CSVリンク2つ分だけ縦に長い.rg-home-primary列と、単体ボタンだけの#rg-go-loginを「行の高さ全体で
   中央揃え」してしまい、結果的に「プレイヤー登録」ボタン自体は「ログイン」ボタンより上にずれて見えていた。
   flex-startで両方の先頭（ボタンの上端）を揃える＝CSVリンクは.rg-home-primaryの下に伸びるだけになる。 */
.rg-home-row{display:flex;align-items:flex-start;justify-content:center;gap:32px;flex-wrap:wrap;width:100%}
.rg-home-primary{display:flex;flex-direction:column;align-items:center;gap:8px;width:min(360px,45%)}
.rg-home-primary .rg-home-btn{width:100%}
.rg-csv-link{font-size:13px;color:var(--fg);text-decoration:underline;cursor:pointer;background:none;border:none}
.rg-csv-template-link{font-size:11px;color:var(--muted)}
.rg-csv-result{width:min(600px,90%);text-align:left}
.rg-csv-ok{color:var(--good);margin:0 0 4px}
.rg-csv-errors{font-size:12px;color:var(--muted);margin:4px 0 0;padding-left:1.2em}
.rg-home-btn{width:min(360px,45%);padding:44px 0;font-size:24px;font-weight:700;border-radius:18px;
  border:1px solid var(--line);cursor:pointer}
.rg-home-btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.rg-home-btn.ghost{background:var(--bg2);color:var(--fg)}
/* 「次へ」（参加タブへ進む）。.pref-lanes-wrap/.pp-cols-cornerと同じ「絶対配置の基準は<details>自身では
   なく包む相対配置divへ」パターンを流用し、.rg-home自体をposition:relativeにして右下に固定する。 */
.rg-next-btn{position:absolute;right:16px;bottom:16px;display:inline-flex;align-items:center;gap:6px;
  padding:10px 20px;font-size:14px;font-weight:700;border-radius:999px;border:1px solid var(--line);
  background:var(--bg2);color:var(--fg);cursor:pointer}
.rg-next-icon{font-size:16px}
/* min-width:0が無いと、右カラム(プレビューカード内の名前等)の中身が長いとグリッド列がfrの取り分を
   超えて広がり（CSS Gridの既定min-width:autoによる「blowout」）、カード幅を突き破って右側の内容
   （登録する等）が画面上は描画されるが視覚的な位置がズレて見えなくなる不具合があったため明示的に0で止める。 */
.rg-form-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start;margin-top:8px}
.rg-form-basic{display:flex;flex-direction:column;gap:10px;min-width:0}
.rg-form-basic label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.rg-form-basic input,.rg-form-basic select{background:var(--bg);border:1px solid var(--line);color:var(--fg);
  border-radius:8px;padding:6px 8px;font-size:13px}
/* 2026-09-23後続: ユーザー要望「○の時、形が崩れる」＝.rg-lane-btnがmin-widthだけでcontent-drivenな幅
   だったため、グレード記号（◎○◇△✖）や実効ランク文字数がレーンごとに違うと5つのボタン幅がバラバラに
   なっていた。flex:1 1 0で常に5等分の同じ幅にし、アイコンは固定サイズボックスで中央揃え、実効ランク文言は
   長すぎる場合だけ省略記号にして幅を安定させる。 */
.rg-lanes{display:flex;gap:6px}
.rg-lane-btn{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;
  background:var(--bg2);border:1px solid var(--line);border-radius:10px;cursor:pointer}
.rg-lane-btn:disabled{opacity:.5;cursor:not-allowed}
.rg-lane-label{font-size:10px;color:var(--muted)}
.rg-lane-icon{font-size:18px;width:22px;height:22px;line-height:22px;display:block}
.rg-lane-eff{font-size:9px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.rg-goodcount{font-size:12px;color:var(--muted);margin:0}
.rg-goodcount.ok{color:var(--good)}
.rg-goodcount.bad{color:var(--bad)}
.rg-err{color:var(--bad);font-size:12px;min-height:1em;margin:0}
.rg-form-preview{position:sticky;top:70px;min-width:0}
.pp-row.pp-card.rg-card{cursor:default}
/* 2026-10-14: 「LoLカスタムルームメッセージで登録」(#rg-lobby・js/26-lobby-ui.js)。貼り付け欄＋1人1枚の下書きカード。
   レーンボタンは登録フォームの.rg-lanes/.rg-lane-btnをそのまま流用する。 */
.rg-lobby-title{margin:0 0 4px;font-size:16px}
.rg-lobby-hint{font-size:12px;margin:0 0 8px}
.rg-lobby-text{width:100%;box-sizing:border-box;background:var(--bg);border:1px solid var(--line);color:var(--fg);
  border-radius:8px;padding:8px;font-size:13px;resize:vertical}
.rg-lobby-opts{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:8px 0 12px}
.rg-lobby-opts label{font-size:12px;color:var(--muted)}
.rg-lobby-opts select,.rg-lobby-head select,.rg-lobby-name{background:var(--bg);border:1px solid var(--line);color:var(--fg);
  border-radius:8px;padding:5px 8px;font-size:13px}
.rg-lobby-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,420px),1fr));gap:10px}
.rg-lobby-row{border:1px solid var(--line);border-radius:12px;padding:10px;background:var(--bg2);display:flex;flex-direction:column;gap:8px;min-width:0}
.rg-lobby-row.off{opacity:.55}
.rg-lobby-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rg-lobby-inc input{width:18px;height:18px}
.rg-lobby-name{flex:1 1 120px;min-width:0;font-weight:700}
.rg-lobby-riot{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}
.rg-lobby-info{display:flex;flex-direction:column;gap:2px}
.rg-lobby-st{font-size:12px;margin:0}
.rg-lobby-st.bad{color:var(--bad)}
.rg-lobby-basis{font-size:11px}
/* 2026-10-16: 主催者ツール「OP.GG から取り直す」(#og-refresh・js/27-opgg-refresh-ui.js) */
.og-drawer{max-width:640px}
.og-quick{display:flex;gap:6px;flex-wrap:wrap}
.og-list{display:flex;flex-direction:column;gap:4px;max-height:55vh;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:6px}
/* 行は<label>なので .drawer label{display:flex;flex-direction:column} より強い詳細度（.og-list .og-row）で上書きする */
.og-list .og-row{display:grid;font-size:13px;color:var(--fg);grid-template-columns:auto minmax(0,7em) auto minmax(0,1fr);grid-template-areas:"cb name rank riot" "cb st st st";
  column-gap:8px;row-gap:2px;align-items:center;padding:6px 8px;border-radius:8px;cursor:pointer}
.og-row:hover{background:var(--bg3)}
.og-row.off{opacity:.5;cursor:default}
.og-row input{grid-area:cb}
.og-name{grid-area:name;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.og-rank{grid-area:rank;font-size:12px}
.og-riot{grid-area:riot;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.og-st{grid-area:st;font-size:12px}
.og-st.good{color:var(--good)}
.og-st.bad{color:var(--bad)}
.og-msg{font-size:12px;min-height:1em;margin:0}
.og-note{margin:0}
.pm-peak-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pm-peak-row .hint{margin:0}
/* 「戻る」「次へ」を左右に置く画面下部の操作行。「登録」フォーム画面と「参加」タブの両方で使う共通クラス。 */
.tab-actions{display:flex;justify-content:space-between;margin-top:16px}

/* ===================== [CSS-4] 結果 ===================== */
.diff-badge{display:inline-block;font-weight:700;font-size:13px;border-radius:8px;padding:4px 12px;margin-bottom:12px;border:1px solid var(--line)}
.diff-badge.d-good{color:var(--good);border-color:var(--good)}
.diff-badge.d-mid{color:var(--warn);border-color:var(--warn)}
.diff-badge.d-bad{color:var(--bad);border-color:var(--bad)}
.rs-grid{display:grid;grid-template-columns:1fr 44px 1fr;gap:8px}
.rs-grid.no-diff{grid-template-columns:1fr 1fr}   /* 2026-09-15: 表示設定「チームのカードの間の差」OFF時は2列（差の列自体を出さない） */
.rs-team{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--bg)}
.rs-team.t-a{border-top:3px solid var(--teamA)}
.rs-team.t-b{border-top:3px solid var(--teamB)}
.rs-team-head{display:flex;justify-content:space-between;align-items:baseline;font-weight:700;margin-bottom:8px}
.rs-total{font-size:12px;color:var(--muted);font-weight:600}
/* 2026-09-15追加: 2チームのカードの間に、対面（同レーン）ごとの合計Pの差を表示する中央列。
   両チームの .rs-rows と同じクラス（.rs-rows/.rs-row/.rs-th）を再利用することで見出し・各行の高さを完全に一致させる。 */
.rs-diffcol{display:flex;flex-direction:column;padding:13px 0 10px}
/* padding-top 13px = .rs-team の border-top(3px、t-a/t-b で上書き) + padding(10px) と揃え、行位置を両チームに一致させる */
.rs-diffcol .rs-team-head{visibility:hidden}
.rs-diffcol .rs-diffval{display:block;text-align:center;font-variant-numeric:tabular-nums;color:var(--muted);white-space:nowrap}
.rs-diffcol .rs-th.rs-diffval{font-size:10px;font-weight:700}
/* 2026-09-15: 固定の画面幅ブレークポイント(旧: 640px以下で強制1列)をやめ、実際に表示されている列数（表示設定でRP/WP等を
   減らせば必要幅も減る）に応じて JS(syncCardGridLayout) が都度 .rs-stack を付け外しする方式に変更。
   ユーザー要望「表示情報が少ない時は全画面でなくても2列にしてほしい」。 */
.rs-grid.rs-stack{grid-template-columns:1fr}
.rs-grid.rs-stack .rs-diffcol{margin:4px 0}
/* 1チーム分の行はまとめて1つのグリッド＝全行で縦の列がそろう（display:contents で各行の子をこのグリッドに載せる）。
   2026-09-14: 表示設定でRP/WP/合計級の列自体をON/OFFできるよう、grid-template-columns は teamCol が列数に応じて
   インラインstyleで都度セットする（固定列数のCSSルールは持たない）。先頭行は見出し行 .rs-headrow（同じグリッドに
   display:contents で相乗り＝縦の列が完全にそろう）。 */
.rs-rows{display:grid;align-items:center;font-size:13px}
.rs-row{display:contents}
.rs-rows>.rs-row>*{padding:5px 5px;border-bottom:1px solid var(--line);min-width:0}
.rs-rows>.rs-row>*:first-child{padding-left:0}
.rs-rows>.rs-row>*:last-child{padding-right:0}
.rs-rows>.rs-row>.rs-streak-none{padding:0;border-bottom:0}
.rs-rows>.rs-row:last-child>*{border-bottom:none}
/* 2026-09-15: 結果カードの選手をD&Dで入替（swapResultPlayers）。.rs-row は display:contents で自身に箱を持たない
   ため、draggable は各セル(span)側に付与し、ドラッグ元/ドロップ先のハイライトは子要素(>*)へまとめて適用する。 */
.rs-rows>.rs-row:not(.rs-headrow)>*{cursor:grab}
.rs-rows>.rs-row.rs-drag-src>*{opacity:.4}
.rs-rows>.rs-row.rs-drop-target>*{background:color-mix(in srgb, var(--accent) 22%, transparent);outline:1px dashed var(--accent);outline-offset:-1px}
/* 2026-09-22: 自分の枠の強調（Phase BのmyPdtIdと連動。.rs-drop-target等より先に書き、ドラッグ中は上の
   ハイライトが優先されるようにする）。 */
.rs-rows>.rs-row.rs-row-mine>*{background:color-mix(in srgb, var(--accent) 12%, transparent)}
/* 2026-09-22: チャンピオンセレクト風の結果演出（設定でOn/Off、既定Off）。.rs-rowはdisplay:contentsのため
   子要素(>*)側にフェードインアニメーションをかける。--reveal-iは両チーム共通のレーン順インデックス
   （teamCol()がTop=0…Sup=4で埋め込む）で、レーンごとに順番に出現して見えるようdelayをずらす。 */
.rs-reveal-on .rs-rows>.rs-row:not(.rs-headrow)>*{
  animation:rs-reveal-in .35s ease both;
  animation-delay:calc(var(--reveal-i, 0) * 110ms);
}
@keyframes rs-reveal-in{ from{opacity:0;transform:translateY(6px)} to{opacity:1;transform:none} }
/* 2026-09-16: ベンチのカードともD&Dで入替可能に。.rs-bench-card は通常の箱（display:contentsではない）なので
   自身に直接ハイライトを付ければよい（.rs-row のような子要素(>*)への回りこみは不要）。 */
.rs-bench-card{cursor:grab}
.rs-bench-card.rs-drag-src{opacity:.4}
.rs-bench-card.rs-drop-target{background:color-mix(in srgb, var(--accent) 22%, transparent);outline:1px dashed var(--accent);outline-offset:-1px}
.rs-th{font-size:10px;color:var(--muted);font-weight:700;white-space:nowrap}
.rs-row .ln{display:flex;align-items:center;justify-content:center}
.lane-ic{width:16px;height:16px;object-fit:contain;flex:0 0 auto;vertical-align:middle}
.rs-row .rs-order,.rs-th.rs-order{color:var(--muted);font-size:11px;text-align:center;font-variant-numeric:tabular-nums}
.rs-row .rs-nm{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:help}
/* 2026-09-19後続: 「俺より強いやつに会いに来た」を名前の文字列の手前に合体表示（結果カード/ベンチ共通。表示設定でOnOff）。 */
.rs-boost{font-size:10px;color:var(--accent);font-weight:700}
/* 2026-09-19後続後続後続後続後続: ベンチでRk表示がONのとき、過去最高ランクの直後に矢印だけ続ける版（プレイヤー達の
   .pp-nm-boost-inlineと同じ考え方）。結果カードのRk/強さの上書き表示(.rs-rk-boosted/.rs-tr-boosted)も同系色。 */
.rs-boost-inline{color:var(--accent);font-weight:700}
.rs-row .rs-grade{font-size:11px;color:var(--muted);white-space:nowrap}
.rs-row .rs-grade.g-main,.rs-row .rs-grade.g-sub{color:var(--good)}
.rs-row .rs-rk,.rs-th.rs-rk{font-size:11px;color:var(--muted);text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums}
.rs-row .rs-games,.rs-th.rs-games{font-size:11px;color:var(--muted);text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums}
.rs-row .rs-rp,.rs-row .rs-wp,.rs-row .rs-er,.rs-row .rs-wlc,.rs-row .rs-wl,.rs-row .rs-tr,.rs-row .rs-sc,
.rs-th.rs-rp,.rs-th.rs-wp,.rs-th.rs-er,.rs-th.rs-wlc,.rs-th.rs-wl,.rs-th.rs-tr,.rs-th.rs-sc{font-variant-numeric:tabular-nums;color:var(--muted);text-align:right;white-space:nowrap}
/* 2026-09-19後続後続後続後続後続後続後続後続後続後続後続: ユーザー報告「上書きしたところがもっとはっきり青くなる
   ように、今だと変化がわかりづらい」＝直前の.rs-rk-boosted/.rs-tr-boostedは.rs-row .rs-rk/.rs-row .rs-tr（2クラス）
   より詳細度が低い1クラスのセレクタだったため、muted色に負けて実質効いていなかった（CSSの詳細度バグ）。
   `.rs-row .rs-rk.rs-rk-boosted`のように3クラスにして確実に上書きし、背景ピル＋太字も足して一目で分かるようにする。 */
.rs-row .rs-rk.rs-rk-boosted,.rs-row .rs-tr.rs-tr-boosted{
  color:var(--accent);font-weight:800;
  background:color-mix(in srgb,var(--accent) 22%,transparent);
  border-radius:6px;padding:1px 5px;
}
.rs-row .rs-streak{font-size:10px;font-weight:700;padding:1px 4px;border-radius:8px;white-space:nowrap;font-variant-numeric:tabular-nums}
.rs-row .rs-streak.hot{background:#ff6b3515;color:#ff6b35}
.rs-row .rs-streak.cold{background:#3b82f615;color:#3b82f6}
.rs-row .rs-streak-none{display:block;width:0}
.rs-win{margin-top:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.rs-sheetall{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 16px}
/* P4c: 参加者オプション（2026-09-16後続後続後続: 「チーム分け設定」ヘッダの「チーム数」「詳細設定」内へ移設。
   要素は.pl-cols-body内に置かれるため、選択欄の見た目は.pl-cols-body selectで指定） / 対戦カード / 補欠 */
.pl-cols-body select{font-size:12px;padding:3px 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.pl-cols-body select:disabled{opacity:.5;cursor:not-allowed}
.pt-grades-wrap{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pt-grade{display:inline-flex;align-items:center;gap:2px;cursor:pointer}
.pt-grade input{margin:0}
.pt-check{display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.pt-check input{margin:0}
/* 2026-09-17: 配置順（弱→強/強→弱）トグル。チェックボックスではなく「二つを切り替える」見た目にしたいという
   ユーザー要望のため、2択セグメント型のスイッチとして実装（選択中の側だけ --accent で塗る）。 */
.pt-order{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--fg)}
.pt-order-label{color:var(--muted);white-space:nowrap}
.pt-order-switch{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:var(--bg)}
.pt-order-opt{border:none;background:transparent;color:var(--muted);font-size:12px;padding:4px 10px;cursor:pointer;white-space:nowrap;line-height:1.2;transition:background .18s ease,color .18s ease}
.pt-order-opt.on{background:var(--accent);color:#fff;font-weight:700}
.pt-order-opt:disabled{opacity:.4;cursor:not-allowed}
/* 2026-09-18: 得意度順スイッチの表示テキスト中「○」がフォントの都合で◎/◇/△/✖より小さく見える。
   当初はfont-sizeを1.22em拡大するグリフ頼みの対策を試したが、実機（ユーザー環境）では効果が体感できないとの
   報告＝フォント・OSによってグリフの実際の描画サイズ/太さが変わり得るため、グリフに一切頼らずCSSで丸自体を
   描画する方式に変更（環境非依存で確実にサイズを揃えられる）。文字の「○」はDOM上は残すが視覚的には
   border-circleのspanで上書きする形にはせず、テキストをまるごとCSS描画の丸1個に置き換える
   （他画面の◎〜✖アイコン表示には影響させない＝ここだけのスコープ）。 */
.grade-o-fix{display:inline-block;width:.92em;height:.92em;margin:0 .05em;border:.16em solid currentColor;border-radius:50%;vertical-align:-0.08em;box-sizing:border-box}
/* 2026-09-18後続: ユーザー要望「得意度順の＞のサイズを小さくしてください、自評のマークがみえづらいので」＝
   区切りの＞が本体の◎○◇△✖と同じ12pxで並ぶと目立ちすぎて肝心のマークが埋もれて見えづらいとの指摘。
   区切り文字だけ縮小・減光してマーク側を相対的に目立たせる。 */
.grade-sep{font-size:.75em;opacity:.6;margin:0 -0.05em}
.rs-card{border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:14px}
.rs-card-head{font-weight:700;font-size:14px;margin-bottom:10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.rs-card-head .diff-badge{margin:0}
/* 2026-10-02: WP/ER Off の明示（見出しバッジ＋合計に入っていない数値列は薄く取り消し線） */
.rs-off-badge{display:inline-block;margin-left:8px;padding:2px 10px;border-radius:999px;border:1px solid var(--warn);color:var(--warn);font-size:12px;font-weight:700;vertical-align:middle}
.rs-off{opacity:.45;text-decoration:line-through}
.rs-recorded{color:var(--good);font-weight:700;font-size:13px}
/* 2026-09-15追加: カード群（カード1・カード2…）の横に「ベンチ」枠を配置。普段は<details>で折りたたみ、
   position:sticky でスクロール中もカード群の高さの範囲内で常に横に頭が来るようにする（ユーザー要望）。 */
.rs-layout{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:start}
.rs-cards-col{min-width:0}
.rs-bench-col{position:sticky;top:70px}
.rs-bench{border-radius:10px;background:var(--bg2);width:fit-content}
/* 2026-09-15後続: 閉じている間は文字1つ分くらいの幅まで縮める（ユーザー要望）。開いたら通常の枠幅に戻す。 */
.rs-bench:not([open]){padding:8px 6px;border:1px solid var(--accent);background:var(--bg3);box-shadow:0 1px 4px rgba(0,0,0,.25)}
/* 2026-09-16: 各人を結果カードのような「カード」（1〜7行）で表示するため、単純な一覧のときより幅を広めに確保 */
.rs-bench[open]{padding:10px;min-width:220px;max-width:300px;width:auto;border:1px dashed var(--line);position:relative}
.rs-bench summary{cursor:pointer;font-weight:700;font-size:14px;white-space:nowrap;list-style:none;-webkit-tap-highlight-color:transparent}
.rs-bench summary::-webkit-details-marker{display:none}
.rs-bench[open] summary{padding-right:52px;margin-bottom:8px}
.rs-bench:not([open]) .rs-bench-open-label{display:none}
.rs-bench[open] .rs-bench-closed-label{display:none}
/* 2026-09-15後続後続: 閉時は「ベ」1文字だけだと何の枠か分からないとの指摘で、「ベンチN人」を縦書きにして
   幅は文字1つ分のまま全文字を読めるように変更。text-orientation:upright で数字も回転させず1文字ずつ縦に並べる。 */
.rs-bench:not([open]) .rs-bench-closed-label{writing-mode:vertical-rl;text-orientation:upright;line-height:1.3;letter-spacing:1px;color:var(--accent);display:flex;align-items:center;gap:3px}
/* 2026-09-15後続後続後続: 「閉じていて・タッチで開く」ことが見た目でも分かるよう、常時アクセント色の▸アイコン付き
   ボタン風の見た目（実線の縁取り＋影＋タップ時に色が濃くなる）に変更。 */
.rs-bench:not([open]) .rs-bench-closed-label::before{content:'▸';font-size:11px}
.rs-bench:not([open]):active{background:var(--accent);box-shadow:none}
.rs-bench:not([open]):active .rs-bench-closed-label{color:var(--fg)}
/* 2026-09-16後続: 「表示設定」が独立した行を占めて場所をとるとの指摘で、summary（▾ベンチN人）と同じ行の
   右端に収まるボタンとして重ねて配置。開いた時のパネル自体（フィールドセットの中身）は従来と同じ形のまま、
   .rs-bench内で絶対配置してリストを押し下げないようにする。 */
.rs-bench-cols{position:absolute;top:10px;right:10px;margin:0;font-size:11px;z-index:2}
.rs-bench-cols>summary{padding:2px 6px;border-radius:6px}
.rs-bench-cols[open]{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:6px 8px;box-shadow:0 2px 10px rgba(0,0,0,.3);max-width:240px}
.rs-bench-cols .pl-cols-body{gap:8px}
.rs-bench-cols .pl-cols-grp{padding:4px 8px}
/* 2026-09-16: ベンチの各プレイヤーを結果カードのような「カード」（1行目=名前/ランク名/今日の試合数、
   2〜7行目=各レーンの自評/勝率/ポイント/勝敗ポイント/合計ポイント/強さ）で表示。
   .rs-bench-table は結果カードの .rs-rows と同じ考え方＝各 .rs-bench-row を display:contents で
   同じグリッドに相乗りさせ、レーン列（TOP〜SUP）を全カード・全行で縦にそろえる。 */
.rs-bench-list{margin-top:6px;max-height:50vh;overflow:auto}
.rs-bench-card{padding:5px 0;border-bottom:1px solid var(--line)}
.rs-bench-card:last-child{border-bottom:none}
.rs-bench-card-head{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs-bench-nm{font-weight:700;color:var(--fg)}
.rs-bench-table{display:grid;grid-template-columns:28px repeat(5,1fr);gap:2px 3px;align-items:center;margin-top:3px}
.rs-bench-row{display:contents}
.rs-bench-row>*{font-size:10px;text-align:center;color:var(--muted);white-space:nowrap}
.rs-bench-rowlabel{text-align:left;font-size:9px}
.rs-bench-table .ln{display:flex;align-items:center;justify-content:center}
.rs-bench-table .lane-ic{width:13px;height:13px}

/* 2026-09-17: 「データ履歴」枠（formTeamsTiered の実行トレースを表示する診断用パネル。#rs-section の下）。
   `.pref-lanes-box`/`.rs-bench` と同じネイティブ<details>パターン（既定は閉）。中身は表主体なので
   `.pl-cols-grp`ではなく専用の軽量な表スタイルを新設。 */
.rs-history{font-size:12px;color:var(--fg)}
.rs-history>summary{cursor:pointer;list-style:none;padding:3px 8px;border:1px solid var(--line);border-radius:8px;
  background:var(--bg3);color:var(--fg);font-weight:600;display:inline-block}
.rs-history>summary::-webkit-details-marker{display:none}
.rs-history[open]>summary{margin-bottom:10px}
#rs-history-body h4{font-size:12px;color:var(--muted);margin:14px 0 6px}
#rs-history-body h4:first-child{margin-top:0}
.rs-hist-cond{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:2px}
.rs-hist-table{width:100%;border-collapse:collapse;font-size:12px}
.rs-hist-table th,.rs-hist-table td{padding:3px 6px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.rs-hist-table th{color:var(--muted);font-weight:600}
.rs-hist-table td:last-child{white-space:normal}
.rs-hist-opp{border:1px solid var(--line);border-radius:8px;padding:6px 10px;margin-bottom:8px}
.rs-hist-opp-head{font-weight:600;margin-bottom:4px}
.rs-hist-opp-cands{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:1px}
.rs-hist-opp-cands .rs-hist-chosen{color:var(--accent);font-weight:700}
/* 2026-09-17: 「プレイヤーの並び順」表で、実際に並び替えの基準として使われている列（fairGames設定に応じて
   今日の試合数／合計のどちらか）を強調する。ユーザー要望「試合数の影響がわかりづらい」への対応。 */
.rs-hist-table th.rs-hist-key{color:var(--accent)}
.rs-hist-table td.rs-hist-key{color:var(--accent);font-weight:700}

/* ===================== [CSS-5] フォーム ===================== */
.modal label,.drawer label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.modal input,.modal select,.drawer input,.drawer select{
  background:var(--bg);border:1px solid var(--line);color:var(--fg);
  border-radius:8px;padding:7px 9px;font-size:14px;
}
.modal fieldset{border:1px solid var(--line);border-radius:8px;padding:10px;margin:0}
.modal fieldset[disabled]{opacity:.45}
.modal legend{font-size:11px;color:var(--muted);padding:0 4px}
.modal legend .pm-goodcount{color:var(--fg)}
.modal legend .pm-goodcount.bad{color:var(--bad)}
.modal legend .pm-goodcount.ok{color:var(--good)}
/* 2026-09-22 Phase D: PC専用化に伴い、#pm-modalは縦一列（名前〜メモ〜レーン得意度が全部縦積み）から
   左=基本情報・右=レーン得意度の2カラムへ。横幅を広げた分、fieldsetの縦の長さが目立たなくなる。 */
.modal.pm-wide{max-width:640px}
.pm-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.pm-col-basic{display:flex;flex-direction:column;gap:12px;min-width:0}
/* fieldsetは既定でmin-width:min-content相当の特殊な最小幅を持ち、1fr 1frでの均等分割を妨げるため明示的に解除する */
.pm-col-lanes{align-self:stretch;min-width:0}
.pm-lock-row{display:flex;flex-direction:column;gap:6px}
.pm-lock-head{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.pm-lock-status{font-size:11px;font-weight:700;color:var(--warn)}
.pm-lock-current-row{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}
.pm-lock-current-row input{width:80px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:6px;padding:4px 8px;font:12px ui-monospace,Menlo,Consolas,monospace}
#pm-lock-pin{max-width:120px}
/* レーン得意度: 縦1行/レーン。ラベル / グレード / 実効ランク（2026-09-24: 主催者加点(±div)欄は編集モーダルから廃止） */
.lane-rows{display:flex;flex-direction:column;gap:6px}
.lane-row{display:grid;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:6px}
.lane-row .lr-lane{font-size:11px;color:var(--muted);font-weight:700}
.lane-row select{width:100%;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:6px;padding:6px 6px;font-size:13px}
.lane-row .pm-eff{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.modal-foot,.cfg-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.modal-foot .spacer{flex:1}
.err{color:var(--bad);font-size:12px;min-height:14px;margin:0}
.drawer label.cfg-api input{font-size:12px}
.pc-choice-btns{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.pc-choice-btns .btn{width:100%;padding:12px}
.pv-myscore-body{display:flex;flex-direction:column;gap:10px}
.pv-ms-row{display:flex;align-items:center;gap:8px}
.pv-ms-lane{flex:0 0 68px;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--muted);white-space:nowrap}
.pv-ms-grade{flex:0 0 28px;text-align:center;font-size:14px;cursor:help}
.pv-ms-bar-wrap{flex:1;min-width:0;height:20px;background:var(--bg3);border:1px solid var(--line);border-radius:10px;position:relative;cursor:help}
.pv-ms-bar-mid{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--line)}
.pv-ms-bar-fill{position:absolute;top:0;bottom:0;border-radius:2px}
.pv-ms-bar-fill.pos{background:var(--good)}
.pv-ms-bar-fill.neg{background:var(--bad)}
.pv-ms-bar-w,.pv-ms-bar-l,.pv-ms-bar-wr{position:absolute;top:50%;transform:translateY(-50%);font-size:9px;font-weight:700;line-height:1;pointer-events:none;
  text-shadow:0 0 3px var(--bg3),0 0 3px var(--bg3),0 0 3px var(--bg3)}
.pv-ms-bar-w{left:5px;color:var(--good)}
.pv-ms-bar-l{right:5px;color:var(--bad)}
.pv-ms-bar-wr{left:50%;transform:translate(-50%,-50%);color:var(--fg)}
.pv-ms-peak{margin:2px 0 8px}
.pv-ms-nums{flex:0 0 225px;display:flex;gap:6px;font-size:11px;font-family:ui-monospace,Menlo,Consolas,monospace;white-space:nowrap}
.pv-ms-nums span{cursor:help;border-bottom:1px dotted var(--muted)}
.pv-ms-rating.pos{color:var(--good)}
.pv-ms-rating.neg{color:var(--bad)}
.pv-ms-total{color:var(--fg);font-weight:700}
.cfg-ping-out{white-space:pre-wrap;word-break:break-all;font:11px/1.5 ui-monospace,Menlo,Consolas,monospace;
  background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:8px;margin:0;max-height:200px;overflow:auto}
.cfg-ping-out:empty{display:none}

/* ===================== [CSS-6] room (M2 P1) ===================== */
.room-wrap{max-width:460px;margin:24px auto;display:flex;flex-direction:column;gap:16px}
.room-wrap h2{font-size:18px}
.room-wrap .sub{font-size:12px;color:var(--muted)}
.landing-btns{display:flex;flex-direction:column;gap:12px}
.landing-btns .btn{padding:16px;font-size:15px;text-align:left}
.room-card{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:18px;display:flex;flex-direction:column;gap:12px}
.room-code{font:700 30px/1 ui-monospace,Menlo,Consolas,monospace;letter-spacing:6px;color:var(--accent);
  text-align:center;background:var(--bg);border:1px dashed var(--line);border-radius:10px;padding:14px}
.room-code.sm{font-size:15px;letter-spacing:3px;padding:6px 10px;flex:1}
.room-field{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted)}
.room-field input{background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:8px 10px;font-size:13px}
.pv-boost-row{display:flex;align-items:center;gap:8px}
.pv-boost-row input{width:64px;flex:0 0 auto}
.pv-boost-preview{font-size:12px;color:var(--accent);font-weight:700}
#jv-pass,#rc-pass{font:700 16px/1 ui-monospace,Menlo,Consolas,monospace;letter-spacing:6px;text-align:center}
.code-line{display:flex;align-items:center;gap:6px}
.code-line input{flex:1;min-width:0}
.code-eye{background:none;border:1px solid var(--line);border-radius:8px;color:var(--muted);cursor:pointer;
  padding:4px 8px;font-size:13px;line-height:1;flex:0 0 auto}
.cv-share{background:var(--bg);border:1px solid var(--accent);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--fg)}
.cv-share-row{display:flex;gap:10px;align-items:baseline}
.cv-share-k{color:var(--muted);min-width:64px}
.cv-share-row b{font-size:16px}
.room-players{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:280px;overflow:auto}
.room-players li{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:13px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.room-players li .nm{flex:1;min-width:0}
/* 参加表明 */
.declare-btns{display:flex;gap:8px}
.declare-btns .btn{flex:1}
.declare-btns .btn.on[data-v="in"]{background:var(--good);border-color:var(--good);color:#04210f}
.declare-btns .btn.on[data-v="rest"]{background:var(--warn);border-color:var(--warn);color:#2b1c04}
.declare-btns .btn.on[data-v="out"]{background:var(--bad);border-color:var(--bad);color:#2a0606}
.declare-btns .btn.on[data-v="none"]{background:var(--line);border-color:var(--muted);color:var(--fg)}
.tag{display:inline-block;border-radius:999px;padding:1px 8px;font-size:11px;border:1px solid var(--line)}
.tag.in{background:color-mix(in srgb,var(--good) 22%,transparent);color:var(--good)}
.tag.rest{background:color-mix(in srgb,var(--warn) 22%,transparent);color:var(--warn)}
.tag.out{background:color-mix(in srgb,var(--bad) 22%,transparent);color:var(--bad)}
.tag.none{color:var(--muted)}
.tag.lane{background:var(--bg3);color:var(--fg)}
/* 主催者がゲストの参加/不参加を切替 */
.pk-ctl{display:inline-flex;gap:4px;flex-shrink:0}
.pk-btn{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);background:var(--bg);color:var(--muted);cursor:pointer;line-height:1.5}
.pk-btn.on-in{background:color-mix(in srgb,var(--good) 22%,transparent);color:var(--good);border-color:var(--good)}
.pk-btn.on-out{background:color-mix(in srgb,var(--bad) 22%,transparent);color:var(--bad);border-color:var(--bad)}
.pk-btn:disabled{opacity:.5;cursor:default}
/* 参加者一覧の並び替え */
.pv-sort{display:flex;gap:6px;align-items:center;margin:2px 0;font-size:12px;flex-wrap:wrap}
.pv-sort label{color:var(--muted);white-space:nowrap}
.pv-sort select{font-size:12px;padding:3px 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.pv-sort #pv-sort-dir{flex:0 0 auto;min-width:34px;font-size:13px;line-height:1}
/* 後でまとめて送信 */
.pv-defer{display:flex;gap:6px;align-items:center;margin:2px 0}
.pv-defer .btn.sm{flex:0 0 auto}
#pv-defer-toggle.on{background:var(--accent);border-color:var(--accent);color:#fff}
#pv-delsel-toggle.on{background:var(--bad);border-color:var(--bad);color:#fff}
.pd-chk{margin:0;flex:0 0 auto}
.nm.pd-pick{cursor:pointer;border-radius:6px;padding:2px 6px;margin:-2px -6px}
.nm.pd-pick.pd-selected{background:color-mix(in srgb,var(--bad) 20%,transparent);outline:1px solid var(--bad)}
.tag.pending{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent);border-color:var(--accent)}
.pv-list-head{display:flex;align-items:center;gap:8px}
.pv-list-head h2{flex:1;margin:0}
.pv-list-sub{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:-4px 0 2px}
.pv-updated{font-size:11px;color:var(--muted)}
#pv-status.open{background:color-mix(in srgb,var(--good) 22%,transparent);color:var(--good);border-color:var(--good)}
#pv-status.closed{background:color-mix(in srgb,var(--bad) 22%,transparent);color:var(--bad);border-color:var(--bad)}
.hr{border:none;border-top:1px solid var(--line);margin:4px 0}
#lv-profile #lv-prof-body{color:var(--fg);font-size:13px}
#lv-profile #lv-prof-clear{align-self:flex-start}
#lv-rooms-list li .nm{font-size:13px}
.jv-host,.pv-key{font-size:12px;color:var(--muted)}
.jv-host summary,.pv-key summary{cursor:pointer;padding:2px 0}
.jv-host[open],.pv-key[open]{display:flex;flex-direction:column;gap:8px}
.pv-key-row{display:flex;gap:8px;align-items:center}
.pv-key-row input,.pv-share-row input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:8px 10px;font:12px ui-monospace,Menlo,Consolas,monospace}
.pv-share{display:flex;flex-direction:column;gap:8px;margin:4px 0 2px}
.pv-share-row{display:flex;gap:8px;align-items:center}
.pv-share-k{font-size:12px;color:var(--muted);flex:0 0 60px}
#ri-modal .pv-share-k{flex-basis:72px}
#ri-modal .pv-share-row input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:8px 10px;font:12px ui-monospace,Menlo,Consolas,monospace}
.pv-scoring{display:flex;flex-direction:column;gap:4px;margin:4px 0 2px}
.pv-scoring-item{display:flex;flex-direction:column;gap:4px;margin-top:8px}
.pv-scoring-item label{font-size:13px;font-weight:600}
.pv-scoring-item input{width:100px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:8px 10px;font:13px ui-monospace,Menlo,Consolas,monospace}
.pv-scoring-help{margin:0}
.pv-scoring-preview{margin-top:10px;padding:10px;background:var(--bg2);border:1px solid var(--line);border-radius:8px}
.pv-scoring-table{width:100%;border-collapse:collapse;margin-top:6px;font-size:12px}
.pv-scoring-table th,.pv-scoring-table td{padding:4px 6px;text-align:right;border-bottom:1px solid var(--line)}
.pv-scoring-table th:first-child,.pv-scoring-table td:first-child{text-align:left}
.pv-scoring-table td.pos{color:var(--good)}
.pv-scoring-table td.neg{color:var(--bad)}
.room-err{color:var(--bad);font-size:12px;min-height:15px}
.rc-newsheet{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:-2px 0 6px}
.rc-newsheet .sub{flex-basis:100%;margin:0}
.rc-newsheet a.btn{text-decoration:none}
.rc-status{font-size:12px;min-height:15px}
.rc-status.ok{color:var(--good)}
.rc-status.ng{color:var(--bad)}
.rc-help{font-size:12px;color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px}
.rc-help ol{margin:6px 0;padding-left:18px}
.rc-help li{margin:2px 0}
.room-foot{display:flex;gap:8px;flex-wrap:wrap}
.pv-autoreset{display:flex;flex-direction:column;gap:6px}
.pv-autoreset-row{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.pv-autoreset-row select{background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:6px;padding:2px 6px;font-size:12px}
.room-back{background:none;border:none;color:var(--muted);cursor:pointer;font-size:12px;padding:4px 0;align-self:flex-start}
/* 2026-09-23: ヘッダーへ移設したため、独立ブロックだった頃のmargin-bottomは不要（.hdr-right内でgapを使う）。
   .sub(部屋コード)のflex:1も、単独ブロック時代に右側のボタンを押し出すためのものだったので合わせて撤去。 */
.room-banner{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg2);border:1px solid var(--line);border-radius:8px;flex-wrap:wrap}
.lv-room-title{font-weight:700;white-space:nowrap}
.room-banner .sub{white-space:nowrap}
/* 閲覧専用URL（2026-10-02・[JS-11] enterViewer）: 個人/全員/試合タブ以外と、編集・部屋操作のボタンを隠す */
.viewer-badge{display:none;font-size:12px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}
body.viewer-mode .viewer-badge{display:inline-block}
body.viewer-mode #lv-room-url-copy,body.viewer-mode #lv-room-refresh,body.viewer-mode #pv-leave,body.viewer-mode #pv-tools-open,body.viewer-mode #nav-home,body.viewer-mode #cfg-open{display:none !important}
body.viewer-mode #local-tabs .local-tab:not([data-tab="personal"]):not([data-tab="everyone"]):not([data-tab="matches"]){display:none}
.pv-view-note{margin:2px 0 0;font-size:12px}
/* 閲覧専用URLの入室画面（2026-10-03・viewerProgress）: 二重リングの👁＋「入室中...」の跳ねるドット＋疑似進捗バー（%・あと約N秒）
   ＋手順リスト（未着手/実行中/完了/失敗・経過秒・件数）＋使い方ヒントの切替。html.vx-boot は JS 読み込み前から同じ画面を出す */
html.vx-boot .view{display:none}
html.vx-boot #view-viewerr{display:block}
html.vx-boot #local-tabs,html.vx-boot .hdr-right{visibility:hidden}
.vx-card{align-items:center;text-align:center;padding:26px 22px 20px;gap:12px}
.vx-emblem{position:relative;width:76px;height:76px;margin:2px auto 4px}
.vx-ring{position:absolute;inset:0;border-radius:50%;border:3px solid transparent;border-top-color:var(--accent);border-left-color:var(--accent);animation:spin 1.1s linear infinite}
.vx-ring2{inset:9px;border-top-color:var(--good);border-left-color:transparent;border-right-color:var(--good);animation-duration:1.7s;animation-direction:reverse}
.vx-eye{position:absolute;inset:0;display:grid;place-items:center;font-size:26px;animation:vx-pulse 1.6s ease-in-out infinite}
@keyframes vx-pulse{0%,100%{transform:scale(1);opacity:.85}50%{transform:scale(1.12);opacity:1}}
.vx-title{margin:0;font-size:19px}
.vx-dots i{font-style:normal;display:inline-block;animation:vx-dot 1.2s infinite both}
.vx-dots i:nth-child(2){animation-delay:.2s}
.vx-dots i:nth-child(3){animation-delay:.4s}
@keyframes vx-dot{0%,80%,100%{opacity:.15;transform:translateY(0)}40%{opacity:1;transform:translateY(-4px)}}
.vx-room{margin:0;font-size:14px;color:var(--muted);min-height:1.4em}
.vx-room b{color:var(--accent)}
.vx-progress{width:100%}
.vx-pbar{position:relative;height:10px;border-radius:999px;background:var(--line);overflow:hidden}
.vx-pbar i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--good));transition:width .35s ease-out;overflow:hidden}
.vx-pbar i::after{content:'';position:absolute;top:0;bottom:0;left:0;width:60px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:vx-shine 1.3s linear infinite}
@keyframes vx-shine{from{transform:translateX(-60px)}to{transform:translateX(600px)}}
.vx-pmeta{display:flex;justify-content:space-between;gap:10px;margin-top:6px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;text-align:right}
.vx-pmeta b{color:var(--accent);font-size:13px}
.vx-steps{list-style:none;margin:4px 0 0;padding:0;width:100%;display:flex;flex-direction:column;gap:7px;text-align:left}
.vx-step{display:flex;align-items:center;gap:9px;font-size:14px;transition:color .2s,opacity .2s}
.vx-step .vx-ic{width:20px;height:20px;flex:none;display:grid;place-items:center;border-radius:50%;font-size:12px;font-weight:700;border:2px solid var(--line);color:var(--muted);box-sizing:border-box}
.vx-step.wait{color:var(--muted);opacity:.55}
.vx-step.run{font-weight:700}
.vx-step.run .vx-ic{border-color:var(--accent);border-right-color:transparent;animation:spin .8s linear infinite}
.vx-step.ok{color:var(--muted)}
.vx-step.ok .vx-ic{border-color:var(--good);background:var(--good);color:var(--bg2)}
.vx-step.ng .vx-ic{border-color:var(--bad);background:var(--bad);color:var(--bg2)}
.vx-step.ng .vx-sec{color:var(--bad)}
.vx-step .vx-sec{margin-left:auto;font-size:12px;font-weight:400;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.vx-tip{margin:2px 0 0;width:100%;box-sizing:border-box;padding:8px 10px;border-radius:8px;background:color-mix(in srgb,var(--accent) 10%,transparent);font-size:12.5px;color:var(--muted);text-align:left;min-height:2.6em;transition:opacity .3s}
.vx-tip:empty{display:none}
.vx-tip.fade{opacity:0}
.vx-tip b{color:var(--accent)}
.vx-msg{margin:0}
.vx-msg:empty{display:none}
#vx-back{margin-top:2px;min-width:200px}
/* 入室中は途中で別画面へ移れないよう、ヘッダーの部屋操作・🛠/🏠/⚙ を隠す（失敗時は #vx-back で戻る） */
body:has(#view-viewerr.active) .hdr-right{visibility:hidden}
.vx-card.done .vx-ring{border-color:var(--good);animation:none}
.vx-card.failed .vx-ring{border-color:var(--bad);animation:none}
.vx-card.done .vx-ring2,.vx-card.failed .vx-ring2,.vx-card.done .vx-dots,.vx-card.failed .vx-dots{display:none}
.vx-card.failed .vx-eye{animation:none;filter:grayscale(1)}
.vx-card.failed .vx-pbar i{background:var(--bad)}
.vx-card.done .vx-pbar i::after,.vx-card.failed .vx-pbar i::after{display:none}
#view-viewerr.vx-leave .vx-card{animation:vx-out .33s ease-in forwards}
@keyframes vx-out{to{opacity:0;transform:translateY(-8px) scale(.98)}}
@media (prefers-reduced-motion:reduce){.vx-ring,.vx-eye,.vx-dots i,.vx-pbar i::after{animation-duration:3s}}
/* 「チーム分け画面へ」を参加者一覧と同じ幅で大きく強調。「この端末から退出」とは枠を分ける */
.pv-go-card{padding:14px;border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset,0 6px 20px rgba(91,140,255,.28)}
.pv-go-btn{width:100%;padding:18px 12px;font-size:19px;font-weight:800;letter-spacing:1px;
  background:var(--accent2);border-color:var(--accent);color:#fff;border-radius:10px}
.pv-go-btn:hover{filter:brightness(1.12)}
/* 2026-09-14: 「更新せずすぐに」用のサブボタン。主ボタンより控えめに（.room-card の flex-column で自動的に縦に並ぶ） */
.pv-go-btn-sub{width:100%;padding:9px 12px;font-size:13px;font-weight:600;border-radius:9px}
.pv-leave-foot{justify-content:center}
.pill{display:inline-block;background:var(--bg3);border:1px solid var(--line);border-radius:999px;padding:2px 10px;font-size:12px}

/* ===================== [CSS-7] 思い出 / 個人タブ (2026-09-29) =====================
   #lt-memories / #lt-personal。色・書体はすべて :root の変数参照（テーマ/書体切替に追従）。
   カード型セクション .st-sec を縦に並べる「LoL クライアント風」の見た目（上辺にアクセント色のライン）。 */
.st-wrap{display:flex;flex-direction:column;gap:14px}
.st-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.st-title{margin:0;font-family:var(--font-display);font-size:20px;letter-spacing:.04em}
.st-updated{font-size:12px;margin-left:auto}
.st-head .btn{flex-shrink:0}
#mm-body,#ps-body{display:flex;flex-direction:column;gap:12px}
.st-notice{margin:0;padding:12px 14px;border:1px dashed var(--line);border-radius:var(--radius);color:var(--muted);background:var(--bg)}
.st-sec{position:relative;background:linear-gradient(180deg,var(--bg3),var(--bg2) 64px);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px 12px;overflow:hidden}
.st-sec::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent)}
.st-sec-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.st-sec-head h3{margin:0;font-family:var(--font-display);font-size:15px;letter-spacing:.03em}
.st-sec-ic{font-size:16px}
.st-sub{font-size:11px}
.st-subhead{margin:12px 0 6px;font-size:13px;color:var(--muted);font-weight:600}
.st-empty{margin:4px 0;font-size:13px}
.st-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.st-item{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:8px;background:var(--bg);min-width:0}
.st-item .st-val{margin-left:auto;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.st-meta{font-size:12px;white-space:nowrap;font-variant-numeric:tabular-nums}
.st-rank{flex:0 0 24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;background:var(--bg3);color:var(--muted);border:1px solid var(--line)}
.st-rank-1{background:#c8aa6e;color:#1a1408;border-color:#e6cf92}
.st-rank-2{background:#a7b1c2;color:#161b24;border-color:#cfd6e2}
.st-rank-3{background:#b07a4a;color:#1d1209;border-color:#d39c69}
.st-name{background:none;border:none;padding:0;color:var(--fg);font:inherit;font-weight:600;cursor:pointer;text-align:left;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-name:hover,.st-name:focus-visible{color:var(--accent);text-decoration:underline;outline:none}
.st-pair{display:inline-flex;align-items:center;gap:6px;min-width:0;flex-wrap:wrap}
.st-amp,.st-sep{color:var(--muted)}
.st-vs{font-size:12px;font-weight:700;padding:1px 8px;border-radius:999px;background:var(--bg3);border:1px solid var(--line);white-space:nowrap}
.st-more{margin-top:8px}
.st-lane-tabs{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;margin-bottom:10px;flex-wrap:wrap}
.st-lane-tab{border:none;background:transparent;color:var(--muted);font-size:12px;padding:4px 12px;cursor:pointer}
.st-lane-tab.on{background:var(--accent);color:#fff;font-weight:700}
.st-match{display:flex;flex-direction:column;gap:2px;min-width:0}
.st-win{display:flex;flex-wrap:wrap;gap:2px}
.st-close-list{gap:8px}
.st-close{padding:8px 10px;border-radius:8px;background:var(--bg);display:flex;flex-direction:column;gap:6px}
.st-close-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.st-close-team{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding-left:8px;border-left:3px solid var(--line)}
.st-close-team.won{border-left-color:var(--good)}
.st-close-res{font-size:11px;font-weight:700;color:var(--muted);width:36px}
.st-close-team.won .st-close-res{color:var(--good)}
.st-close-total{font-size:12px;font-variant-numeric:tabular-nums;color:var(--muted);width:56px}
.st-close-names{display:flex;flex-wrap:wrap;gap:2px;min-width:0}
.st-neg{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);padding:0 12px}
.st-neg>summary{cursor:pointer;padding:12px 2px;color:var(--muted);font-size:13px}
.st-neg[open]{padding-bottom:12px}
.st-neg[open]>summary{margin-bottom:4px}
.st-neg .st-sec+.st-sec{margin-top:10px}
.st-skel{min-height:120px}
.st-skel-bar{height:12px;border-radius:6px;margin:10px 0;background:linear-gradient(90deg,var(--bg3),var(--line),var(--bg3));background-size:200% 100%;animation:st-shimmer 1.2s linear infinite}
.st-skel-bar.w40{width:40%;height:16px}
.st-skel-bar.w70{width:70%}
@keyframes st-shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.st-skel-bar{animation:none}}
/* 個人タブ */
.ps-picker{display:flex;gap:6px;align-items:center;flex-wrap:wrap;min-width:0}
.ps-search,.ps-select{background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;min-width:0}
.ps-search{width:160px}
.ps-select{max-width:220px}
.ps-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px}
.ps-stat{background:var(--bg);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}
.ps-k{font-size:11px;color:var(--muted)}
.ps-v{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums}
.ps-big{font-family:var(--font-display);font-size:34px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.ps-big small{font-size:14px;font-weight:600;color:var(--muted);margin-left:4px}
.ps-lanes,.ps-recent{width:100%;border-collapse:collapse;font-size:13px}
.ps-lanes th,.ps-lanes td,.ps-recent th,.ps-recent td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.ps-lanes thead th,.ps-recent thead th{font-size:11px;color:var(--muted);font-weight:600}
.ps-lanes td{font-variant-numeric:tabular-nums}
.ps-lane-few td{color:var(--muted)}
.ps-recent-wrap{overflow-x:auto}
.ps-recent td{white-space:nowrap}
.ps-recent td:nth-child(4){white-space:normal;min-width:160px}
.ps-res{font-size:11px;font-weight:700;padding:1px 8px;border-radius:999px}
.ps-res.w{background:color-mix(in srgb,var(--good) 22%,transparent);color:var(--good)}
.ps-res.l{background:color-mix(in srgb,var(--bad) 22%,transparent);color:var(--bad)}
/* 2026-10-16 個人タブ冒頭のステータス画面（psStatusHtml） */
.ps-status{--tier:var(--muted);background:linear-gradient(160deg,color-mix(in srgb,var(--accent) 14%,var(--bg2)),var(--bg2) 60%)}
.t-iron{--tier:#8a8f99}.t-bronze{--tier:#b0714a}.t-silver{--tier:#a9b6c6}.t-gold{--tier:#e0b54a}.t-plat{--tier:#3fb8a8}
.t-emerald{--tier:#2fbf6f}.t-diamond{--tier:#6f8fff}.t-master{--tier:#b06bff}.t-gm{--tier:#ff5a5a}.t-chall{--tier:#f2d27a}
.ps-st-head{display:flex;align-items:center;gap:12px;margin-bottom:12px;min-width:0}
.ps-st-emblem{flex-shrink:0;width:56px;height:56px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:17px;
  color:var(--tier);border:3px solid var(--tier);background:color-mix(in srgb,var(--tier) 16%,var(--bg));box-shadow:0 0 14px color-mix(in srgb,var(--tier) 40%,transparent)}
.ps-st-id{min-width:0}
.ps-st-name{font-family:var(--font-display);font-size:22px;font-weight:800;line-height:1.2;overflow-wrap:anywhere}
.ps-st-sub{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.ps-st-sub b{color:var(--fg)}
.ps-st-ranks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:14px}
.ps-st-rank{background:var(--bg);border:1px solid var(--line);border-left:4px solid var(--tier);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:2px;min-width:0}
.ps-st-rank.none{--tier:var(--line)}
.ps-st-k{font-size:11px;color:var(--muted)}
.ps-st-v{font-size:17px;font-weight:800;color:var(--tier);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ps-st-rank.none .ps-st-v{color:var(--muted)}
.ps-st-note{font-size:10px;color:var(--muted)}
.ps-st-lanes-h{font-size:11px;color:var(--muted);margin-bottom:6px;letter-spacing:.08em}
.ps-st-lanes{display:flex;flex-direction:column;gap:6px}
.ps-st-lane{--gc:var(--muted);display:grid;grid-template-columns:40px 22px 1fr 96px;align-items:center;gap:8px;font-size:13px}
.ps-st-lane.g-main{--gc:var(--good)}.ps-st-lane.g-sub{--gc:var(--accent)}.ps-st-lane.g-even{--gc:var(--muted)}
.ps-st-lane.g-t1{--gc:var(--warn)}.ps-st-lane.g-t2{--gc:var(--bad)}
.ps-st-ln{font-weight:700}
.ps-st-gi{color:var(--gc);font-size:16px;text-align:center}
.ps-st-bar{height:10px;border-radius:999px;background:var(--bg3);overflow:hidden}
.ps-st-bar i{display:block;height:100%;border-radius:inherit;background:var(--gc)}
.ps-st-eff{font-size:12px;color:var(--muted);text-align:right;white-space:nowrap}
@media (max-width:560px){
  .ps-st-ranks{grid-template-columns:1fr}
  .ps-st-rank{flex-direction:row;align-items:baseline;flex-wrap:wrap;column-gap:8px}
  .ps-st-lane{grid-template-columns:36px 20px 1fr 80px}
}
@media (max-width:560px){
  .st-updated{margin-left:0;width:100%;order:9}
  .ps-search{width:100%}
  .ps-picker{width:100%}
  .ps-select{flex:1;max-width:none}
  .st-item{flex-wrap:wrap}
}
/* タブが5枚になり狭い幅で「4.個人」が切れるため、見出し横のタブは横スクロール可能に（スクロールバーは隠す） */
.local-tabs{max-width:100%;overflow-x:auto;scrollbar-width:none}
.local-tabs::-webkit-scrollbar{display:none}
.local-tab{flex-shrink:0}

/* ===================== [CSS-4b] 結果カードのスクショ欄 (.rs-shot / .sh-*)  2026-09-30 ===================== */
.rs-sides{display:inline-flex;align-items:center;gap:8px;margin-left:8px;font-size:12px;font-weight:600}
.rs-side-b{color:#5b8cff}.rs-side-r{color:#ff6b5b}
.rs-shot{margin-top:10px;padding:10px 12px;border:1px dashed var(--line);border-radius:10px;background:var(--bg2);outline:none}
.rs-shot.focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(91,140,255,.25)}
.rs-shot .sh-empty{color:var(--muted);font-size:13px}
.rs-shot .sh-msg{font-size:13px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rs-shot .sh-done{color:var(--good)}
.rs-shot .sh-err{color:var(--bad)}
.rs-shot .sh-thumb{max-width:160px;max-height:90px;border-radius:6px;border:1px solid var(--line);float:right;margin:0 0 8px 8px}
.sh-warn{background:rgba(224,165,58,.15);border:1px solid var(--warn);border-radius:8px;padding:6px 10px;margin-bottom:8px;font-size:13px}
.sh-win{margin:6px 0;font-size:13px}
.sh-tblwrap{margin:8px 0;overflow-x:auto}
/* 2チームを1つの固定レイアウトの表にして、名前の長さに関係なく縦・横の列を揃える */
.sh-tbl{border-collapse:collapse;font-size:12px;width:100%;min-width:760px;table-layout:fixed}
.sh-tbl col.c-gr{width:62px}.sh-tbl col.c-ln{width:42px}
.sh-tbl col.c-nm{width:118px}.sh-tbl col.c-pl{width:140px}.sh-tbl col.c-ch{width:200px}
.sh-tbl col.c-n{width:52px}.sh-tbl col.c-cs{width:62px}.sh-tbl col.c-gd{width:80px}
.sh-tbl th{color:var(--muted);font-weight:500;text-align:left;padding:3px 4px;white-space:nowrap}
.sh-tbl td{padding:2px 4px;vertical-align:middle}
.sh-tbl tr.sh-team-row th{color:var(--fg);font-weight:700;font-size:13px;padding:10px 4px 4px;border-bottom:1px solid var(--line)}
.sh-tbl .sh-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sh-tbl td:nth-last-child(-n+6) input{text-align:right}
.sh-tbl td.sh-ln{text-align:center}.sh-tbl td.sh-ln img{width:20px;height:20px;vertical-align:middle}
.sh-tbl td.sh-gr{white-space:nowrap}
.sh-tbl input,.sh-tbl select,.sh-win select{background:var(--bg3);color:var(--fg);border:1px solid var(--line);border-radius:6px;padding:2px 4px;font-size:12px;box-sizing:border-box}
.sh-tbl td input,.sh-tbl td select{width:100%;min-width:0}
.sh-tbl .sh-ch{display:flex;align-items:center;gap:4px}
.sh-tbl .sh-ch img,.sh-tbl .sh-ch-ph{flex:0 0 20px;width:20px;height:20px}
.sh-tbl input.bad,.sh-tbl select.bad{border-color:var(--warn);background:rgba(224,165,58,.18)}
.sh-issues{margin:6px 0;padding-left:18px;font-size:12px;color:var(--warn)}
.sh-issues li.ok{color:var(--muted)}
.sh-ok{font-size:12px;margin:6px 0}
.sh-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.sh-why{font-size:12px}
/* 2026-09-30: 結果カードの左=ブルー/右=レッド固定 + ⇄（表を左右ごと入れ替え） */
.rs-grid{position:relative}
.rs-swap-side{position:absolute;left:50%;top:2px;transform:translateX(-50%);z-index:2;padding:0 8px;line-height:1.6;min-width:34px}
.rs-swap-side[disabled]{opacity:.35;cursor:not-allowed}
.rs-side-badge{display:inline-block;margin-left:6px;padding:0 7px;border-radius:999px;font-size:11px;font-weight:700}
.rs-side-badge.blue{background:rgba(91,140,255,.18);color:#7da4ff}
.rs-side-badge.red{background:rgba(255,107,91,.18);color:#ff8a7c}
.rs-team.side-blue{border-top-color:#5b8cff}
.rs-team.side-red{border-top-color:#ff6b5b}   /* 上辺の色はチーム(A/B)ではなくサイド(ブルー/レッド)に合わせる */
/* 2026-10-01: チャンピオン選択（アイコン+名前・検索つき）。標準の <select> は画像を出せないため専用の一覧 */
.sh-champ-btn{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;background:var(--bg3);color:var(--fg);border:1px solid var(--line);border-radius:6px;padding:2px 6px;font-size:12px;cursor:pointer;text-align:left}
.sh-champ-btn.bad{border-color:var(--warn);background:rgba(224,165,58,.18)}
.sh-champ-btn img,.sh-champ-btn .sh-ch-ph{flex:0 0 20px;width:20px;height:20px;border-radius:4px}
.sh-champ-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sh-champ-caret{color:var(--muted);font-size:10px}
.sh-cp{position:fixed;z-index:1000;width:290px;display:flex;flex-direction:column;background:var(--bg2);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);overflow:hidden}
.sh-cp-q{margin:8px;padding:6px 8px;border-radius:6px;border:1px solid var(--line);background:var(--bg3);color:var(--fg);font-size:13px}
.sh-cp-list{overflow-y:auto;padding:0 4px 6px;flex:1}
.sh-cp-h{position:sticky;top:0;background:var(--bg2);color:var(--muted);font-size:11px;padding:6px 6px 2px}
.sh-cp-item{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;color:var(--fg);padding:3px 6px;border-radius:6px;font-size:13px;cursor:pointer;text-align:left}
.sh-cp-item:hover,.sh-cp-item:focus{background:var(--bg3);outline:none}
.sh-cp-item.sel{background:rgba(91,140,255,.2)}
.sh-cp-item img,.sh-cp-item .sh-ch-ph{flex:0 0 26px;width:26px;height:26px;border-radius:5px;background:var(--bg3)}
.sh-cp-star{margin-left:auto;color:var(--warn)}
.sh-cp-empty{padding:12px;font-size:12px}
/* 2026-10-01: 勝敗だけ記録 */
.sh-winonly{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:13px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ===================== [CSS-8] 全員タブ (.ev-*)  2026-10-02 ===================== */
/* Excel 風の表。見出し（thead）と名前列は sticky。選択セルは accent の薄塗り＋外枠 */
.ev-wrap{gap:10px}
.ev-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ev-toolbar .ps-search{flex:1 1 200px;min-width:160px;max-width:320px}
.ev-tb-label{font-size:12px}
.ev-presets{display:inline-flex;flex-wrap:wrap;gap:4px}
.ev-preset.on{background:var(--accent);border-color:var(--accent);color:#fff}
.ev-details{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:13px}
.ev-details summary{cursor:pointer;color:var(--muted)}
.ev-details details[open]{flex-basis:100%}
.ev-cols-body{display:flex;flex-wrap:wrap;gap:8px 18px;padding:8px 0}
.ev-colsec{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px}
.ev-colsec b{font-size:12px;color:var(--muted);margin-right:2px}
.ev-colsec label{display:inline-flex;align-items:center;gap:3px;white-space:nowrap;cursor:pointer}
.ev-gloss-body{padding:6px 0;max-width:760px}
.ev-gloss-body h4{margin:10px 0 4px;font-size:13px}
.ev-gloss-body dl{display:grid;grid-template-columns:max-content 1fr;gap:3px 12px;margin:0;font-size:12px}
.ev-gloss-body dt{font-weight:700}
.ev-gloss-body dd{margin:0;color:var(--muted)}
.ev-scroll{overflow:auto;max-height:calc(100vh - 230px);min-height:200px;border:1px solid var(--line);border-radius:8px;background:var(--bg);outline:none}
.ev-scroll:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 50%,transparent)}
.ev-table{border-collapse:separate;border-spacing:0;font-size:12.5px;width:max-content;min-width:100%;font-variant-numeric:tabular-nums}
.ev-table th,.ev-table td{padding:4px 8px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);white-space:nowrap;text-align:left}
.ev-table td.num,.ev-table th.num{text-align:right}
.ev-table thead{position:sticky;top:0;z-index:3}
.ev-table thead th{background:var(--bg3);color:var(--fg);font-weight:700;vertical-align:bottom}
.ev-table thead th.ev-grp{text-align:center;color:var(--muted);font-weight:600;border-bottom-color:transparent}
.ev-table .ev-sticky{position:sticky;left:0;z-index:1}
.ev-table thead .ev-sticky{z-index:4}
.ev-table tbody td.ev-sticky{background:var(--bg2);font-weight:600}
.ev-table tbody td{background:var(--bg);cursor:cell;user-select:none;-webkit-user-select:none}
.ev-table tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--bg2) 55%,var(--bg))}
.ev-table tbody tr:hover td{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}
.ev-table tbody tr.ev-in td.ev-name{box-shadow:inset 3px 0 0 var(--good)}
.ev-table tbody tr.ev-me td{background:color-mix(in srgb,var(--warn) 14%,var(--bg))}
.ev-th{cursor:pointer;user-select:none}
.ev-th-in{display:inline-flex;align-items:center;gap:3px}
.ev-sort{color:var(--accent);font-size:10px}
.ev-fbtn{border:none;background:transparent;color:var(--muted);cursor:pointer;padding:0 2px;font-size:11px;line-height:1;border-radius:4px}
.ev-fbtn:hover{background:var(--line);color:var(--fg)}
.ev-fbtn.on{background:var(--accent);color:#fff}
.ev-table td.ev-pos{color:var(--good)}
.ev-table td.ev-neg{color:var(--bad)}
.ev-table td.ev-grade{text-align:center;font-size:14px}
.ev-table td.ev-best{font-weight:700;color:var(--accent)}
.ev-table td.ev-empty{text-align:center;color:var(--muted);padding:24px}
.ev-table tbody td.ev-sel{background:color-mix(in srgb,var(--accent) 24%,var(--bg))}
.ev-table td.ev-sel-t{box-shadow:inset 0 2px 0 var(--accent)}
.ev-table td.ev-sel-b{box-shadow:inset 0 -2px 0 var(--accent)}
.ev-table td.ev-sel-l{box-shadow:inset 2px 0 0 var(--accent)}
.ev-table td.ev-sel-r{box-shadow:inset -2px 0 0 var(--accent)}
.ev-table td.ev-sel-t.ev-sel-l{box-shadow:inset 0 2px 0 var(--accent),inset 2px 0 0 var(--accent)}
.ev-table td.ev-sel-t.ev-sel-r{box-shadow:inset 0 2px 0 var(--accent),inset -2px 0 0 var(--accent)}
.ev-table td.ev-sel-b.ev-sel-l{box-shadow:inset 0 -2px 0 var(--accent),inset 2px 0 0 var(--accent)}
.ev-table td.ev-sel-b.ev-sel-r{box-shadow:inset 0 -2px 0 var(--accent),inset -2px 0 0 var(--accent)}
.ev-table td.ev-sel-t.ev-sel-b.ev-sel-l.ev-sel-r{box-shadow:inset 0 0 0 2px var(--accent)}
.ev-pop{position:fixed;z-index:60;width:240px;max-width:calc(100vw - 16px);background:var(--bg2);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:10px;display:flex;flex-direction:column;gap:8px;font-size:13px}
.ev-pop-title{font-weight:700}
.ev-pop-sort{display:flex;gap:6px}
.ev-pop-sort .btn{flex:1}
.ev-pop-list{display:flex;flex-direction:column;gap:2px;max-height:260px;overflow:auto;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:6px 0}
.ev-pop-list label{display:flex;align-items:center;gap:6px;cursor:pointer;padding:2px 4px;border-radius:4px}
.ev-pop-list label:hover{background:var(--bg3)}
.ev-pop-list label .muted{margin-left:auto;font-size:11px}
.ev-pop-list .ev-all{font-weight:600}
.ev-pop-num{display:flex;flex-direction:column;gap:6px}
.ev-pop-num label{display:flex;align-items:center;gap:6px}
.ev-pop-num input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:6px;padding:4px 6px}
.ev-pop-actions{display:flex;justify-content:flex-end;gap:6px}
/* 2026-10-02: 名前の照合の根拠チップ（ID=RiotID / 名=名前 / 別=別名 / 手=手動） */
.sh-via{display:inline-block;min-width:16px;margin-right:4px;padding:0 3px;border-radius:4px;font-size:10px;line-height:15px;text-align:center;font-weight:700;background:var(--bg3);color:var(--muted)}
.sh-via-riotid{background:rgba(63,191,127,.2);color:var(--good)}
.sh-via-manual{background:rgba(91,140,255,.2);color:#7da4ff}
/* 2026-10-02: 確認画面の行の入れ替え（D&D・▲▼）とレーン表示 */
.sh-grip{display:inline-block;cursor:grab;color:var(--muted);font-weight:700;letter-spacing:-2px;padding:0 4px 0 2px;user-select:none}
.sh-grip:active{cursor:grabbing}
.sh-mv{background:none;border:0;color:var(--muted);cursor:pointer;font-size:9px;padding:0 2px;line-height:1}
.sh-mv:hover:not([disabled]){color:var(--fg)}
.sh-mv[disabled]{opacity:.25;cursor:default}
.sh-tbl tr.sh-dragging{opacity:.45}
.sh-tbl tr.sh-drop td{background:rgba(91,140,255,.18)}

/* ===================== [CSS-9] 試合タブ (.mt-*)  2026-10-02 ===================== */
/* 日付ごとのセクション → 1試合1行（タップで展開して両チームの表）。勝ったチームは --good、成績の後入力は .rs-shot（[CSS-4b]）を流用 */
.mt-wrap{gap:10px}
.mt-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}
.mt-toolbar select{background:var(--bg3);border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:4px 6px;font:inherit;font-size:13px;max-width:100%}
.mt-pair{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px;padding:2px 6px;border:1px dashed var(--line);border-radius:10px}
#mt-body{display:flex;flex-direction:column;gap:14px}
.mt-day-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-bottom:6px}
.mt-day-head h3{margin:0;font-family:var(--font-display);font-size:16px;letter-spacing:.03em}
.mt-day-head .btn{margin-left:auto}
.mt-sum{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;display:flex;flex-direction:column;gap:6px;font-size:13px}
.mt-sum-row{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.mt-sum-k{color:var(--muted);font-size:12px;min-width:70px}
.mt-sum-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px 8px}
.mt-sum-p{display:flex;justify-content:space-between;gap:8px;min-width:0;padding:2px 8px;border-radius:6px;background:var(--bg2);border:1px solid var(--line)}
.mt-sum-wl{font-variant-numeric:tabular-nums;white-space:nowrap}
.mt-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.mt-match{border:1px solid var(--line);border-radius:10px;background:var(--bg2);overflow:hidden}
.mt-match.open{border-color:var(--accent)}
.mt-head{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;width:100%;padding:8px 12px;background:none;border:0;color:var(--fg);font:inherit;font-size:13px;text-align:left;cursor:pointer}
.mt-head:hover{background:var(--bg3)}
.mt-no{font-weight:700}
.mt-time{font-variant-numeric:tabular-nums}
.mt-vs{display:inline-flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}
.mt-side{font-weight:700;color:var(--muted)}
.mt-side.won{color:var(--good)}
.mt-diff{font-variant-numeric:tabular-nums}
.mt-caret{margin-left:auto;color:var(--muted)}
.mt-names{flex-basis:100%;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mt-names .won{color:var(--fg)}
.mt-badge{font-size:11px;padding:1px 7px;border-radius:999px;border:1px solid var(--line);white-space:nowrap}
.mt-badge.full{border-color:var(--good);color:var(--good)}
.mt-badge.part{border-color:var(--warn);color:var(--warn)}
.mt-badge.none{color:var(--muted)}
.mt-detail{padding:4px 12px 12px;display:flex;flex-direction:column;gap:8px}
.mt-nostat{margin:0;font-size:12px}
.mt-teams{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:8px}
.mt-team{border:1px solid var(--line);border-radius:8px;background:var(--bg);min-width:0}
.mt-team.won{border-color:var(--good)}
.mt-team-head{padding:5px 10px;font-weight:700;font-size:13px;border-bottom:1px solid var(--line)}
.mt-res{font-size:11px;padding:1px 6px;border-radius:6px;margin-right:4px;background:var(--bg3);color:var(--muted)}
.mt-team.won .mt-res{background:var(--good);color:#fff}
.mt-tblwrap{overflow-x:auto}
.mt-tbl{border-collapse:collapse;width:100%;font-size:12px}
.mt-tbl th,.mt-tbl td{padding:3px 6px;border-bottom:1px solid var(--line);white-space:nowrap;text-align:left}
.mt-tbl th{color:var(--muted);font-weight:600;font-size:11px}
.mt-tbl tr:last-child td{border-bottom:0}
.mt-tbl .mt-n{text-align:right;font-variant-numeric:tabular-nums}
.mt-tbl .mt-ln img{width:18px;height:18px;vertical-align:middle}
.mt-tbl .mt-nm{max-width:140px;overflow:hidden;text-overflow:ellipsis}
.mt-tbl .mt-ch{display:flex;align-items:center;gap:4px}
.mt-tbl .mt-ch img{border-radius:4px}
.mt-tbl tr.mt-hl td{background:color-mix(in srgb,var(--accent) 16%,transparent)}
.mt-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.mt-paste-hint{font-size:12px}
.mt-del{margin-left:auto;color:var(--bad);border-color:color-mix(in srgb,var(--bad) 45%,var(--line))}
.mt-del:hover:not([disabled]){background:color-mix(in srgb,var(--bad) 14%,transparent)}
.ev-opgg{color:var(--accent);text-decoration:none;font-weight:600;cursor:pointer}
.ev-opgg:hover{text-decoration:underline}
.ev-table td.ev-name .search-hit{margin-left:6px;vertical-align:middle}
/* 2026-10-04: 名前セルの✎（情報編集）。普段は控えめ、行ホバーではっきり */
.ev-edit{margin-left:4px;padding:0 4px;border:none;border-radius:5px;background:none;color:var(--muted);font:inherit;font-size:12px;line-height:1.4;cursor:pointer;opacity:.55;vertical-align:middle}
.ev-table tbody tr:hover .ev-edit,.ev-edit:focus-visible{opacity:1}
.ev-edit:hover{background:var(--bg3);color:var(--accent)}
/* 2026-10-02: 登録フォームの「これは自分です」チェック */
.rg-form-basic label.rg-isme{flex-direction:row;align-items:center;gap:8px;font-size:13px;color:var(--fg);cursor:pointer}
.rg-form-basic label.rg-isme input{width:16px;height:16px;padding:0;margin:0;accent-color:var(--accent,#4ea1ff)}
.rg-isme-hint{font-size:11px;margin:-6px 0 0;min-height:1em}
.rg-form-basic label.rg-pin-row{margin-top:-4px}
.rg-pin-wrap{display:flex;gap:6px;align-items:center}
.rg-pin-wrap input{flex:1;min-width:0;letter-spacing:.2em}
.rg-pin-eye{background:none;border:1px solid var(--line);border-radius:8px;color:var(--muted);cursor:pointer;padding:4px 8px}
.rg-pin-note{font-size:11px}

/* ===================== [CSS-10] チーム分けタブ (.tm-*)  2026-10-02 =====================
   「2.チーム分け」タブの見た目整理。「1.参加」タブの部品（--jn-ctl-h=28pxの操作部品・.jn-pop・.jn-count・.jn-chip・
   .jn-tbl・.jn-bulk-btn・.jn-icon-btn）を流用し、上部バー1行 → おすすめ設定1行 → 本人希望 → プレイヤー｜事前配置 の順に並べる。
   旧ルール（[CSS-2]の .pp-* / .pref-* / .pp-cols-corner の絶対配置等）はこの節で上書きする。 */
#pl-section{display:flex;flex-direction:column;gap:10px}
.pl-ledger-head{margin:0}
/* 上部バー */
.tm-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tm-title{font-size:16px;margin:0;white-space:nowrap}
.tm-teams{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.tm-teams select{height:var(--jn-ctl-h);font-size:12px;padding:0 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.tm-msg{margin:0;flex:1 1 220px;min-width:0;font-size:12px;color:var(--muted)}
.tm-bar-btns{display:flex;align-items:center;gap:6px;margin-left:auto}
.tm-run{height:34px;padding:0 18px;font-size:14px;border-radius:10px}
.tm-run:not(:disabled){box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.tm-pop>summary{gap:4px}
/* おすすめ設定（1行のピル列） */
.tm-presets{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 10px;border-radius:10px;background:var(--bg3)}
.tm-presets-label{font-size:11px;font-weight:700;color:var(--muted);white-space:nowrap}
.tm-presets .pt-presets-list{flex:1 1 auto;min-width:0;gap:6px}
.tm-presets .pt-presets-list:empty::before{content:"まだありません"}
.tm-presets .pt-preset-chip{border-radius:999px;background:var(--bg);height:26px}
.tm-presets .pt-preset-apply{font-size:12px;padding:0 4px 0 12px;height:100%}
.tm-presets .pt-preset-del{border-left:none;padding:0 10px 0 6px;height:100%}
.tm-preset-add{flex:0 0 auto;font:inherit;font-size:11px;font-weight:600;height:26px;padding:0 12px;border-radius:999px;cursor:pointer;
  background:transparent;color:var(--accent);border:1px dashed color-mix(in srgb,var(--accent) 60%,transparent);white-space:nowrap}
.tm-preset-add:hover{background:color-mix(in srgb,var(--accent) 14%,transparent)}
.tm-preset-add:disabled{opacity:.5;cursor:wait}
/* 詳細設定ポップオーバー: グループ見出し＋「ラベル(＋説明)｜操作」の行 */
.tm-adv-body{width:min(520px,calc(100vw - 32px));display:flex;flex-direction:column;gap:12px}
.tm-adv-grp{display:flex;flex-direction:column}
.tm-adv-h{font-size:11px;color:var(--muted);font-weight:700;margin:0 0 2px;letter-spacing:.02em}
.tm-adv-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0;border-top:1px solid color-mix(in srgb,var(--line) 60%,transparent)}
.tm-adv-h+.tm-adv-row{border-top:none}
.tm-adv-lab{display:flex;flex-direction:column;gap:1px;min-width:0}
.tm-adv-lab b{font-size:13px;font-weight:600;color:var(--fg)}
.tm-adv-lab small{font-size:11px;color:var(--muted);line-height:1.35}
.tm-adv-check{cursor:pointer}
.tm-adv-row .pt-order-switch{flex:0 0 auto;border-radius:8px;height:var(--jn-ctl-h)}
.tm-adv-row .pt-order-opt{font-size:12px;padding:0 10px}
.tm-grades{display:inline-flex;gap:4px;flex:0 0 auto}
.tm-grades .pt-grade{position:relative;display:inline-flex;width:30px;height:var(--jn-ctl-h);align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--muted);font-size:13px;user-select:none}
.tm-grades .pt-grade input{position:absolute;opacity:0;pointer-events:none}
.tm-grades .pt-grade:has(input:checked){background:var(--accent);border-color:var(--accent);color:#fff}
.tm-grades .pt-grade:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:1px}
/* チェックボックスをスイッチ表示（詳細設定・プレイヤーカードの出場） */
.tm-switch{appearance:none;-webkit-appearance:none;flex:0 0 auto;position:relative;width:34px;height:20px;margin:0;border-radius:999px;cursor:pointer;
  background:var(--line);transition:background .15s ease}
.tm-switch::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .15s ease}
.tm-switch:checked{background:var(--good)}
.tm-switch:checked::after{transform:translateX(14px)}
.tm-switch:disabled{opacity:.45;cursor:default}
.tm-switch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* 表示設定ポップオーバー（「参加」タブの表示設定と同じ構成）: 対象の枠の切替 → プリセット → 説明付きグループ｜プレビュー */
.pp-cols-corner{position:relative;top:auto;right:auto;z-index:auto}
.pp-cols-corner[open]{background:none;border:none;padding:0;max-width:none;box-shadow:none}
.tm-cols-body{width:min(720px,calc(100vw - 32px))}
.tm-cols-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.tm-cols-tabs{flex:0 0 auto}
.tm-cols-tabs .jn-seg-opt{font-size:12px;padding:0 14px}
.tm-cols-hint{font-size:11px;color:var(--muted);flex:1 1 200px;min-width:0}
.tm-preview-card{cursor:default}
.tm-preview-chip{display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.tm-preview-lane{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);font-weight:600}
.tm-preview-chip-row{display:flex;flex-wrap:wrap;gap:4px;padding:4px 5px;border:1px dashed var(--line);border-radius:8px}
.tm-preview-chip-row .pp-chip{cursor:default}
/* 本人希望 / プレイヤー / 事前配置 の見出し（「参加」タブの列見出しと同じ: タイトル＋人数ピル＋補足） */
.tm-sec-title{font-size:14px;font-weight:700;color:var(--fg);white-space:nowrap}
.tm-sec-hint{font-size:11px;font-weight:400;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.pref-lanes-box>summary,.pp-players>summary,.pp-area>summary{display:flex;align-items:center;gap:8px;min-height:var(--jn-ctl-h);
  cursor:pointer;list-style:none;margin:0;padding:0}
.pref-lanes-box>summary::-webkit-details-marker,.pp-players>summary::-webkit-details-marker,.pp-area>summary::-webkit-details-marker{display:none}
.pref-lanes-box>summary::before,.pp-players>summary::before,.pp-area>summary::before{content:"▸";color:var(--muted);font-size:11px;width:10px;transition:transform .15s ease}
.pref-lanes-box[open]>summary::before,.pp-players[open]>summary::before,.pp-area[open]>summary::before{transform:rotate(90deg)}
.pref-lanes-box[open]>summary,.pp-players[open]>summary,.pp-area[open]>summary{margin-bottom:8px}
.pref-lanes-box,.pp-players,.pp-area{border:2px solid color-mix(in srgb, var(--line) 65%, var(--fg) 35%);border-radius:10px;padding:8px 10px}
.pref-lanes-box{margin-top:0}
.pref-lanes-box[open] .pref-lanes-summary,.pp-area[open] .pp-area-summary{display:none}
/* 本人希望: レーン5列 */
.pref-lanes{gap:6px}
.pref-ic{font-size:11px;font-weight:700;color:var(--muted);padding-bottom:4px;border-bottom:1px solid var(--line);gap:4px}
.pref-names{gap:4px;padding-top:2px}
.pref-chip{border-radius:999px;padding:2px 10px;font-size:12px;background:var(--bg3)}
.pref-chip-sub{margin-left:2px}
.pref-sum-chip{border-radius:999px;padding:1px 8px 1px 6px;background:var(--bg3)}
/* プレイヤー｜事前配置 */
.pp-layout{grid-template-columns:330px 1fr;gap:10px;margin-top:0}
/* 2026-10-24: ユーザー要望「プレイヤーと事前配置の横幅を2：3くらいに。表示設定で割合を決められるように」。
   実際の列幅は syncPreplaceLayout() が settings.ppRatio から inline の grid-template-columns で上書きする
   （上の330px固定は JS 未実行時のフォールバック）。 */
.pp-layout{gap:0}
/* 仕切りバー（2026-10-24 ユーザー要望「横棒を用意して分断線を移動させることでサイズを変えたい」）。
   列幅12pxの透明な帯＝ここをドラッグ。中央の細線がホバー/ドラッグ中にアクセント色で太くなる。 */
.pp-splitter{align-self:stretch;position:relative;cursor:col-resize;touch-action:none;min-height:40px}
.pp-splitter::before{content:'';position:absolute;top:0;bottom:0;left:50%;width:2px;transform:translateX(-50%);background:var(--line);border-radius:2px;transition:width .12s,background .12s}
.pp-splitter:hover::before,.pp-splitter:focus-visible::before,body.pp-resizing .pp-splitter::before{width:4px;background:var(--accent)}
.pp-splitter:focus-visible{outline:none}
.pp-layout.pp-stack{gap:10px}
.pp-layout.pp-stack .pp-splitter{display:none}
body.pp-resizing{cursor:col-resize;user-select:none}
.tm-cols-ratio{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:0 0 10px;margin-bottom:10px;border-bottom:1px solid var(--line);font-size:12px}
.tm-cols-ratio-lab{font-weight:700;margin-right:4px}
.tm-cols-ratio-lab small{font-weight:400;color:var(--muted);margin-left:4px}
.tm-cols-ratio input[type=number]{width:48px;height:var(--jn-ctl-h);padding:0 6px;font-size:13px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px;text-align:center}
.pp-sort{display:flex;gap:4px;margin:0 0 8px}
.pp-sort select{height:var(--jn-ctl-h);font-size:12px;padding:0 6px;background:var(--bg);border:1px solid var(--line);color:var(--fg);border-radius:8px}
.pp-sort #pp-sort{flex:1 1 auto;min-width:0}
.pp-sort #pp-sort-dir{min-width:0}
.pp-players-list{max-height:62vh;overflow-y:auto;scrollbar-gutter:stable}
.pp-table{gap:6px}
/* プレイヤーカード（「参加」タブのカードと同じ構成） */
#pp-players-list .pp-row.pp-card{gap:6px;padding:8px 10px;border-radius:10px}
#pp-players-list .pp-row.pp-card:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--line))}
#pp-players-list .jn-card-head{gap:8px}
#pp-players-list .jn-card-head .pp-avatar{width:28px;height:28px;font-size:10px}
#pp-players-list .pp-card-id{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:0;overflow:hidden}
#pp-players-list .jn-card-name{font-size:13px;font-weight:700}
#pp-players-list .pp-nm-riotid{font-size:10px;color:var(--muted);line-height:1.3}
#pp-players-list .pp-play{display:inline-flex;flex:0 0 auto;margin-left:2px}
#pp-players-list .pp-edit-btn,#pp-players-list .pp-claim-btn{font-size:12px;padding:2px 4px;border-radius:6px}
#pp-players-list .pp-edit-btn:hover,#pp-players-list .pp-claim-btn:hover{background:var(--bg3)}
#pp-players-list .pp-nm-status{font-weight:700}
#pp-players-list .pp-nm-status-rest{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 50%,transparent)}
#pp-players-list .pp-nm-status-out{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 50%,transparent)}
#pp-players-list .pp-chip-boostc{color:var(--accent);font-weight:700}
#pp-players-list .pp-row.pp-card.pp-row-out{opacity:.75}
#pp-players-list .pp-row.pp-card.pp-nm-selected{background:color-mix(in srgb,var(--bad) 16%,var(--bg2));border-color:var(--bad)}
/* 事前配置 */
.pp-area-tools{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pp-area-tools .jn-bulk-btn:hover{border-color:var(--bad);color:var(--bad)}
#pp-reset{display:inline-flex;align-items:center;flex:0 0 auto;margin:0 0 0 auto}
.pp-teams{max-height:62vh;gap:10px}
.pp-team-grid{gap:10px}
.pp-team{border-radius:10px;padding:8px 10px;background:var(--bg)}
.pp-team-any{border-color:color-mix(in srgb,var(--accent) 60%,var(--line));background:color-mix(in srgb,var(--accent) 6%,var(--bg))}
.pp-team-head{display:flex;align-items:center;justify-content:space-between;font-size:13px;margin-bottom:6px}
.pp-team-count{font-size:11px;font-weight:600;color:var(--muted);background:var(--bg3);border-radius:999px;padding:0 8px;font-variant-numeric:tabular-nums}
.pp-slot-row{margin-bottom:5px}
.pp-slot-lane{flex:0 0 22px;justify-content:center}
.pp-slot-drop{min-height:28px;border-radius:8px;padding:3px 5px;gap:4px;align-items:center;background:color-mix(in srgb,var(--fg) 3%,transparent);
  border-color:color-mix(in srgb,var(--line) 80%,transparent)}
.pp-slot-drop.pp-slot-multi{min-height:30px}
.pp-slot-flex{border-top:1px dashed var(--line);padding-top:6px;margin-top:4px}
.pp-chip{border-radius:999px;font-size:11px;padding:2px 2px 2px 8px;background:var(--bg3)}
.pp-chip-sub{margin-left:3px}
@media (max-width:640px){
  .tm-bar-btns{margin-left:0;width:100%}
  .tm-bar-btns .tm-run{margin-left:auto}
  .pp-team-grid{grid-template-columns:1fr}
}

/* [JS-25] 読み込み中パネル（思い出/個人/全員/試合タブ・2026-10-03）: 何を読み込み中か（手順＋内容の説明＋経過秒/件数）・疑似進捗バー・あと約N秒・タブ別ヒント */
.lp{margin:0 0 12px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg2);display:flex;flex-direction:column;gap:10px}
.lp-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lp-spin{width:18px;height:18px;border-radius:50%;border:3px solid var(--accent);border-right-color:transparent;animation:spin .8s linear infinite;flex:none}
.lp-title{font-size:15px}
.lp-eta{margin-left:auto;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.lp-bar{position:relative;height:8px;border-radius:999px;background:var(--line);overflow:hidden}
.lp-bar i{position:absolute;left:0;top:0;bottom:0;width:3%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--good));transition:width .3s ease-out;overflow:hidden}
.lp-bar i::after{content:'';position:absolute;top:0;bottom:0;left:0;width:60px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:vx-shine 1.3s linear infinite}
.lp-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.lp-step{display:flex;align-items:center;gap:10px;font-size:13.5px}
.lp-ic{width:20px;height:20px;flex:none;display:grid;place-items:center;border-radius:50%;border:2px solid var(--line);font-size:12px;font-weight:700;box-sizing:border-box;color:var(--muted)}
.lp-txt{display:flex;flex-direction:column;min-width:0}
.lp-txt small{font-size:11.5px;color:var(--muted)}
.lp-step.wait{opacity:.55}
.lp-step.run .lp-ic{border-color:var(--accent);border-right-color:transparent;animation:spin .8s linear infinite}
.lp-step.ok .lp-ic{border-color:var(--good);background:var(--good);color:var(--bg2)}
.lp-step.ok .lp-txt b{color:var(--muted);font-weight:600}
.lp-step.ng .lp-ic{border-color:var(--bad);background:var(--bad);color:var(--bg2)}
.lp-step.ng .lp-sec{color:var(--bad)}
.lp-sec{margin-left:auto;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.lp-tip{margin:0;padding:8px 10px;border-radius:8px;background:color-mix(in srgb,var(--accent) 10%,transparent);font-size:12.5px;color:var(--muted);transition:opacity .25s}
.lp-tip.fade{opacity:0}
.lp-tip b{color:var(--accent)}
.lp-slow{margin:0;font-size:12.5px;color:var(--warn,var(--muted))}
.lp-inline{display:inline-flex;align-items:center;gap:4px;color:var(--accent);font-variant-numeric:tabular-nums}
@media (prefers-reduced-motion:reduce){.lp-spin,.lp-step.run .lp-ic,.lp-bar i::after{animation-duration:3s}}

/* ===================== [CSS-11] チーム分け結果 (.rs-* 整理)  2026-10-03 =====================
   [CSS-10]（チーム分けタブ上部）と同じ部品で結果を整理。見出しバーは .tm-bar を流用、表示設定は .jn-pop＋#rs-cols-body
   （チーム／ベンチの切替・プリセット・プレビュー）。[CSS-4]/[CSS-4b] の .rs-* をこの節で上書きする。 */
#rs-section{display:flex;flex-direction:column;gap:12px}
.rs-cand{display:inline-flex;align-items:center;gap:6px}
.rs-cand .rs-off-badge{margin-left:0;font-size:11px;padding:1px 8px}
/* 対戦カード */
.rs-card{border:2px solid color-mix(in srgb, var(--line) 65%, var(--fg) 35%);border-radius:12px;padding:10px 12px 12px;margin-bottom:12px;background:var(--bg2)}
.rs-card:last-child{margin-bottom:0}
.rs-card-head{gap:8px;margin-bottom:10px;font-size:13px}
.rs-card-no{font-size:15px;font-weight:700}
.rs-card-vs{font-size:12px;font-weight:600;color:var(--muted)}
.rs-card-head .diff-badge{font-size:12px;padding:1px 10px;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent)}
.rs-card-head .rs-swap-side{position:static;transform:none;margin-left:auto;height:26px;padding:0 10px;font-size:12px;border-radius:999px}
.rs-grid{gap:10px}
/* チームの表 */
.rs-team{border-radius:10px;padding:8px 10px 6px;background:var(--bg)}
.rs-team-head{align-items:center;gap:6px;justify-content:flex-start;font-size:14px;margin-bottom:6px}
.rs-team-head .rs-side-badge{margin-left:0}
.rs-team-head .rs-total{margin-left:auto;font-size:11px;font-weight:600;color:var(--muted);background:var(--bg3);border-radius:999px;padding:1px 10px}
.rs-team-head .rs-total b{color:var(--fg);font-size:13px;font-variant-numeric:tabular-nums}
.rs-rows>.rs-row>*{border-bottom-color:color-mix(in srgb,var(--line) 55%,transparent);padding:6px 5px}
.rs-rows>.rs-row.rs-headrow>*{padding-top:2px;padding-bottom:4px;border-bottom-color:var(--line)}
.rs-th{font-size:10px;font-weight:600}
.rs-rows>.rs-row:not(.rs-headrow):hover>*{background:color-mix(in srgb,var(--fg) 4%,transparent)}
.rs-row .rs-nm{font-size:13px}
.rs-row .rs-sc{color:var(--fg);font-weight:700}
.rs-row .jn-pos{color:var(--good)} .rs-row .jn-neg{color:var(--bad)} .rs-row .jn-zero{color:var(--muted)}
.rs-row .rs-grade.gradebtn{font-size:12px}
/* 対面差の列 */
.rs-diffcol{padding-top:11px}   /* .rs-team の上辺(3px)＋padding-top(8px)に合わせる */
.rs-diffcol .rs-diffval{font-size:11px}
.rs-diffcol .rs-diffval.rs-diff-mid{color:var(--warn);font-weight:700}
.rs-diffcol .rs-diffval.rs-diff-big{color:var(--bad);font-weight:700}
.rs-grid.rs-stack .rs-diffcol{display:none}   /* 縦積み時は左右の対比が無いため出さない */
/* ベンチ */
.rs-bench[open]{border:2px solid color-mix(in srgb, var(--line) 65%, var(--fg) 35%);background:var(--bg2);min-width:260px;max-width:320px;padding:8px 10px}
.rs-bench[open] summary{padding-right:0}
.rs-bench-open-label{display:flex;align-items:center;gap:8px}
.rs-bench[open] .rs-bench-open-label::before{content:"▾";color:var(--muted);font-size:11px}
.rs-bench-list{display:flex;flex-direction:column;gap:6px;max-height:65vh;overflow-y:auto;margin-top:0}
.rs-bench-card{display:flex;flex-direction:column;gap:6px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.rs-bench-card:last-child{border-bottom:1px solid var(--line)}
.rs-bench-card:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--line))}
.rs-bench-card-head{display:flex;align-items:center;gap:8px;font-size:13px}
.rs-bench-card-head .pp-avatar{width:24px;height:24px;font-size:9px}
.rs-bench-card .jn-tbl .gradebtn{font-size:11px}
.rs-bench-card .jn-tbl td{color:var(--muted)}
.rs-bench-card .jn-tbl tr.jn-r-grade td,.rs-bench-card .jn-tbl tr.jn-r-total td,.rs-bench-card .jn-tbl tr.jn-r-tier td{color:var(--fg)}
.jn-best-in{background:color-mix(in srgb,var(--accent) 24%,transparent);border-radius:4px;padding:0 3px}
.rs-boost-chip{color:var(--accent);font-weight:700}
/* 試合結果（スクショ欄） */
.rs-shot{margin-top:10px;padding:8px 10px;border:1px dashed color-mix(in srgb,var(--line) 85%,var(--fg));border-radius:10px;background:var(--bg)}
.rs-shot .sh-empty{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.sh-row-lab{font-size:11px;font-weight:700;color:var(--muted);white-space:nowrap;min-width:72px}
.sh-empty-txt{color:var(--fg)}
.sh-empty-note{font-size:11px;color:var(--muted)}
.sh-winonly{margin-top:6px;padding-top:6px;gap:8px;font-size:12px}
.sh-win{margin:0;font-size:12px}
.sh-win-blue{border-color:color-mix(in srgb,#5b8cff 60%,transparent);color:#7da4ff;background:transparent}
.sh-win-red{border-color:color-mix(in srgb,#ff6b5b 60%,transparent);color:#ff8a7c;background:transparent}
.sh-win-blue:hover{background:rgba(91,140,255,.14)} .sh-win-red:hover{background:rgba(255,107,91,.14)}
:root[data-theme="arena"] .sh-win-blue{color:#2851d6} :root[data-theme="arena"] .sh-win-red{color:#c93a1f}
/* 表示設定パネルのプレビュー */
.rs-preview .rs-team{pointer-events:none}
.rs-preview .rs-rows>.rs-row>*{cursor:default}
.rs-preview-bench .rs-bench-card{cursor:default}
/* データ履歴 */
.rs-history>summary{display:flex;align-items:center;gap:8px;min-height:var(--jn-ctl-h);padding:0;border:none;background:none}
.rs-history>summary::before{content:"▸";color:var(--muted);font-size:11px;width:10px;transition:transform .15s ease}
.rs-history[open]>summary::before{transform:rotate(90deg)}
#rs-history-section{padding:10px 16px}
/* 狭いとき（結果エリアの実幅 820px 未満＝コンテナクエリ）にベンチを開いたら、カードの下へ全幅で回す（横並びのままだとカードが潰れる） */
#rs-body{container-type:inline-size}
@container (max-width: 820px){
  .rs-layout:has(.rs-bench[open]){grid-template-columns:minmax(0,1fr)}
  .rs-layout:has(.rs-bench[open]) .rs-bench-col{position:static}
  .rs-layout:has(.rs-bench[open]) .rs-bench[open]{max-width:none;width:auto}
  .rs-layout:has(.rs-bench[open]) .rs-bench-list{max-height:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
}
.rs-team-head{flex-wrap:wrap}
.rs-team-head .rs-side-badge,.rs-team-head .rs-total{white-space:nowrap}
/* 閉じているポップオーバーの中身は確実に描画しない（ブラウザによっては閉じた<details>の絶対配置の中身がレイアウトに残り、狭い幅で横スクロールが出ていた） */
.jn-pop:not([open])>.jn-pop-body{display:none}
/* 連勝連敗バッジはセル全体が色付きの箱に見えないよう、背景なし・文字色だけにする */
.rs-rows>.rs-row>.rs-streak{background:none}
/* 2026-10-03: 確認画面のサイド(ブルー/レッド)表示と入れ替え */
.sh-sidebar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0;font-size:13px}
.sh-sidebar-t{color:var(--muted)}
.sh-sidenote.warn{color:var(--warn)}
/* 2026-10-03: 「試合」タブのサイド表示 */
.mt-sidebar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 8px;font-size:13px}

/* 2026-10-03: 「チーム分け」タブのプレイヤー枠 検索欄・詳細/簡易（「参加」タブの .jn-col-search / .jn-seg を流用） */
.pp-search-row{margin:0 0 6px}
.pp-search-row .jn-seg{flex:0 0 auto}
#pp-players-list .jn-card-hit{margin-top:-2px}
#pp-players-list.pp-compact .jn-chips,#pp-players-list.pp-compact .pp-card-tbl,#pp-players-list.pp-compact .pp-nm-riotid{display:none}
#pp-players-list.pp-compact .pp-table{gap:4px}
#pp-players-list.pp-compact .pp-row.pp-card{padding:5px 8px;gap:4px}
#pp-players-list.pp-compact .jn-card-head .pp-avatar{width:22px;height:22px;font-size:9px}
/* 2026-10-03: 参加状態ピル（参加/見学/一回休み）。今の状態を色付きで常に表示し、押すとネイティブの選択肢で切り替える
   （poolStatusSelectHtml）。見た目は .ps-lab、その上に透明の <select> を重ねる。プレイヤー枠・事前配置のチップ・結果カード・
   ベンチ共通。色は既存の参加=good/一回休み=warn/見学=bad。 */
.ps{--ps-c:var(--good);position:relative;display:inline-flex;flex:0 0 auto;vertical-align:middle;font-size:11px}
.ps.ps-watch{--ps-c:var(--bad)}
.ps.ps-rest{--ps-c:var(--warn)}
.ps-lab{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;font-weight:700;line-height:1.5;color:var(--ps-c);
  background:color-mix(in srgb,var(--ps-c) 14%,var(--bg2));border:1px solid color-mix(in srgb,var(--ps-c) 55%,transparent);
  border-radius:999px;padding:0 6px 0 6px}
.ps-lab::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ps-c);flex:0 0 auto}
.ps-lab::after{content:"";border:4px solid transparent;border-top-color:var(--ps-c);border-bottom:0;margin-left:1px;flex:0 0 auto}
.ps-short{display:none}
.ps-sel{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer;font-size:16px}
.ps:hover .ps-lab{background:color-mix(in srgb,var(--ps-c) 26%,var(--bg2))}
.ps:has(.ps-sel:focus-visible) .ps-lab{outline:2px solid var(--accent);outline-offset:1px}
.ps-off .ps-sel{cursor:default}
.ps-off .ps-lab::after{display:none}
.ps-off:hover .ps-lab{background:color-mix(in srgb,var(--ps-c) 14%,var(--bg2))}
.ps-sel option{color:var(--fg);background:var(--bg2)}
/* 結果カード: 名前の右に付ける（名前だけ省略表示・ピルは常に見える）。名前欄（grid の minmax(0,1fr) 列＝中身で幅が
   変わらない）をコンテナにして、欄が狭いときはピルを名前の下へ回し短い表記（休み）にする（画面幅ではなく欄の幅で判定）。 */
.rs-row .rs-nm.rs-nm-ps{container-type:inline-size;cursor:default;overflow:visible}
.rs-row .rs-nm-in{display:flex;align-items:center;gap:4px;min-width:0}
.rs-row .rs-nm-txt{min-width:0;overflow:hidden;text-overflow:ellipsis;cursor:help}
.rs-row .ps{font-size:10px}
@container (max-width:130px){
  .rs-row .rs-nm-in{flex-direction:column;align-items:flex-start;gap:1px}
  .rs-row .rs-nm-txt{max-width:100%}
  .rs-row .ps-full{display:none}
  .rs-row .ps-short{display:inline}
}
@container (max-width:60px){
  .rs-row .ps-lab{padding:0 3px;gap:2px}
  .rs-row .ps-lab::before{display:none}
}
/* 事前配置のチップ: チップの文字サイズに合わせて小さく */
.pp-chip .ps{font-size:9px;margin-left:2px}
.pp-chip .ps-lab{padding:0 4px;gap:3px;line-height:1.4}
.pp-chip .ps-lab::before{width:5px;height:5px}
.pp-chip .ps-lab::after{border-width:3px}
/* ベンチ: 名前の右端へ */
.rs-bench-card-head .ps{margin-left:auto}
/* 2026-10-04: 「参加」タブのカード: 「チーム分け」タブで見学・一回休みにした人（poolWatch）の印 */
.jn-chip.jn-chip-pool{font-weight:700}
.jn-chip.jn-chip-pool-watch{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 50%,transparent)}
.jn-chip.jn-chip-pool-rest{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 50%,transparent)}
/* 2026-10-04: 🗑 不参加にする（「チーム分け」タブのプレイヤー枠のカード・事前配置のチップ） */
.pp-remove-btn,.pp-chip-del{flex:0 0 auto;background:none;border:none;color:var(--muted);cursor:pointer;line-height:1}
#pp-players-list .pp-remove-btn{font-size:14px;padding:2px 4px;border-radius:6px;opacity:.9}
#pp-players-list .pp-remove-btn:hover{opacity:1;background:color-mix(in srgb,var(--bad) 22%,var(--bg3))}
.pp-chip-del{font-size:11px;padding:0 2px;border-radius:6px;opacity:.85;line-height:1.2}
.pp-chip-del:hover{opacity:1;background:color-mix(in srgb,var(--bad) 22%,var(--bg3))}

/* 2026-10-18 保留中の試合（[JS-28]） */
.pd-box{margin-bottom:14px;padding:10px 12px;border:1px dashed var(--warn);border-radius:10px}
.pd-box .mt-day-head h3{color:var(--warn)}
.pd-winonly{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.rs-shot .pd-held{color:var(--warn);display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.rs-shot .pd-hold{margin-left:auto}
#mt-pending:not(:empty){margin-top:12px}
