html,body{height:auto;min-height:100%;overflow:auto}
body{min-height:100dvh}
button,input,a,[role=button]{touch-action:manipulation}
button:focus-visible,a:focus-visible,input:focus-visible,[role=button]:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
button:disabled{cursor:wait;opacity:.7}
#screen-setup{padding:32px 12px 24px;min-height:calc(100dvh - 60px);gap:18px}
.setup-card{width:600px;padding:26px 30px}
.player-row input{min-width:0}
.char-select{flex-shrink:0}
.num-btn{min-width:44px}
.resume-button{display:block;width:100%;margin-top:20px;background:var(--panel2);border:1px solid var(--gold2);color:var(--gold)}
.setup-practice-note{font-size:.85rem;color:var(--dim);line-height:1.5;margin-top:15px}
.game-links{display:flex;gap:20px;justify-content:flex-end;padding:10px 18px;font-size:.82rem;min-height:36px}
.game-links a,.rules-back a{color:var(--gold);text-underline-offset:3px}
#screen-game{height:calc(100dvh - 68px);min-height:620px}
#hbar{min-width:0;flex-wrap:wrap;gap:8px}
#hbar .turn-info{min-width:150px;font-size:.8rem}
#hbar .logo{font-size:.85rem}
#card-area{overflow:auto;min-width:0;justify-content:flex-start;padding-top:18px}
#card-grid{grid-template-rows:none;grid-auto-rows:auto;flex-shrink:0}
#diff-selector{flex-wrap:wrap;justify-content:center;gap:8px}
#diff-result{margin-left:0!important}
#card-hint{font-size:.65rem!important;text-align:center;line-height:1.6}
.card-front-num{color:#a0a0c0;font-size:.65rem}
.card-eff-name{font-size:.52rem}
.ps-name{overflow-wrap:anywhere}
#game-log{max-height:420px}
.steal-opt{width:100%;color:var(--text);font-family:inherit;font-size:1rem;text-align:left}
.modal-overlay{padding:18px;overflow:auto;align-items:center}
.modal-box{max-height:calc(100dvh - 36px);overflow-y:auto;padding:26px}
.q-text{font-size:1.05rem;overflow-wrap:anywhere}
.q-opt{min-height:48px}
.save-status{padding:8px 14px;color:var(--dim);font-size:.75rem;line-height:1.4;min-height:30px;text-align:center}
.no-script{padding:20px;text-align:center;color:var(--gold)}
.rules-page{background:radial-gradient(ellipse at top,#1a0a3a 0%,#080818 70%)}
.rules-content{max-width:780px;margin:0 auto;padding:52px 24px 80px;line-height:1.8;font-size:1.1rem}
.rules-eyebrow{font-family:'Cinzel',serif;letter-spacing:2px;color:var(--dim);font-size:.72rem}
.rules-content h1{font-family:'Cinzel',serif;font-size:2.8rem;line-height:1.3;color:var(--gold);margin:14px 0 20px}
.rules-content h2{font-family:'Cinzel',serif;font-size:1.15rem;color:var(--gold);margin:28px 0 12px}
.rules-content p{margin-bottom:14px}.rules-content ol{padding-left:24px}.rules-content li{margin:14px 0}
.rules-play{display:inline-block;text-decoration:none;margin-top:20px}.rules-back{font-size:.9rem;margin-top:25px}
@media(max-width:1100px){#screen-game{grid-template-columns:140px minmax(0,1fr) 200px}.ps-card{padding:9px}.ps-name{font-size:.75rem}.ps-score{font-size:1rem}.card-front-icon{font-size:1.2rem}}
@media(max-width:900px){
 #screen-game{height:auto;grid-template-columns:90px minmax(0,1fr);grid-template-rows:minmax(58px,auto) auto auto;min-height:calc(100dvh - 68px)}
 #tower-panel{grid-column:1;grid-row:2;min-height:540px}
 #card-area{grid-column:2;grid-row:2;overflow:visible;justify-content:flex-start;padding:14px 10px;gap:12px}
 #score-panel{grid-column:1/-1;grid-row:3;border-top:1px solid #22224a;overflow:visible}
 #player-scores{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
 #game-log{max-height:180px}.card-eff-icon{font-size:1.4rem}
 #card-grid{grid-template-columns:repeat(8,minmax(0,1fr));gap:5px}
 #hbar{padding:10px}.modal-box{padding:22px}
}
@media(max-width:640px){
 #screen-setup{padding-top:20px}.setup-title{font-size:2.1rem;letter-spacing:2px}.setup-subtitle{font-size:.72rem;letter-spacing:1.5px}
 .setup-card{padding:20px 18px}.setup-card h2{font-size:.9rem;line-height:1.6;margin-bottom:12px}
 .player-row{flex-wrap:wrap;gap:8px}.player-row span{width:65px}.player-row input{flex:1;min-width:120px}
 .char-select{margin-left:73px}.char-btn{width:42px;height:42px}.btn-start{font-size:.9rem;letter-spacing:1px}
 .num-players{gap:6px}.num-btn{padding:8px;min-height:44px}
 #screen-game{grid-template-columns:70px minmax(0,1fr)}
 #hbar .logo{font-size:.72rem;letter-spacing:1px}#hbar .turn-info{text-align:right;font-size:.72rem;flex-basis:60%}
 #hbar .phase-tag{font-size:.65rem;letter-spacing:1px}.game-links{font-size:.75rem;padding:8px 12px}
 #card-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:5px}.card-front-icon{font-size:1.1rem}.card-eff-icon{font-size:1rem}.card-eff-name{font-size:.43rem}
 #diff-spin{padding:9px 10px!important;font-size:.7rem!important;letter-spacing:1px!important}#diff-result{font-size:.7rem!important}
 #tower-panel>div:first-child{font-size:.55rem!important;letter-spacing:1px!important;padding:10px 5px!important}
 #player-scores{grid-template-columns:repeat(2,minmax(0,1fr))}.ps-avatar{font-size:1.2rem}.ps-stage{font-size:.7rem}
 .modal-overlay{padding:10px}.modal-box{padding:20px 16px;width:100%;max-height:calc(100dvh - 20px)}
 .modal-title{font-size:1.12rem}.q-opt{font-size:.94rem;padding:10px}.q-text{font-size:1rem;margin-bottom:16px}.effect-icon{font-size:3rem}.effect-desc{font-size:1rem}
 .rules-content{padding-top:30px;font-size:1rem}.rules-content h1{font-size:2rem}
}
@media(max-width:430px){#card-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.card-front-icon{font-size:1.3rem}.card-eff-icon{font-size:1.35rem}.card-eff-name{font-size:.5rem}.char-select{margin-left:0}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* Safe areas and unbroken player names must not obscure touch controls. */
body{padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
.modal-overlay{padding-top:max(18px,env(safe-area-inset-top,0px));padding-bottom:max(18px,env(safe-area-inset-bottom,0px));padding-left:max(10px,env(safe-area-inset-left,0px));padding-right:max(10px,env(safe-area-inset-right,0px))}
.modal-box{max-height:calc(100dvh - max(18px,env(safe-area-inset-top,0px)) - max(18px,env(safe-area-inset-bottom,0px)))}
.fs-row{min-width:0;gap:8px;flex-wrap:wrap}
.fs-name{min-width:0;flex:1 1 100px;overflow-wrap:anywhere}
.winner-name{min-width:0;overflow-wrap:anywhere}
.steal-opt{min-width:0;gap:10px}
.steal-opt span:first-child{min-width:0;flex:1;overflow-wrap:anywhere}
@media(min-width:901px){#screen-game{height:calc(100dvh - 68px - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px))}}
