/* Public showdown stays on the felt. Every seat retains all three rows. */
.tw-scene[data-phase="settled"] .tw-felt-stage { margin:0 8px; min-height:0; }
.tw-scene[data-phase="settled"] .tw-workspace { padding:0 10px 7px; }
.tw-scene[data-phase="settled"] .tw-self-banner { display:none; }
.tw-scene[data-phase="settled"] .tw-between > #tw-next-clock { min-height:0; }
.tw-scene[data-phase="settled"] .tw-actions { padding-top:3px; }
.tw-scene .tw-result-board { --tw-card-width:30px; position:relative; inset:auto; z-index:auto; display:flex; flex-direction:column; align-items:stretch; justify-content:flex-start; width:100%; height:100%; min-height:0; padding:0; margin:0; overflow:visible; background:none; backdrop-filter:none; border:0; color:#e6eed9; }
.tw-scene .tw-comparison-heading { display:flex; justify-content:space-between; align-items:center; flex:none; height:43px; margin:0; padding:0 5px; gap:4px; }
.tw-scene .tw-comparison-heading > div:first-child { min-width:0; }
.tw-scene .tw-comparison-heading small { font-size:9px; line-height:12px; color:#afc2a8; }
.tw-scene .tw-comparison-heading h2 { font-size:17px; line-height:23px; letter-spacing:1px; margin:0; color:#f1d798; white-space:nowrap; }
.tw-scene .tw-comparison-heading button { display:flex; align-items:center; justify-content:center; border:1px solid #c4bb8244; background:#103a2c55; color:#e0cea0; border-radius:4px; font-size:10px; height:30px; min-height:30px; width:auto; padding:3px 7px; margin:0; }
.tw-scene .tw-comparison-heading svg { width:16px; height:16px; }
.tw-scene .tw-result-tools,.tw-scene .tw-replay-controls { display:flex; align-items:center; gap:5px; }
.tw-scene .tw-replay-controls { display:none; }
.tw-scene .tw-showdown .tw-result-tools { display:none; }
.tw-scene .tw-showdown .tw-replay-controls { display:flex; }
.tw-scene .tw-comparison-heading .tw-continue { color:#403d23; border-color:#ecd99d; background:linear-gradient(#edd49b,#cba65d); }
.tw-comparison-steps { display:flex; flex:none; align-items:center; height:26px; margin:0 4px 4px; gap:7px; border-top:1px solid #bfd3a41c; }
.tw-comparison-steps span { position:relative; display:flex; flex:1; align-items:center; justify-content:center; font-size:10px; gap:8px; color:#d9d5a6; }
.tw-comparison-steps i { font-style:normal; font-size:9px; opacity:.7; }
.tw-comparison-steps .pending { color:#8ba795; }.tw-comparison-steps .pending i { visibility:hidden; }
.tw-comparison-steps .active { color:#ffe3a3; }.tw-comparison-steps .active::after { content:''; position:absolute; bottom:-6px; width:100%; height:2px; background:#d7b766; }
.tw-scene .tw-reveal-players { position:relative; isolation:isolate; flex:1; min-height:0; padding:4px 2px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); grid-template-rows:repeat(3,minmax(0,1fr)); gap:12px 16px; align-items:center; align-content:space-evenly; }
.tw-scene .tw-reveal-players::before { content:'十三水'; position:absolute; z-index:-1; left:50%; top:50%; transform:translate(-50%,-50%); color:#112e2466; font-size:48px; font-weight:750; letter-spacing:10px; white-space:nowrap; text-shadow:0 1px #c7e8b516; pointer-events:none; }
.tw-scene .tw-reveal-player { min-width:0; min-height:0; max-height:100%; position:relative; display:grid; grid-template-columns:31px minmax(0,1fr); gap:4px; align-items:center; padding:0; margin:0; background:none; border:0; border-radius:0; box-shadow:none; }
.tw-scene .tw-reveal-player.is-me .tw-comparison-avatar { border-color:#efd18b; box-shadow:0 0 0 1px #dcb96988; }
.tw-scene .tw-reveal-identity { display:flex; flex-direction:column; align-items:center; gap:4px; text-align:center; margin:0; padding:0; min-height:0; border:0; background:none; }
.tw-scene .tw-comparison-avatar { width:29px; height:29px; flex:none; border:1px solid #a1be9677; border-radius:4px; overflow:hidden; background:#204c3b; }
.tw-comparison-avatar .player-avatar,.tw-comparison-avatar img { width:100%; height:100%; border-radius:3px; }.tw-comparison-avatar .avatar-initials { font-size:10px; color:#d9dbb4; }
.tw-scene .tw-reveal-identity > div { flex:1; min-width:0; width:100%; display:grid; gap:2px; }
.tw-scene .tw-reveal-identity b { font-size:10px; font-weight:500; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tw-scene .tw-reveal-identity small { color:#a4bba5; font-size:8px; line-height:10px; }
.tw-scene .tw-reveal-name { display:grid; flex:none; justify-items:center; min-width:25px; font:600 15px/17px system-ui,sans-serif; }
.tw-scene .tw-reveal-name small { font-weight:400; }
.tw-scene .tw-reveal-lanes { display:grid; grid-template-rows:repeat(3,minmax(0,1fr)); gap:3px; min-height:0; }
.tw-scene .tw-reveal-row { position:relative; display:grid; grid-template-columns:9px minmax(0,1fr) 28px; align-items:center; gap:2px; padding:0; min-height:0; border-radius:4px; border:1px solid transparent; }
.tw-scene .tw-row-label { color:#a3bea5; font-size:9px; text-align:center; font-weight:400; }
.tw-scene .tw-reveal-cards,.tw-scene .tw-row-backs { --tw-card-width:inherit; display:flex; min-width:0; min-height:0; align-items:center; padding:0; margin:0; gap:0; }
.tw-scene .tw-reveal-cards .playing-card,.tw-scene .tw-card-back { width:var(--tw-card-width); height:calc(var(--tw-card-width) * 1.42); flex:none; animation:none; }
.tw-scene .tw-reveal-cards .playing-card + .playing-card,.tw-scene .tw-card-back + .tw-card-back { margin-left:calc(var(--tw-card-width) * -.47); }
.tw-scene .tw-reveal-cards .card-face { padding:2px; background:linear-gradient(100deg,#fffff8,#e9ecdd); border-radius:3px; }
.tw-scene .tw-reveal-cards .card-rank { font:bold calc(var(--tw-card-width) * .51)/1 Georgia,serif; }
.tw-scene .tw-reveal-cards .card-face > small { display:block; font-size:calc(var(--tw-card-width) * .45); line-height:1; margin-top:1px; }
.tw-scene .tw-reveal-cards .card-pip { display:none; }
.tw-scene .tw-reveal-cards .tw-joker b { font-size:12px; }.tw-scene .tw-reveal-cards .tw-joker span { display:none; }.tw-scene .tw-reveal-cards .tw-joker i { font-size:12px; }
.tw-scene .tw-row-outcome { min-width:0; display:grid; justify-items:end; gap:2px; }
.tw-scene .tw-row-name { max-width:100%; font-size:8px; line-height:10px; color:#c9d7b8; white-space:nowrap; }
.tw-scene .tw-row-water { font-size:12px; line-height:13px; font-weight:600; white-space:nowrap; }.tw-scene .tw-row-water small { font-size:8px; margin-left:1px; font-weight:400; }
.tw-scene .tw-win { color:#f3d17e; }.tw-scene .tw-loss { color:#a6d7dc; }
.tw-scene .tw-reveal-row.lane-winner:not(.is-hidden):not(.is-unscored) { border-color:#dcc68138; background:linear-gradient(90deg,#bdad4830,transparent); }
.tw-scene .tw-reveal-row.lane-winner:not(.is-hidden):not(.is-unscored) .tw-row-label { color:#f5d989; font-weight:700; }
.tw-scene .is-unscored .tw-row-water { visibility:hidden; }
.tw-scene .is-speaking .tw-row-name { color:#ffe29e; font-weight:700; }
.tw-scene .is-speaking .tw-row-label::after { content:'♪'; display:block; font-size:10px; color:#ffdf90; line-height:10px; }
.tw-scene .tw-reveal-row.is-active { outline:1px solid #edd59980; background:#c2bc6340; }
.tw-scene .tw-reveal-row.is-active:not(.is-hidden) .playing-card { animation:tw-flip .3s ease both; }
.tw-scene .tw-row-backs { display:none; grid-column:2; grid-row:1; }.tw-scene .tw-card-back { border:1px solid #c8daccb3; font-size:14px; color:#99b9c8; background:repeating-linear-gradient(45deg,#305769,#305769 2px,#274759 2px,#274759 4px); }
.tw-scene .tw-reveal-cards { grid-column:2; grid-row:1; }.tw-scene .tw-row-label { grid-column:1; grid-row:1; }.tw-scene .tw-row-outcome { grid-column:3; grid-row:1; }
.tw-scene .is-hidden .tw-reveal-cards,.tw-scene .is-hidden .tw-row-outcome,.tw-scene .is-concealed { visibility:hidden; }
.tw-scene .is-hidden .tw-row-backs { display:flex; }
.tw-scene .tw-special-reveal { position:absolute; bottom:-10px; left:10px; right:10px; padding:2px 5px; font-size:11px; background:#38583beb; border:1px solid #dcc17488; color:#ffe0a2; border-radius:3px; text-align:center; z-index:2; }
.tw-scene .tw-reveal-player.shot-source::after,.tw-scene .tw-reveal-player.shot-target::after,.tw-scene .home-run-winner::after { position:absolute; right:4px; top:35%; padding:4px 9px; border:1px solid #f3d089; color:#fbe9ae; background:#756035ed; transform:rotate(-12deg); font-size:19px; text-shadow:0 1px #312011; box-shadow:0 2px 12px #0005; }
.tw-scene .tw-reveal-player.shot-source::after { content:'打枪'; }.tw-scene .tw-reveal-player.shot-target::after { content:'被打枪'; background:#603c47ed; border-color:#c7978e; }.tw-scene .home-run-winner::after { content:'全垒打'; font-size:22px; }
.tw-scene .tw-event-banner { flex:none; min-height:22px; height:auto; padding:4px 8px 1px; margin:0; font-size:11px; line-height:15px; color:#e5d095; display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tw-scene .tw-comparison-note { flex:none; margin:0; padding:2px 0 5px; text-align:center; color:#93b39b; font-size:8px; line-height:11px; }
.tw-scene .tw-showdown-progress { height:2px; display:none; flex:none; }.tw-scene .tw-showdown .tw-showdown-progress { display:block; position:absolute; bottom:0; left:0; right:0; }
.tw-scene [data-players="3"] .tw-reveal-players { grid-template-rows:repeat(2,minmax(0,1fr)); }.tw-scene [data-players="3"] .tw-reveal-player:last-child { grid-column:1/-1; width:calc((100% - 16px)/2); justify-self:center; }
.tw-scene [data-players="4"] .tw-reveal-player:first-child { grid-column:1/-1; width:calc((100% - 16px)/2); justify-self:center; }.tw-scene [data-players="4"] .tw-reveal-player:last-child,.tw-scene [data-players="5"] .tw-reveal-player:last-child { grid-column:1/-1; width:calc((100% - 16px)/2); justify-self:center; }
.tw-showdown-overlay { position:fixed; inset:0; z-index:180; background:#06271f; overflow:hidden; }.tw-replay-scene { padding:12px 10px; }.tw-replay-scene .tw-result-board { flex:1; min-height:0; }
/* Size the actual cards from the available felt, including short spectator views. */
.tw-scene .tw-reveal-players { container-type:size; --compare-rows:3; --compare-cols:2; --compare-gap-x:16px; --compare-gap-y:12px; --compare-overhead-x:78px; --compare-card-max:30px; }
.tw-scene [data-players="3"] .tw-reveal-players { --compare-rows:2; }
@supports (width:1cqh) {
  .tw-scene .tw-reveal-player { --tw-card-width:clamp(12px,min(calc((100cqh / var(--compare-rows) - var(--compare-gap-y) - 14px) / 3.75),calc((100cqw / var(--compare-cols) - var(--compare-gap-x) - var(--compare-overhead-x)) / 3.36)),var(--compare-card-max)); }
}
@media (min-height:800px) and (orientation:portrait) { .tw-scene .tw-reveal-players { --compare-gap-x:18px; --compare-gap-y:18px; } }
@media (max-height:740px) and (orientation:portrait) { .tw-scene .tw-reveal-players { --compare-gap-x:12px; --compare-gap-y:8px; } }
@media (max-height:620px) and (orientation:portrait) { .tw-scene .tw-reveal-players { --compare-gap-y:7px; --compare-overhead-x:72px; } }
@media (min-width:600px) and (orientation:portrait) { .tw-scene .tw-reveal-players { --compare-card-max:38px; --compare-overhead-x:104px; } }
@media (min-width:600px) and (orientation:landscape) {
  .tw-scene .tw-reveal-players { --compare-rows:2; --compare-cols:3; --compare-gap-y:10px; --compare-gap-x:30px; --compare-card-max:36px; --compare-overhead-x:106px; }
  .tw-scene [data-players="3"] .tw-reveal-players { --compare-rows:1; }.tw-scene [data-players="4"] .tw-reveal-players { --compare-cols:2; }
}
@media (min-width:600px) and (orientation:landscape) and (max-height:600px) { .tw-scene .tw-reveal-players { --compare-gap-y:4px; --compare-gap-x:22px; --compare-overhead-x:98px; --compare-card-max:25px; } }
@media (min-height:800px) and (orientation:portrait) { .tw-scene .tw-result-board { --tw-card-width:30px; } .tw-scene .tw-reveal-players { gap:18px 18px; } }
@media (max-height:740px) and (orientation:portrait) {
  .tw-scene .tw-result-board { --tw-card-width:21px; }.tw-scene .tw-reveal-players { gap:8px 12px; padding:2px 0; }
  .tw-scene .tw-comparison-heading { height:34px; }.tw-scene .tw-comparison-heading h2 { font-size:14px; line-height:18px; }.tw-scene .tw-comparison-heading small { font-size:8px; }
  .tw-scene .tw-comparison-steps { height:22px; margin-bottom:2px; }.tw-scene .tw-reveal-lanes { gap:2px; }.tw-scene .tw-reveal-row { padding:1px; }
  .tw-scene .tw-reveal-identity { min-height:24px; margin-bottom:3px; gap:4px; }.tw-scene .tw-comparison-avatar { height:23px; width:23px; }
  .tw-scene .tw-reveal-name { font-size:13px; line-height:14px; }.tw-scene .tw-reveal-identity b { font-size:9px; }
}
@media (max-height:620px) and (orientation:portrait) {
  .tw-scene .tw-result-board { --tw-card-width:19px; }.tw-scene .tw-reveal-row { grid-template-columns:8px minmax(0,1fr) 27px; gap:1px; padding:0; }
  .tw-scene .tw-reveal-player { display:grid; grid-template-columns:31px minmax(0,1fr); gap:2px; align-items:center; }
  .tw-scene .tw-reveal-identity { flex-direction:column; gap:2px; margin:0; text-align:center; }.tw-scene .tw-reveal-identity > div { width:100%; }
  .tw-scene .tw-reveal-identity b { font-size:8px; }.tw-scene .tw-reveal-identity small { font-size:7px; line-height:8px; }.tw-scene .tw-reveal-name { justify-items:center; font-size:12px; }
  .tw-scene[data-phase="settled"] .spectator-controls { display:flex; flex-direction:row; align-items:center; gap:5px; padding-top:3px; }.tw-scene[data-phase="settled"] .spectator-controls > div:first-child { flex:1; min-width:0; }
  .tw-scene[data-phase="settled"] .spectator-controls span { font-size:8px; }.tw-scene[data-phase="settled"] .spectator-actions { flex:1; gap:3px; }.tw-scene[data-phase="settled"] .spectator-actions button { min-height:32px; padding:3px; font-size:9px; }
  .tw-scene .tw-reveal-players { gap:7px 12px; }.tw-scene .tw-reveal-lanes { gap:2px; }.tw-scene .tw-comparison-heading { height:31px; }
  .tw-scene .tw-comparison-heading small { display:none; }.tw-scene .tw-comparison-heading button { height:27px; min-height:27px; padding:3px 5px; font-size:9px; }
  .tw-scene .tw-row-water { font-size:10px; line-height:11px; }.tw-scene .tw-row-name { font-size:7px; line-height:9px; }.tw-scene .tw-event-banner { font-size:10px; line-height:13px; min-height:18px; padding-top:2px; }
  .tw-scene .tw-comparison-note { font-size:7px; padding-bottom:2px; line-height:9px; }.tw-scene[data-phase="settled"] .tw-review { padding:2px 0; }
}
@media (min-width:600px) and (orientation:portrait) { .tw-scene .tw-result-board { --tw-card-width:38px; }.tw-scene .tw-row-name { font-size:10px; }.tw-scene .tw-reveal-row { grid-template-columns:15px minmax(0,1fr) 43px; }.tw-scene .tw-reveal-identity b { font-size:12px; } }
@media (min-width:600px) and (orientation:landscape) {
  .tw-scene[data-phase="settled"] { display:flex; max-width:1200px; }.tw-scene[data-phase="settled"] .tw-rule-bar { position:static; width:auto; flex:none; min-height:24px; height:24px; }
  .tw-scene[data-phase="settled"] .tw-felt-stage { flex:1; min-height:0; margin:0 15px; }.tw-scene[data-phase="settled"] .tw-workspace { align-self:stretch; flex:none; max-height:none; overflow:visible; border-left:0; }
  .tw-scene .tw-reveal-players { grid-template-columns:repeat(3,minmax(0,1fr)); grid-template-rows:repeat(2,minmax(0,1fr)); gap:10px 30px; }
  .tw-scene [data-players] .tw-reveal-player,.tw-scene [data-players] .tw-reveal-player:first-child,.tw-scene [data-players] .tw-reveal-player:last-child { width:auto; grid-column:auto; justify-self:stretch; }
  .tw-scene [data-players="3"] .tw-reveal-players { grid-template-rows:minmax(0,1fr); }
  .tw-scene [data-players="4"] .tw-reveal-players { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .tw-scene .tw-result-board { --tw-card-width:36px; }.tw-scene .tw-reveal-row { grid-template-columns:15px minmax(0,1fr) 45px; }
  .tw-scene .tw-row-name { font-size:10px; }.tw-scene .tw-reveal-identity b { font-size:12px; }
  .tw-scene[data-phase="settled"] .tw-between { display:flex; align-items:center; justify-content:center; gap:12px; }.tw-scene[data-phase="settled"] .tw-actions { padding:4px 0; width:310px; }.tw-scene[data-phase="settled"] .tw-review { display:flex; padding:0; }
}
@media (min-width:600px) and (orientation:landscape) and (max-height:600px) {
  .tw-scene[data-phase="settled"] .tw-rule-bar { display:none; }.tw-scene .tw-result-board { --tw-card-width:20px; }
  .tw-scene .tw-comparison-heading { height:28px; }.tw-scene .tw-comparison-heading small { display:none; }.tw-scene .tw-comparison-heading h2 { font-size:14px; }.tw-scene .tw-comparison-heading button { height:25px; min-height:25px; }
  .tw-scene .tw-comparison-steps { position:absolute; top:2px; left:30%; right:30%; height:24px; border:0; margin:0; }
  .tw-scene .tw-reveal-players { gap:4px 22px; padding:1px 0; }.tw-scene .tw-reveal-player { display:grid; grid-template-columns:48px minmax(0,1fr); gap:4px; align-items:center; }
  .tw-scene .tw-reveal-identity { flex-direction:column; text-align:center; gap:2px; margin:0; }.tw-scene .tw-reveal-identity > div { width:100%; }.tw-scene .tw-reveal-identity b { font-size:8px; }.tw-scene .tw-reveal-identity small { font-size:7px; }.tw-scene .tw-comparison-avatar { width:23px; height:23px; }.tw-scene .tw-reveal-name { font-size:12px; justify-items:center; line-height:12px; }
  .tw-scene .tw-reveal-lanes { gap:2px; }.tw-scene .tw-reveal-row { grid-template-columns:9px minmax(0,1fr) 30px; gap:1px; padding:0; }.tw-scene .tw-row-name { font-size:7px; }.tw-scene .tw-row-water { font-size:10px; line-height:11px; }
  .tw-scene .tw-event-banner { font-size:10px; min-height:17px; line-height:13px; padding:1px 0; }.tw-scene .tw-comparison-note { font-size:7px; line-height:9px; padding:0 0 2px; }
  .tw-scene[data-phase="settled"] .tw-workspace { padding-bottom:1px; }.tw-scene[data-phase="settled"] .tw-between { gap:8px; }.tw-scene[data-phase="settled"] .tw-between > span { font-size:9px; max-width:125px; }
  .tw-scene[data-phase="settled"] .spectator-controls { display:flex; align-items:center; padding:2px 0; gap:12px; }.tw-scene[data-phase="settled"] .spectator-controls > div { flex:1; }.tw-scene[data-phase="settled"] .spectator-controls > div:first-child { gap:2px; }.tw-scene[data-phase="settled"] .spectator-controls b { font-size:10px; }.tw-scene[data-phase="settled"] .spectator-controls span { font-size:9px; }.tw-scene[data-phase="settled"] .spectator-actions button { min-height:28px; }
}
/* Three nested fans: each card keeps its own pivot through the reveal. */
.tw-scene .tw-reveal-lanes { position:relative; display:block; height:calc(var(--tw-card-width) * 3.75); isolation:isolate; }
.tw-scene .tw-reveal-row { position:absolute; inset:calc(var(--fan-lane) * var(--tw-card-width) * .98) 0 auto; height:calc(var(--tw-card-width) * 1.79); padding:0; z-index:calc(var(--fan-lane) + 1); }
.tw-scene .tw-reveal-cards,.tw-scene .tw-row-backs { position:relative; display:block; height:calc(var(--tw-card-width) * 1.75); width:100%; overflow:visible; }
.tw-scene .tw-row-backs { display:none; }
.tw-scene .is-hidden .tw-row-backs { display:block; }
.tw-scene .tw-fan-card { position:absolute; left:50%; top:calc(var(--tw-card-width) * .08); width:var(--tw-card-width); height:calc(var(--tw-card-width) * 1.42); margin-left:calc(var(--tw-card-width) * -.5); transform-origin:50% 110%; transform:translateX(calc(var(--fan-offset) * var(--tw-card-width))) rotate(var(--fan-angle)); z-index:var(--fan-order); }
.tw-scene .tw-fan-card > .playing-card,.tw-scene .tw-fan-card > .tw-card-back { display:block; position:relative; margin:0; width:100%; height:100%; border-radius:3px; box-shadow:0 1px 3px #001c2566; }
.tw-scene .tw-reveal-cards .card-face { padding:1px; border:1px solid #a6a997; box-sizing:border-box; }
.tw-scene .tw-reveal-cards .card-rank { font-size:calc(var(--tw-card-width) * .41); }
.tw-scene .tw-reveal-cards .card-face > small { font-size:calc(var(--tw-card-width) * .31); margin-top:0; }
.tw-scene .tw-reveal-cards .card-pip { display:block; position:absolute; left:auto; right:3px; bottom:2px; transform:none; font-size:calc(var(--tw-card-width) * .62); line-height:1; }
.tw-scene .tw-row-label,.tw-scene .tw-row-outcome { align-self:start; margin-top:calc(var(--tw-card-width) * .17); }
.tw-scene .tw-row-outcome { position:relative; z-index:6; gap:1px; }
.tw-scene .tw-row-label { position:relative; z-index:6; }
.tw-scene .tw-reveal-row.is-active { outline:0; background:none; }
.tw-scene .tw-reveal-row.lane-winner:not(.is-hidden):not(.is-unscored) { background:none; border-color:transparent; }
.tw-scene .tw-reveal-row.is-active .tw-fan-card > .playing-card { box-shadow:0 0 0 1px #e9d47c,0 0 7px #e9d47c88; }
.tw-scene .tw-reveal-row.lane-winner:not(.is-hidden):not(.is-unscored) .tw-fan-card:last-child > .playing-card { box-shadow:0 0 0 1px #e4cf82,0 0 5px #d4c36266; }
.tw-scene .tw-special-reveal { bottom:-8px; z-index:5; }
@media (orientation:portrait), (max-width:599px) {
  .tw-scene .tw-reveal-player[data-table-side="right"] { grid-template-columns:minmax(0,1fr) 31px; }
  .tw-scene .tw-reveal-player[data-table-side="right"] .tw-reveal-identity { grid-column:2; grid-row:1; }
  .tw-scene .tw-reveal-player[data-table-side="right"] .tw-reveal-lanes { grid-column:1; grid-row:1; }
}
@media (prefers-reduced-motion:reduce) { .tw-scene .tw-reveal-row.is-active:not(.is-hidden) .playing-card { animation:none; } }

/* Head-to-head PK beat: both seats lunge toward the table centre, their active
   fans flash, and the centre marker lands before the hand-name voice. */
.tw-scene .tw-pk-arena { position:absolute; z-index:20; left:50%; top:50%; width:86px; height:42px; transform:translate(-50%,-50%) scale(.55); opacity:0; pointer-events:none; display:grid; place-items:center; }
.tw-scene .tw-pk-arena b { display:block; color:#ffe39b; font:900 21px/1 system-ui,sans-serif; letter-spacing:2px; text-shadow:0 2px 7px #001d18,0 0 12px #ffd86a; }
.tw-scene .tw-pk-arena .tw-pk-copy { position:absolute; top:31px; color:#f6d995; font-size:8px; white-space:nowrap; text-shadow:0 1px 3px #001d18; }
.tw-scene .tw-pk-arena i { position:absolute; top:19px; width:34px; height:2px; background:linear-gradient(90deg,transparent,#f8d87e,transparent); transform-origin:center; opacity:.8; }
.tw-scene .tw-pk-arena i:nth-of-type(1) { transform:rotate(18deg); }.tw-scene .tw-pk-arena i:nth-of-type(2) { transform:rotate(-18deg); }.tw-scene .tw-pk-arena i:nth-of-type(3) { width:55px; transform:rotate(90deg); opacity:.25; }
.tw-scene .tw-pk-arena.is-active { animation:tw-pk-burst .85s cubic-bezier(.2,.8,.25,1) both; }
.tw-scene .tw-reveal-player.pk-active[data-table-side="left"] .tw-reveal-lanes { animation:tw-pk-lunge-left .85s cubic-bezier(.2,.8,.25,1) both; }
.tw-scene .tw-reveal-player.pk-active[data-table-side="right"] .tw-reveal-lanes { animation:tw-pk-lunge-right .85s cubic-bezier(.2,.8,.25,1) both; }
.tw-scene .tw-reveal-player.pk-active[data-table-side="center"] .tw-reveal-lanes { animation:tw-pk-pulse .85s ease both; }
.tw-scene .tw-reveal-row.is-pk .tw-fan-card > .playing-card { animation:tw-pk-card-flash .85s ease both; }
.tw-scene .tw-reveal-player.pk-winner .tw-reveal-name { animation:tw-pk-score .85s ease both; }
.tw-scene .tw-reveal-player.pk-draw .tw-reveal-name { animation:tw-pk-draw .85s ease both; }
@keyframes tw-pk-lunge-left { 0%,100% { transform:translateX(0); } 28% { transform:translateX(7px); } 58% { transform:translateX(-2px); } }
@keyframes tw-pk-lunge-right { 0%,100% { transform:translateX(0); } 28% { transform:translateX(-7px); } 58% { transform:translateX(2px); } }
@keyframes tw-pk-pulse { 0%,100% { filter:none; } 35% { filter:drop-shadow(0 0 5px #f2d37d); } }
@keyframes tw-pk-burst { 0% { opacity:0; transform:translate(-50%,-50%) scale(.55); } 24% { opacity:1; transform:translate(-50%,-50%) scale(1.12); } 70% { opacity:1; transform:translate(-50%,-50%) scale(1); } 100% { opacity:0; transform:translate(-50%,-50%) scale(.92); } }
@keyframes tw-pk-card-flash { 0%,100% { filter:none; box-shadow:0 1px 3px #001c2566; } 32% { filter:brightness(1.18) saturate(1.18); box-shadow:0 0 0 1px #f9df86,0 0 10px #f1cf6688; } 64% { filter:brightness(1.04); box-shadow:0 0 0 1px #e9c96588,0 1px 3px #001c2566; } }
@keyframes tw-pk-score { 0%,100% { transform:scale(1); } 40% { transform:scale(1.14); } }
@keyframes tw-pk-draw { 0%,100% { opacity:1; } 40% { opacity:.58; } }
@media (prefers-reduced-motion:reduce) { .tw-scene .tw-pk-arena.is-active,.tw-scene .tw-reveal-player.pk-active .tw-reveal-lanes,.tw-scene .tw-reveal-row.is-pk .tw-fan-card > .playing-card,.tw-scene .tw-reveal-player.pk-winner .tw-reveal-name,.tw-scene .tw-reveal-player.pk-draw .tw-reveal-name { animation:none; } }

/* 打枪：命中方出现弹孔与火花，出枪方出现枪口闪光。 */
.tw-scene .tw-reveal-player.shot-target { background:linear-gradient(115deg,#7e344777,#3d1b2c66); animation:tw-bullet-hit .68s cubic-bezier(.2,.8,.3,1) both; }
.tw-scene .tw-reveal-player.shot-target::after { content:''; position:absolute; right:6px; top:34%; width:34px; height:34px; padding:0; border:2px solid #201116; border-radius:50%; background:radial-gradient(circle at 29% 32%,#170c10 0 10%,#a65b55 11% 16%,transparent 17%),radial-gradient(circle at 68% 38%,#120a0d 0 11%,#9a4c4c 12% 17%,transparent 18%),radial-gradient(circle,#3a1c22 0 38%,#b66a5b 39% 43%,#32151c 44% 50%,transparent 51%); box-shadow:0 0 0 1px #e7a27666,0 0 14px #e76b4f99; transform:rotate(-14deg) scale(.5); opacity:0; animation:tw-bullet-hole .68s .08s cubic-bezier(.2,.8,.3,1) both; }
.tw-scene .tw-reveal-player.shot-target::before { content:'✦'; position:absolute; z-index:7; right:43px; top:31%; color:#ffd28b; font-size:15px; text-shadow:0 0 7px #ff744e; opacity:0; pointer-events:none; animation:tw-bullet-spark .68s .03s ease both; }
.tw-scene .tw-reveal-player.shot-source::after { content:'✦'; right:5px; top:35%; padding:0; width:22px; height:22px; border:0; border-radius:50%; background:radial-gradient(circle,#fff7ca 0 12%,#ffb54f 13% 34%,#d64f36 35% 52%,transparent 53%); box-shadow:0 0 15px #ff9a4599; transform:scale(.5); animation:tw-muzzle-flash .68s ease both; }
@keyframes tw-bullet-hit { 0%,100% { transform:translateX(0); } 18% { transform:translateX(8px) rotate(.5deg); } 34% { transform:translateX(-7px) rotate(-.4deg); } 52% { transform:translateX(4px); } 70% { transform:translateX(-1px); } }
@keyframes tw-bullet-hole { 0% { opacity:0; transform:rotate(-14deg) scale(.15); } 24% { opacity:1; transform:rotate(-14deg) scale(1.12); } 100% { opacity:.95; transform:rotate(-14deg) scale(1); } }
@keyframes tw-bullet-spark { 0%,18% { opacity:0; transform:translate(10px,4px) scale(.2) rotate(0); } 35% { opacity:1; transform:translate(0,0) scale(1.1) rotate(70deg); } 100% { opacity:0; transform:translate(-9px,-4px) scale(.55) rotate(145deg); } }
@keyframes tw-muzzle-flash { 0%,100% { opacity:0; transform:scale(.35); } 25% { opacity:1; transform:scale(1.2); } 55% { opacity:.2; transform:scale(.7); } }

/* 全垒打：专属飞球、庆祝标题和赢家光环。 */
.tw-scene.tw-showdown[data-effect="home-run"]::before { content:''; position:absolute; z-index:12; left:50%; top:48%; width:90px; height:90px; border-radius:50%; pointer-events:none; background:radial-gradient(circle at 35% 30%,#fff9ce 0 3%,#ffe38a 4% 15%,#e99f3f 32%,#b5483b 61%,transparent 63%); box-shadow:0 0 0 5px #ffe6a344,0 0 35px #ffd15caa; animation:tw-home-run-ball 1.8s cubic-bezier(.2,.8,.3,1) both; }
.tw-scene.tw-showdown[data-effect="home-run"]::after { content:'全垒打  ·  满贯庆祝'; position:absolute; z-index:18; left:50%; top:50%; transform:translate(-50%,-50%) scale(.5) rotate(-5deg); padding:8px 18px; border:2px solid #ffdf8a; border-radius:7px; color:#fff2bf; background:linear-gradient(120deg,#6c302fdd,#a15d2eee); box-shadow:0 0 0 3px #f3bb5b44,0 7px 22px #1a0b0788; font-size:19px; font-weight:800; letter-spacing:2px; white-space:nowrap; pointer-events:none; animation:tw-home-run-title 1.8s .08s cubic-bezier(.2,.8,.3,1) both; }
.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner { z-index:16; animation:tw-home-run-winner 1.8s ease both; }
.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner::before { content:'✦  ✦  ✦'; position:absolute; z-index:18; left:50%; top:-8px; transform:translateX(-50%); color:#ffe79d; font-size:17px; white-space:nowrap; text-shadow:0 0 10px #ffb23e; animation:tw-home-run-spark 1.8s ease both; pointer-events:none; }
.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner::after { content:'全垒打'; right:4px; top:35%; padding:4px 9px; border:1px solid #ffe092; color:#fff0b8; background:linear-gradient(120deg,#a95a38ee,#61302fee); transform:rotate(-10deg) scale(.75); animation:tw-home-run-badge 1.8s .12s ease both; }
@keyframes tw-home-run-ball { 0% { opacity:0; transform:translate(-45vw,34vh) rotate(-120deg) scale(.18); } 28% { opacity:1; transform:translate(-8vw,3vh) rotate(80deg) scale(.75); } 60% { opacity:1; transform:translate(8vw,-8vh) rotate(220deg) scale(1); } 100% { opacity:0; transform:translate(39vw,-34vh) rotate(420deg) scale(.4); } }
@keyframes tw-home-run-title { 0% { opacity:0; transform:translate(-50%,-50%) scale(.5) rotate(-8deg); } 26% { opacity:1; transform:translate(-50%,-50%) scale(1.12) rotate(2deg); } 62% { opacity:1; transform:translate(-50%,-50%) scale(1) rotate(-2deg); } 100% { opacity:0; transform:translate(-50%,-50%) scale(1.05) rotate(0); } }
@keyframes tw-home-run-winner { 0%,100% { filter:none; } 25% { filter:drop-shadow(0 0 8px #ffe28c); } 55% { filter:drop-shadow(0 0 18px #ffba4d); } }
@keyframes tw-home-run-spark { 0% { opacity:0; top:18px; } 25% { opacity:1; top:-8px; } 70% { opacity:1; top:-15px; } 100% { opacity:0; top:-26px; } }
@keyframes tw-home-run-badge { 0% { opacity:0; transform:rotate(-10deg) scale(.3); } 25% { opacity:1; transform:rotate(-10deg) scale(1.15); } 60% { opacity:1; transform:rotate(-10deg) scale(1); } 100% { opacity:0; transform:rotate(-10deg) scale(.95); } }
@media (prefers-reduced-motion:reduce) { .tw-scene.tw-showdown[data-effect="home-run"]::before,.tw-scene.tw-showdown[data-effect="home-run"]::after,.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner,.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner::before,.tw-scene.tw-showdown[data-effect="home-run"] .tw-reveal-player.home-run-winner::after,.tw-scene .tw-reveal-player.shot-target,.tw-scene .tw-reveal-player.shot-target::before,.tw-scene .tw-reveal-player.shot-target::after,.tw-scene .tw-reveal-player.shot-source::after { animation:none; opacity:1; transform:none; } }

/* Commercial-style stage FX. These are real DOM layers so the path follows the
   actual seats on every viewport instead of relying on a fixed pseudo-element. */
.tw-scene .tw-fx-layer { position:absolute; inset:0; z-index:40; overflow:hidden; pointer-events:none; contain:layout paint; }
.tw-scene[data-fx-stage="shoot"] .tw-reveal-player.shot-source::after,.tw-scene[data-fx-stage="shoot"] .tw-reveal-player.shot-target::before,.tw-scene[data-fx-stage="shoot"] .tw-reveal-player.shot-target::after { animation:none; opacity:0; }
.tw-scene[data-fx-stage="home-run"]::before,.tw-scene[data-fx-stage="home-run"]::after,.tw-scene[data-fx-stage="home-run"] .home-run-winner::before,.tw-scene[data-fx-stage="home-run"] .home-run-winner::after { animation:none; opacity:0; }
.tw-shot-muzzle { position:absolute; width:42px; height:42px; margin:-21px 0 0 -4px; transform:rotate(-9deg); filter:drop-shadow(0 0 7px #ff8b35); }
.tw-shot-muzzle::before,.tw-shot-muzzle::after,.tw-shot-muzzle i,.tw-shot-muzzle b { content:''; position:absolute; left:0; top:50%; display:block; transform-origin:left center; }
.tw-shot-muzzle::before { width:38px; height:12px; background:linear-gradient(90deg,#fffbd0,#ffc243 28%,#e94c2e 58%,transparent); clip-path:polygon(0 36%,74% 0,100% 50%,74% 100%); animation:tw-muzzle-core .32s ease-out both; }
.tw-shot-muzzle::after { width:20px; height:20px; margin:-10px 0 0 -2px; border-radius:50%; background:#fffce2; box-shadow:0 0 9px 5px #ffad42,0 0 23px 11px #ed542d88; animation:tw-muzzle-ring .4s ease-out both; }
.tw-shot-muzzle i { width:32px; height:2px; background:#fff0aa; box-shadow:0 0 6px #ff8a36; animation:tw-muzzle-ray .35s ease-out both; }
.tw-shot-muzzle i:first-child { --ray-angle:-36deg; }.tw-shot-muzzle b { --ray-angle:31deg; width:29px; height:2px; background:#ffe5a0; box-shadow:0 0 6px #ff8334; animation:tw-muzzle-ray .35s .03s ease-out both; }
.tw-shot-tracer { position:absolute; left:0; top:0; width:var(--distance); height:5px; margin:-2.5px 0 0 0; border-radius:99px; transform-origin:left center; transform:rotate(var(--angle)) scaleX(0); background:linear-gradient(90deg,#fff5b4 0 5%,#ffcc55 24%,#ee4a2c 70%,transparent); box-shadow:0 0 4px 1px #ffde70,0 0 12px 3px #e85c31aa; animation:tw-shot-flight .34s cubic-bezier(.22,.72,.27,1) both; }
.tw-shot-tracer::before { content:''; position:absolute; left:0; top:50%; width:12px; height:12px; margin:-6px 0 0 -2px; border-radius:50%; background:#fffbdc; box-shadow:0 0 8px 3px #fff0a2; }
.tw-shot-projectile { position:absolute; right:-2px; top:50%; width:12px; height:12px; margin:-6px -2px 0 0; border-radius:50%; background:#fffbdc; box-shadow:0 0 7px 3px #fff0a2,0 0 15px 4px #f26c37; }
.tw-shot-impact { position:absolute; width:54px; height:54px; margin:-27px 0 0 -27px; }
.tw-shot-hole { position:absolute; left:50%; top:50%; width:23px; height:23px; margin:-11.5px 0 0 -11.5px; border-radius:50%; background:radial-gradient(circle,#09070a 0 31%,#351821 32% 42%,#c26958 43% 48%,#3c1a22 49% 57%,transparent 58%); box-shadow:0 0 0 1px #f3a281aa,0 0 15px #e8573799; transform:scale(0); animation:tw-hole-pop .46s .18s cubic-bezier(.2,.8,.25,1) both; }
.tw-shot-crack { position:absolute; left:50%; top:50%; width:30px; height:2px; transform-origin:left center; background:linear-gradient(90deg,#f8c09a,#6c2731,transparent); opacity:0; animation:tw-crack-spread .5s .25s ease-out both; }
.tw-shot-crack.c1 { transform:rotate(18deg) scaleX(.9); }.tw-shot-crack.c2 { transform:rotate(137deg) scaleX(.8); }.tw-shot-crack.c3 { transform:rotate(258deg) scaleX(.75); }
.tw-shot-dust { position:absolute; left:50%; top:50%; width:8px; height:8px; margin:-4px; border-radius:50%; background:#efb276; box-shadow:14px -6px 0 1px #d78657,-15px 7px 0 0 #b96d53,7px 14px 0 0 #f0b46f,-11px -11px 0 0 #f2cb8e; animation:tw-dust-burst .6s .12s ease-out both; }
.tw-shot-caption { position:absolute; left:50%; top:13%; transform:translateX(-50%) scale(.7) rotate(-3deg); padding:7px 22px; border:2px solid #f6cb72; border-radius:5px; color:#fff4c6; background:linear-gradient(105deg,#61252beF,#a74b2feF 55%,#6d3028eF); box-shadow:0 0 0 3px #ed9c4938,0 7px 19px #120b0999, inset 0 0 14px #ffcf7133; font:900 clamp(20px,4vw,33px)/1 system-ui,sans-serif; letter-spacing:5px; opacity:0; animation:tw-shot-caption .9s .16s cubic-bezier(.2,.8,.25,1) both; }
.tw-home-ball { position:absolute; left:0; top:0; width:25px; height:25px; margin:-12.5px; border-radius:50%; background:radial-gradient(circle at 30% 28%,#fffbd1 0 7%,#ffe38b 8% 18%,#edaa44 35%,#b94832 72%,#5c1f2c 100%); box-shadow:0 0 0 2px #ffe7a555,0 0 12px 5px #ffb342,0 0 28px 10px #ed6b3a99; animation:tw-home-flight 1.45s cubic-bezier(.2,.78,.2,1) both; }
.tw-home-ball::before,.tw-home-ball::after { content:''; position:absolute; inset:-12px; border-radius:50%; border:2px solid #ffd47966; transform:rotate(26deg) scaleX(1.7); }
.tw-home-ball::after { inset:-21px; border-color:#ffce6550; transform:rotate(-16deg) scaleX(2.2); }
.tw-home-burst { position:absolute; left:0; top:0; width:160px; height:160px; margin:-80px; transform:scale(.2); opacity:0; animation:tw-home-burst .8s .74s cubic-bezier(.2,.8,.25,1) both; }
.tw-home-burst b { position:absolute; inset:31%; border-radius:50%; background:radial-gradient(circle,#fffbd7 0 12%,#ffc95a 13% 38%,#e76c35 39% 55%,transparent 56%); box-shadow:0 0 15px 8px #ffd365,0 0 44px 18px #ef763f88; }
.tw-home-burst i { position:absolute; left:50%; top:50%; width:73px; height:4px; margin:-2px 0 0 -36px; transform-origin:center; background:linear-gradient(90deg,transparent,#fff2a9,#f09040,transparent); box-shadow:0 0 8px #ffd269; }
.tw-home-burst i:nth-of-type(1) { transform:rotate(0); }.tw-home-burst i:nth-of-type(2) { transform:rotate(60deg); }.tw-home-burst i:nth-of-type(3) { transform:rotate(120deg); }
.tw-home-particle { position:absolute; left:0; top:0; width:6px; height:12px; margin:-3px -6px; border-radius:2px; background:#ffe58b; box-shadow:0 0 7px #f59f43; animation:tw-particle-pop .85s cubic-bezier(.2,.8,.25,1) both; }
.tw-home-particle:nth-of-type(3n) { width:4px; height:8px; background:#f78d59; }.tw-home-particle:nth-of-type(4n) { background:#fff3bc; }
.tw-home-title { position:absolute; left:50%; top:50%; display:flex; flex-direction:column; align-items:center; transform:translate(-50%,-50%) scale(.5) rotate(-5deg); padding:9px 25px 8px; border:2px solid #ffe393; border-radius:7px; background:linear-gradient(120deg,#6d292ff2,#c16c32f2 52%,#713027f2); box-shadow:0 0 0 4px #f7bd5a40,0 10px 28px #1b0c08bb, inset 0 0 17px #fff0a633; color:#fff4c8; opacity:0; animation:tw-home-title .92s .78s cubic-bezier(.2,.8,.25,1) both; }
.tw-home-title b { font:900 clamp(24px,5vw,42px)/1 system-ui,sans-serif; letter-spacing:7px; text-shadow:0 3px 0 #713020,0 0 12px #ffd76c; }.tw-home-title small { margin-top:5px; font:700 10px/1 system-ui,sans-serif; letter-spacing:4px; color:#ffe7a3; }
@keyframes tw-muzzle-core { 0% { opacity:0; transform:scaleX(.2); } 35% { opacity:1; transform:scaleX(1.15); } 100% { opacity:0; transform:scaleX(.55); } }
@keyframes tw-muzzle-ring { 0% { opacity:0; transform:scale(.2); } 25% { opacity:1; transform:scale(1.3); } 100% { opacity:0; transform:scale(.8); } }
@keyframes tw-muzzle-ray { 0% { opacity:0; transform:scaleX(.1) rotate(var(--ray-angle,0deg)); } 35% { opacity:1; transform:scaleX(1) rotate(var(--ray-angle,0deg)); } 100% { opacity:0; transform:scaleX(.3) rotate(var(--ray-angle,0deg)); } }
@keyframes tw-shot-flight { 0% { opacity:0; transform:rotate(var(--angle)) scaleX(0); } 15% { opacity:1; } 100% { opacity:0; transform:rotate(var(--angle)) scaleX(1); } }
@keyframes tw-hole-pop { 0% { opacity:0; transform:scale(0); } 45% { opacity:1; transform:scale(1.25); } 100% { opacity:1; transform:scale(1); } }
@keyframes tw-crack-spread { 0% { opacity:0; transform-origin:left center; scale:0; } 35% { opacity:1; scale:1; } 100% { opacity:.35; scale:1.15; } }
@keyframes tw-dust-burst { 0% { opacity:1; transform:scale(.2); } 100% { opacity:0; transform:scale(1.8); } }
@keyframes tw-bullet-hit { 0%,100% { transform:translateX(0); } 18% { transform:translateX(8px) rotate(.5deg); } 34% { transform:translateX(-7px) rotate(-.4deg); } 52% { transform:translateX(4px); } 70% { transform:translateX(-1px); } }
@keyframes tw-shot-caption { 0% { opacity:0; transform:translateX(-50%) scale(.55) rotate(-8deg); } 30% { opacity:1; transform:translateX(-50%) scale(1.12) rotate(1deg); } 70% { opacity:1; transform:translateX(-50%) scale(1) rotate(-1deg); } 100% { opacity:0; transform:translateX(-50%) scale(.98); } }
@keyframes tw-home-flight { 0% { opacity:0; transform:translate(0,0) scale(.25) rotate(-90deg); } 20% { opacity:1; } 50% { transform:translate(var(--mx),var(--my)) scale(1.05) rotate(360deg); } 100% { opacity:0; transform:translate(var(--ex),var(--ey)) scale(.45) rotate(780deg); } }
@keyframes tw-home-burst { 0% { opacity:0; transform:scale(.2) rotate(-20deg); } 30% { opacity:1; transform:scale(1.1) rotate(8deg); } 100% { opacity:0; transform:scale(1.35) rotate(18deg); } }
@keyframes tw-particle-pop { 0% { opacity:0; transform:translate(0,0) rotate(0) scale(.4); } 25% { opacity:1; } 100% { opacity:0; transform:translate(var(--tx),var(--ty)) rotate(var(--rot)) scale(1); } }
@keyframes tw-home-title { 0% { opacity:0; transform:translate(-50%,-50%) scale(.5) rotate(-8deg); } 28% { opacity:1; transform:translate(-50%,-50%) scale(1.12) rotate(2deg); } 72% { opacity:1; transform:translate(-50%,-50%) scale(1) rotate(-1deg); } 100% { opacity:0; transform:translate(-50%,-50%) scale(1.04); } }
@media (prefers-reduced-motion:reduce) { .tw-scene .tw-fx-layer * { animation:none !important; opacity:1 !important; }.tw-shot-tracer { transform:rotate(var(--angle)) scaleX(1); }.tw-home-ball { transform:translate(var(--mx),var(--my)); }.tw-home-title { transform:translate(-50%,-50%); } }
