/* Catan: an uncluttered manuscript table, with an overhead board. */
body.game-active .shell{max-width:none;padding:0 18px}
body.game-active .topbar{height:58px}
body.game-active .brand-icon{width:42px;height:42px}
body.game-active .brand-icon svg{width:39px;height:39px}
body.game-active .games-hero,body.game-active .site-footer{display:none}
body.game-active #games-tab{padding-bottom:12px}
.cover-cards i:first-child{background-image:url('/assets/manuscript/wood.webp')}
.cover-cards i:nth-child(2){background-image:url('/assets/manuscript/wheat-v2.webp')}
.cover-cards i:last-child{background-image:url('/assets/manuscript/ore.webp')}
.active-room-head{margin:8px 0 5px;padding:7px 12px;background:#33291e;border-color:#d2a86a50;border-radius:10px}
.room-title{display:flex;align-items:baseline;gap:12px;white-space:nowrap}
.room-title strong{font-family:Georgia,serif;font-size:20px;color:#f3d8a9}
.room-title span{font-size:11px;color:#d1bd9d}
.active-room-head .room-actions{gap:5px}
.active-room-head .small-button{padding:6px 9px;font-size:11px}
.active-room-head .invite-code{font-size:13px;padding:6px 8px;letter-spacing:.12em}
#room-error:empty{display:none}
.active-dashboard{grid-template-columns:minmax(0,1fr) minmax(292px,320px);gap:10px;align-items:stretch}
.active-dashboard .board-column{display:flex;flex-direction:column;min-height:0}
.active-dashboard .guide-strip{flex:none;margin:0 0 7px;padding:7px 11px;min-height:38px;background:#6b5134;border-color:#dfb8828a;gap:11px}
.active-dashboard .guide-strip span{color:#f7dba8}
.active-dashboard .guide-strip strong{font-size:12px;color:#fff4d9}
.compact-timer{display:flex;align-items:center;gap:5px;margin-left:auto;color:#f4d2a0;white-space:nowrap;font-size:12px}
.compact-timer strong{font-size:16px;font-variant-numeric:tabular-nums}
.compact-timer .timer-low{color:#ff9a82;animation:timer-pulse .8s infinite alternate}
.active-dashboard .board-panel{display:grid;place-items:center;flex:0 0 auto;min-height:0;height:clamp(430px,calc(100vh - 265px),760px);overflow:hidden;background:radial-gradient(circle at center,#567c81,#254c5a 66%,#1d3d4a);box-shadow:inset 0 0 70px #173541a1,0 5px 20px #0004}
.active-dashboard .board-panel::before{content:"";position:absolute;inset:-25%;pointer-events:none;z-index:0;opacity:.36;background:radial-gradient(ellipse 100px 12px at 16% 25%,#a6d7d135,transparent 75%),radial-gradient(ellipse 150px 11px at 78% 65%,#c0dfd12c,transparent 75%),radial-gradient(ellipse 80px 8px at 44% 78%,#b3d8d039,transparent 75%);background-size:390px 200px,520px 260px,310px 180px;filter:blur(5px);animation:water-drift 19s ease-in-out infinite alternate}
@keyframes water-drift{from{transform:translate(-2%,1%) rotate(-2deg)}to{transform:translate(3%,-2%) rotate(2deg)}}
.active-dashboard .game-board{min-width:0;width:100%;height:100%;max-height:100%;object-fit:contain;filter:drop-shadow(0 7px 8px #102d36a9)}
.game-board .water-ripples{pointer-events:none;animation:water-shimmer 5.5s ease-in-out infinite alternate}
@keyframes water-shimmer{from{opacity:.25}to{opacity:.68}}
.active-dashboard .board-caption{font-size:9px;top:9px;left:10px;background:#1e3b43c9}
.board-zoom-button{display:none;position:absolute;z-index:3;top:8px;right:8px;background:#1d3a43dc;color:#f4deb5;border:1px solid #d2ad77;border-radius:6px;padding:5px 7px;font-size:10px}
.game-board .harbor line{stroke:#e8d0a3;stroke-width:.06;stroke-dasharray:.12 .08}
.game-board .harbor image{filter:drop-shadow(0 .04px .06px #102a2c)}
.game-board .harbor-ribbon{fill:#ead5aa;stroke:#674a33;stroke-width:.025}
.game-board .harbor text{font-size:.17px;fill:#352a1f;text-anchor:middle;font-weight:900}
.active-dashboard .game-board .board-vertex.legal-vertex{fill:#fbe5a89e;stroke:#fff3cfbb;stroke-width:.05;filter:drop-shadow(0 0 .035px #ffdc90)}
.active-dashboard .game-board .tile-border{stroke:#f2e1bead;stroke-width:.035}
.active-dashboard .hand-panel{flex:none;margin-top:7px;padding:7px 9px;border-radius:10px}
.active-dashboard .hand-heading h3{margin:0;font-size:12px}
.active-dashboard .resource-hand{display:flex;gap:6px;margin-top:5px}
.active-dashboard .resource-card{aspect-ratio:auto;width:72px;height:58px;border-width:1px;border-radius:6px}
.active-dashboard .resource-card-caption{padding:15px 4px 3px;font-size:9px}
.active-dashboard .resource-card-caption span{min-width:18px;height:18px}
.active-dashboard .game-side{display:flex;flex-direction:column;gap:7px;max-height:none;overflow:visible;padding:0;min-width:0}
.active-dashboard .side-panel{padding:9px;border-radius:10px;background:#34291d;border-color:#d5aa7445}
.active-dashboard .side-panel h3{margin:0;font-size:13px;color:#f8dbad}
.active-dashboard .section-heading span{font-size:9px}
.turn-row{display:flex;gap:8px;align-items:center;margin-top:6px}
.active-dashboard .dice-area{margin:0;padding:4px;gap:2px;flex:none;background:#201b17}
.active-dashboard .die{width:35px;height:35px}
.active-dashboard .dice-area strong{font-size:17px;margin:0 4px}
.turn-buttons{flex:1;min-width:0;font-size:11px;color:#d4bc9b}
.turn-buttons button{width:100%;padding:9px 4px;font-size:11px}
.turn-buttons .primary-button{animation:roll-cue 2.2s ease-in-out infinite}
@keyframes roll-cue{50%{box-shadow:0 0 0 4px #f4c78535,0 0 23px #f7c77b6c}}
.compact-build .section-heading{margin-bottom:7px}
body.game-setup .compact-build .build-grid{display:none}
body.game-setup .compact-build::after{content:"Opening outposts and roads are free. Tap a glowing intersection or path on the board.";display:block;font-size:11px;line-height:1.5;color:#f0d7ad;padding:9px;border:1px dashed #d1a87570;border-radius:7px}
.build-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}
.build-tile{display:grid;grid-template-columns:35px 1fr;grid-template-rows:auto auto auto;column-gap:5px;align-items:center;text-align:left;min-height:66px;border-radius:7px;border:1px solid #d4a97255;background:#f2d09d12;color:#f9e7c9;padding:5px;cursor:pointer}
.build-tile:hover:not(:disabled),.build-tile.selected{border-color:#f8dfaa;background:#c9945160;transform:translateY(-1px)}
.build-tile.available:not(.selected){animation:build-cue 2.4s ease-in-out infinite}
@keyframes build-cue{50%{border-color:#f1cc8b;box-shadow:0 0 0 2px #f3c7802c}}
.build-tile:disabled{opacity:.48;cursor:not-allowed}
.build-tile>img{grid-row:1/4;width:34px;height:40px;object-fit:contain;filter:drop-shadow(0 2px 2px #0008)}
.build-tile strong{font-size:11px;line-height:1.1}
.build-tile small{font-size:9px;color:#cdb793}
.build-tile .cost-list{gap:1px}
.build-tile .cost-token{width:15px;height:19px}
.build-tile .cost-token small{font-size:7px;padding:0 2px}
.compact-dev{display:flex;gap:4px;overflow-x:auto;max-height:58px;margin-top:5px}
.compact-dev>span{display:flex;align-items:center;gap:3px;flex:none;font-size:10px;background:#1e1b18;padding:3px;border-radius:4px}
.compact-dev button{border:0;border-radius:3px;background:#d9ac74;color:#2b1c10;font-size:9px}
.merchant-card{width:100%;min-height:94px;display:flex;align-items:center;gap:7px;text-align:left;border:1px solid #e8bb7a84;border-radius:10px;background:linear-gradient(110deg,#714528,#48301e);color:#fbe6bd;padding:5px 8px 5px 1px;cursor:pointer;position:relative;overflow:hidden;box-shadow:0 3px 10px #0003}
.merchant-card:hover{border-color:#ffdfa9;background:linear-gradient(110deg,#87532f,#533620)}
.merchant-portrait{position:relative;display:block;width:83px;height:81px;flex:none;overflow:hidden}
.merchant-portrait .merchant-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center bottom}
.merchant-portrait .merchant-half,.merchant-portrait .merchant-open{opacity:0}
.merchant-card.is-talking .merchant-half{animation:merchant-half-frame .54s steps(1,end) infinite}
.merchant-card.is-talking .merchant-open{animation:merchant-open-frame .54s steps(1,end) infinite}
@keyframes merchant-half-frame{0%,24%,50%,74%,100%{opacity:0}25%,49%{opacity:1}}
@keyframes merchant-open-frame{0%,49%,75%,100%{opacity:0}50%,74%{opacity:1}}
.merchant-copy{display:grid;gap:4px;min-width:0}
.merchant-copy strong{font-family:Georgia,serif;font-size:14px}
.merchant-copy small{font-size:10px;line-height:1.3;color:#f3d7a9}
.merchant-card.is-talking .merchant-copy small{background:#fbebc7;color:#44301c;padding:5px 7px;border-radius:8px;animation:speech-pop .25s ease-out}
@keyframes speech-pop{from{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}
.merchant-arrow{margin-left:auto;align-self:start;font-size:16px;color:#f5d6a4}
.trade-alert{display:flex;align-items:center;justify-content:space-between;padding:7px;border:1px solid #f7d195;border-radius:8px;background:#654528;font-size:11px}
.trade-alert button{background:#edc98e;border:0;border-radius:5px;color:#2d2017;padding:5px}
.score-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3px;margin-top:6px}
.score-chip{display:flex;align-items:center;min-width:0;gap:4px;background:#f4d5aa0d;border-radius:5px;padding:4px 5px;font-size:10px}
.score-chip.current{background:#cf995543;outline:1px solid #e3b677}
.score-chip i{width:10px;height:10px;border-radius:50%;flex:none;border:1px solid #f5dab5}
.score-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.score-chip b{margin-left:auto;color:#f3d394}
.game-drawer-backdrop{position:fixed;inset:0;background:#100d0a99;z-index:15}
.game-drawer{position:fixed;right:0;top:0;bottom:0;width:min(410px,100vw);z-index:16;background:#32271c;border-left:2px solid #c89c67;box-shadow:-12px 0 35px #0007;padding:18px;overflow:auto;color:#f5e1c1}
.drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px}
.drawer-head h3{font-family:Georgia,serif;font-size:23px;margin:0}
.drawer-close{background:#664b30;color:#f9e3bd;border:1px solid #c49a68;border-radius:6px;padding:5px 9px}
.drawer-switch{display:flex;gap:6px;margin-bottom:16px}
.drawer-switch button{flex:1;padding:9px;border-radius:7px;border:1px solid #b48857;background:#433322;color:#e9cd9f}
.drawer-switch button.active{background:#c4985a;color:#271a10;font-weight:bold}
.drawer-form{display:grid;gap:12px}
.drawer-form label{display:grid;gap:5px;color:#e9cfaa;font-size:12px}
.drawer-form select,.drawer-form input{width:100%;padding:10px;border:1px solid #b68b5f;border-radius:7px;background:#211b17;color:#f9e8c9}
.drawer-form .primary-button{width:100%}
.trade-arrow{text-align:center;color:#f2d497;font-family:Georgia,serif;font-size:22px}
.trade-instruction,.rules-brief{font-size:13px;color:#ead3b0;line-height:1.5;margin-bottom:13px}
.game-drawer .trade-fields{gap:10px}
.game-drawer .trade-request{margin-top:16px}
.game-drawer .event-list,.game-drawer .chat-list{max-height:none;font-size:12px}
.game-drawer .chat-list{height:calc(100vh - 170px);overflow:auto;align-content:start}
.game-drawer .chat-form input{background:#221b15}
@media(max-width:1050px){.active-dashboard{grid-template-columns:minmax(0,1fr) 260px}.build-tile{grid-template-columns:27px 1fr}.build-tile>img{width:27px}}
@media(max-width:800px){body.game-active .shell{padding:0 9px}.active-dashboard{grid-template-columns:1fr}.active-dashboard .board-panel{height:min(72vw,640px);min-height:350px}.active-dashboard .game-side{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.active-dashboard .compact-score{grid-column:1/-1}.active-room-head{flex-wrap:wrap}.active-room-head .room-actions{width:100%}}

/* Immersive table sizing: the map and merchant read as game pieces, not sidebar thumbnails. */
body.game-active .shell{padding:0 8px}
.active-dashboard{grid-template-columns:minmax(0,1fr) minmax(285px,300px)}
.active-dashboard .board-panel{height:clamp(540px,calc(100dvh - 175px),1080px)}
.merchant-card{min-height:162px;gap:2px;padding:4px 8px 4px 0;background:linear-gradient(105deg,#6d4328,#3c2b22)}
.merchant-portrait{width:158px;height:155px;margin-left:-13px}
.merchant-copy strong{font-size:17px;line-height:1.15}.merchant-copy small{font-size:11px}
@media(max-width:800px){.active-dashboard{grid-template-columns:1fr}.active-dashboard .board-panel{height:min(94vw,720px);min-height:365px}.merchant-card{min-height:125px}.merchant-portrait{width:125px;height:120px}}
@media(max-width:550px){.active-dashboard .game-side{display:flex}.active-dashboard .board-panel{height:70vw;min-height:300px}.active-dashboard .board-panel.zoomed{display:block;overflow:auto}.active-dashboard .board-panel.zoomed .game-board{width:720px;height:720px;max-height:none}.board-zoom-button{display:block}.active-dashboard .resource-card{width:18%;height:60px}.active-room-head .small-button{font-size:10px;padding:5px 7px}.room-title strong{font-size:17px}.room-title span{font-size:10px}.guide-strip{gap:5px!important}.active-dashboard .guide-strip strong{font-size:10px}.active-dashboard .guide-strip span{font-size:8px}.compact-timer strong{font-size:12px}}

/* Board-local, glanceable turn/roll feedback. Important actions no longer live in the sidebar. */
.active-dashboard .board-panel.board-your-turn{border-color:#f4d291;box-shadow:inset 0 0 70px #173541a1,0 0 0 2px #f1c77b55,0 5px 20px #0004}
.board-hud{position:absolute;z-index:4;top:10px;left:10px;right:10px;display:flex;align-items:flex-start;justify-content:space-between;gap:8px;pointer-events:none}
.board-turn-badge,.board-clock,.board-roll-tray{border:1px solid #efd7a180;background:linear-gradient(135deg,#2e261cF0,#493422EA);color:#f9e4bf;box-shadow:0 6px 20px #10242d99, inset 0 1px #fff2}
.board-turn-badge{border-left:5px solid var(--seat-color);border-radius:9px;padding:7px 11px;max-width:min(58%,350px);display:grid;gap:1px}
.board-turn-badge.is-you{background:linear-gradient(135deg,#5f4229F5,#37291eF0)}
.board-turn-badge small{font-size:9px;font-weight:850;letter-spacing:.14em;color:#edd091}.board-turn-badge strong{font:22px Georgia,serif;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.board-turn-badge span{font-size:10px;line-height:1.2;color:#e8d6ba}
.board-clock{border-radius:8px;padding:9px 12px;font-size:14px;white-space:nowrap}.board-clock strong{font-variant-numeric:tabular-nums;font-size:18px}.board-clock .timer-low{color:#ff9b83}
.board-roll-tray{position:absolute;z-index:4;left:10px;bottom:10px;width:min(240px,36%);min-height:42px;border-radius:9px;padding:7px 10px;pointer-events:none}
.board-roll-tray small{display:block;font-size:9px;font-weight:850;letter-spacing:.12em;color:#f2d095}.board-roll-tray>div{display:flex;align-items:center;gap:3px;margin-top:3px}.board-roll-tray .die{width:32px;height:32px;flex:none}.board-roll-tray strong{margin-left:5px;font:26px Georgia,serif;color:#ffdf9c}.board-roll-tray span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:10px;color:#f3e2c9}
.board-roll-tray.rolling .die{animation:board-dice-settle .7s ease-out both}.board-roll-tray.rolling .die:nth-child(2){animation-delay:.11s}
@keyframes board-dice-settle{0%{transform:translateY(-22px) rotate(-65deg);opacity:.2}62%{transform:translateY(3px) rotate(7deg);opacity:1}100%{transform:none;opacity:1}}
.board-command{position:absolute;z-index:5;right:12px;bottom:12px;display:flex;align-items:center;justify-content:flex-end;max-width:42%}.board-command button,.board-command span{border:1px solid #ffe7a1;border-radius:9px;padding:12px 17px;background:linear-gradient(#f5d796,#d59a53);color:#352318;font-size:15px;font-weight:850;box-shadow:0 5px 0 #754421,0 8px 20px #071b2788;cursor:pointer}.board-command button:hover{filter:brightness(1.11);transform:translateY(-2px)}.board-command button:active{transform:translateY(3px);box-shadow:0 2px 0 #754421}.board-command .board-roll-button{animation:roll-cue 2.2s ease-in-out infinite}.board-command span{background:#38291f;color:#f7deb2;font-size:11px;cursor:default}
.board-event{position:absolute;z-index:6;top:26%;left:50%;transform:translateX(-50%);width:min(340px,68%);padding:14px 18px;text-align:center;pointer-events:none;border:2px solid #f9dc9c;border-radius:14px;background:linear-gradient(135deg,#ffedc8f5,#dab57df5);color:#33291f;box-shadow:0 0 0 5px #f9db9440,0 18px 48px #071923aa;animation:board-event-arrive .45s cubic-bezier(.2,.8,.25,1) both}
@keyframes board-event-arrive{from{opacity:0;transform:translate(-50%,-18px) scale(.9)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
.board-event small{display:block;color:#72532a;font-size:10px;font-weight:850;letter-spacing:.17em}.board-event>strong{display:block;font:36px Georgia,serif;line-height:1.1;margin:5px 0}.board-event>span{display:block;font-size:11px;line-height:1.35}.board-event-dice{display:flex;justify-content:center;align-items:center;gap:8px;margin:6px 0}.board-event-dice .die{width:45px;height:45px;filter:drop-shadow(0 3px 3px #5d442e66)}.board-event-dice strong{font:40px Georgia,serif;margin-left:4px}
.board-event-news{top:23%;width:min(300px,62%);padding:10px 13px}.board-event-news>strong{font-size:25px}
.board-trade-offer{position:absolute;z-index:7;top:74px;right:11px;width:min(240px,34%);display:grid;gap:3px;text-align:left;border:2px solid #ffe1a0;border-radius:9px;padding:9px 12px;background:#f5daa7;color:#3a261b;box-shadow:0 8px 24px #0a1d28a0;cursor:pointer;animation:trade-invite 1.8s ease-in-out infinite alternate}.board-trade-offer strong{font:19px Georgia,serif}.board-trade-offer span{font-size:10px;line-height:1.25}
@keyframes trade-invite{to{box-shadow:0 0 0 4px #ffdc844f,0 8px 24px #0a1d28a0}}
.game-board .tile-group.producing-tile .tile-border{stroke:#ffe48b;stroke-width:.11;filter:drop-shadow(0 0 .11px #ffeb9b);animation:harvest-glow .7s ease-in-out 3 alternate}.game-board .tile-group.producing-tile .number-disc{fill:#fff0bf;stroke:#d4823f;stroke-width:.075}
@keyframes harvest-glow{to{stroke:#fff;stroke-width:.18;opacity:.72}}
@media(max-width:800px){.board-turn-badge strong{font-size:17px}.board-event{top:28%}}
@media(max-width:550px){.active-dashboard .board-panel{height:min(106vw,500px);min-height:380px}.board-hud{top:7px;left:7px;right:7px}.board-turn-badge{max-width:65%;padding:5px 8px}.board-turn-badge small{font-size:7px}.board-turn-badge strong{font-size:15px}.board-turn-badge span{font-size:8px}.board-clock{padding:6px;font-size:10px}.board-clock strong{font-size:12px}.board-roll-tray{left:7px;bottom:7px;width:45%;padding:5px 6px}.board-roll-tray small{font-size:7px}.board-roll-tray .die{width:25px;height:25px}.board-roll-tray strong{font-size:19px}.board-roll-tray span{font-size:8px}.board-command{right:7px;bottom:7px;max-width:47%}.board-command button,.board-command span{padding:9px 8px;font-size:11px}.board-event{top:28%;width:72%;padding:9px}.board-event>strong{font-size:24px}.board-event-dice .die{width:32px;height:32px}.board-event-dice strong{font-size:28px}.board-event>span{font-size:9px}.board-zoom-button{top:62px;right:7px}}
@media(max-width:550px){.board-trade-offer{top:68px;right:7px;width:50%;padding:6px 7px}.board-trade-offer strong{font-size:14px}.board-trade-offer span{font-size:8px}}
@media(prefers-reduced-motion:reduce){.board-roll-tray.rolling .die,.board-command .board-roll-button,.board-event,.board-trade-offer,.game-board .tile-group.producing-tile .tile-border{animation:none}}

/* Production and construction are reported where they happen, not in a modal. */
.game-board .board-vertex-hit{fill:transparent;stroke:transparent;pointer-events:all;cursor:pointer}
.game-board .board-edge-hit{fill:none;stroke:transparent;stroke-width:.39;pointer-events:stroke;cursor:pointer}
.active-dashboard .board-viewport{position:absolute;z-index:1;inset:0;display:grid;place-items:center;overflow:hidden}
.game-board [data-board-vertex].piece-arrival,.game-board [data-board-edge].piece-arrival{transform-box:fill-box;transform-origin:center;animation:piece-arrival 1.5s ease-out both;filter:drop-shadow(0 0 .18px #ffe6a1)}
@keyframes piece-arrival{0%{opacity:.25;transform:scale(.4)}25%{opacity:1;transform:scale(1.42)}50%{transform:scale(.92)}70%{transform:scale(1.12)}100%{transform:scale(1)}}
.game-board .tile-group.collecting-hex .tile-border{stroke:#fff4b3;stroke-width:.10;filter:drop-shadow(0 0 .2px #ffe4a1)}
.resource-flight{position:fixed;z-index:9999;width:54px;height:72px;object-fit:cover;border:2px solid #ffedc1;border-radius:7px;box-shadow:0 6px 18px #0009,0 0 25px #ffe7a8b8;pointer-events:none}
.resource-receipt{position:fixed;z-index:9998;display:flex;align-items:center;gap:7px;min-width:136px;max-width:200px;min-height:54px;padding:6px 10px;transform:translate(-50%,-50%);border:1px solid #ffe5a8;border-radius:10px;background:#2c251dee;color:#ffefc9;box-shadow:0 9px 24px #0009,0 0 18px #ecc47680;pointer-events:none}
.resource-receipt img{width:30px;height:40px;object-fit:cover;border-radius:3px}.resource-receipt span{display:grid;min-width:0}.resource-receipt strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resource-receipt small{font-size:10px;color:#ffe09a}
.resource-card.card-received,.score-chip.card-received{animation:card-received .7s ease-out}
@keyframes card-received{20%{box-shadow:0 0 0 3px #ffdf85,0 0 30px #f7c66a;transform:translateY(-5px)}100%{box-shadow:none;transform:none}}
.score-chip small{margin-left:auto;color:#e0c18d;font-size:9px;white-space:nowrap}.score-chip b{margin-left:4px}
@media(max-width:550px){
  .active-dashboard .board-panel.zoomed{display:grid;overflow:hidden}
  .active-dashboard .board-panel.zoomed .board-viewport{display:block;overflow:auto;touch-action:pan-x pan-y;overscroll-behavior:contain}
  .board-zoom-button,.board-command button,.active-room-head .small-button{min-height:44px;min-width:44px}
  .board-zoom-button{padding:10px 8px;font-size:11px}
  .active-dashboard .build-tile{min-height:68px}
  .resource-flight{width:42px;height:56px}
}
@media(prefers-reduced-motion:reduce){.game-board [data-board-vertex].piece-arrival,.game-board [data-board-edge].piece-arrival,.resource-card.card-received,.score-chip.card-received{animation:none}}
