[v-cloak]{display:none}.vue-missing{display:none}body.vue-load-failed .vue-missing{display:block;padding:24px}body.vue-load-failed .app-shell{display:none}
:root{color-scheme:dark;--bg:#0b1117;--rail:#111923;--panel:#151f2a;--panel2:#1b2734;--panel3:#223140;--line:#314252;--soft:rgba(255,255,255,.08);--text:#eef5fb;--muted:#9eacba;--green:#59c98d;--red:#ef6f6c;--gold:#e8bb57;--blue:#76aeea;--orange:#d9843f;--purple:#9b72d7}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:0}button,input,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.58;cursor:not-allowed}.app-shell{min-height:100vh;display:grid;grid-template-columns:300px minmax(0,1fr)}.app-rail{height:100vh;position:sticky;top:0;overflow:auto;background:var(--rail);border-right:1px solid var(--line);padding:18px;display:flex;flex-direction:column;gap:14px}.brand{padding:4px 2px 10px}.brand-title{font-size:28px;font-weight:950;line-height:1}.brand-sub{font-size:13px;color:var(--muted);font-weight:800;margin-top:6px}.main-nav{display:grid;gap:7px}.main-nav button{height:44px;border-radius:8px;border:1px solid var(--soft);background:#16212c;color:#dce8f3;text-align:left;padding:0 11px;display:flex;gap:10px;align-items:center;font-weight:900}.main-nav button.active{background:#263849;border-color:#76aeea;color:white}.main-nav button span{width:20px;text-align:center}.control-group{border-top:1px solid var(--soft);padding-top:12px;display:grid;gap:8px}label{font-size:12px;text-transform:uppercase;color:#b8c8d7;font-weight:950}.field{width:100%;min-height:40px;border-radius:8px;border:1px solid var(--line);background:#0f171f;color:var(--text);padding:0 10px;outline:none}.field.tall{min-height:80px}.field.compact{width:auto;min-width:180px}.field:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(118,174,234,.14)}.check-line{display:flex;align-items:center;gap:8px;text-transform:none;font-size:13px}.primary,.secondary{min-height:40px;border-radius:8px;border:1px solid var(--line);padding:0 12px;font-weight:900;color:var(--text)}.primary{background:#2f7159;border-color:#69c99d}.secondary{background:#202d3a}.full{width:100%}.status-box{border:1px solid var(--soft);background:rgba(255,255,255,.03);border-radius:8px;padding:12px;margin-top:auto}.status-row{display:flex;justify-content:space-between;gap:10px;font-size:13px;margin-bottom:6px}.status-row span,.muted{color:var(--muted)}.legacy-link{display:inline-flex;margin-top:8px;color:#b7d5f3;font-weight:850;text-decoration:none}.app-main{padding:22px;min-width:0}.app-header{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:16px}.eyebrow{color:#94bee6;text-transform:uppercase;font-size:12px;font-weight:950;margin-bottom:6px}h1,h2{margin:0;letter-spacing:0}h1{font-size:25px;line-height:1.16}h2{font-size:16px}.header-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.icon-btn{min-width:62px}.feedback{border:1px solid var(--line);border-radius:8px;padding:12px;margin-bottom:12px}.feedback.good{border-color:rgba(89,201,141,.55);background:rgba(89,201,141,.11)}.feedback.warning{border-color:rgba(232,187,87,.55);background:rgba(232,187,87,.1)}.feedback.bad{border-color:rgba(239,111,108,.55);background:rgba(239,111,108,.11)}.pill{display:inline-flex;align-items:center;min-height:25px;border-radius:999px;border:1px solid var(--soft);background:#1d2a36;color:#dce9f5;padding:0 9px;font-size:12px;font-weight:850;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.replayer-layout{display:grid;grid-template-columns:minmax(720px,1fr) 390px;gap:14px;align-items:start}.table-panel,.side-panel,.data-card,.trainer-board,.range-box,.chart-panel,.ranges-view{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:14px}.hand-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.poker-table{position:relative;min-height:620px;border-radius:28px;background:radial-gradient(ellipse at center,#294c3c 0,#18392e 52%,#10221d 100%);border:14px solid #2a2019;box-shadow:inset 0 0 0 2px rgba(255,255,255,.08),0 16px 34px rgba(0,0,0,.28);overflow:hidden}.felt-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;gap:9px;color:#e8f3eb}.pot-label{text-transform:uppercase;color:#a8c7b7;font-size:11px;font-weight:950}.board-row{display:flex;gap:6px}.card-slot{width:54px;height:74px}.card-face{width:54px;height:74px;border-radius:8px;background:#f8fbff;color:#101820;border:1px solid #dbe5ee;display:flex;flex-direction:column;justify-content:space-between;padding:6px;font-weight:950;box-shadow:0 5px 12px rgba(0,0,0,.25)}.card-face.red{color:#c72e40}.card-face.mini{width:34px;height:46px;border-radius:6px;font-size:12px;padding:4px}.card-face.back{background:linear-gradient(135deg,#233849,#142231);border-color:#4f6476}.placeholder-card{width:54px;height:74px;border-radius:8px;border:1px dashed rgba(255,255,255,.22);background:rgba(255,255,255,.04)}.seat-node{position:absolute;transform:translate(-50%,-50%);width:178px;z-index:2}.seat-inner{border:1px solid rgba(255,255,255,.12);background:#111b25;border-radius:8px;padding:8px;box-shadow:0 10px 22px rgba(0,0,0,.28)}.seat-node.hero .seat-inner{border-color:var(--gold);box-shadow:0 0 0 2px rgba(232,187,87,.22),0 10px 22px rgba(0,0,0,.28)}.seat-node.active .seat-inner{border-color:var(--blue)}.seat-node.folded{opacity:.48;filter:grayscale(.35)}.seat-node.winner .seat-inner{border-color:var(--green)}.seat-node.loser{opacity:.55}.seat-top{display:flex;align-items:center;gap:6px;min-width:0}.seat-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.dealer{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--gold);color:#1b1304;font-size:11px;font-weight:950}.hole-cards{display:flex;gap:4px;margin:6px 0}.stack-line{font-size:12px;font-weight:850;color:#e9f1f8}.stat-line{font-size:11px;color:#b2c2d1}.last-action{margin-top:5px;font-size:11px;color:#f0dca8;font-weight:900}.table-bet{position:absolute;left:50%;top:-18px;transform:translateX(-50%);background:#e7b957;color:#1d1605;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:950;box-shadow:0 5px 12px rgba(0,0,0,.25)}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}.coach-box{border:1px solid var(--soft);border-radius:8px;padding:12px;background:#182433;margin-bottom:14px}.coach-box.good{border-color:rgba(89,201,141,.5)}.coach-box.warning{border-color:rgba(232,187,87,.55)}.coach-box.bad{border-color:rgba(239,111,108,.55)}.coach-title{font-size:18px;font-weight:950}.coach-summary{margin-top:4px;color:#d7e3ed}.coach-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0}.coach-kpis div{background:#101923;border:1px solid var(--soft);border-radius:8px;padding:8px}.coach-kpis span{display:block;color:var(--muted);font-size:11px}.coach-kpis strong{display:block;margin-top:3px;font-size:13px}.coach-copy{display:grid;gap:6px;color:#c9d6e1;font-size:13px;line-height:1.35}.timeline{display:grid;gap:6px;max-height:420px;overflow:auto}.timeline button{display:grid;grid-template-columns:28px minmax(0,1fr);gap:8px;align-items:center;text-align:left;border:1px solid var(--soft);background:#131d27;color:#dce8f3;border-radius:8px;padding:7px}.timeline button.active{border-color:var(--blue);background:#213244}.timeline button.hero{border-color:var(--gold)}.timeline strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline span{color:var(--muted);font-size:11px;font-weight:900}
.trainer-view{display:grid;gap:14px}.trainer-board{display:grid;gap:12px}.trainer-prompt h2{font-size:22px;margin-bottom:6px}.trainer-prompt p{margin:0;color:#cbd8e5;line-height:1.45}.paint-toolbar{display:flex;align-items:end;gap:8px;flex-wrap:wrap}.brushes{display:flex;gap:5px}.brushes button{min-height:34px;border-radius:8px;border:1px solid var(--line);background:#192432;color:#e8f1f9;font-weight:900;padding:0 8px}.brushes button.active{border-color:var(--gold);background:#3a2e16}.paint-result{border:1px solid var(--line);border-radius:8px;padding:10px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}.paint-result.good{background:rgba(89,201,141,.11);border-color:rgba(89,201,141,.55)}.paint-result.warning{background:rgba(232,187,87,.1);border-color:rgba(232,187,87,.55)}.paint-result.bad{background:rgba(239,111,108,.1);border-color:rgba(239,111,108,.55)}.decision-actions,.choices{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.choice{min-height:50px;border-radius:8px;border:1px solid var(--line);background:#202d3a;color:var(--text);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 12px;font-weight:950}.choice.correct{background:#193c2d;border-color:var(--green)}.choice.possible{background:#3b311a;border-color:var(--gold)}.choice.wrong{background:#3a2027;border-color:var(--red)}.range-box{overflow:auto}.range-headline{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:9px}.range-headline span{color:var(--gold);font-weight:950}.range-detail{min-height:42px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;border:1px solid var(--soft);background:#101923;border-radius:8px;padding:8px;margin-bottom:10px}.detail-pill{display:inline-flex;min-height:26px;align-items:center;border-radius:999px;border:1px solid var(--soft);background:#243241;padding:0 8px;font-size:12px;font-weight:850}.range-grid{display:grid;grid-template-columns:repeat(13,minmax(36px,1fr));gap:4px}.range-cell{position:relative;aspect-ratio:1;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:#1f2b38;color:#edf5fc;padding:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-weight:950;font-size:12px;overflow:hidden}.range-cell b{font-size:9px}.range-cell em{font-style:normal;font-size:8px;color:#f0e7c4}.range-cell:hover,.range-cell.selected{border-color:white;box-shadow:0 0 0 2px rgba(255,255,255,.12)}.range-cell.hero{box-shadow:inset 0 0 0 2px #fff8d4,0 0 0 2px var(--gold);z-index:3}.range-cell.mixed:after{content:"";position:absolute;right:0;top:0;width:0;height:0;border-top:14px solid rgba(255,255,255,.82);border-left:14px solid transparent}.act-fold{background:#283746}.act-check{background:#3d5168}.act-limp,.act-call,.act-call_allin{background:#297452}.act-open,.act-raise{background:#b36b32}.act-3-bet{background:#c1493c}.act-4bet{background:#785cb2}.act-allin{background:#9e2638}.painter-grid:not(.revealed) .range-cell{background:#172330;color:#8fa0b0}.range-cell.painted{background:#315d88!important;color:#f4fbff;border-color:#95caff}.range-cell.ok{box-shadow:inset 0 0 0 2px var(--green)}.range-cell.extra{box-shadow:inset 0 0 0 2px var(--red)}.range-cell.miss{box-shadow:inset 0 0 0 2px var(--gold)}
.tracker-kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-bottom:14px}.metric{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:12px;min-height:92px}.metric span{display:block;color:var(--muted);font-size:12px;font-weight:850}.metric strong{display:block;font-size:20px;margin-top:6px}.metric em{display:block;color:#b9c8d6;font-style:normal;font-size:12px;margin-top:6px}.metric.good{border-color:rgba(89,201,141,.45)}.metric.bad{border-color:rgba(239,111,108,.45)}.chart-panel{height:360px;margin-bottom:14px}.chart-panel svg{width:100%;height:100%}.grid-line{stroke:rgba(255,255,255,.08)}.zero-line{stroke:rgba(255,255,255,.22)}polyline{fill:none;stroke-width:3;stroke-linejoin:round;stroke-linecap:round}.net_bb{stroke:#76aeea}.allin_adjusted_bb{stroke:#59c98d}.showdown_bb{stroke:#e8bb57}.non_showdown_bb{stroke:#ef6f6c}.grid-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.data-card.wide{grid-column:auto}.stat-rows{display:grid;gap:8px;margin-top:12px}.stat-rows div{display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid var(--soft);padding-bottom:8px}.stat-rows span{color:var(--muted)}.table-wrap{overflow:auto;margin-top:10px}table{width:100%;border-collapse:collapse;font-size:12px}th,td{text-align:left;padding:8px;border-bottom:1px solid var(--soft);white-space:nowrap}th{color:#bcd0e1;font-size:11px;text-transform:uppercase}.ranges-view{display:grid;gap:12px}
@media(max-width:1250px){.app-shell{grid-template-columns:1fr}.app-rail{position:relative;height:auto;border-right:0;border-bottom:1px solid var(--line)}.main-nav{grid-template-columns:repeat(4,1fr)}.replayer-layout{grid-template-columns:1fr}.tracker-kpis{grid-template-columns:repeat(3,1fr)}}@media(max-width:760px){.app-main{padding:14px}.app-header{flex-direction:column}.header-actions{width:100%}.header-actions button{flex:1}.main-nav{grid-template-columns:repeat(2,1fr)}.poker-table{min-height:520px}.seat-node{width:138px}.tracker-kpis,.grid-two{grid-template-columns:1fr}.decision-actions{grid-template-columns:repeat(2,1fr)}.range-grid{grid-template-columns:repeat(13,minmax(24px,1fr));gap:2px}.range-cell{font-size:9px;border-radius:4px}.range-cell b,.range-cell em{display:none}.card-slot,.card-face{width:42px;height:58px}.placeholder-card{width:42px;height:58px}}


/* UX correction pass: preserve the legacy replayer feel while keeping Vue structure. */
.trainer-profile-note {
  border-top:1px solid var(--soft);
  padding-top:12px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
  font-size:13px;
}
.trainer-profile-note span { color:var(--muted); font-weight:850; }
.trainer-profile-note strong { color:#edf6ff; }
.replayer-layout { grid-template-columns:minmax(760px,1fr) 360px; }
.table-panel { padding:12px; }
.poker-table {
  min-height:640px;
  border-radius:34px;
  border-width:12px;
  background:
    radial-gradient(ellipse at center, rgba(79,134,98,.78) 0, rgba(36,85,63,.88) 44%, rgba(17,42,34,.96) 100%),
    #17382e;
}
.felt-center {
  width:auto;
  min-width:330px;
  padding:0;
  background:transparent;
  border:0;
  box-shadow:none;
  gap:12px;
}
.pot-stack {
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:38px;
  border-radius:999px;
  padding:6px 12px 6px 8px;
  background:rgba(7,16,14,.58);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 7px 18px rgba(0,0,0,.28);
}
.pot-stack div { display:flex; flex-direction:column; line-height:1.05; }
.pot-stack span:not(.chip) { color:#b8d3c2; font-size:10px; text-transform:uppercase; font-weight:950; }
.pot-stack strong { color:#f6fff8; font-size:15px; }
.chip {
  width:18px;
  height:18px;
  border-radius:50%;
  display:inline-block;
  margin-left:-6px;
  border:2px dashed rgba(255,255,255,.72);
  box-shadow:0 2px 5px rgba(0,0,0,.36);
}
.chip:first-child { margin-left:0; }
.chip-red { background:#d84d4a; }
.chip-blue { background:#2c8ed6; }
.chip-gold { background:#e3b34a; }
.board-row { gap:7px; }
.card-slot, .card-face, .placeholder-card { width:58px; height:78px; }
.card-face {
  border-radius:9px;
  padding:7px;
  font-size:18px;
  background:#fbfdff;
  border-color:#dce7ef;
  color:#101820;
}
.card-face b { font-size:18px; line-height:1; }
.card-face span { font-size:20px; line-height:1; }
.card-face.suit-s { color:#101820; }
.card-face.suit-h { color:#d73343; }
.card-face.suit-d { color:#2477df; }
.card-face.suit-c { color:#249a5a; }
.card-face.red { color:inherit; }
.card-face.mini {
  width:38px;
  height:52px;
  border-radius:7px;
  font-size:13px;
  padding:5px;
}
.card-face.mini b { font-size:13px; }
.card-face.mini span { font-size:15px; }
.card-face.back { color:transparent; }
.seat-node { width:184px; }
.seat-inner { background:rgba(14,23,32,.96); border-radius:9px; }
.table-bet {
  top:-22px;
  background:#f0c15f;
  color:#171004;
  border:1px solid rgba(255,255,255,.35);
}
.replayer-controls {
  display:flex;
  justify-content:center;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin:12px 0 8px;
}
.replayer-controls .icon-btn { min-width:76px; }
.replayer-progress {
  height:6px;
  border-radius:999px;
  background:#101923;
  border:1px solid var(--soft);
  overflow:hidden;
}
.replayer-progress span {
  display:block;
  height:100%;
  background:linear-gradient(90deg,#69c99d,#76aeea);
}
.coach-banner {
  display:flex;
  align-items:center;
  gap:10px;
  border-radius:8px;
  padding:10px 12px;
  margin-bottom:10px;
  border:1px solid var(--line);
  background:#172331;
}
.coach-banner strong { font-size:14px; white-space:nowrap; }
.coach-banner span { color:#d7e3ee; font-size:13px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.coach-banner.good { border-color:rgba(89,201,141,.68); background:rgba(89,201,141,.13); }
.coach-banner.warning { border-color:rgba(232,187,87,.74); background:rgba(232,187,87,.13); }
.coach-banner.bad { border-color:rgba(239,111,108,.72); background:rgba(239,111,108,.14); }
.coach-box {
  background:#101a24;
  border-width:2px;
  box-shadow:0 12px 24px rgba(0,0,0,.22);
}
.coach-title { font-size:20px; }
.replayer-range-under {
  grid-column:1 / -1;
  border:1px solid var(--line);
  background:var(--panel);
  border-radius:8px;
  padding:14px;
}
.trainer-view { display:block; }
.trainer-situation-layout {
  display:grid;
  grid-template-columns:minmax(720px,1fr) minmax(420px,.68fr);
  gap:14px;
  align-items:start;
}
.trainer-table-shell,
.trainer-workbench {
  border:1px solid var(--line);
  background:var(--panel);
  border-radius:8px;
  padding:12px;
}
.trainer-table-shell .poker-table { min-height:560px; }
.trainer-table-shell .felt-center { min-width:300px; }
.trainer-table-shell .seat-node { width:166px; }
.trainer-workbench { display:grid; gap:12px; }
.empty-table {
  min-height:320px;
  display:grid;
  place-items:center;
  border:1px dashed var(--line);
  border-radius:8px;
  background:rgba(255,255,255,.025);
}
.range-painter { display:grid; gap:12px; }
.range-painter .trainer-board,
.decision-trainer .trainer-board { background:#101923; }
.range-box.painter { max-height:calc(100vh - 220px); }
.tracker-view .data-card.wide:last-child { grid-column:1 / -1; }
@media(max-width:1250px){
  .replayer-layout,
  .trainer-situation-layout { grid-template-columns:1fr; }
  .replayer-range-under { grid-column:auto; }
}
@media(max-width:760px){
  .pot-stack { transform:scale(.92); }
  .card-slot, .card-face, .placeholder-card { width:43px; height:60px; }
  .trainer-table-shell .poker-table { min-height:500px; }
  .seat-node, .trainer-table-shell .seat-node { width:140px; }
}


/* Replayer fidelity pass: lighter seats, projected bets, readable 4-color cards, range legend. */
.seat-node { width:172px; pointer-events:none; }
.seat-inner {
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  padding:0 !important;
  display:grid;
  justify-items:center;
  gap:4px;
}
.seat-top {
  min-width:118px;
  max-width:166px;
  height:28px;
  justify-content:center;
  padding:0 10px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.18);
  background:rgba(9,15,21,.88);
  box-shadow:0 5px 12px rgba(0,0,0,.24);
}
.seat-top strong { font-size:12px; }
.seat-node.hero .seat-top { border-color:rgba(232,187,87,.85); box-shadow:0 0 0 2px rgba(232,187,87,.18),0 5px 12px rgba(0,0,0,.24); }
.seat-node.active .seat-top { border-color:rgba(118,174,234,.9); }
.seat-node.winner .seat-top { border-color:rgba(89,201,141,.9); }
.hole-cards {
  justify-content:center;
  margin:2px 0;
  filter:drop-shadow(0 5px 8px rgba(0,0,0,.28));
}
.stack-line {
  display:inline-flex;
  align-items:center;
  min-height:22px;
  padding:0 8px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.13);
  background:rgba(9,15,21,.72);
  font-size:11px;
}
.stat-line { display:none; }
.last-action {
  display:inline-flex;
  min-height:22px;
  align-items:center;
  padding:0 8px;
  border-radius:999px;
  background:rgba(240,193,95,.16);
  border:1px solid rgba(240,193,95,.28);
  color:#ffe1a1;
  margin-top:0;
}
.table-bet {
  position:absolute;
  transform:translate(-50%,-50%);
  min-width:44px;
  text-align:center;
  top:auto;
  left:auto;
  z-index:4;
  background:#f0c15f;
  color:#171004;
  border:1px solid rgba(255,255,255,.42);
  box-shadow:0 8px 16px rgba(0,0,0,.32);
}
.table-bet::before,
.table-bet::after {
  content:"";
  display:inline-block;
  width:10px;
  height:10px;
  border-radius:50%;
  margin-right:4px;
  background:#d84d4a;
  border:1px dashed rgba(255,255,255,.72);
  vertical-align:-1px;
}
.table-bet::after { background:#2c8ed6; margin-right:0; margin-left:3px; }
.card-face {
  position:relative;
  display:block !important;
  padding:0 !important;
  overflow:hidden;
}
.card-face b {
  position:absolute;
  left:7px;
  top:6px;
  z-index:2;
  font-size:23px !important;
  font-weight:950;
}
.card-face span {
  position:absolute;
  inset:0;
  display:grid;
  place-items:center;
  font-size:38px !important;
  line-height:1;
  font-weight:900;
}
.card-face.mini b { left:5px; top:4px; font-size:15px !important; }
.card-face.mini span { font-size:27px !important; }
.card-face.back b,
.card-face.back span { display:none; }
.range-legend {
  display:flex;
  flex-wrap:wrap;
  gap:7px;
  align-items:center;
  margin:8px 0 10px;
}
.range-key {
  display:inline-flex;
  align-items:center;
  gap:6px;
  min-height:28px;
  padding:0 9px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.12);
  background:#172230;
  color:#dce8f3;
  font-size:12px;
  font-weight:900;
}
.range-key i {
  width:13px;
  height:13px;
  display:inline-block;
  border-radius:4px;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);
}
.range-key i.act-mixed {
  background:linear-gradient(135deg,#297452 0 50%,#f3f7fb 50% 62%,#c1493c 62% 100%);
}
.range-cell {
  border-color:rgba(255,255,255,.18);
  text-shadow:0 1px 2px rgba(0,0,0,.45);
}
.range-cell.act-fold { background:#26384b; color:#d9e8f7; }
.range-cell.act-check { background:#3d5c78; color:#edf7ff; }
.range-cell.act-limp,
.range-cell.act-call,
.range-cell.act-call_allin { background:#1f8a5a; color:#f0fff7; }
.range-cell.act-open,
.range-cell.act-raise { background:#d37a2e; color:#fff6ea; }
.range-cell.act-3-bet { background:#d64a3e; color:#fff3f1; }
.range-cell.act-4bet { background:#825cc5; color:#fbf4ff; }
.range-cell.act-allin { background:#b8263d; color:#fff1f4; }
.range-cell.mixed:after { border-top-color:rgba(255,255,255,.9); }
.side-panel .panel-head { margin-bottom:12px; }
.side-panel h2:nth-of-type(n+2),
.side-panel .timeline { display:none !important; }
@media(max-width:760px){
  .card-face b { font-size:17px !important; }
  .card-face span { font-size:29px !important; }
  .card-face.mini span { font-size:20px !important; }
}


/* Action/state polish pass. */
.stat-line {
  display:inline-flex !important;
  align-items:center;
  min-height:20px;
  padding:0 7px;
  border-radius:999px;
  background:rgba(9,15,21,.62);
  border:1px solid rgba(255,255,255,.10);
  color:#b8c8d7;
  font-size:10px;
  font-weight:850;
}
.last-action { display:none !important; }
.table-bet {
  min-width:54px;
  padding:5px 10px;
  color:#f6fbff;
  background:#1b2f46;
  border-color:rgba(139,190,238,.58);
  font-size:12px;
  letter-spacing:0;
}
.table-bet::before,
.table-bet::after { display:none !important; }
.table-bet.bet {
  background:#17466d;
  border-color:rgba(116,184,242,.72);
  color:#f4fbff;
}
.table-bet.fold {
  background:rgba(77,87,101,.90);
  border-color:rgba(166,177,190,.52);
  color:#eef2f6;
  text-transform:uppercase;
}
.table-bet.check {
  background:#27394a;
  border-color:rgba(149,174,198,.55);
  color:#dce8f3;
}
.table-bet.collect {
  background:#1f7a51;
  border-color:rgba(105,213,159,.72);
  color:#f1fff7;
}
.seat-node.winner { opacity:1; filter:none; }
.seat-node.winner .seat-top {
  background:rgba(24,94,62,.95);
  border-color:rgba(105,213,159,.95);
  box-shadow:0 0 0 2px rgba(105,213,159,.22),0 0 18px rgba(105,213,159,.32),0 5px 12px rgba(0,0,0,.24);
}
.seat-node.winner::after {
  content:"Gagnant";
  position:absolute;
  left:50%;
  top:-20px;
  transform:translateX(-50%);
  padding:3px 8px;
  border-radius:999px;
  border:1px solid rgba(105,213,159,.72);
  background:rgba(14,54,37,.94);
  color:#dffff0;
  font-size:10px;
  font-weight:950;
  text-transform:uppercase;
  box-shadow:0 6px 12px rgba(0,0,0,.24);
}
.dealer {
  position:absolute;
  z-index:6;
  width:22px;
  height:22px;
  pointer-events:none;
  border:1px solid rgba(255,255,255,.35);
  box-shadow:0 4px 10px rgba(0,0,0,.32);
}
.seat-node.bottom .dealer { left:calc(50% + 48px); top:-8px; }
.seat-node.top .dealer { left:calc(50% + 48px); top:34px; }
.seat-node.left .dealer { left:calc(50% + 64px); top:18px; }
.seat-node.right .dealer { left:calc(50% - 64px); top:18px; }


/* Range matrix visibility and stable 13x13 sizing. */
.range-box {
  max-width:100%;
  overflow:auto;
}
.range-grid {
  --range-cell-size:clamp(31px, 3.1vw, 44px);
  display:grid !important;
  grid-template-columns:repeat(13, var(--range-cell-size)) !important;
  grid-auto-rows:var(--range-cell-size);
  width:max-content;
  max-width:none;
  gap:4px;
  align-items:stretch;
  justify-content:start;
  min-height:430px;
}
.range-cell {
  width:var(--range-cell-size);
  height:var(--range-cell-size);
  min-width:var(--range-cell-size);
  min-height:var(--range-cell-size);
  aspect-ratio:auto;
  flex:0 0 auto;
  opacity:1;
  visibility:visible;
}
.range-cell span { font-size:12px; line-height:1; }
.range-cell b { font-size:9px; line-height:1; }
.range-cell em { font-size:8px; line-height:1; }
.painter-grid:not(.revealed) .range-cell {
  background:#172330;
  color:#d4e1ec;
  border-color:rgba(255,255,255,.16);
}
.range-box.painter {
  max-height:none;
}
.pot-current {
  padding-left:9px;
  border-left:1px solid rgba(255,255,255,.15);
}
.pot-current strong {
  color:#f4d37c;
}
@media(max-width:760px){
  .range-grid { --range-cell-size:28px; gap:2px; min-height:372px; }
  .range-cell span { font-size:9px; }
}


/* Replayer range panel: keep KT grids below the table/coach area, not squeezed by the side panel. */
.replayer-range-under {
  grid-column:1 / -1;
  min-width:0;
}
.replayer-range-under .range-box {
  width:100%;
  max-width:100%;
  overflow:auto;
}
.replayer-range-under .range-grid {
  --range-cell-size:clamp(34px, 3.35vw, 52px);
  min-height:470px;
}
@media(max-width:760px){
  .replayer-range-under .range-grid { --range-cell-size:28px; min-height:372px; }
}


/* Trainer layout: table first, exercise and ranges below it. */
.trainer-view {
  display:grid !important;
  gap:14px;
}
.trainer-stats-panel {
  border:1px solid var(--line);
  background:var(--panel);
  border-radius:8px;
  padding:12px;
  display:grid;
  gap:10px;
}
.trainer-stat-grid {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:8px;
}
.trainer-stat {
  border:1px solid var(--soft);
  background:#101923;
  border-radius:8px;
  padding:10px;
  min-height:74px;
}
.trainer-stat span,
.trainer-stat em {
  display:block;
  color:var(--muted);
  font-size:11px;
  font-style:normal;
  font-weight:850;
}
.trainer-stat strong {
  display:block;
  margin-top:5px;
  font-size:18px;
  color:#f5fbff;
}
.trainer-leak-strip {
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:8px;
}
.trainer-leak-row {
  border:1px solid rgba(232,187,87,.22);
  background:rgba(232,187,87,.07);
  border-radius:8px;
  padding:8px;
  min-width:0;
}
.trainer-leak-row strong,
.trainer-leak-row span {
  display:block;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.trainer-leak-row strong {
  font-size:12px;
  color:#f2d68a;
}
.trainer-leak-row span {
  margin-top:4px;
  color:#d8e2eb;
  font-size:11px;
  font-weight:850;
}
.trainer-situation-layout {
  display:grid !important;
  grid-template-columns:1fr !important;
  gap:14px;
}
.trainer-table-shell,
.trainer-workbench {
  width:100%;
  min-width:0;
}
.trainer-workbench {
  display:block;
}
.trainer-workbench .range-box,
.trainer-workbench .range-painter,
.trainer-workbench .decision-trainer {
  width:100%;
  min-width:0;
}
.trainer-workbench .range-grid {
  --range-cell-size:clamp(34px, 3.35vw, 52px);
  min-height:470px;
}
@media(max-width:980px){
  .trainer-stat-grid,
  .trainer-leak-strip { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media(max-width:760px){
  .trainer-stat-grid,
  .trainer-leak-strip { grid-template-columns:1fr; }
  .trainer-workbench .range-grid { --range-cell-size:28px; min-height:372px; }
}

/* Mobile ergonomics final pass. */
html { -webkit-text-size-adjust:100%; }
.app-main, .table-panel, .side-panel, .trainer-table-shell, .trainer-workbench, .range-box, .data-card { min-width:0; }
.table-wrap, .range-box { -webkit-overflow-scrolling:touch; }

@media(max-width:900px){
  .app-shell { display:block; }
  .app-rail {
    position:relative;
    height:auto;
    padding:12px;
    gap:10px;
    overflow:visible;
  }
  .brand { padding:0; display:flex; align-items:baseline; justify-content:space-between; gap:10px; }
  .brand-title { font-size:20px; }
  .brand-sub { margin-top:0; font-size:11px; text-align:right; }
  .main-nav {
    display:flex;
    gap:7px;
    overflow-x:auto;
    padding-bottom:2px;
    scrollbar-width:none;
  }
  .main-nav::-webkit-scrollbar { display:none; }
  .main-nav button {
    flex:0 0 auto;
    min-width:92px;
    height:38px;
    padding:0 10px;
    justify-content:center;
    font-size:13px;
  }
  .main-nav button span { width:auto; }
  .control-group {
    border-top:0;
    padding-top:0;
    grid-template-columns:1fr;
    gap:7px;
    border:1px solid var(--soft);
    background:rgba(255,255,255,.025);
    border-radius:8px;
    padding:10px;
  }
  .status-box { display:none; }
  .app-main { padding:12px; }
  .app-header { margin-bottom:10px; gap:8px; }
  .eyebrow { font-size:11px; margin-bottom:4px; }
  h1 { font-size:20px; line-height:1.18; }
  .hand-meta { gap:6px; margin-bottom:9px; }
  .pill { min-height:23px; font-size:11px; padding:0 7px; }
  .coach-banner { margin-bottom:8px; padding:8px 10px; align-items:flex-start; }
  .coach-banner strong { font-size:12px; }
  .coach-banner span { white-space:normal; font-size:12px; line-height:1.25; }
  .table-panel, .side-panel, .trainer-table-shell, .trainer-workbench, .trainer-stats-panel, .range-box, .data-card, .ranges-view { padding:10px; }
  .replayer-layout, .trainer-situation-layout, .grid-two { gap:10px; }
  .trainer-view { gap:10px; }
  .trainer-situation-layout { order:1; }
  .trainer-stats-panel { order:2; }
  .trainer-stat-grid, .trainer-leak-strip { grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; }
  .trainer-stat { min-height:62px; padding:8px; }
  .trainer-stat strong { font-size:16px; }
  .trainer-leak-row { padding:7px; }
  .trainer-leak-row strong, .trainer-leak-row span { white-space:normal; line-height:1.2; }
  .tracker-kpis { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .metric { min-height:76px; padding:9px; }
  .metric strong { font-size:17px; }
  .chart-panel { height:260px; }
}

@media(max-width:760px){
  .poker-table, .trainer-table, .trainer-table-shell .poker-table {
    min-height:430px;
    border-width:7px;
    border-radius:22px;
    box-shadow:inset 0 0 0 1px rgba(255,255,255,.08),0 10px 22px rgba(0,0,0,.24);
  }
  .felt-center {
    min-width:0;
    width:72%;
    max-width:280px;
    gap:8px;
  }
  .pot-stack {
    max-width:100%;
    min-height:31px;
    gap:5px;
    padding:4px 8px 4px 6px;
    transform:none;
  }
  .pot-stack .chip { width:13px; height:13px; margin-left:-5px; border-width:1px; }
  .pot-stack span:not(.chip) { font-size:8px; }
  .pot-stack strong { font-size:12px; }
  .pot-current { padding-left:6px; }
  .board-row { gap:4px; justify-content:center; }
  .card-slot, .card-face, .placeholder-card { width:35px; height:50px; border-radius:7px; }
  .card-face b { left:5px; top:4px; font-size:14px !important; }
  .card-face span { font-size:24px !important; }
  .card-face.mini { width:25px; height:35px; border-radius:5px; }
  .card-face.mini b { left:3px; top:3px; font-size:10px !important; }
  .card-face.mini span { font-size:17px !important; }
  .seat-node, .trainer-table-shell .seat-node {
    width:102px;
    z-index:3;
  }
  .seat-top {
    min-width:74px;
    max-width:98px;
    height:22px;
    padding:0 6px;
  }
  .seat-top strong { font-size:10px; }
  .hole-cards { gap:2px; margin:1px 0; }
  .stack-line {
    min-height:18px;
    max-width:100px;
    padding:0 5px;
    font-size:9px;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  .stat-line {
    min-height:17px;
    max-width:98px;
    padding:0 5px;
    font-size:8px;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  .dealer { width:18px; height:18px; font-size:9px; }
  .seat-node.bottom .dealer { left:calc(50% + 30px); top:-6px; }
  .seat-node.top .dealer { left:calc(50% + 30px); top:26px; }
  .seat-node.left .dealer { left:calc(50% + 42px); top:14px; }
  .seat-node.right .dealer { left:calc(50% - 42px); top:14px; }
  .table-bet {
    min-width:38px;
    padding:3px 6px;
    font-size:9px;
    border-radius:999px;
    z-index:5;
    box-shadow:0 5px 10px rgba(0,0,0,.28);
  }
  .seat-node.winner::after { top:-17px; font-size:8px; padding:2px 6px; }
  .replayer-controls {
    display:grid;
    grid-template-columns:1fr 42px 1fr 42px 1fr;
    gap:6px;
    margin:9px 0 7px;
  }
  .replayer-controls .icon-btn {
    min-width:0;
    width:100%;
    min-height:36px;
    padding:0 6px;
    font-size:12px;
  }
  .replayer-progress { height:5px; }
  .coach-kpis { grid-template-columns:1fr; gap:6px; }
  .coach-copy { font-size:12px; }
  .panel-head { align-items:flex-start; }
  .side-panel .secondary { min-height:34px; }
  .decision-actions, .choices { grid-template-columns:1fr; }
  .choice { min-height:44px; padding:0 10px; }
  .trainer-prompt h2 { font-size:18px; line-height:1.22; }
  .trainer-prompt p { font-size:13px; }
  .paint-toolbar {
    display:grid;
    grid-template-columns:1fr;
    align-items:stretch;
  }
  .field.compact { width:100%; min-width:0; }
  .brushes { display:grid; grid-template-columns:repeat(5,1fr); gap:5px; }
  .brushes button { min-height:36px; padding:0 4px; font-size:12px; }
  .paint-result { font-size:12px; line-height:1.3; }
  .range-headline { align-items:flex-start; flex-direction:column; gap:4px; }
  .range-headline strong { font-size:13px; line-height:1.25; }
  .range-headline span { font-size:12px; }
  .range-legend {
    flex-wrap:nowrap;
    overflow-x:auto;
    gap:5px;
    padding-bottom:2px;
    scrollbar-width:none;
  }
  .range-legend::-webkit-scrollbar { display:none; }
  .range-key { flex:0 0 auto; min-height:24px; padding:0 7px; font-size:10px; }
  .range-key i { width:11px; height:11px; }
  .range-detail {
    min-height:0;
    padding:7px;
    gap:5px;
    overflow-x:auto;
    flex-wrap:nowrap;
  }
  .detail-pill { flex:0 0 auto; min-height:23px; font-size:10px; padding:0 7px; }
  .range-grid, .replayer-range-under .range-grid, .trainer-workbench .range-grid {
    --range-cell-size:30px;
    gap:2px;
    min-height:390px;
  }
  .range-cell span { font-size:9px; }
  .range-cell b, .range-cell em { display:none; }
  th, td { padding:7px 8px; font-size:11px; }
}

@media(max-width:430px){
  .app-rail { padding:10px; }
  .brand-title { font-size:18px; }
  .brand-sub { display:none; }
  .main-nav button { min-width:82px; height:36px; font-size:12px; }
  .control-group { padding:8px; }
  .app-main { padding:10px; }
  h1 { font-size:18px; }
  .poker-table, .trainer-table, .trainer-table-shell .poker-table { min-height:392px; }
  .felt-center { width:70%; max-width:230px; }
  .card-slot, .card-face, .placeholder-card { width:31px; height:45px; }
  .card-face span { font-size:21px !important; }
  .card-face b { font-size:12px !important; }
  .seat-node, .trainer-table-shell .seat-node { width:88px; }
  .seat-top { min-width:66px; max-width:84px; height:20px; padding:0 5px; }
  .seat-top strong { font-size:9px; }
  .card-face.mini { width:22px; height:31px; }
  .card-face.mini span { font-size:15px !important; }
  .card-face.mini b { font-size:9px !important; }
  .stack-line, .stat-line { max-width:84px; font-size:8px; }
  .table-bet { font-size:8px; min-width:34px; padding:2px 5px; }
  .tracker-kpis, .trainer-stat-grid, .trainer-leak-strip { grid-template-columns:1fr; }
  .range-grid, .replayer-range-under .range-grid, .trainer-workbench .range-grid {
    --range-cell-size:28px;
    min-height:364px;
  }
}
