/* Shared tablet presentation for X01 and Guided. No rules outside touch/tablet scope. */
@media (min-width:600px) and (max-width:1400px) and (pointer:coarse){
 html body{
  --x01-tablet-number:clamp(140px,20vw,220px);
  --x01-tablet-stat:clamp(34px,4.7vw,52px);
  --x01-tablet-label:clamp(14px,1.9vw,20px);
  --x01-tablet-key:clamp(52px,5.8dvh,76px);
  --x01-tablet-cyan:#65fff0;
  --x01-tablet-ink:#f8ffff;
  --x01-tablet-glow:0 0 16px rgba(101,255,240,.2);
 }
 /* Native X01: also used by CPU, Ghost and the competition iframe. */
 html body:has(#game:not(.hidden)){padding:0;overflow:auto}
 html body .desktopMenuBtn{position:static;transform:none;min-height:44px;margin:8px 12px;padding:8px 14px}
 html body .app:has(#game:not(.hidden)){width:100%;max-width:1400px;height:auto;min-height:100dvh;margin-inline:auto;padding:12px clamp(12px,2vw,24px) calc(12px + env(safe-area-inset-bottom))}
 html body:not(.game-over) #game:not(.hidden){display:grid;width:100%;height:auto;min-height:calc(100dvh - 24px - env(safe-area-inset-bottom));grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(min-content,1fr) auto;gap:12px}
 html body #game .matchHeader{grid-column:1;grid-row:1;min-height:clamp(72px,8dvh,100px);grid-template-columns:minmax(0,1fr) minmax(120px,24%) minmax(0,1fr)}
 html body #game .matchName{min-width:0;font-size:clamp(24px,3.7vw,38px);line-height:1.2;padding:10px 20px;white-space:normal;overflow-wrap:anywhere;color:var(--x01-tablet-ink)}
 html body #game .matchResult strong{font-size:clamp(44px,6vw,64px);line-height:1;color:var(--x01-tablet-ink)}
 html body #game .matchResult span{font-size:var(--x01-tablet-label)}
 html body:not(.game-over) #game .scoreStage{grid-column:1;grid-row:2;min-width:0;min-height:clamp(340px,calc(100dvh - 470px),730px)}
 html body #game .scoreStage .players{grid-template-columns:repeat(2,minmax(0,1fr));height:100%;gap:14px}
 html body #game .scoreStage .player{height:auto;min-width:0;min-height:340px;grid-template-rows:minmax(170px,1fr) auto auto;padding:clamp(12px,1.8dvh,22px);overflow:visible;background:#0a1c29;border-color:#47798a}
 html body #game .scoreStage .player.active{border-color:var(--x01-tablet-cyan);background:#0c2936;box-shadow:0 0 20px rgba(101,255,240,.16)}
 html body #game .scoreStage .remaining{font-size:var(--x01-tablet-number);color:var(--x01-tablet-ink);line-height:1.05;text-shadow:var(--x01-tablet-glow);font-weight:950;overflow-wrap:anywhere}
 html body #game .playerInfo{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:12px;padding:12px 0}
 html body #game :is(.lastVisit,.visitBlock,.playerStats) span{font-size:var(--x01-tablet-label);line-height:1.3;color:#d4e8ee;white-space:normal;overflow-wrap:anywhere}
 html body #game .lastVisit strong{min-height:58px;font-size:clamp(40px,6vw,64px);line-height:1.1;color:var(--x01-tablet-ink)}
 html body #game .scoreStage .historyRow{min-height:48px;font-size:clamp(24px,3.5vw,36px);line-height:1.2}
 html body #game .playerStats{grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);padding-top:10px}
 html body #game .playerStats strong,html body #game .playerStats :is(#d0,#d1){font-size:var(--x01-tablet-stat);line-height:1.15;color:var(--x01-tablet-ink)}
 html body #game .active :is(.lastVisit,.playerStats) strong{color:var(--x01-tablet-cyan);text-shadow:var(--x01-tablet-glow)}
 html body:not(.game-over) #game .gameControls{grid-column:1;grid-row:3;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:none;gap:8px;padding:12px;margin:0;min-width:0;border-color:#47798a}
 html body #game .checkoutGuide{grid-column:1;line-height:1.4;font-size:clamp(18px,2.5vw,26px);overflow-wrap:anywhere}
 html body #game .display{grid-column:1;grid-row:auto;height:clamp(54px,6dvh,78px);font-size:clamp(36px,5vw,52px);margin:0;color:var(--x01-tablet-ink)}
 html body #game .keyboardHint{display:none}
 html body #game .keypad{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(8px,1dvh,12px);margin:0}
 html body #game .key{height:var(--x01-tablet-key);font-size:clamp(28px,4vw,38px);color:var(--x01-tablet-ink);border-color:#47798a;background:#122e40}
 html body #game .key.submit{color:#001917;background:#65fff0;border-color:#aafff7}
 html body #game .footerActions{display:grid;grid-column:1;grid-row:auto;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}
 html body #game .footerActions button{min-height:48px;font-size:clamp(16px,2.1vw,22px);white-space:normal}
 html body #game .msg{grid-column:1;grid-row:auto;font-size:16px;line-height:1.35;margin:0}
 /* Guided adapter: one shared set of visual tokens, preserving its DOM/data. */
 html body:has(#match:not(.hidden)) #match{display:flex;flex-direction:column;gap:12px;padding:18px;margin-top:12px;min-height:calc(100dvh - 220px);border:1px solid var(--cyan);border-radius:18px;background:#0a1c29;overflow:visible}
 html body:has(#match:not(.hidden)) #match::before{display:block;background:var(--cyan)}
 html body:has(#match:not(.hidden)) #match .gxRail{min-height:72px;margin:0;grid-template-columns:minmax(0,1fr) minmax(120px,24%) minmax(0,1fr);border-color:var(--cyan)!important}
 html body:has(#match:not(.hidden)) #match .gxRailScore{border-color:var(--cyan)!important}
 html body:has(#match:not(.hidden)) #match .gxRailPlayer{font-size:clamp(22px,3.4vw,34px)}
 html body:has(#match:not(.hidden)) #match .scoreboard{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;flex:1}
 html body:has(#match:not(.hidden)) #match .player{height:auto;min-height:clamp(350px,40dvh,620px);padding:14px;min-width:0;background:#0a1c29;border-color:#47798a}
 html body:has(#match:not(.hidden)) #match .player.active{border-color:var(--x01-tablet-cyan);background:#0c2936}
 html body:has(#match:not(.hidden)) #match .player>strong{font-size:var(--x01-tablet-number);line-height:1.05;color:var(--x01-tablet-ink);text-shadow:var(--x01-tablet-glow)}
 html body:has(#match:not(.hidden)) #match :is(.gxVisitCell,.gxStatCell) span{font-size:var(--x01-tablet-label);line-height:1.3;white-space:normal;color:#d4e8ee}
 html body:has(#match:not(.hidden)) #match .gxLast{font-size:var(--x01-tablet-stat);color:var(--x01-tablet-cyan);text-shadow:var(--x01-tablet-glow)}
 html body:has(#match:not(.hidden)) #match .gxHistory{font-size:clamp(16px,2.4vw,26px);min-height:48px}
 html body:has(#match:not(.hidden)) #match .gxStatCell strong{font-size:var(--x01-tablet-stat);color:var(--x01-tablet-ink)}
 html body:has(#match:not(.hidden)) #match [data-entry-area]{display:block;grid-template-columns:none!important;margin-top:auto;padding:12px;border-color:var(--cyan)!important}
 html body:has(#match:not(.hidden)) #match .display{height:clamp(54px,6dvh,78px)!important;font-size:clamp(36px,5vw,52px)!important}
 html body:has(#match:not(.hidden)) #match .keypad{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:10px}
 html body:has(#match:not(.hidden)) #match .key{height:var(--x01-tablet-key);font-size:clamp(28px,4vw,38px)}
 html body:has(#match:not(.hidden)) #match .key.submit{font-size:clamp(28px,4vw,38px)}
 html body:has(#match:not(.hidden)) #match .key.submit::after{content:none}
 /* Checkout overlays and results stay readable; vertical scroll is a fallback. */
 html body :is(#checkoutModal,#doubleAttemptsModal,#dartModal,#doubleModal,#cpuThrowModal,#legBreakModal){padding:18px;overflow:auto;align-items:safe center}
 html body :is(#checkoutModal,#doubleAttemptsModal,#dartModal,#doubleModal,#cpuThrowModal) .modalBox{width:min(700px,100%);max-height:calc(100dvh - 36px);overflow:auto;padding:clamp(22px,3vw,34px);border:2px solid #37ddd3;border-top-color:#37ddd3;box-shadow:0 24px 70px rgba(0,0,0,.6)}
 html body :is(#checkoutModal,#doubleAttemptsModal,#dartModal,#doubleModal,#cpuThrowModal) .modalBox h2{font-size:clamp(28px,4vw,40px);color:var(--x01-tablet-ink)}
 html body :is(#checkoutModal,#doubleAttemptsModal,#dartModal,#doubleModal,#cpuThrowModal) .modalBox p{font-size:clamp(20px,2.7vw,28px);line-height:1.4;color:#d4e8ee}
 html body :is(.dartChoices,.choices) button{min-height:72px;font-size:clamp(22px,3vw,32px)}
 html body .cpuDart strong{font-size:clamp(46px,7vw,68px);color:var(--x01-tablet-ink);text-shadow:var(--x01-tablet-glow)}
 html body .cpuDart{min-height:110px}
 html body .legBreakBox{max-height:calc(100dvh - 36px);overflow:auto}
 html body.game-over .app:has(#game:not(.hidden)){height:auto;min-height:100dvh}
 html body.game-over #game:not(.hidden){display:grid;width:100%;height:auto;min-height:calc(100dvh - 24px);grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;gap:12px;margin-inline:auto}
 html body.game-over #game .summary.final{display:flex;flex-direction:column;width:100%;height:auto;min-height:calc(100dvh - 140px);margin:0;padding:18px;gap:12px;overflow:visible}
 html body.game-over .summary.final .winnerBanner{min-height:72px;margin:0;padding:12px}
 html body.game-over .summary.final .winnerBanner b{font-size:clamp(30px,4.5vw,46px);line-height:1.2;overflow-wrap:anywhere}
 html body.game-over .summary.final .summaryTitle{font-size:clamp(26px,3.8vw,38px);margin:0}
 html body.game-over .finalCompare{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-width:0}
 html body.game-over .finalPlayer{height:auto;min-height:0;min-width:0;padding:14px;overflow:visible}
 html body.game-over .finalPlayerName{font-size:clamp(24px,3.4vw,36px);overflow-wrap:anywhere}
 html body.game-over .finalStat{min-height:58px;gap:10px;padding:10px 0}
 html body.game-over .finalStat span{font-size:clamp(15px,2vw,21px);color:#d4e8ee;overflow-wrap:anywhere}
 html body.game-over .finalStat strong{font-size:clamp(26px,3.7vw,40px);color:var(--x01-tablet-cyan)}
 html body.game-over .cpuFinalStats{width:100%;font-size:18px;line-height:1.4;overflow-wrap:anywhere}
 html body.game-over .finalActions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}
 html body.game-over :is(.rematchBtn,.changeConfigBtn){min-height:64px;padding:10px;font-size:clamp(20px,2.7vw,30px);white-space:normal}
 html body.game-over .finalHistory{min-height:48px;font-size:20px;margin:0}
 /* The competition wrapper gives the final iframe its own scrollable viewport. */
 html:has(#board),html body:has(#board){height:auto;min-height:100dvh;overflow:auto}
 html body #board{height:100dvh}
 html body.finalized #board{height:calc(100dvh - 104px - env(safe-area-inset-bottom))}
}
@media (min-width:600px) and (max-width:1400px) and (pointer:coarse) and (orientation:landscape) and (min-width:900px){
 html body{--x01-tablet-number:clamp(118px,15vw,200px);--x01-tablet-stat:clamp(30px,3.8vw,44px);--x01-tablet-key:clamp(48px,7.2dvh,64px)}
 html body:not(.game-over) #game:not(.hidden){grid-template-columns:minmax(0,1fr) minmax(280px,31%);grid-template-rows:auto minmax(min-content,1fr);gap:12px}
 html body #game .matchHeader{grid-column:1/-1;min-height:68px}
 html body:not(.game-over) #game .scoreStage{grid-column:1;grid-row:2;min-height:calc(100dvh - 116px)}
 html body:not(.game-over) #game .gameControls{grid-column:2;grid-row:2;align-content:center}
 html body #game .scoreStage .player{min-height:340px;padding:12px;grid-template-rows:minmax(132px,1fr) auto auto}
 html body #game .playerInfo{grid-template-columns:minmax(0,1fr);padding:8px 0;gap:8px}
 html body #game .lastVisit{border-right:0}
 html body #game .lastVisit strong{min-height:42px;font-size:42px}
 html body #game .scoreStage .historyRow{min-height:40px;font-size:24px}
 html body #game .footerActions{grid-template-columns:minmax(0,1fr);gap:8px}
 html body:has(#match:not(.hidden)) #match{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,31%);align-content:stretch;gap:12px 16px}
 html body:has(#match:not(.hidden)) #match .gxRail{grid-column:1/-1}
 html body:has(#match:not(.hidden)) #match .scoreboard{grid-column:1;grid-row:2}
 html body:has(#match:not(.hidden)) #match .player{min-height:340px;padding:12px}
 html body:has(#match:not(.hidden)) #match [data-entry-area]{grid-column:2;grid-row:2;margin:0;align-self:center}
 html body.game-over .finalStat{min-height:48px;padding:7px 0}
}
