/* A prototype: real WebGL felt/cards below the same accessible DOM controls. */
#app .single-table.gui-modern.gui-spatial{
 --spatial-far:172px;--spatial-own:170px;--spatial-hand:128px;
 position:relative;isolation:isolate;background:#071c16;background-image:none;
 width:100%;max-width:660px;height:max(760px,calc(100 * var(--ui-vh,1dvh)));min-height:760px;
 padding:6px 8px;gap:5px;
 grid-template-columns:minmax(0,1fr);grid-template-rows:32px 32px var(--spatial-far) minmax(174px,1fr) var(--spatial-own) var(--spatial-hand);
 border-radius:18px;box-shadow:0 8px 40px #0008;overflow:hidden;
}
.gui-spatial .spatial-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;border-radius:inherit}
#app .gui-spatial>.topbar,#app .gui-spatial .opponents,#app .gui-spatial .opponent,#app .gui-spatial .field-row,#app .gui-spatial .personal-zone,#app .gui-spatial .hand-zone,.gui-spatial .spatial-tools{position:relative;z-index:1}
#app .single-table.gui-modern.gui-spatial .topbar{grid-area:1/1/2/-1;background:#08251bd9;border:1px solid #ae924559;border-radius:10px;padding:0 5px;gap:6px}
#app .single-table.gui-modern.gui-spatial .topbar .wordmark{font-size:14px;padding:2px 5px}
#app .single-table.gui-modern.gui-spatial .topbar .round,#app .single-table.gui-modern.gui-spatial .top-stock{font-size:11px}
#app .single-table.gui-modern.gui-spatial .spatial-camera{font-size:10px;min-height:28px;padding:2px 5px;color:#f1d69b;border:1px solid #b5974a88;background:#17372a;border-radius:7px;white-space:nowrap}
.gui-spatial .spatial-tools{grid-area:2/1/3/-1;display:flex;align-items:center;justify-content:center;gap:4px;min-width:0;overflow-x:auto;scrollbar-width:thin;touch-action:pan-x}
#app .single-table.gui-modern.gui-spatial .spatial-tools button{font-size:11px;min-width:38px;min-height:30px;padding:4px 7px;background:#0d3026d9;border:1px solid #c7a85d77;border-radius:7px;color:#ecdbab;white-space:nowrap;flex:none}
.gui-spatial .spatial-tools button small{display:none}
#app .single-table.gui-modern.gui-spatial .opponents{grid-area:3/1/4/-1;display:grid;grid-template-columns:repeat(var(--players),minmax(0,1fr));gap:7px}
#app .single-table.gui-modern.gui-spatial .opponent[data-player-seat]{grid-area:auto;grid-template-rows:52px minmax(0,1fr);border:1px solid #be9d555c;border-radius:10px;background:#062a1f40;padding:3px;gap:2px;box-shadow:0 2px 8px #0003}
#app .single-table.gui-modern.gui-spatial .opponent.active{border-color:#e8c978;box-shadow:0 0 9px #e8c97855}
#app .single-table.gui-modern.gui-spatial .opponent .opponent-heading{min-height:50px;grid-template-columns:20px minmax(0,1fr) auto;grid-template-rows:15px 17px 18px;background:#08291f7a;border-radius:7px}
.gui-spatial .spatial-hidden-hand{grid-column:1/-1!important;grid-row:3!important;display:flex;justify-content:flex-end;gap:3px;min-height:16px}
.gui-spatial .spatial-back{display:block;width:10px;height:16px;background:#204459 url('../../assets/theme/card-back.png') center/cover;border:1px solid #8494a4;border-radius:1px}
.gui-spatial .spatial-back[data-scene-card=true]{opacity:0}
#app .single-table.gui-modern.gui-spatial .opponent-heading .player-crest{width:20px;height:20px}
#app .single-table.gui-modern.gui-spatial .opponent-heading .opponent-name{font-size:11px}
#app .single-table.gui-modern.gui-spatial .opponent-heading .hand-count{font-size:9px}
#app .single-table.gui-modern.gui-spatial .opponent-heading strong{font-size:16px}
#app .single-table.gui-modern.gui-spatial .opponent-heading strong small{font-size:8px}
#app .single-table.gui-modern.gui-spatial .opponent .opponent-paper{background:none;padding:0;gap:0;overflow:auto}
#app .single-table.gui-modern.gui-spatial .opponent .opponent-capture-content{grid-template-rows:0 minmax(0,1fr);min-height:124px;flex:1 0 124px;background:none}
#app .single-table.gui-modern.gui-spatial .opponent .capture-title{font-size:0;height:0;min-height:0;overflow:hidden}
#app .single-table.gui-modern.gui-spatial .public-hand:not(.public-hand-empty){min-height:49px;height:49px;background:none;grid-template-rows:12px 32px;margin-bottom:3px}
#app .single-table.gui-modern.gui-spatial .public-hand-cards .card{width:20px;min-width:20px;height:31px}
#app .single-table.gui-modern.gui-spatial .table-capture-row{grid-template-columns:32px minmax(0,1fr) 20px;border-bottom:1px solid #d4b25b33;min-height:28px}
#app .single-table.gui-modern.gui-spatial .table-capture-row .card{width:19px;min-width:19px;height:30px;flex:0 0 19px}
#app .single-table.gui-modern.gui-spatial .rank-label,#app .single-table.gui-modern.gui-spatial .row-count{color:#e3d29d;font-size:9px;text-shadow:0 1px 2px #000}
#app .single-table.gui-modern.gui-spatial .table-capture-row .capture-scroll{min-height:28px;align-items:center;background:none}
#app .single-table.gui-modern.gui-spatial .capture-empty{color:#a8bb9a}
#app .single-table.gui-modern.gui-spatial .field-row{grid-area:4/1/5/-1;padding:5px 4px;grid-template-columns:minmax(0,1fr) 48px;grid-template-rows:minmax(0,1fr) 14px;gap:4px}
#app .single-table.gui-modern.gui-spatial .table-zone{grid-column:1;background:none;border:1px solid #dbc27b30;border-radius:12px;padding:3px;box-shadow:none}
#app .single-table.gui-modern.gui-spatial .table-meta{color:#d5cb9e;font-size:10px;line-height:16px}
#app .single-table.gui-modern.gui-spatial .table-cards{--field-size:min(155px,calc((100cqh - 24px - (var(--spatial-rows,var(--modern-rows,2)) - 1)*8px)/var(--spatial-rows,var(--modern-rows,2))),calc((100cqw - 8px - (var(--spatial-cols,var(--modern-cols,3)) - 1)*8px)/var(--spatial-cols,var(--modern-cols,3))*112/72));gap:8px}
#app .single-table.gui-modern.gui-spatial .table-cards .card{height:var(--field-size);width:calc(var(--field-size)*72/112)}
#app .single-table.gui-modern.gui-spatial .action-rail{background:none;gap:6px}
#app .single-table.gui-modern.gui-spatial .draw-tray{background:none;max-width:100%;padding:3px}
#app .single-table.gui-modern.gui-spatial .draw-copy{background:#082a20bb;border-radius:4px;padding:1px}
#app .single-table.gui-modern.gui-spatial .last-move{font-size:9px;color:#cebf91}
#app .single-table.gui-modern.gui-spatial .personal-zone{grid-area:5/1/6/-1;grid-template-rows:28px minmax(0,1fr) 20px;gap:2px;padding:4px;border:1px solid #bda05b7a;background:#082a1f32;border-radius:10px;overflow:hidden}
#app .single-table.gui-modern.gui-spatial .own-heading{display:flex;flex-wrap:nowrap;min-height:28px;padding:0 4px;gap:6px;background:#092d2070;border-radius:7px}
#app .single-table.gui-modern.gui-spatial .own-heading button.own-name{font-size:13px;min-height:26px;padding:0;max-width:86px}
#app .single-table.gui-modern.gui-spatial .own-heading .own-score{font-size:20px;flex-wrap:nowrap;align-items:baseline;white-space:nowrap}
#app .single-table.gui-modern.gui-spatial .own-score small{font-size:9px}
#app .single-table.gui-modern.gui-spatial .own-capture-area{grid-area:2/1/3/-1;background:none}
#app .single-table.gui-modern.gui-spatial .yaku-paper{grid-area:3/1/4/-1;display:flex;overflow:hidden;padding:0;min-height:20px}
#app .single-table.gui-modern.gui-spatial .capture-yaku{height:20px;min-height:20px;padding:0;overflow-x:auto;flex:1}
#app .single-table.gui-modern.gui-spatial .yaku-chip{min-height:19px;font-size:10px;padding:1px 4px}
#app .single-table.gui-modern.gui-spatial .review-rail,#app .single-table.gui-modern.gui-spatial .personal-tools{display:none}
#app .single-table.gui-modern.gui-spatial .hand-zone{grid-area:6/1/7/-1;background:none;box-shadow:none;border:0;border-top:1px solid #c6ab5955;grid-template-rows:14px minmax(0,1fr) 34px;padding:2px;gap:3px}
#app .single-table.gui-modern.gui-spatial .hand-cards{padding:5px 3px;gap:4px;overflow:visible}
#app .single-table.gui-modern.gui-spatial .hand-title{font-size:11px;line-height:14px}
#app .single-table.gui-modern.gui-spatial .hand-controls{grid-template-columns:minmax(0,1fr) 104px;gap:6px}
#app .single-table.gui-modern.gui-spatial.left-handed .hand-controls{grid-template-columns:104px minmax(0,1fr)}
#app .single-table.gui-modern.gui-spatial .hand-prompt{font-size:11px;background:#0a291dbb;border:1px solid #d4b56c77;min-height:32px}
#app .single-table.gui-modern.gui-spatial .rail-actions button.primary{font-size:18px;min-height:32px}
#app .single-table.gui-modern.gui-spatial [data-scene-card=true] .card-solid{opacity:0}
#app .single-table.gui-modern.gui-spatial [data-scene-card=true]{background:none!important;box-shadow:none!important;border-color:transparent!important}
#app .single-table.gui-modern.gui-spatial .stock-pile[data-scene-card=true]{opacity:0}
.gui-spatial .spatial-notice{position:absolute;z-index:2;bottom:0;left:8px;pointer-events:none;margin:0;font:8px/10px system-ui;color:#dac285a1}
.gui-spatial[data-scene-status=fallback] .spatial-notice{background:#102d22;color:#f4e2b4;bottom:3px;font-size:10px;padding:3px;border:1px solid #a48c4b;border-radius:4px}
#app .single-table.gui-modern.gui-spatial.spectator-table{--spatial-own:36px;--spatial-hand:0px}
#app .single-table.gui-modern.gui-spatial.spectator-table .hand-zone{display:none}
#app .single-table.gui-modern.gui-spatial.spectator-table .opponents{grid-auto-flow:column;grid-template-columns:none;grid-auto-columns:minmax(180px,1fr);overflow-x:auto;scrollbar-width:thin}
#app .single-table.gui-modern.gui-spatial.spectator-table .personal-zone{grid-template-rows:1fr;min-height:32px}

@container app-viewport (orientation:landscape) and (min-width:600px){
 #app .single-table.gui-modern.gui-spatial{
  --spatial-hand:clamp(152px,calc(29 * var(--ui-vh,1dvh)),230px);
  max-width:2000px;min-height:380px;height:calc(100 * var(--ui-vh,1dvh));grid-template-columns:minmax(170px,24fr) minmax(200px,52fr) minmax(170px,24fr)!important;grid-template-rows:32px 32px minmax(0,1fr) var(--spatial-hand)!important;padding:5px 12px 8px;gap:4px 10px;
 }
 #app .single-table.gui-modern.gui-spatial .opponents{display:contents}
 #app .single-table.gui-modern.gui-spatial .opponent[data-player-seat]{grid-area:3/1/4/2;max-height:300px;align-self:start;height:100%;min-height:0;grid-template-rows:52px minmax(0,1fr)}
 #app .single-table.gui-modern.gui-spatial .opponent[data-player-seat]:nth-child(2){grid-area:3/3/4/4}
 #app .single-table.gui-modern.gui-spatial .field-row{grid-area:3/2/4/3;grid-template-columns:minmax(0,1fr) 48px;padding:4px 3px}
 #app .single-table.gui-modern.gui-spatial .personal-zone{grid-area:4/1/5/2;grid-template-rows:27px minmax(0,1fr) 18px;max-height:260px;align-self:start;height:100%;min-height:0}
 #app .single-table.gui-modern.gui-spatial .hand-zone{grid-area:4/2/5/3;grid-template-rows:14px minmax(0,1fr) 34px}
 #app .single-table.gui-modern.gui-spatial .table-cards{--spatial-cols:var(--landscape-cols);--spatial-rows:var(--landscape-rows);grid-template-columns:repeat(var(--landscape-cols),minmax(0,1fr));grid-template-rows:repeat(var(--landscape-rows),var(--field-size))}
 #app .single-table.gui-modern.gui-spatial .hand-cards{gap:5px;padding-inline:3px}
 #app .single-table.gui-modern.gui-spatial .hand-cards .card{max-width:100%;min-width:0}
 #app .single-table.gui-modern.gui-spatial .own-heading{gap:4px;padding:0}
 #app .single-table.gui-modern.gui-spatial .own-heading button.own-name{font-size:11px;max-width:68px}
 #app .single-table.gui-modern.gui-spatial .own-heading .own-score{font-size:16px}
 #app .single-table.gui-modern.gui-spatial .own-score small{font-size:8px}
 #app .single-table.gui-modern.gui-spatial .hand-controls{grid-template-columns:minmax(0,1fr) 100px}
 #app .single-table.gui-modern.gui-spatial.left-handed .hand-controls{grid-template-columns:100px minmax(0,1fr)}
 #app .single-table.gui-modern.gui-spatial .personal-zone .table-capture-row{min-height:23px}
 #app .single-table.gui-modern.gui-spatial .personal-zone .table-capture-row .card{width:16px;min-width:16px;height:25px;flex-basis:16px}
 #app .single-table.gui-modern.gui-spatial .personal-zone .table-capture-row .capture-scroll{min-height:23px}
 #app .single-table.gui-modern.gui-spatial.koikoi:not(.spectator-table) .opponent[data-player-seat]{grid-area:3/3/4/4}
 #app .single-table.gui-modern.gui-spatial.left-handed .personal-zone{grid-area:4/3/5/4}
 #app .single-table.gui-modern.gui-spatial.left-handed .opponent[data-player-seat]{grid-area:3/3/4/4}
 #app .single-table.gui-modern.gui-spatial.left-handed .opponent[data-player-seat]:nth-child(2){grid-area:3/1/4/2}
 #app .single-table.gui-modern.gui-spatial.koikoi.left-handed:not(.spectator-table) .opponent[data-player-seat]{grid-area:3/1/4/2}
 #app .single-table.gui-modern.gui-spatial.left-handed .field-row{grid-area:3/2/4/3;grid-template-columns:48px minmax(0,1fr)}
 #app .single-table.gui-modern.gui-spatial.left-handed .table-zone{grid-column:2}
 #app .single-table.gui-modern.gui-spatial.left-handed .hand-zone{grid-area:4/2/5/3}
 #app .single-table.gui-modern.gui-spatial.spectator-table{grid-template-rows:32px 32px minmax(140px,1fr) 38px!important}
 #app .single-table.gui-modern.gui-spatial.spectator-table .opponents{grid-area:3/1/4/-1;display:grid;grid-template-columns:repeat(var(--players),minmax(0,1fr));grid-auto-flow:row;align-content:start;gap:8px}
 #app .single-table.gui-modern.gui-spatial.spectator-table .opponent[data-player-seat]{grid-area:auto;height:122px;max-height:122px;opacity:.95}
 #app .single-table.gui-modern.gui-spatial.spectator-table .field-row{grid-area:3/1/4/-1;margin:126px 12% 0;min-height:100px}
 #app .single-table.gui-modern.gui-spatial.spectator-table .personal-zone{grid-area:4/1/5/-1;max-height:none}
}
@container app-viewport (orientation:landscape) and (min-height:650px){
 #app .single-table.gui-modern.gui-spatial .table-cards{--spatial-cols:var(--modern-cols);--spatial-rows:var(--modern-rows);grid-template-columns:repeat(var(--modern-cols),minmax(0,1fr));grid-template-rows:repeat(var(--modern-rows),var(--field-size))}
 #app .single-table.gui-modern.gui-spatial .table-capture-row .card{width:35px;min-width:35px;height:54px;flex-basis:35px}
 #app .single-table.gui-modern.gui-spatial .personal-zone .table-capture-row .card{width:28px;min-width:28px;height:44px;flex-basis:28px}
 #app .single-table.gui-modern.gui-spatial .table-capture-row{min-height:44px}
 #app .single-table.gui-modern.gui-spatial .opponent .opponent-capture-content{min-height:240px;flex-basis:240px}
}

/* World composition: buttons follow projected physical cards, not vice versa. */
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world]{display:block!important;padding:0;gap:0;border-radius:0;background:#211910;isolation:isolate}
#app .gui-spatial[data-scene-layout=world] :is(.table-arena,.opponents,.opponent,.opponent-paper,.opponent-capture-content,.table-captures,.table-capture-row,.capture-scroll,.personal-zone,.own-capture-area,.yaku-paper,.field-row,.table-cards,.hand-zone,.hand-cards,.hand-cards>div,.public-hand,.public-hand-cards,.draw-rest,.draw-tray,.action-rail){display:contents!important;position:static!important;transform:none!important;overflow:visible!important;contain:none!important;background:none!important;border:0!important;box-shadow:none!important}
#app .gui-spatial[data-scene-layout=world] :is(.public-hand-empty,[hidden]){display:none!important}
#app .gui-spatial[data-scene-layout=world] .topbar{position:absolute!important;inset:3px 5px auto;height:31px;z-index:500;background:#071e17e0;border-radius:8px;border-color:#aa88436b}
#app .gui-spatial[data-scene-layout=world] .spatial-tools{position:absolute!important;top:36px;left:8px;right:8px;height:32px;z-index:500;justify-content:flex-end;background:none}
#app .gui-spatial[data-scene-layout=world] .spatial-tools .capture-yaku{max-width:140px;flex:0 1 auto;min-height:25px;display:flex;align-items:center;gap:3px;background:#0c291dc9;border-radius:5px;padding:2px 5px;color:#d4bf83}
#app .gui-spatial[data-scene-layout=world] :is(.opponent-heading,.own-heading){z-index:300!important;display:flex!important;flex-wrap:nowrap;align-items:center;justify-content:center;gap:4px;min-height:0!important;padding:2px 5px!important;border:1px solid #ac8d4c82!important;border-radius:24px!important;background:#061c15d9!important;box-shadow:0 2px 6px #0005!important;overflow:visible!important;color:#f1dfb0}
#app .gui-spatial[data-scene-layout=world] .opponent-heading :is(.hand-count,.back-fan,.seat-role){display:none!important}
#app .gui-spatial[data-scene-layout=world] :is(.own-heading .own-score,.opponent-heading strong){font-size:15px!important;line-height:1;white-space:nowrap;flex:0 1 auto}
#app .gui-spatial[data-scene-layout=world] .own-heading :is(.own-name,.seat-role),#app .gui-spatial[data-scene-layout=world] .opponent-name{font-size:11px!important;line-height:1;white-space:nowrap}
#app .gui-spatial[data-scene-layout=world] .player-crest{width:23px!important;height:23px!important;flex:none}
#app .gui-spatial[data-scene-layout=world] .spatial-hidden-hand{display:contents!important}
#app .gui-spatial[data-scene-layout=world] .spatial-back{position:absolute;pointer-events:none;border:0;background-size:100% 100%}
#app .gui-spatial[data-scene-layout=world] .table-zone{position:absolute;background:none!important;box-shadow:none!important;border:0!important;border-radius:16px;padding:0!important;overflow:visible!important;z-index:2;container-type:normal}
#app .gui-spatial[data-scene-layout=world] .table-meta{position:absolute;z-index:300;display:flex;gap:8px;justify-content:center;align-items:center;white-space:nowrap;border-radius:16px;background:#09281ec9;color:#dfcea0;font-size:10px;padding:2px 5px;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] .card[data-spatial-world]{position:absolute!important;min-width:0!important;max-width:none!important;min-height:0!important;max-height:none!important;margin:0!important;padding:0!important;transform:none!important;aspect-ratio:auto!important;box-shadow:none!important;touch-action:none;overflow:visible;background:none!important;border:0!important;pointer-events:auto}
#app .gui-spatial[data-scene-layout=world] .card[data-spatial-world] .card-solid{width:100%;height:100%;transform:none!important;box-shadow:none}
#app .gui-spatial[data-scene-layout=world] [data-scene-card=true] .card-solid{opacity:0}
#app .gui-spatial[data-scene-layout=world] .rank-label{position:absolute;z-index:290!important;display:flex!important;gap:2px;align-items:center;justify-content:center;background:#0a291ed9;border:1px solid #a2844e4a;border-radius:5px;font-size:10px;line-height:1;color:#e0c994;text-shadow:0 1px 2px #000;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] .row-count{position:absolute;z-index:290!important;display:flex;align-items:center;justify-content:center;color:#e7d6a8;font-size:10px;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] :is(.row-points,.capture-empty,.capture-title:not(button),.hand-title,.hand-card-label:empty){display:none!important}
#app .gui-spatial[data-scene-layout=world] .hand-card-label{position:absolute;z-index:295;color:#f2dfa6;font-size:8px;background:#143e2ae8;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] .public-hand:not(.public-hand-empty)>span{position:absolute;z-index:295;background:#102e22df;color:#ead6a9;white-space:nowrap;font-size:9px;pointer-events:none;text-align:center}
#app .gui-spatial[data-scene-layout=world] .draw-copy{position:absolute;z-index:300!important;text-align:center;font-size:9px;line-height:1.2;background:#09281ee6;border:1px solid #b9974d80;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] .draw-copy small{display:none}
#app .gui-spatial[data-scene-layout=world] .draw-slot{position:absolute;z-index:250;overflow:visible!important;min-height:0;min-width:0;background:none!important;box-shadow:none;border:0}
#app .gui-spatial[data-scene-layout=world] .draw-rest>span,#app .gui-spatial[data-scene-layout=world] .draw-rest>strong{position:absolute;z-index:295;color:#e2cda1;pointer-events:none;text-align:center;font-size:10px}
#app .gui-spatial[data-scene-layout=world] .draw-rest>span{opacity:0}
#app .gui-spatial[data-scene-layout=world] .hand-controls{position:absolute!important;bottom:10px;right:10px;width:62%;height:34px;z-index:500;display:grid!important;grid-template-columns:minmax(0,1fr) 115px;gap:5px}
#app .gui-spatial[data-scene-layout=world].left-handed .hand-controls{left:10px;right:auto;grid-template-columns:115px minmax(0,1fr)}
#app .gui-spatial[data-scene-layout=world] .hand-prompt{font-size:11px;line-height:1.2;min-height:32px;padding:2px 6px;background:#0b241bdb}
#app .gui-spatial[data-scene-layout=world] .rail-actions button.primary{min-height:32px;font-size:17px}
#app .gui-spatial[data-scene-layout=world] .last-move{position:absolute;bottom:48px;left:31%;right:15px;z-index:300;font-size:9px;text-align:right;background:#0e2c1e99;pointer-events:none}
#app .gui-spatial[data-scene-layout=world] .spectator-info{display:contents}
#app .gui-spatial[data-scene-layout=world] .spectator-info h3{position:absolute;bottom:12px;left:15px;z-index:300;font-size:12px;color:#e5d3a1}
#app .gui-spatial[data-scene-layout=world] .capture-toggle{position:absolute;z-index:300;min-height:22px;padding:1px 5px;background:#112e20e6}
#app .gui-spatial[data-scene-layout=world] .spatial-notice{font-size:8px;bottom:0;left:5px}
@container app-viewport (orientation:portrait){
 #app .gui-spatial[data-scene-layout=world] .spatial-tools{justify-content:flex-start;top:37px;height:34px}
 #app .gui-spatial[data-scene-layout=world] .spatial-tools button{min-width:34px;padding:3px 5px;font-size:10px}
 #app .gui-spatial[data-scene-layout=world] .spatial-tools .capture-yaku{display:none}
 #app .gui-spatial[data-scene-layout=world] .hand-controls{left:6px;right:6px;width:auto;bottom:10px;grid-template-columns:minmax(0,1fr) 100px}
 #app .gui-spatial[data-scene-layout=world] :is(.own-heading .own-score,.opponent-heading strong){font-size:12px!important}
 #app .gui-spatial[data-scene-layout=world] .player-crest{width:19px!important;height:19px!important}
 #app .gui-spatial[data-scene-layout=world] .rank-label,#app .gui-spatial[data-scene-layout=world] .row-count{font-size:8px}
 #app .gui-spatial[data-scene-layout=world] .rank-points{display:none}
 #app .gui-spatial[data-scene-layout=world] .last-move{bottom:49px;left:8px;right:8px;font-size:8px}
}
#app .gui-spatial[data-scene-layout=world] .opponent-heading{display:grid!important;grid-template-columns:23px minmax(0,1fr) auto;grid-template-rows:15px 10px;gap:1px 3px}
#app .gui-spatial[data-scene-layout=world] .opponent-heading .player-crest{grid-area:1/1/3/2}
#app .gui-spatial[data-scene-layout=world] .opponent-heading .opponent-name{grid-area:1/2/2/3}
#app .gui-spatial[data-scene-layout=world] .opponent-heading strong{grid-area:1/3/2/4}
#app .gui-spatial[data-scene-layout=world] .opponent-heading .hand-count{display:block!important;grid-area:2/2/3/3;font-size:8px;line-height:1}
#app .gui-spatial[data-scene-layout=world] .opponent-heading .seat-role{display:block!important;grid-area:2/3/3/4;font-size:8px;line-height:1}
#app .gui-spatial[data-scene-layout=world] .opponent-heading .back-fan{display:none!important}
#app .gui-spatial[data-scene-layout=world] .own-heading .player-crest{display:block!important}
#app .gui-spatial[data-scene-layout=world] .last-move{min-height:0;padding:1px 3px;line-height:1.1}
@container app-viewport (orientation:portrait){
 #app .gui-spatial[data-scene-layout=world] .spatial-tools .capture-yaku{display:flex;max-width:110px;flex:none}
 #app .gui-spatial[data-scene-layout=world] .spatial-tools .capture-yaku:not(:has(button)){display:none}
}
#app .gui-spatial[data-scene-layout=world] [data-spatial-flight-hidden=true]{opacity:0!important;pointer-events:none!important}
#app .gui-spatial[data-scene-layout=world] .spatial-flight-hit{position:absolute;z-index:450;min-width:0;min-height:0;border:0;border-radius:0;background:none;box-shadow:none;padding:0;opacity:1}
@container app-viewport (max-width:480px){
 #app .gui-spatial[data-scene-layout=world] .topbar{gap:3px;flex-wrap:nowrap;padding:0 2px}
 #app .gui-spatial[data-scene-layout=world] .topbar .wordmark{font-size:11px;max-width:70px;padding:2px 3px;white-space:nowrap}
 #app .gui-spatial[data-scene-layout=world] .topbar .round{font-size:9px;white-space:nowrap}
 #app .gui-spatial[data-scene-layout=world] .topbar .spatial-camera{min-width:22px;padding:2px 3px;font-size:9px}
 #app .gui-spatial[data-scene-layout=world] .topbar .field-seal{font-size:10px;padding:2px 4px}
}
/* Counts aid hidden-card tracking; visible field/capture cards need no badges. */
#app .gui-spatial[data-scene-layout=world] :is(.row-count,.table-meta>span:not(.turn-label),.top-stock){display:none!important}
/* Keep the shared online chat launcher outside the projected action strip. */
body:has(.online-chat-dock) #app .gui-spatial[data-scene-layout=world] .hand-controls{right:76px;width:calc(62% - 66px)}
body:has(.online-chat-dock) #app .gui-spatial[data-scene-layout=world].left-handed .hand-controls{right:auto;width:62%}
@container app-viewport (orientation:portrait){
 body:has(.online-chat-dock) #app .gui-spatial[data-scene-layout=world] .hand-controls,
 body:has(.online-chat-dock) #app .gui-spatial[data-scene-layout=world].left-handed .hand-controls{left:6px;right:76px;width:auto}
}

/* Matching has one source of truth; no screen-space outline lingers above the GPU frame. */
#app .gui-spatial[data-scene-layout=world] .card[data-scene-card=true]{outline:0!important;transition:none!important}
#app .gui-spatial[data-scene-layout=world] .table-zone.drop-ready{border:0!important;box-shadow:none!important;outline:0!important}

/* Higher specificity than the legacy landscape heading grid; no implicit third row. */
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading{grid-template-columns:23px minmax(0,1fr) auto!important;grid-template-rows:14px 11px!important;align-content:center!important;justify-content:normal!important;gap:0 4px!important}
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading .player-crest{display:block!important;grid-area:1/1/3/2!important}
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading .opponent-name{grid-area:1/2/2/3!important;min-width:0;overflow:hidden;text-overflow:ellipsis}
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading strong{grid-area:1/3/2/4!important}
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading .hand-count{grid-area:2/2/3/3!important}
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .opponent-heading .seat-role{grid-area:2/2/3/4!important;justify-self:end;min-height:0!important;padding:0 3px!important;line-height:11px!important;font-size:8px!important}
#app .gui-spatial[data-scene-layout=world] .spatial-hand-count{position:absolute!important;display:flex!important;align-items:center;justify-content:center;z-index:295;font-size:9px;line-height:11px;white-space:normal;text-align:center;color:#f1dfb0;background:#061c1599;border-radius:5px;pointer-events:none;box-sizing:border-box}
#app .gui-spatial[data-scene-layout=world] .spatial-hand-count .back-fan{display:none!important}
/* History stays below the action row rather than across the nearest hand edges. */
#app .single-table.gui-modern.gui-spatial[data-scene-layout=world] .last-move{bottom:0;left:145px;right:5px;max-height:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0;font-size:8px;line-height:10px;background:none}

/* A fading SVG dash travels at constant distance per second on the label. */
.table-turn-orbit{display:none}
#app .gui-spatial[data-scene-layout=world] .table-turn-ring{border-color:#ffe69a!important;box-shadow:0 0 0 1px #ffdb6770,0 0 9px #f3c33e45!important}
#app .gui-spatial[data-scene-layout=world] .table-turn-orbit{display:block!important;position:absolute!important;inset:-4px!important;width:var(--orbit-width)!important;height:var(--orbit-height)!important;max-width:none!important;margin:0!important;transform:none!important;overflow:visible;pointer-events:none}
.table-turn-orbit rect{fill:none;stroke-width:2.5;stroke-dasharray:.94 99.06;stroke-dashoffset:var(--orbit-offset);pointer-events:none}
@media(prefers-reduced-motion:reduce){#app .gui-spatial[data-scene-layout=world] .table-turn-orbit{display:none!important}}
