/* Small local controls; the board, market, cards and dialogs use upstream CSS. */
/* BGA tutorial 1132: original wooden meeple atlas, no raster recropping.
   Each tile is 339 x 323 within the 718 x 686 atlas, with a 10px inset. */
[style*="explorer_red.png"],img[src*="/explorer_red.png"]{--meeple-x:97.3614776%;--meeple-y:2.7548209%}
[style*="explorer_blue.png"],img[src*="/explorer_blue.png"]{--meeple-x:97.3614776%;--meeple-y:97.2451791%}
[style*="explorer_green.png"],img[src*="/explorer_green.png"]{--meeple-x:2.6385224%;--meeple-y:2.7548209%}
[style*="explorer_yellow.png"],img[src*="/explorer_yellow.png"]{--meeple-x:2.6385224%;--meeple-y:97.2451791%}
[style*="/tokens/explorer/explorer_"],img[src*="/tokens/explorer/explorer_"]{
 background-image:url('/local-web/bga/meeple2_sprite.webp')!important;
 background-size:211.7994100% 212.3839009%!important;
 background-position:var(--meeple-x) var(--meeple-y)!important;
 background-repeat:no-repeat!important;
 background-color:transparent!important;
 border:0!important;border-radius:0!important;padding:0!important;
 filter:none!important;box-shadow:none!important;
}
img[src*="/tokens/explorer/explorer_"]{object-fit:none!important;object-position:10000px 10000px!important}
/* Large, unboxed numbers remain proportional to the deck at every board scale. */
.deck,.deck-area{container-type:inline-size}
.deck .deck-count-badge,.deck-area .pile-count-badge{
 inset:0!important;display:grid;place-items:center;
 width:auto;min-width:0;padding:0!important;border-radius:0;
 background:transparent!important;color:#ffebcd!important;
 font:700 clamp(18px,65cqw,72px)/1 Arial,sans-serif!important;
 text-shadow:2px 2px 1px #000,-1px -1px 1px #000;
 pointer-events:none;z-index:5;
}
.local-dock button,.local-choice button{border:1px solid #7777;border-radius:6px;padding:9px 15px;cursor:pointer;background:#303047;color:#fff;font:inherit}.local-dock{position:fixed;bottom:10px;right:12px;z-index:9000;max-width:min(450px,94vw);color:#eee;background:#19192cef;border:1px solid #d3ad53;border-radius:10px;box-shadow:0 8px 30px #0009;font:13px system-ui;padding:9px;max-height:72vh;overflow:auto}.local-dock summary{cursor:pointer;padding:4px}.local-dock .toolbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.local-dock small{color:#c5c0d3}.local-actions{display:grid;gap:6px;margin-top:8px}.local-actions button{text-align:left}.local-choice{position:fixed;inset:0;z-index:20000;display:grid;place-items:center;background:#0008;color:#eee;font:15px system-ui}.local-choice>section{background:#1a1a2e;border:1px solid #b99c51;border-radius:14px;padding:24px;max-width:740px;width:86vw;max-height:78vh;overflow:auto;box-shadow:0 20px 100px #0009}.local-choice h2{margin:0 0 12px}.local-choice button{display:block;text-align:left;width:100%;margin:8px 0;line-height:1.6}.local-choice button:hover,.local-actions button:hover{border-color:#ffd65b;background:#3a354a}.local-choice .hint{color:#b8b4c5;font-size:13px}.local-dock input[type=range]{width:100%}.local-error{color:#ffbaad;white-space:pre-wrap}.local-disabled{opacity:.5;pointer-events:none}

/* Home: the cover art under a warm vignette, with the same parchment, ink and
   brass as the game table and its dialogs. */
.local-home{--home-ink:#493e2b;--home-muted:#756b55;--home-line:#c8ba98;--home-title:#7a5418;margin:0;min-height:100vh;color:var(--home-ink);font:16px "Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif;background:linear-gradient(180deg,rgba(36,24,15,.45),rgba(36,24,15,.78)),url('/assets/board/narak_cover_en.jpg') center/cover fixed #2a1d12}
/* A framed document: fibre texture, browned edges, and an inner brass hairline
   inset from a dark outer edge. */
.home-panel{position:relative;width:min(720px,90vw);margin:36px auto;padding:32px;box-sizing:border-box;background:url('/local-web/parchment.webp') 0 0/600px 600px #f4ecd8;border:1px solid #6f5634;border-radius:12px;outline:1px solid #b8975566;outline-offset:-9px;box-shadow:inset 0 0 0 1px #fffaf0aa,inset 0 0 60px #9c7f4a59,inset 0 0 14px #7a5c2f40,0 0 0 1px #2a1d1266,0 22px 60px #120a04b3}
.local-logo{display:block;max-width:320px;width:80%;margin:auto;filter:drop-shadow(0 4px 5px #3a2a1d66)}
/* Title flanked by brass rules, like a chapter heading in the rulebook. */
.home-panel h1{display:flex;align-items:center;gap:14px;color:var(--home-title);letter-spacing:.12em;font-weight:700;text-shadow:0 1px 0 #fffaf0}
.home-panel h1::before,.home-panel h1::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,#b48b3c);box-shadow:0 1px 0 #fffaf0}
.home-panel h1::after{background:linear-gradient(270deg,transparent,#b48b3c)}
.home-panel p{line-height:1.7}
.home-panel form{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.home-panel label{display:grid;gap:8px;color:var(--home-muted);font-size:14px}
.home-panel input,.home-panel select{padding:12px;border:1px solid #b9a77f;border-radius:7px;background:#fffaf0;color:var(--home-ink);min-width:0;font:inherit;box-shadow:inset 0 1px 3px #6d532a2e}
.home-panel input::placeholder{color:#a39778}
.home-panel :is(input,select):focus{outline:none;border-color:#c9962e;box-shadow:0 0 0 3px #d9a93f40}
.home-panel button{border:1px solid #b6ab8e;border-radius:6px;padding:9px 15px;cursor:pointer;background:linear-gradient(180deg,#fffaf0,#efe5cd);color:var(--home-ink);font:inherit;box-shadow:inset 0 1px 0 #fff,0 1px 2px #5a43262e;transition:background-color 120ms ease,border-color 120ms ease}
.home-panel button:hover:not(:disabled){background:linear-gradient(180deg,#fffaf0,#e6d9b8);border-color:#9c8f6e}
.home-panel button:active:not(:disabled){background:#e6d9b8;box-shadow:inset 0 1px 3px #5a432640}
.home-panel button:focus-visible{outline:2px solid #c9962e;outline-offset:2px}
/* The same brass bar as the in-game end-turn button. */
.home-panel .gold{grid-column:1/-1;padding:12px 15px;font-size:17px;letter-spacing:.12em;background:linear-gradient(180deg,#f7d97a,#e0ad43 48%,#c9922c 52%,#d9a440);border:1px solid #8a6522;color:#2e2213;font-weight:700;text-shadow:0 1px 0 #fff6;box-shadow:inset 0 1px 0 #fff8,inset 0 -1px 0 #0003,0 2px 6px #5a432666}
.home-panel .gold:hover:not(:disabled){background:linear-gradient(180deg,#fbe394,#e8b84f 48%,#d39c33 52%,#e2ae4a);border-color:#8a6522}
.home-panel .gold:active:not(:disabled){background:linear-gradient(180deg,#c9922c,#e0ad43);box-shadow:inset 0 2px 3px #0005}
.home-panel .gold:disabled{opacity:.6;cursor:wait}
.local-note{font-size:13px;color:var(--home-muted)}
/* Each save is a parchment slip; the left edge marks its phase. */
.saved{display:flex;gap:10px;align-items:center;margin-bottom:10px;padding:12px 14px;background:linear-gradient(180deg,#fffcf4,#f8efdb);border:1px solid #d3c5a5;border-left:4px solid #697447;border-radius:4px 8px 8px 4px;box-shadow:0 1px 0 #fff inset,0 2px 4px #5a432624;transition:box-shadow 120ms ease}
.saved:hover{box-shadow:0 1px 0 #fff inset,0 4px 10px #5a432638}
.saved[data-phase="terminal"]{border-left-color:#a39778}
.saved[data-phase="lobby"]{border-left-color:#d9a93f}
.saved[data-phase="error"]{border-left-color:#a44632}
.saved>div{flex:1}
.saved small{display:block;color:var(--home-muted);margin-top:5px}
.saved a{color:var(--home-title)}
.home-panel>.local-language{color:var(--home-muted)}
.home-panel>.local-language select{background:#fffaf0;color:var(--home-ink);border:1px solid var(--home-line);border-radius:6px}
@media(max-width:600px){.home-panel{padding:20px}.home-panel form{grid-template-columns:1fr}.saved{flex-wrap:wrap}}

/* Home: create on the left, saved games on the right with their own scroll. */
.home-layout{display:grid;grid-template-columns:minmax(320px,440px) minmax(0,1fr);gap:24px;width:min(1240px,100%);height:100vh;margin:0 auto;padding:28px;box-sizing:border-box}
.home-layout>.home-panel{width:auto;margin:0;min-height:0}
.home-create{overflow-y:auto;scrollbar-color:#c8ba98 transparent}
.home-games{display:flex;flex-direction:column}
.home-games h2{margin:0 0 4px;color:var(--home-title);letter-spacing:.08em;font-weight:700;text-shadow:0 1px 0 #fffaf0}
.home-games-heading{padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid #b48b3c80;box-shadow:0 1px 0 #fffaf0}
.home-games #error{margin:0;color:#a44632}
.home-games #history{flex:1;min-height:0;overflow-y:auto;padding-right:8px;scrollbar-color:#c8ba98 transparent}
.home-panel label.wide{grid-column:1/-1}
/* Fixed control heights and top-aligned labels: a longer translation never resizes a field. */
.home-panel form label{align-content:start;white-space:nowrap}
.home-panel form input,.home-panel form select{height:44px;box-sizing:border-box;text-overflow:ellipsis}
.saved small{margin-top:3px}
.home-panel form{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.saved-actions button{padding:9px 4px;text-align:center}
/* Info keeps a readable width; on a narrow list the buttons wrap below it instead. */
.saved{flex-wrap:wrap}
.saved>.saved-info{flex:1 1 220px;min-width:0}
.saved strong{color:var(--home-ink);font-weight:600}
.saved strong+span{color:var(--home-muted)}
/* Equal-width buttons, so button text length never changes the info column. */
.saved>.saved-actions{flex:0 0 auto;margin-left:auto;display:grid;grid-auto-flow:column;grid-auto-columns:84px;gap:6px;align-items:center}
/* Continue/view is the row's main action: a quiet brass tint, not a second gold bar. */
.saved-actions button:first-child{background:#f3dfa4;border-color:#c9a24f;color:#4a3410;font-weight:600}
.saved-actions button:first-child:hover:not(:disabled){background:#efd389;border-color:#b38a2e}
.home-panel .danger{background:transparent;border-color:#c98a7c;color:#a44632}
.home-panel .danger:hover:not(:disabled){background:#a446321a;border-color:#a44632}
@media(max-width:600px){.home-panel form{grid-template-columns:minmax(0,1fr)}}
@media(max-width:860px){.home-layout{grid-template-columns:1fr;height:auto;padding:16px}.home-games #history{overflow:visible}}

/* Online-only controls are replaced by local save/export and AI settings. */
.game-header .room-code{display:none!important}
.ai-diff-group,[data-testid="action-bug-report"],[data-testid="floating-bug-report"]{display:none!important}
body.local-playing .player-score-display{display:none!important}
body.local-replay .hand-card,body.local-replay .archaeologist-pawn,body.local-replay .research-token{pointer-events:none!important}
body.local-replay .action-btn:not(.home):not(.fullscreen):not(.local-keep){display:none!important}

/* In-game local controls are inserted into the archived header by bridge.js. */
.local-header-slot{display:contents}
.game-header .local-info{position:relative}
.game-header .local-info.active{border-color:#d3ad53;background:#d3ad5333}
.local-badge{position:absolute;top:-6px;right:-6px;min-width:16px;height:16px;padding:0 4px;box-sizing:border-box;border-radius:8px;background:#e6a72e;color:#27200f;font:700 10px/16px system-ui;text-align:center}
/* The archived client's AI banner keeps its look but floats at the bottom: as a sticky top
   bar it pushed the whole board down for every AI turn. Clicks pass through to the board. */
.game .ai-thinking-banner[data-testid]{position:fixed;top:auto;bottom:18px;left:50%;transform:translateX(-50%);z-index:9600;min-width:min(420px,calc(100vw - 32px));max-width:calc(100vw - 32px);box-sizing:border-box;padding:12px 28px;border:1px solid #ffffff59;border-radius:999px;font-size:1.05rem;box-shadow:0 10px 32px #0009,0 0 24px #6a6ad866;pointer-events:none}
.local-replay-frame{color:#eee;font:12px system-ui;white-space:nowrap}
.local-replay-range{width:clamp(80px,12vw,180px);accent-color:#e6a72e}
.local-dock.local-panel{top:52px;bottom:auto;display:none}
.local-dock.local-panel.is-open{display:block}
.local-dock .local-panel-close{float:right;margin:-4px -4px 4px 8px;padding:0 8px;border:0;background:none;font-size:18px;line-height:1.4}

/* The local server runs beside the page, so "connected" says nothing; only a lost link is shown. */
.connection-status.connected{display:none!important}

/* Lobby: Missing Expedition choices are inserted into the native config grid by bridge.js. */
.lobby-header .room-info{display:none!important}
.local-track-grid{grid-template-columns:repeat(3,1fr)}
.local-track-thumb{position:relative;background-position:center 35%}
.local-track-group .char-no-image{border-radius:6px;font-size:1.6rem}
.character-player-row .char-grid.grid-7:has(.local-card){grid-template-columns:repeat(auto-fill,minmax(84px,1fr))}
.local-emblem{position:absolute;top:0;left:50%;height:100%;aspect-ratio:1;transform:translateX(-50%);display:grid;place-items:center;border-radius:50%;font-size:1.3rem;background:radial-gradient(circle at 35% 30%,#e9b95c,#a8682a 70%,#6d3f17);border:2px solid #f3d38a;box-shadow:0 2px 6px #0008;box-sizing:border-box}
.character-player-row[data-local-leader] .char-card.selected:not(.local-card){border-color:transparent;background:#ffffff0d;box-shadow:none}
.character-player-row[data-local-leader="none"] .char-card[data-testid$="-none"]:not(.local-card),
.character-player-row[data-local-leader="captain"] .char-card[data-testid$="-capitaine"]:not(.local-card),
.character-player-row[data-local-leader="falconer"] .char-card[data-testid$="-fauconniere"]:not(.local-card),
.character-player-row[data-local-leader="baroness"] .char-card[data-testid$="-baronne"]:not(.local-card),
.character-player-row[data-local-leader="professor"] .char-card[data-testid$="-professeur"]:not(.local-card),
.character-player-row[data-local-leader="explorer"] .char-card[data-testid$="-exploratrice"]:not(.local-card),
.character-player-row[data-local-leader="mystic"] .char-card[data-testid$="-mystique"]:not(.local-card){border-color:#4ade80;background:#4ade8026;box-shadow:0 0 12px #4ade8066}
.local-ai-note{margin:-6px 0 10px;font-size:.75rem;color:#c9b8d6}
.local-lobby-hint{margin:6px 0 0;color:#ffcf7a;font-size:.8rem}
.local-lobby-hint:empty{display:none}

/* Shared language control, outside the game's draggable surfaces. */
.local-language{position:fixed;right:14px;top:56px;z-index:9500;display:flex;align-items:center;gap:8px;padding:6px 10px;background:#19192cf0;color:#eee;border:1px solid #d3ad53;border-radius:7px;font:13px system-ui}
.local-language select{background:#303047;color:#fff;border:1px solid #777;border-radius:4px;padding:5px}
.home-panel>.local-language{position:static;justify-content:flex-end;background:none;border:0;margin-bottom:12px}
/* Lobby and game pages place the control in their header; hide it until then. */
body:not(.local-home)>.local-language{visibility:hidden}
.local-language.in-header{position:static;flex-shrink:0;gap:4px;padding:0;background:none;border:0}
.local-language.in-header::before{content:'🌐';font-size:.85rem}
.local-language.in-header>span{display:none}
.local-language.in-header select{padding:4px 6px;border:1px solid #ffffff4d;border-radius:8px;background:#ffffff1a;font-size:.75rem;cursor:pointer}
.local-language.in-header option{background:#1a1a2e}

/* Solarized light table; artwork and modal contrast remain independent. */
body:not(.local-home),body:not(.local-home) #app,.game{background:#fdf6e3!important;color:#586e75}
.game .market-area .deck{display:none!important}
.game .tokens-area{background:transparent!important;border:0!important;overflow:visible;container-type:normal;left:43%!important;top:46%!important;width:30%!important;height:40%!important}
.game .tokens-row{display:flex!important;flex-wrap:nowrap;gap:2px!important;height:100%;margin:0!important;align-items:center}
.game .player-board{container-type:inline-size}
.game .archaeologist-pawn{width:clamp(32px,16cqw,65px)!important;height:auto!important;aspect-ratio:339/323;flex-shrink:0}
.game .tokens-area .research-token{display:none!important}
.game .explorer-token{width:calc(42px * var(--board-token-scale,1))!important;height:calc(40px * var(--board-token-scale,1))!important}
.game [data-testid="research-cell-0-0"]{background:transparent;border:0;border-radius:0;box-shadow:none;cursor:default;z-index:2}

.game .main-board{background-repeat:no-repeat!important;background-color:#eee8d5}
.game .game-header{background:#657b83;color:#fdf6e3}
.game .opponents-boards-container,.game .assistant-piles,.game .player-hand,.game .played-cards{background:#eee8d5;color:#586e75;border-color:#c8b98b}
.game .market-area{background:transparent}
.game .hand-header,.game .played-header{color:#586e75}
.game .player-hand .hand-title,.game .player-hand .hand-count,.game .played-cards .header-title,.game .played-cards .header-count{color:#586e75!important}

/* Unmodified BGA board atlas, width-aligned to the archived board. The source
   strip starts at y=3555 (2879 x 4090); no raster crop or painted replacement. */
.game .main-board::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:calc(155px * var(--local-board-scale));background-image:url('/local-web/bga/board-front.webp');background-size:100% auto;background-position:left calc(-3440.1633px * var(--local-board-scale));background-repeat:no-repeat;pointer-events:none;z-index:0;border-radius:0 0 6px 6px}
.game [data-testid="research-cell-0-0"] .room-tokens{width:100%;height:100%;display:grid;grid-template-columns:repeat(4,1fr);align-items:center;justify-items:center;gap:0}

.game [data-testid="research-cell-0-0"] .research-token{grid-row:1}

/* BGA research tokens: native aspect ratios and board-relative 0.14 scale. */
.game .research-token[style*="_magnifying."]{width:calc(95.88483px * var(--local-board-scale,0.22))!important;height:calc(121.34578px * var(--local-board-scale,0.22))!important;background-image:url("/local-web/bga/icons_css_sprite.webp")!important;background-size:596.6101695% 390.6250000%!important;background-repeat:no-repeat;background-color:transparent;border:0;border-radius:0;box-shadow:none;filter:drop-shadow(1.5px 2px 1px #0009);flex-shrink:0;translate:none;}
.game .research-token[style*="player_1_magnifying."]{background-position:1.1376564% 1.5360983%!important}
.game .research-token[style*="player_2_magnifying."]{background-position:1.1376564% 39.0168971%!important}
.game .research-token[style*="player_3_magnifying."]{background-position:23.5494881% 1.5360983%!important}
.game .research-token[style*="player_4_magnifying."]{background-position:45.9613197% 1.5360983%!important}
.game .research-token[style*="_notebook."]{width:calc(102.38550px * var(--local-board-scale,0.22))!important;height:calc(102.38550px * var(--local-board-scale,0.22))!important;background-image:url("/local-web/bga/icons_css_sprite.webp")!important;background-size:558.7301587% 462.9629630%!important;background-repeat:no-repeat;background-color:transparent;border:0;border-radius:0;box-shadow:none;filter:drop-shadow(1.5px 2px 1px #0009);flex-shrink:0;translate:none;}
.game .research-token[style*="player_1_notebook."]{background-position:23.8754325% 37.0262391%!important}
.game .research-token[style*="player_2_notebook."]{background-position:1.1534025% 72.5947522%!important}
.game .research-token[style*="player_3_notebook."]{background-position:69.3194925% 1.4577259%!important}
.game .research-token[style*="player_4_notebook."]{background-position:69.3194925% 31.9241983%!important}

.game [data-testid="research-cell-0-0"] .room-tokens{align-items:start;justify-items:start;top:0;left:0;transform:none}
.game [data-testid="research-cell-0-0"] [title="magnifying - player_1"]{grid-column:1}
.game [data-testid="research-cell-0-0"] [title="notebook - player_1"]{grid-column:2}
.game [data-testid="research-cell-0-0"] [title="magnifying - ai_1"]{grid-column:3}
.game [data-testid="research-cell-0-0"] [title="notebook - ai_1"]{grid-column:4}

/* Camp slots: left boot is open, right double-boot uses the rules' blocker. */
.game .base-camp .site-explorers{top:calc(100% - 7px * var(--local-board-scale));left:28%;transform:translate(-50%,-35%);gap:calc(70px * var(--local-board-scale))}
.game .site-blocker-tile{pointer-events:none}
.game .assistant-slot.local-empty:hover{transform:none!important;box-shadow:none!important;z-index:1;cursor:default}
.game .market-card:hover,.game .market-card.zoomed{transform:scale(3.3)}
/* Resource strip above the camp releases the full board width. */
.game .player-board-wrapper{padding-left:0!important;padding-top:34px!important}
.game .player-board-wrapper .resources-column{top:0;bottom:auto;left:0;width:100%!important;height:30px;flex-direction:row;border-radius:5px}
.game .player-board-wrapper .resource-row{padding:2px 3px!important;gap:3px!important;border-bottom:0;border-right:1px solid #ffffff22}
/* Resource strip: the header islands' paper and ink instead of a black bar. The five
   resources share the width equally; the guardian cell sizes to its "0/1" so a narrow
   opponent column never clips it. */
.game .player-board-wrapper .resources-column{background:rgba(252,248,238,.94)!important;border:0.5px solid rgba(60,45,25,.2)!important;border-radius:8px!important;box-shadow:0 1px 3px rgba(40,25,10,.12)}
.game .player-board-wrapper .resource-row{flex:1 1 0!important;min-width:0;background:transparent!important;border-right:0.5px solid rgba(60,45,25,.12)!important}
.game .player-board-wrapper .resource-row:last-child{border-right:0!important}
.game .player-board-wrapper .resource-guardian{flex:0 0 auto!important;padding:0 8px!important;background:rgba(164,70,50,.07)!important}
.game .player-board-wrapper .resource-guardian.clickable:hover{background:rgba(164,70,50,.15)!important}
.game .player-board-wrapper .resource-value{color:#2f261b!important;font-family:"Microsoft YaHei UI","Microsoft YaHei",sans-serif;font-weight:700;font-variant-numeric:tabular-nums}
/* Opponent label: a paper strip matching the resource strip below it (same radius,
   hairline and shadow, 2px apart), so the pair reads as two cards rather than a
   square bar sitting on a rounded one. The player's colour is a dot, not a full bar. */
.game .opponent-label{--opp:#8a7a60;gap:8px;margin-bottom:2px;padding:7px 10px!important;background:rgba(252,248,238,.94)!important;border:0.5px solid rgba(60,45,25,.2)!important;border-radius:8px!important;box-shadow:0 1px 3px rgba(40,25,10,.12);font-family:"Microsoft YaHei UI","Microsoft YaHei",sans-serif}
.game .opponent-label.red{--opp:#c84f45}.game .opponent-label.blue{--opp:#4b7fc4}.game .opponent-label.green{--opp:#4f9a5a}.game .opponent-label.yellow{--opp:#c99a2e}
.game .opponent-name{display:inline-flex;align-items:center;gap:7px;font-size:14px!important;font-weight:700;color:#2f261b!important}
.game .opponent-name::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--opp)}
.game .opponent-label .ai-badge{padding:2px 5px;border:0.5px solid rgba(60,45,25,.35);border-radius:4px;background:transparent!important;color:#6b5d47!important;font-size:10px!important;font-weight:700;letter-spacing:.08em;line-height:1}
.game .opponent-badges{gap:4px!important}
.game .opponent-label .badge{padding:4px 8px!important;border-radius:6px!important;background:rgba(73,62,43,.07)!important;color:#6b5d47!important;font-size:12px!important;font-variant-numeric:tabular-nums;line-height:1}
.game .opponent-label .play-area-badge{cursor:help}
.game .opponent-label .play-area-badge:hover{background:rgba(73,62,43,.14)!important;color:#2f261b!important}
/* Hover previews in the same paper material as dialogs. */
/* Width must not depend on `left`: a fixed box opened near the right edge would
   otherwise shrink to the sliver of space left and stack its cards in a column. */
/* Hidden (still laid out, so measurable) until card-layout.js has sized the artwork
   and written the in-viewport position: no frame at the overflowing position. */
.play-area-tooltip:not([data-local-placed]),.log-tooltip:not([data-local-placed]){visibility:hidden!important}
.play-area-tooltip,.log-tooltip{width:max-content;max-width:min(500px,calc(100vw - 16px));box-sizing:border-box}
.play-area-tooltip,.log-tooltip{background:rgba(252,248,238,.97)!important;border:0.5px solid rgba(60,45,25,.2)!important;border-radius:10px!important;box-shadow:0 10px 30px rgba(40,25,10,.22)!important}
.play-area-tooltip-header,.log-tooltip-label{color:#493e2b!important;border-color:rgba(60,45,25,.15)!important}
.game .resource-guardian .resource-emoji{font-size:0!important;width:24px;height:19px;flex-shrink:0;background:url('/local-web/bga/icons_css_sprite.webp') no-repeat;background-size:1005.714286% 1067.073171%;background-position:43.848580% 89.155107%}
.game .market-card.edge-left:hover,.game .market-card.edge-left.zoomed{transform:scale(3.3)}

/* Stable hit boxes; only a pointer-transparent visual layer grows. */
.local-hover-ready .game :is(.research-token,.archaeologist-pawn,.explorer-token,.idol-token,.assistant-slot,.base-camp,.site,.market-card):not(.dragging),
.local-hover-ready .game :is(.research-token,.archaeologist-pawn,.explorer-token,.idol-token,.assistant-slot,.base-camp,.site,.market-card):hover{transform:none!important;transition:box-shadow 180ms ease!important}
.local-hover-ready .game .assistant-slot.tapped:not(.dragging){transform:rotate(90deg)!important}
.local-hover-ready .game .guardian-on-site,.local-hover-ready .game .guardian-on-site:hover{transform:translateX(-50%)!important;transition:box-shadow 180ms ease!important}
.local-hover-ready .game :is(.research-token,.archaeologist-pawn,.explorer-token,.idol-token,.assistant-slot,.base-camp,.site,.market-card):hover{z-index:auto;box-shadow:none!important}
.game .local-hover-preview{position:fixed;z-index:9800;pointer-events:none!important;opacity:0;transform:scale(1);transition:transform 180ms cubic-bezier(.2,.75,.25,1),opacity 150ms ease;will-change:transform,opacity;filter:drop-shadow(0 5px 8px #0005)}
.game .local-hover-preview *{pointer-events:none!important}
/* One starting space per player, with notebook below magnifier. Fixed columns
   preserve player order when either token leaves the starting space. */
.game [data-testid="research-cell-0-0"] .room-tokens{align-items:center;justify-items:center}
.game [data-testid="research-cell-0-0"] [title$=" - player_1"]{grid-column:1;grid-row:1}
.game [data-testid="research-cell-0-0"] [title$=" - ai_1"]{grid-column:2;grid-row:1}
.game [data-testid="research-cell-0-0"] .research-token[style*="_notebook."]{translate:5px 4px;z-index:1}
.game [data-testid="research-cell-0-0"] .research-token[style*="_magnifying."]{translate:-5px -3px;z-index:2}
@media(prefers-reduced-motion:reduce){.game .local-hover-preview{transition:none}}

/* Hover must not reorder overlapping research pieces under the cursor. */
.local-hover-ready .game .research-token{z-index:2!important}
.local-hover-ready .game [data-testid="research-cell-0-0"] .research-token[style*="_notebook."]{z-index:1!important;translate:5px 0}
.local-hover-ready .game [data-testid="research-cell-0-0"] .research-token[style*="_magnifying."]{z-index:2!important;translate:-5px -4px}

/* Remaining hover surfaces use the same stable targets and instant preview. */
.local-hover-ready .game :is(.hand-card,.played-card,.assistant-piles .pile,.research-reward-tile,.choice-sprite-assistant,.assistant-item,.assistant-visual):not(.dragging),
.local-hover-ready .game :is(.hand-card,.played-card,.assistant-piles .pile,.research-reward-tile,.choice-sprite-assistant,.assistant-item,.assistant-visual):hover{transform:none!important;transition:none!important;box-shadow:none!important;z-index:auto!important}
.game .local-hover-preview{transition:none!important}

/* Avoid re-rasterizing a blurred filter over every preview frame. */
.game .local-hover-preview{filter:none;contain:layout style;isolation:isolate}

/* Camps and research rewards retain their normal interaction, without zoom. */
.game .base-camp,.game .base-camp:hover,
.game .research-reward-tile,.game .research-reward-tile.room-hovered{transform:none!important;transition:none!important}

.game .local-action-flight{position:fixed;z-index:9900;pointer-events:none!important;transform-origin:top left;will-change:transform,opacity}
.game .local-action-flight *{pointer-events:none!important}

/* Board artwork stays at its printed size, including touch/click zoom states. */
.game :is(.base-camp,.site,.idol-token,.idol-preview-tile,.idol-tile,.idol-slot,.research-guardian,.guardians-row,.choice-sprite-guardian,.guardian-item):not(.dragging),
.game :is(.base-camp,.site,.idol-token,.idol-preview-tile,.idol-tile,.idol-slot,.research-guardian,.guardians-row,.choice-sprite-guardian,.guardian-item):hover{transform:none!important;transition:none!important}
.game .site-guardian-overlay:hover{transform:translateX(-50%)!important}
/* Base camps are already printed on the board. A second cropped copy caused
   mismatched edges and dark seams; keep only the transparent interaction area. */
.game .base-camp{background:none!important;box-shadow:none!important;border:0!important}
/* Guardian notch spans the location width; preserve the square tile ratio. */
.game .guardian-on-site,.game .guardian-on-site:hover{width:114%!important;height:auto!important;aspect-ratio:1;top:-17%;left:50%;transform:translateX(-50%)!important;transition:none!important;box-shadow:none!important;border-radius:0}
.game .guardian-on-site{clip-path:polygon(0 13%,2% 9%,8% 6%,50% 0,92% 6%,98% 9%,100% 13%,100% 91%,96% 97%,91% 100%,90% 91%,10% 91%,9% 100%,4% 97%,0 91%)}
/* Level I/II workers stand on the travel medallion beneath the location. */
.game .site .site-explorers{top:calc(100% + 12px * var(--local-board-scale));left:50%;transform:translate(-50%,-15%);gap:calc(18px * var(--local-board-scale))}
.game .base-camp .site-explorers{top:calc(100% + 13px * var(--local-board-scale))}

/* BGA's untouched icons atlas: 130 x 160 idol faces, mapped by effect. */
.game [style*="idol_tiles_1.jpg"],.game .idol-back-sprite{--idol-x:44.924406%;--idol-y:35.524476%;background-image:url('/local-web/bga/icons_css_sprite.webp')!important;background-size:812.307692% 546.875%!important;background-position:var(--idol-x) var(--idol-y)!important;background-repeat:no-repeat!important;background-color:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;clip-path:polygon(0 7%,50% 0,100% 7%,100% 80%,95% 88%,50% 100%,5% 88%,0 80%)}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 16.666"]{--idol-x:23.650108%;--idol-y:69.650350%}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 33.333"]{--idol-x:39.848812%;--idol-y:69.650350%}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 50%"]{--idol-x:87.473002%;--idol-y:26.573427%}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 66.666"]{--idol-x:56.047516%;--idol-y:69.650350%}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 83.333"]{--idol-x:87.473002%;--idol-y:51.748252%}
.game [style*="idol_tiles_1.jpg"][style*="background-position: 100%"]{--idol-x:87.473002%;--idol-y:1.398601%}
.game :is(.idol-preview-tile,.idol-tile,.idol-token){height:auto!important;aspect-ratio:130/160;border:0!important;background-color:transparent!important;box-shadow:none!important}
.game .idol-token .idol-back-sprite{height:auto;aspect-ratio:130/160;border-radius:0}
.game .site-idol-preview{background:none;padding:0;gap:0;bottom:8%}
.game .site-idol-preview .idol-preview-tile{width:45.6cqw}

/* Bird temple reward frames, measured against the printed board (source px).
   Keep each tile inside the inked frame instead of covering its lower edge. */
.game .main-board[style*="bird_temple.jpg"] .research-reward-tile{width:calc(138px * var(--local-board-scale))!important;height:calc(138px * var(--local-board-scale))!important;translate:calc(var(--reward-dx,0) * var(--local-board-scale)) calc(var(--reward-dy,0) * var(--local-board-scale))}
.game [data-testid="research-reward-2-0"]{--reward-dx:8px;--reward-dy:2px}
.game [data-testid="research-reward-2-1"]{--reward-dx:8px;--reward-dy:4px}
.game [data-testid="research-reward-4-0"]{--reward-dx:2px;--reward-dy:6px}
.game [data-testid="research-reward-4-1"]{--reward-dx:2px;--reward-dy:0px}
.game [data-testid="research-reward-4-2"]{--reward-dx:8px;--reward-dy:4px}
.game [data-testid="research-reward-6-0"]{--reward-dx:2px;--reward-dy:8px}
.game [data-testid="research-reward-6-1"]{--reward-dx:6px;--reward-dy:8px}

/* One BGA resource set for counters, costs, choices and log deltas. */
.game .local-resource-symbol{display:inline-block;width:1.25em;height:1.25em;object-fit:contain;vertical-align:-.25em;flex-shrink:0;margin:0 .08em;pointer-events:none}
.game [style*="coins_x27"],.game img[src*="coins_x27"]{background-image:url("/local-web/icons/coin.svg")!important;background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;background-color:transparent!important}
.game img[src*="coins_x27"]{object-fit:none!important;object-position:10000px 10000px!important}
.game [style*="compasses_x27"],.game img[src*="compasses_x27"]{background-image:url("/local-web/icons/compass.svg")!important;background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;background-color:transparent!important}
.game img[src*="compasses_x27"]{object-fit:none!important;object-position:10000px 10000px!important}
.game [style*="tablets_x16"],.game img[src*="tablets_x16"]{background-image:url("/local-web/icons/tablet.svg")!important;background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;background-color:transparent!important}
.game img[src*="tablets_x16"]{object-fit:none!important;object-position:10000px 10000px!important}
.game [style*="arrowheads_x12"],.game img[src*="arrowheads_x12"]{background-image:url("/local-web/icons/arrowhead.svg")!important;background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;background-color:transparent!important}
.game img[src*="arrowheads_x12"]{object-fit:none!important;object-position:10000px 10000px!important}
.game [style*="jewels_x9"],.game img[src*="jewels_x9"]{background-image:url("/local-web/icons/ruby.svg")!important;background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;background-color:transparent!important}
.game img[src*="jewels_x9"]{object-fit:none!important;object-position:10000px 10000px!important}

/* A light wooden table surrounds the original board and parchment panels.
   Textures are WebP bitmaps baked from wood-table.svg and parchment.svg: an SVG background is replayed per raster tile, so its
   feTurbulence noise was recomputed on every repaint (6-37 ms per tile). */
body:not(.local-home),body:not(.local-home) #app,.game{background:#d8bd91 url('/local-web/wood-table.webp') repeat!important;background-size:1000px 600px!important}
.game .log-history{background:#eee8d5!important;color:#586e75!important;border-color:#c8b98b!important}
.game .log-title,.game .log-details{color:#586e75!important}
.game .log-time{color:#7c8171!important}
.game .log-entry{background:#fdf6e366!important}
.game .log-entry:hover{background:#fdf6e3!important}
.game .hand-icon,.game .played-cards .header-icon,.game .log-action-icon{display:none!important}
/* The assistant display occupies the upper position in the same flex column. */
.game .grid-opponents>.assistant-piles{order:-1}
.game .grid-center>.lower-cards{margin-top:var(--table-clearance,0px)}
.game .assistant-piles{padding:8px!important}
.game .assistant-piles .piles-container{gap:8px}
.game .assistant-piles .pile{width:calc((100% - 16px)/3)!important;max-width:88px;height:auto!important;aspect-ratio:3/4;flex-shrink:1}
/* Cover the question-mark printing, while staying inside each location frame. */
.game .site-idol-preview{bottom:2%}
.game .site-level2 .site-idol-preview{bottom:0}
.game [data-testid="site-blocker-3"],.game [data-testid="site-blocker-4"]{translate:calc(26px * var(--local-board-scale)) 0}

/* Translucent parchment keeps the table visible without fading its contents. */
.game :is(.player-hand,.played-cards,.opponents-boards-container,.log-history){background:rgba(238,232,213,.72)!important}
.game .log-entry{column-gap:2px;padding-left:3px;padding-right:3px;background:rgba(253,246,227,.18)!important}
.game .log-time{min-width:0!important;flex:0 0 auto;margin-right:0;letter-spacing:-.2px}
.game .log-ref{color:#94701c}
/* Original Supply Board, right-hand assistant slots: x2620 y220 w1280 h460
   within the unchanged 3906 x 1507 image. */
.game .assistant-piles{background:#07384a url('/local-web/supply-board.jpg') 99.7715% 21.0124% / 305.15625% 327.6087% no-repeat!important;border:1px solid #bfa77c}

/* Show complete log text without waiting for hover. */
.game .log-details{display:block!important;-webkit-line-clamp:unset!important;overflow:visible!important}
/* Keep these pieces at their board size, including touch/click zoom states. */
.game .temple-reward-pile,.game .temple-reward-pile:hover{transform:none!important;transition:none!important}
.game .archaeologist-pawn,.game .archaeologist-pawn:hover{transform:none!important;transition:none!important}

/* Keep card size; only overlap when the row cannot fit all cards. */
.game :is(.player-hand,.played-cards){min-width:0;max-width:100%;box-sizing:border-box}
.game :is(.hand-cards,.cards-list){min-width:0;max-width:100%;flex-wrap:nowrap!important;overflow:visible!important}
.game :is(.hand-cards,.cards-list)>:is(.hand-card,.played-card){flex-shrink:0!important}
.game :is(.hand-cards,.cards-list)>:is(.hand-card,.played-card)+:is(.hand-card,.played-card){margin-left:var(--local-card-overlap,0px)!important}
.log-tooltip-sprite:not([data-local-proportions]){visibility:hidden}

/* Payment choices keep fixed hit targets; their previews never zoom. */
.local-payment-modal *:hover,.local-payment-modal .zoomed{transform:none!important;scale:none!important;transition:none!important}
.game .assistant-slot:hover{transform:none!important;box-shadow:none!important;cursor:pointer}
.game .assistant-slot.tapped:hover{transform:rotate(90deg)!important}
.modal-overlay :is(.choice-item,.option-item):not(:has([style*="background-image"],img)){justify-content:center!important;align-items:center!important;text-align:center;min-height:64px}
.modal-overlay :is(.choice-item,.option-item):not(:has([style*="background-image"],img)) .option-content{display:flex;justify-content:center;align-items:center;flex:1;text-align:center}
.modal-overlay img,[class*="tooltip"] img{object-fit:contain}
/* Travel payment (travel-dialog.js). Travel icons are the game's own tokens, cut from the
   BGA icon sheet (1056×875) at any size: --w/--h/--x/--y are the icon's cell, --s its size. */
.local-travel-icon{--s:26px;display:inline-block;flex:0 0 auto;width:var(--s);height:var(--s);background:url('/local-web/bga/icons_css_sprite.webp') no-repeat;background-size:calc(1056 / var(--w) * var(--s)) calc(875 / var(--h) * var(--s));background-position:calc(-1 * var(--x) / var(--w) * var(--s)) calc(-1 * var(--y) / var(--h) * var(--s));vertical-align:middle}
.local-travel-icon.small{--s:20px}
.local-travel-icon.boot{--w:75;--h:75;--x:638;--y:707}
.local-travel-icon.car{--w:74;--h:75;--x:733;--y:707}
.local-travel-icon.boat{--w:76;--h:75;--x:960;--y:748}
.local-travel-icon.plane{--w:76;--h:75;--x:542;--y:707}
.local-travel-icon:is(.coin,.compass){background:url('/local-web/icons/coin.svg') center/contain no-repeat}
.local-travel-icon.compass{background-image:url('/local-web/icons/compass.svg')}
.local-travel-dialog .local-travel-cost{display:flex;flex-direction:column;align-items:center;gap:5px;margin-top:6px}
.local-travel-dialog .local-travel-line{display:flex;flex-wrap:nowrap;justify-content:center;gap:4px}
.local-travel-dialog .local-travel-line .local-travel-icon.compass{--s:22px}
.local-travel-dialog .left-column{width:auto!important;min-width:140px;box-sizing:border-box}
.local-travel-dialog .selection-summary{display:flex;flex-direction:column;align-items:center;gap:4px}
/* All payable cards on one row; the dialog grows with them up to the window, then the cards shrink. */
.local-travel-dialog .travel-modal-content{min-width:0!important;max-width:calc(100vw - 64px)!important;width:max-content}
.local-travel-dialog .cards-grid{flex-wrap:nowrap!important}
.local-travel-dialog .cards-grid>.card-item{flex:0 1 84px;min-width:48px}
.local-travel-dialog .right-column{min-width:220px}
.local-travel-dialog .local-travel-site{width:120px;aspect-ratio:.8;background-color:transparent;border-radius:6px}
.local-travel-dialog .local-travel-site.empty{background:rgba(73,62,43,.08)}
.local-travel-dialog .local-travel-site{position:relative}
.local-travel-dialog .local-travel-idol{position:absolute;border-radius:3px;box-shadow:0 1px 3px #0006}
.local-travel-dialog .card-item{cursor:pointer}
.local-travel-dialog .card-item.disabled{opacity:.4;cursor:default}
.local-travel-dialog .card-visual{width:84px;max-width:100%;height:auto!important;aspect-ratio:70/98;border-radius:5px;margin:0!important}
.local-travel-dialog .local-coin-plane .coins-label{display:inline-flex;align-items:center;gap:4px}
.local-travel-dialog .local-travel-arrow{margin:0 4px;color:var(--dialog-muted,#756b55)}
.local-travel-dialog .coins-item.disabled{opacity:.45;cursor:default}
/* Picture options (cards, assistants, sites, travel cards): the artwork is the option.
   No paper frame or dark border around it; hover and selection outline the art itself. */
.modal-overlay :is(.choice-card,.choice-assistant,.choice-site,.local-travel-dialog .card-item):has(:is(.choice-sprite-card,.choice-sprite-assistant,.choice-sprite-site,.card-visual)[style*="background-image"]){background:transparent!important;border-color:transparent!important;padding:0!important;box-shadow:none!important;width:auto!important;justify-content:center}
.modal-overlay :is(.choice-sprite-card,.choice-sprite-assistant,.choice-sprite-site,.local-travel-dialog .card-visual){border:0!important;border-radius:6px!important;box-shadow:0 1px 4px #2a1f1440!important;transition:box-shadow 120ms ease!important}
.modal-overlay :is(.choice-card,.choice-assistant,.choice-site,.local-travel-dialog .card-item):not(.disabled):hover :is(.choice-sprite-card,.choice-sprite-assistant,.choice-sprite-site,.card-visual){box-shadow:0 0 0 2px #a9ab85,0 2px 8px #2a1f1440!important}
.modal-overlay :is(.choice-card,.choice-assistant,.choice-site,.local-travel-dialog .card-item).selected :is(.choice-sprite-card,.choice-sprite-assistant,.choice-sprite-site,.card-visual){box-shadow:0 0 0 3px var(--dialog-accent,#697447),0 0 12px #69744766!important}
.modal-overlay :is(.choice-card,.choice-assistant,.choice-site,.local-travel-dialog .card-item) .selected-indicator{display:none!important}
/* Option pictures keep their own shape; the archived 100px height cap squashed square tiles. */
.modal-overlay .option-sprite{max-height:none!important;filter:none!important}
.modal-overlay .options-grid-layout .option-item:has(.option-sprite):not(:has(.option-label:not(:empty))){justify-content:center}
/* Options written in the board's notation (idol slots, payments) read by their icons. */
.modal-overlay .options-grid-layout .option-label .local-resource-symbol{width:auto!important;height:28px!important;vertical-align:middle;margin:0 1px}
.modal-overlay .choice-sprite-assistant,.modal-overlay .choice-sprite-assistant:hover{transform:none!important;cursor:pointer!important;z-index:auto!important}
/* Idol slots answer a dragged idol like a site answers an archaeologist. */
.game .idol-slot.local-drop-allowed{box-shadow:0 0 15px #2ecc7199!important}
.game .idol-slot.local-drop-hover{box-shadow:0 0 25px #2ecc71e6!important;outline:3px dashed #2ecc71!important;outline-offset:-3px}
/* Exile and discard from hand and play area: two paper columns instead of black panels. */
.modal-overlay .choices-column{background:#e5dbc466!important;border:1px solid var(--dialog-line,#c8ba98);border-radius:8px}
.modal-overlay .column-title{color:var(--dialog-ink,#493e2b)!important;border-bottom-color:var(--dialog-line,#c8ba98)!important;font-weight:700}
.modal-overlay .empty-column{color:var(--dialog-muted,#756b55)!important}
.modal-overlay .reserves-section{border-top-color:var(--dialog-line,#c8ba98)!important}
.modal-overlay :is(.choices-grid-cards,.choices-grid-hand-only){display:flex!important;flex-wrap:wrap;justify-content:center;gap:10px!important}
.modal-overlay :is(.dsk-section,.dsk-summary){background:#e5dbc466!important;color:var(--dialog-ink,#493e2b)!important}
.modal-overlay .divider{background:var(--dialog-line,#c8ba98)!important;border-color:var(--dialog-line,#c8ba98)!important}
.modal-overlay .selected-indicator{background:var(--dialog-accent,#697447)!important;color:#fffdf5!important}
/* Resource upgrade: all options on one row, plain tokens, the game's own arrow. */
.modal-overlay .choices-grid-resources{flex-direction:row!important;flex-wrap:wrap;justify-content:center;align-items:stretch}
.modal-overlay .choices-grid-resources>.choice-item{flex:1 1 0;min-width:150px;justify-content:center}
.modal-overlay .resource-upgrade{gap:10px!important;padding:0!important}
.modal-overlay .resource-icon{border:0!important;background-color:transparent!important;border-radius:0!important;background-size:contain!important;background-position:center!important}
.modal-overlay .resource-arrow{width:22px;height:26px;flex:0 0 auto;font-size:0!important;color:transparent!important;background:url('/local-web/icons/arrow-right.svg') center/contain no-repeat}
/* Every local choice carries the same generic "choose, then confirm" line; drop it. */
.modal-overlay .choice-modal-content>.instruction{display:none!important}
/* A picture-only option (camp crops) keeps no empty caption box below it. */
.modal-overlay .option-item .option-content:not(:has(.option-label:not(:empty),.option-description,.option-disabled-reason,.option-idols)){display:none!important}
/* Card, assistant and site art already shows what the caption names (the title says
   whether it is a discard, exile or recruit). Payment captions list coins and
   resources the art does not, so payment dialogs keep theirs. */
.modal-overlay:not(.local-payment-modal) .choice-card:has(>.choice-sprite-card)>.choice-label,
.modal-overlay .choice-assistant:has(>.choice-sprite-assistant) .choice-label,
.modal-overlay .choice-site:has(.choice-sprite-site) .site-info:not(:has(.site-level:not(:empty))),
.modal-overlay .dsk-card:has(>.dsk-card-sprite)>.dsk-card-name,
.modal-overlay .peeked-card:has(>.peeked-card-sprite)>.peeked-card-name,
.modal-overlay .choice-resource:has(.resource-upgrade) .choice-label,
.modal-overlay .context-preview:has(>.context-sprite) .context-info:not(:has(.context-description)){display:none!important}

.local-payment-modal .site-guardian-overlay,.local-payment-modal .site-guardian-overlay:hover{transform:translateX(-50%)!important}

.home-test-links{display:flex;gap:8px}button.home-modal-link{cursor:pointer;font:inherit;font-size:14px;line-height:normal}button.home-modal-link:disabled{opacity:.6;cursor:default}
.home-games-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.home-modal-link{color:var(--home-title);background:#f9f3e5;border:1px solid #b6ab8e;padding:7px 12px;border-radius:6px;text-decoration:none;font-size:14px}.home-modal-link:hover{background:#eee3ca;border-color:#9c8f6e}
body.local-modal-lab{margin:0;background:#f4efdf;color:#465654;font:15px system-ui}.modal-lab-shell{max-width:1280px;margin:auto;padding:28px}.modal-lab-shell>header{display:flex;justify-content:space-between;gap:20px;align-items:center}.modal-lab-shell h1{margin:12px 0;font-size:30px}.modal-lab-shell h2{font-size:17px}.modal-lab-shell a{color:#657944}.modal-lab-shell p{line-height:1.6}.lab-controls{display:flex;align-items:center;gap:12px;margin:18px 0 22px}.lab-controls input{flex:1}.lab-controls input,.lab-controls select,.lab-settings select{padding:10px;border:1px solid #bcb59d;border-radius:7px;background:#fffdf6;color:#465654;font:inherit;min-width:0}.lab-columns{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;align-items:start}.lab-cases{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.lab-case{display:flex;flex-direction:column;align-items:flex-start;gap:12px;min-height:100px;padding:18px;text-align:left;border:1px solid #d8cfb6;border-radius:10px;background:#fffdf6;color:#465654;cursor:pointer;font:inherit}.lab-case:hover{border-color:#8d9b61;background:#f8faef}.lab-case small{color:#78864f}.lab-settings{background:#eae4d2;border:1px solid #d8cfb6;border-radius:12px;padding:20px;position:sticky;top:16px}.lab-settings label{display:grid;gap:8px}.lab-settings select{width:100%}.lab-note{font-size:12px;color:#727867}.lab-buttons{display:flex;gap:8px;margin:14px 0}.lab-settings button{padding:9px 12px;border:1px solid #89976b;background:#fffdf6;border-radius:6px;color:#465654;cursor:pointer;font:inherit}.lab-settings button:disabled{opacity:.5;cursor:default}#lab-result{display:block;padding:12px;max-height:240px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;background:#fffdf6;border-radius:7px;font-size:13px}.lab-settings details{margin-top:18px}.lab-settings summary{cursor:pointer}#lab-json{width:100%;box-sizing:border-box;height:220px;margin:12px 0;font:12px monospace}#lab-error{color:#ac3430}.modal-lab-stage.game{height:0!important;min-height:0!important;padding:0!important;background:none!important;overflow:visible!important}.local-modal-lab .local-dock{display:none!important}
@media(max-width:980px){.lab-cases{grid-template-columns:repeat(2,minmax(0,1fr))}.lab-columns{grid-template-columns:minmax(0,1fr) 280px}}@media(max-width:680px){.modal-lab-shell{padding:16px}.lab-columns{grid-template-columns:1fr}.lab-settings{position:static}.lab-controls{flex-wrap:wrap}.lab-controls input{width:100%;flex-basis:100%}}
.local-board-animation{position:fixed;z-index:900;pointer-events:none!important;transform-origin:0 0;contain:layout style;will-change:transform,opacity}
.local-board-animation *{pointer-events:none!important}
@media(prefers-reduced-motion:reduce){.local-board-animation{display:none!important}}
.local-main-action-done [data-testid="action-pass"]{display:none!important}
/* Looping box-shadow pulses cannot run on the compositor: they repaint every frame
   for as long as a tile or slot is selectable. Keep the glow, drop the loop. */
.game :is(.temple-tile:not(.disabled),.research-slot-cell.slot-pickable,.turn-notification.my-turn,.turn-notification.ai-turn){animation:none!important}
.game .temple-tile:not(.disabled){box-shadow:0 0 16px #d4af37cc}
.game .research-slot-cell.slot-pickable{box-shadow:0 0 14px 4px #2ecc71d9}
/* Keep board motion below every dialog, including the legacy help dialog. */
.modal-overlay{z-index:20000!important}
body:has(.modal-overlay:not(.minimized)) .local-hover-preview:not(.local-modal-preview){visibility:hidden!important}
.game .local-hover-preview.local-modal-preview{z-index:21000!important}
body:has(.modal-overlay:not(.minimized)) :is(.local-language,.ai-thinking-banner,.local-dock){z-index:800!important}
.local-board-animation :is(.archaeologist-pawn,.explorer-token){border:0!important;outline:0!important;box-shadow:none!important;background-color:transparent!important;padding:0!important}
/* Original supply-board frames cropped separately so each follows its card. */
.game .assistant-piles{background:#07384a!important;padding:7px 8px!important}
.game .assistant-piles .piles-container{gap:14px;align-items:center}
.game .assistant-piles .pile{width:min(calc((100% - 28px)/3),calc(var(--market-card-height,100px) * 236 / 296))!important;max-width:none!important;height:auto!important;aspect-ratio:236/296;position:relative;border:0!important;background:none!important;overflow:visible!important}
.game .assistant-piles .pile::before{content:"";position:absolute;inset:-4px;pointer-events:none;background:url('/local-web/supply-board.jpg') 74.24% 21.72% / 1116% 354.59% no-repeat;border-radius:5px}
.game .assistant-piles .pile:nth-child(2)::before{background-position-x:86.61%}
.game .assistant-piles .pile:nth-child(3)::before{background-position-x:98.7%}
.game .assistant-piles .pile-top-card{position:relative;z-index:1;border-radius:3px}
.game .assistant-piles .pile-count{z-index:2}
/* Artwork has its own silhouette; avoid rectangular framing on physical tokens. */
.game :is(.archaeologist-pawn,.explorer-token,.research-token,.idol-token,.idol-preview-tile,.idol-tile,.research-reward-tile,.local-boon),
.local-board-animation :is(.archaeologist-pawn,.explorer-token,.research-token,.idol-token,.idol-preview-tile,.idol-tile,.research-reward-tile,.local-boon){border:0!important;outline:0!important;box-shadow:none!important;background-color:transparent!important}
.game .idol-slot.can-place,.game .idol-slot.can-place:hover{border:0!important;box-shadow:none!important;animation:none!important;background:transparent!important}
.game .idol-token.can-place{animation:none!important}
/* Guardian favors sit in the open strip under the tents (left of the crates), clear of the
   idols below; the workers' row is lifted so its feet end above that strip. */
.game .local-boons{position:absolute;left:26.5%;right:22.5%;top:69%;bottom:auto;height:13%;display:flex;align-items:center;gap:4px;z-index:3;pointer-events:none}
.game .local-boon{height:100%;max-height:36px;flex:0 1 auto;min-width:0;padding:0;pointer-events:auto;border-radius:4px;background-repeat:no-repeat;cursor:pointer;filter:drop-shadow(1px 2px 2px #0008)}
.game .player-board .tokens-row{translate:0 -36%}
.game .local-boon:disabled{opacity:1;cursor:default}
.game .local-boon:focus-visible{outline:2px solid #477b9c!important;outline-offset:3px}
.game .site[style*="cardboard_css_sprite"]{border:0!important;box-shadow:none!important;border-radius:10% 10% 13% 13%;background-color:transparent!important}
.game .site.local-bga-site{background-image:none!important}
.local-site-art{position:absolute;inset:0;pointer-events:none;background-repeat:no-repeat;z-index:0}
.modal-overlay:has(.game-end-content){display:none!important}
.local-score-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:#18201c99;padding:20px;box-sizing:border-box;z-index:22000!important}
.local-score-panel{width:min(850px,96vw);max-height:95vh;overflow:auto;color:#392c20;background:#eee5cf;border-radius:12px;padding:18px;box-shadow:0 12px 45px #0006;box-sizing:border-box}
.local-score-panel h2{text-align:center;margin:0 0 14px;font-size:22px}
.local-score-sheet{position:relative;width:100%;aspect-ratio:1654/945;background:url('/local-web/bga/score-pad.webp') center/100% 100% no-repeat;container-type:inline-size}
.local-score-name,.local-score-cell{position:absolute;width:20.6%;height:11.7%;display:flex;justify-content:center;align-items:center;text-align:center;box-sizing:border-box;padding:0 4px;font-size:3.5cqw;font-variant-numeric:tabular-nums;font-weight:600}
.local-score-name{top:3%;font-size:2.3cqw;overflow-wrap:anywhere}
.local-score-cell.counting{background:#fff7d343;color:#81510b}
.local-score-cell[data-category="total"]{font-size:4.2cqw;color:#5d2475}
.local-score-controls{display:flex;justify-content:center;gap:12px;margin-top:16px}
.local-score-controls button{padding:8px 22px;border:1px solid #b0a17e;border-radius:6px;background:#fff9e8;color:#463d2c;cursor:pointer;font:inherit}
/* Warm parchment and muted olive match the table, panels and original artwork. */
.modal-overlay{--dialog-ink:#493e2b;--dialog-muted:#756b55;--dialog-line:#c8ba98;--dialog-paper:#f4eddc;--dialog-accent:#697447;background:rgba(32,29,20,.55)!important;color:var(--dialog-ink)}
.modal-overlay.minimized{background:transparent!important}
.modal-overlay :is(.modal-content,.local-score-panel){color:var(--dialog-ink)!important;background:linear-gradient(145deg,#faf5e8,#eee3ca)!important;border:1px solid var(--dialog-line);border-radius:14px!important;box-shadow:0 14px 50px #251d164d!important}
.modal-overlay :is(.reward-info-content,.guardians-list-content){background:transparent!important;color:var(--dialog-ink)!important;border-color:var(--dialog-line)!important;box-shadow:none!important}
.modal-overlay :is(.modal-title,.section-title,.context-name,.choice-label,.option-label,.guardian-name,.reward-name,.coins-label,.favor-label,.info-text strong,.howto-item-title){color:var(--dialog-ink)!important}
.modal-overlay :is(.instruction,.context-description,.option-description,.reward-effect,.info-text,.favor-type,.coins-available,.selection-summary .label,.selection-summary .empty,.required-travel .label,.howto-intro,.howto-item-desc,.howto-note){color:var(--dialog-muted)!important}
.modal-overlay :is(.context-preview,.peeked-cards-preview,.selection-feedback,.left-column,.reward-display,.modal-info,.no-options,.no-guardians){background:#e5dbc466!important;border-color:var(--dialog-line)!important;color:var(--dialog-ink)!important;border-radius:8px}
.modal-overlay :is(.choice-item,.option-item,.payment-option,.card-item,.guardian-item,.assistant-item,.coins-item,.info-option,.guardian-card){background-color:#fffaf0!important;color:var(--dialog-ink)!important;border-color:#d8cdb4!important;box-shadow:none!important;border-radius:8px;transition:background-color 120ms ease,border-color 120ms ease!important}
.modal-overlay :is(.choice-item,.option-item,.payment-option,.card-item,.guardian-item,.assistant-item,.coins-item,.info-option,.guardian-card):hover:not(.disabled){background-color:#eee8d5!important;border-color:#a9ab85!important}
.modal-overlay :is(.choice-item,.option-item,.payment-option,.card-item,.guardian-item,.assistant-item,.coins-item,.info-option).selected{background-color:#e1e6ce!important;border-color:var(--dialog-accent)!important;box-shadow:inset 0 0 0 1px #69744733!important}
.modal-overlay :is(.selection-status.valid,.payment-counter.complete,.status-available){color:#48623c!important}
.modal-overlay :is(.selection-status.invalid,.option-disabled-reason){color:#a44632!important}
.modal-overlay :is(.payment-counter,.status-used){color:var(--dialog-muted)!important;background:#ded4bd!important}
.modal-overlay :is(.divider,.modal-actions){border-color:var(--dialog-line)!important}
.modal-overlay :is(.btn,.modal-actions button,.local-score-controls button){border-radius:7px!important;border:1px solid #b6ab8e!important;padding:9px 20px;color:var(--dialog-ink)!important;background:#f9f3e5!important;box-shadow:none!important;transition:background-color 120ms ease!important}
.modal-overlay :is(.btn-confirm,.btn-primary,.btn-use-favor){background:var(--dialog-accent)!important;border-color:var(--dialog-accent)!important;color:#fffdf5!important}
.modal-overlay :is(.btn-confirm,.btn-primary,.btn-use-favor):hover:not(:disabled){background:#56613a!important}
.modal-overlay button:disabled{color:#8b826e!important;background:#ded7c6!important;border-color:#cbc1ac!important;cursor:not-allowed}
.modal-overlay :is(button,[role="button"]):focus-visible{outline:2px solid #697447;outline-offset:3px}
.modal-overlay :is(.btn-toggle,.btn-toggle-minimized){background:#eee4cd!important;color:var(--dialog-ink)!important;border:1px solid var(--dialog-line)!important}
.btn-toggle-minimized{touch-action:none;cursor:grab!important;animation:none!important;user-select:none}
.btn-toggle-minimized:active{cursor:grabbing!important}
.btn-toggle-minimized[data-moved]{position:fixed!important;left:var(--restore-left)!important;top:var(--restore-top)!important;right:auto!important;bottom:auto!important;margin:0!important;transform:none!important}
.game-header :is(.round-indicator,.first-player-indicator,.local-rules-button){display:none!important}
.game-header [data-testid="action-home"]{order:-10}
.game-header :is([data-testid="action-home"],[data-testid="action-pass"],[data-testid="action-reset-turn"],[data-testid="action-howto"]) .action-icon{display:none!important}
.game-header :is([data-testid="action-home"],[data-testid="action-pass"],[data-testid="action-reset-turn"],[data-testid="action-howto"]) .action-label{display:inline!important}
.local-language.in-header::before{content:none!important}
.local-first-player-clock{width:25px;height:26px;object-fit:contain;flex-shrink:0;margin-right:3px}
.turn-order-player:has(.local-first-player-clock) .player-indicator{display:none}
/* Research markers keep their original size, including the legacy hover rule. */
.game .research-token:not(.dragging):hover{transform:none!important;scale:none!important;transition:none!important;box-shadow:none!important}
/* Keep the player column on the left, the main board in the middle, and the
   complete assistant/opponent/log column on the right. */
.game .game-content{grid-template-columns:minmax(0,1fr) auto minmax(160px,280px);grid-template-areas:"center board opponents"}
.game .grid-center>.lower-cards{width:100%!important;margin-top:0!important}
@media(min-width:2000px){
 .game .game-content{grid-template-columns:minmax(0,1fr) auto minmax(200px,320px);grid-template-areas:"center board opponents" "lower board opponents"}
}
@media(min-width:2700px){
 .game .game-content{grid-template-columns:minmax(0,1300px) auto minmax(200px,1fr);grid-template-areas:"center board opponents"}
}
@media(orientation:landscape) and (max-height:600px){
 .game .game-content{grid-template-columns:minmax(0,1fr) auto minmax(120px,200px)}
 .game .game-content.has-logbar{grid-template-areas:"center board opponents" "cards board opponents" "logbar logbar logbar"}
}

/* Floating islands, macOS-toolbar style: no rail, the table runs to the top edge and
   three islands float on it (navigation and players, the turn, tools). One material,
   two weights, one solid button. Vue owns these nodes, so islands are drawn in CSS:
   neighbours share one surface and hairline, only the two ends are rounded, and a
   single drop-shadow on the header outlines each island as one shape. */
.game-header{--isle-bg:rgba(252,248,238,.96);--isle-line:rgba(60,45,25,.18);--isle-ink:#2f261b;--isle-muted:#6b5d47;--isle-hover:rgba(73,62,43,.09);--isle-h:36px;--isle-font:"Microsoft YaHei UI","Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;position:relative;z-index:50;justify-content:flex-start!important;align-items:center!important;gap:0!important;background:transparent!important;border:0!important;box-shadow:none!important;min-height:52px;padding:8px 10px!important;color:var(--isle-ink)!important;font:13px/1 var(--isle-font);filter:drop-shadow(0 2px 5px rgba(40,25,10,.13))}
.game-header .action-btn{font:13px/1 var(--isle-font)!important;transform:none!important;text-shadow:none!important}
/* Island segments. */
.game-header :is([data-testid="action-home"],.turn-order,[data-testid="action-reset-turn"],[data-testid="action-save-game"],.local-language,[data-testid="action-fullscreen"],.header-menu){height:var(--isle-h);box-sizing:border-box!important;display:inline-flex!important;align-items:center;margin:0!important;background:var(--isle-bg)!important;border:0.5px solid var(--isle-line)!important;border-left-width:0!important;border-right-width:0!important;border-radius:0!important;box-shadow:none!important}
.game-header [data-testid="action-home"]{order:-10;width:39px!important;padding:0 0 0 5px!important;border-left-width:.5px!important;border-radius:12px 0 0 12px!important}
.game-header .turn-order{order:-9;margin-right:auto!important;gap:2px!important;padding:0 5px 0 8px!important;border-right-width:.5px!important;border-radius:0 12px 12px 0!important;background:linear-gradient(var(--isle-line),var(--isle-line)) 0 50%/1px 18px no-repeat,var(--isle-bg)!important}
.game-header [data-testid="action-reset-turn"]{border-left-width:.5px!important;border-radius:12px 0 0 12px!important;width:39px!important;padding:0 0 0 5px!important}
.game-header .header-menu{border-right-width:.5px!important;border-radius:0 12px 12px 0!important;padding:0 5px 0 0!important}
body.local-replay .game-header .local-language{border-left-width:.5px!important;border-radius:12px 0 0 12px!important;padding-left:5px!important}
/* Icon buttons: the icon is a mask in the text colour; hover is an inset rounded wash. */
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"],.header-menu>.menu-toggle){position:relative;justify-content:center!important;color:var(--isle-muted)!important;transition:color 120ms ease!important}
.game-header :is([data-testid="action-save-game"],[data-testid="action-fullscreen"]){width:34px!important;padding:0!important}
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"],.header-menu>.menu-toggle) :is(.action-icon,.action-label){display:none!important}
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"],.header-menu>.menu-toggle)::before{content:"";position:relative;z-index:1;width:18px;height:18px;background:currentColor;-webkit-mask:var(--icon) center/contain no-repeat;mask:var(--icon) center/contain no-repeat}
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"])::after{content:"";position:absolute;top:4px;bottom:4px;right:3px;width:28px;border-radius:8px;background:transparent;transition:background-color 120ms ease}
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"]):hover:not(:disabled)::after{background:var(--isle-hover)}
.game-header :is([data-testid="action-home"],[data-testid="action-reset-turn"],[data-testid="action-save-game"],[data-testid="action-fullscreen"],.header-menu>.menu-toggle):hover:not(:disabled){color:var(--isle-ink)!important}
.game-header .action-btn:disabled{opacity:1!important;cursor:default}
.game-header .action-btn:disabled::before{opacity:.35}
.game-header [data-testid="action-home"]{--icon:url('/local-web/icons/ui-home.svg')}
.game-header [data-testid="action-reset-turn"]{--icon:url('/local-web/icons/ui-undo.svg')}
.game-header [data-testid="action-save-game"]{--icon:url('/local-web/icons/ui-save.svg')}
.game-header [data-testid="action-fullscreen"]{--icon:url('/local-web/icons/ui-maximize.svg')}
.game-header .header-menu>.menu-toggle{--icon:url('/local-web/icons/ui-dots.svg');width:28px;height:28px;padding:0!important;background:transparent!important;border:0!important;border-radius:8px!important;box-shadow:none!important}
.game-header .header-menu>.menu-toggle:hover,.game-header .header-menu>.menu-toggle.active{background:var(--isle-hover)!important}
/* Language: a globe that opens the native list; the current language shows inside it. */
.game-header .local-language{gap:0!important;padding:0 3px!important;color:var(--isle-muted)!important}
.game-header .local-language select{width:28px!important;height:28px!important;padding:0!important;border:0!important;border-radius:8px!important;appearance:none;-webkit-appearance:none;cursor:pointer;color:transparent!important;font-size:13px!important;background:url('/local-web/icons/ui-world.svg') center/18px no-repeat transparent!important;box-shadow:none!important}
.game-header .local-language select:hover{background-color:var(--isle-hover)!important}
.game-header .local-language option{color:var(--isle-ink)!important;background:#fbf6ea!important}
/* Players: the current one is tinted with their own colour; others stay quiet. */
.game-header .turn-order-player{height:28px;box-sizing:border-box;align-items:center!important;gap:5px!important;padding:0 9px!important;border:0!important;border-radius:8px!important;background:transparent!important;box-shadow:none!important;animation:none!important;color:var(--isle-muted)!important}
.game-header .turn-order-player.is-current{background:color-mix(in srgb,var(--player-color,#c9a24f) 16%,transparent)!important}
.game-header .player-turn-name{font:13px/1 var(--isle-font)!important;color:var(--isle-muted)!important}
.game-header .turn-order-player.is-current .player-turn-name{font-weight:700!important;color:var(--isle-ink)!important}
.game-header .player-timer{font:12px/1 var(--isle-font)!important;font-variant-numeric:tabular-nums!important;color:#9a8b70!important}
.game-header .player-dot{width:7px!important;height:7px!important;border:0!important;animation:none!important}
.game-header .turn-arrow{display:none!important}
.game-header .local-first-player-clock{width:16px;height:17px;margin-right:0}
.game-header .turn-order-player:has(.local-first-player-clock) .player-indicator{display:inline-flex}
.game-header .bonus-notification{order:-8;height:var(--isle-h);box-sizing:border-box;margin-left:8px;border-radius:12px!important;background:#697447!important;color:#fffdf5!important;animation:none!important}
.game-header [data-testid="action-pass"]{display:none!important}
/* The turn island: status in ink, one solid ink button. */
.game-header .local-turn-controls{display:flex;align-items:center;gap:10px;position:absolute;top:8px;left:50%;transform:translateX(-50%);height:var(--isle-h);box-sizing:border-box;padding:0 4px 0 16px;white-space:nowrap;background:var(--isle-bg);border:0.5px solid var(--isle-line);border-radius:12px}
.game-header .local-turn-controls:empty{display:none}
.game-header .local-turn-status{font:700 14px/1 var(--isle-font);color:var(--isle-ink);letter-spacing:.02em}
.game-header .local-replay-frame{font:13px/1 var(--isle-font);font-variant-numeric:tabular-nums;color:var(--isle-muted)}
.game-header .local-turn-controls .action-btn{height:28px;box-sizing:border-box;padding:0 10px!important;border:0!important;border-radius:9px!important;background:transparent!important;color:var(--isle-muted)!important;box-shadow:none!important}
.game-header .local-turn-controls .action-btn:hover:not(:disabled){background:var(--isle-hover)!important;color:var(--isle-ink)!important}
.game-header .local-turn-controls .action-btn.local-turn-action{padding:0 14px!important;font-weight:700!important;color:#fbf6ea!important;background:#2b2118!important}
.game-header .local-turn-controls .action-btn.local-turn-action:hover:not(:disabled){background:#3d3024!important;color:#fff!important}
.game-header .local-turn-controls .action-btn.local-turn-action:active:not(:disabled){background:#1f1711!important}
.game-header .local-turn-controls .action-btn.local-turn-action:disabled{color:#a3967d!important;background:rgba(43,33,24,.07)!important}
/* Turn buttons have no icon, so the narrow-screen icon-only rule must keep their text. */
.game-header .local-turn-controls .action-btn:has(.action-icon:empty) .action-label{display:inline!important}
.game-header .local-turn-controls .action-icon:empty{display:none}
/* Menu: the same material as the islands. */
.game-header .header-menu-dropdown{padding:4px!important;background:#fbf6ea!important;border:0.5px solid var(--isle-line)!important;border-radius:12px!important;box-shadow:0 10px 30px rgba(40,25,10,.18)!important}
.game-header .header-menu-dropdown .action-btn{width:100%;height:32px;justify-content:flex-start;padding:0 10px!important;background:transparent!important;border:0!important;border-radius:8px!important;color:var(--isle-ink)!important;box-shadow:none!important}
.game-header .header-menu-dropdown .action-btn:hover:not(:disabled){background:var(--isle-hover)!important}
@media(orientation:landscape) and (max-height:600px){.game-header{--isle-h:30px;min-height:42px;padding:5px 8px!important}.game-header .local-turn-controls{top:5px}}
.game .log-title{cursor:default!important}
.game .log-entry{font-size:14px!important;line-height:1.65!important;font-family:"Segoe UI","Microsoft YaHei","PingFang SC",sans-serif!important}
.game .log-details,.game .log-time{font-size:inherit!important}
.game .log-history.collapsed .log-content{display:block!important}
@media(max-width:1100px){.game-header{flex-wrap:wrap!important;row-gap:6px!important}.game-header .turn-order{margin-right:0!important}.game-header .local-turn-controls{position:static;transform:none;order:-8;margin:0 auto}}


/* Opponent and log occupy their actual layout height; no inherited overlap. */
.game .grid-opponents>.opponents-boards-container{transform:none!important;margin-left:0!important;margin-bottom:0!important;flex:0 0 auto;box-sizing:border-box;width:100%}
/* Its archived 8px top margin left the assistant frame below the market and board tops. */
.game .grid-opponents>.assistant-piles{flex-shrink:0;margin-top:0!important}
.game .grid-opponents>.lower-log{margin-top:4px;flex:1 1 auto;min-height:120px}
.game .log-entry{font-size:12.5px!important}
