/* Game topology is independent of the Unity artwork: no baked or stretched grids. */
.geography-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:20px;margin:18px 0 10px}
.geography-toolbar label{font-size:13px;font-weight:600;display:flex;gap:12px;align-items:center}
.geography-toolbar select{max-width:100%;min-height:44px;border:1px solid var(--line);border-radius:10px;background:#fffdf7;color:#253b30;padding:8px 12px;font:inherit}
.geography-toolbar p{margin:0;font-size:13px}
.geography-note{max-width:850px;line-height:1.6;margin-bottom:22px}
.card-copy .card-region{font-size:11px;line-height:1.5;color:#596957;margin:10px 0;min-height:0}
@media(max-width:600px){.geography-toolbar label{flex-direction:column;align-items:flex-start;width:100%}.geography-toolbar select{width:100%}}
.board:is(.surakarta,.star,.backgammon){display:block;position:relative}
.board:is(.surakarta,.star,.backgammon) .square{position:absolute;min-height:0;padding:0}
.expansion-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;overflow:visible}
.expansion-lines :is(line,path){stroke:var(--table-line,#463b29);stroke-width:2;fill:none;vector-effect:non-scaling-stroke}
.expansion-lines .loop-2{stroke:var(--table-line,#463b29);stroke-width:3;stroke-dasharray:7 2}
.board:is(.surakarta,.star) .square{border:0;background:transparent!important;border-radius:50%;z-index:2}
.board:is(.surakarta,.star) .square .piece{width:82%;height:82%}
.board.star .square::before{content:'';position:absolute;inset:29%;border-radius:50%;box-shadow:inset 0 2px 3px #0006;border:1px solid var(--table-line,#463b29);background:var(--table-dark,#75684d);opacity:.5}
.board.star .square.goal-first::before{outline:2px solid var(--table-ink,#25332b)}
.board.star .square.goal-second::before{outline:2px solid var(--table-paper,#fffbed)}
.board:is(.surakarta,.star) .coord{display:none}
.board:is(.jungle,.ur,.ludo) .square{background:var(--table-light,#ddc591);border:1px solid var(--table-line,#52432c)}
.board:is(.jungle,.ur,.ludo) .cell-theme-art{display:block;position:absolute;inset:0;z-index:0;background:var(--theme-motif) center/170px auto;filter:var(--light-texture-filter);pointer-events:none}
.board.jungle .square.water{background:var(--table-dark,#6a7868)}
.board.jungle .square.water .cell-theme-art{filter:var(--dark-texture-filter);opacity:.55}
.board.jungle .water::before{content:'≈';position:absolute;font-size:clamp(18px,4vw,35px);color:var(--table-paper,#fff);opacity:.8}
.board.jungle .traps::before{content:'◇';position:absolute;inset:5%;border:2px dashed var(--table-line,#52432c);color:var(--table-ink,#293125)}
.board.jungle .dens::before{content:'⌂';position:absolute;font-size:clamp(18px,4vw,35px);color:var(--table-ink,#293125)}
.board.jungle .square:is(.water,.traps,.dens)::before,.board.ur .special::before{z-index:1;pointer-events:none}
.animal-name{position:absolute;top:0;left:2%;z-index:4;font-size:clamp(8px,1vw,12px);font-weight:bold;background:var(--table-paper,#fffbed);color:var(--table-ink,#25332b);padding:1px 3px;border-radius:2px}
.board.ur .special::before{content:'✺';position:absolute;font-size:clamp(22px,5vw,44px);color:var(--table-ink,#25332b);opacity:.7}
.board.ur .piece{width:82%;height:82%}
.board.ludo .goal-first{box-shadow:inset 0 0 0 3px var(--table-ink,#25332b)}
.board.ludo .goal-second{box-shadow:inset 0 0 0 3px var(--table-paper,#fffbed)}
.board.ludo .coord{display:none}
.board.ludo .piece-badge{font-size:.6em}
.board.backgammon .square{background:transparent;border:0;border-radius:0}
.board.backgammon .cell-theme-art{display:block;position:absolute;inset:0;background:var(--table-dark,#66543d);clip-path:polygon(50% 0,100% 100%,0 100%)}
.board.backgammon .point-top .cell-theme-art{clip-path:polygon(0 0,100% 0,50% 100%)}
.board.backgammon .square:nth-child(2n) .cell-theme-art{background:var(--table-light,#dbbf8c)}
.native-art .board.backgammon .cell-theme-art{background-image:var(--theme-motif);background-size:160px;filter:var(--dark-texture-filter)}
.native-art .board.backgammon .square:nth-child(2n) .cell-theme-art{background-image:var(--theme-motif);filter:var(--light-texture-filter)}
.board.backgammon .coord{display:none}
.point-number{position:absolute;top:0;left:35%;z-index:5;font-size:clamp(9px,1vw,12px);background:var(--table-paper,#fffbed);color:var(--table-ink,#25332b);padding:1px 3px}
.point-top .point-number{top:auto;bottom:0}
.stack-column{position:absolute;bottom:0;left:5%;width:90%;height:100%;display:flex;flex-direction:column-reverse;align-items:center;justify-content:flex-start;z-index:3}
.point-top .stack-column{top:0;bottom:auto;flex-direction:column}
.board.backgammon .stack-column .piece{position:relative;display:flex;flex-shrink:0;width:100%;height:19%;max-height:19%;font-size:clamp(16px,3vw,30px)}
.board.backgammon .piece-image{width:100%;height:100%;object-fit:contain}
.board.backgammon .piece-badge{font-size:.45em}
.board .heritage-piece{display:flex;align-items:center;justify-content:center;position:relative;width:90%;height:90%;background:none!important;box-shadow:none!important;border:0!important;filter:drop-shadow(0 2px 2px #0007)}
.board .heritage-piece .piece-image{position:relative;display:block;width:100%;height:100%;object-fit:contain}
.board:is(.maze,.ludo) .heritage-piece{width:84%;height:94%}
.board.backgammon .heritage-piece{filter:drop-shadow(0 1px 1px #0008)}
.board.backgammon .square.destination::after{top:45%;z-index:5}
.board:is(.jungle,.ur,.ludo,.backgammon,.star,.surakarta) .square:focus-visible{outline:3px solid var(--table-highlight,#cf882e);outline-offset:-3px}
.board:is(.maze,.attributes) .square{background:var(--table-light,#ddc591);border:1px solid var(--table-line,#52432c)}
.board:is(.maze,.attributes) .cell-theme-art{display:block;position:absolute;inset:0;background:var(--theme-motif) center/180px auto;filter:var(--light-texture-filter);z-index:0;pointer-events:none}
.maze-walls{z-index:6}
.maze-walls line{stroke:var(--table-ink,#25392c);stroke-width:7;stroke-linecap:round;filter:drop-shadow(0 1px 1px var(--table-paper,#fff))}
.wall-preview{display:none;position:absolute;z-index:7;pointer-events:none;background:var(--table-highlight,#cb9b34);outline:2px solid var(--table-ink,#263c29)}
.board.maze[data-wall-mode="wall-h"] .square:is(:hover,:focus-visible) .wall-preview{display:block;left:0;top:calc(100% - 3px);width:200%;height:6px}
.board.maze[data-wall-mode="wall-v"] .square:is(:hover,:focus-visible) .wall-preview{display:block;left:calc(100% - 3px);top:0;height:200%;width:6px}
.board.maze.flipped .wall-preview{transform:rotate(180deg);transform-origin:0 0}
.maze-controls{display:flex;flex-wrap:wrap;gap:6px}
.maze-controls [aria-pressed=true]{background:var(--table-ink,#293f33);color:var(--table-paper,#fffbed)}
.attribute-piece{display:block;position:relative;width:100%;height:100%;filter:drop-shadow(0 1px 1px #fff8) drop-shadow(0 3px 2px #0006)}
.board.attributes .piece{width:84%;height:84%;position:relative;z-index:2}
.attribute-choice{display:flex!important;align-items:center;text-align:left;flex:1 1 210px;min-width:0;min-height:88px;font-size:12px!important;line-height:1.55}
.attribute-choice .attribute-piece{width:64px;height:64px;flex:0 0 64px;margin-right:10px}
.offered-piece{display:flex;align-items:center;gap:12px}
.offered-piece .attribute-piece{width:80px;height:80px;flex:0 0 80px}
.attribute-traits{display:block;margin-top:5px;font-size:13px}
.attribute-piece.attribute-fallback{display:grid;place-content:center;white-space:normal;background:#fff9ec;color:#2c2118;border:1px solid #5e4931;border-radius:5px;font:600 clamp(9px,1vw,13px)/1.35 sans-serif;filter:none;padding:3px}
.board.pyramid{display:block;position:relative}
.board.pyramid .square{position:absolute;border:1px solid var(--table-line,#59472e);border-radius:50%;background:var(--table-light,#d9c693);min-height:0;padding:0}
.board.pyramid .square .coord{display:none}
.board.pyramid .piece{width:90%;height:90%}
.level-label{position:absolute;color:var(--table-ink,#25392c);background:var(--table-paper,#fffbea);padding:2px 4px;font-size:clamp(8px,1vw,12px);font-weight:bold;white-space:nowrap;z-index:3}
.board:is(.push,.swarm){display:block;position:relative}
.board:is(.push,.swarm) .square{position:absolute;min-height:0;padding:0;border:0;background:transparent;border-radius:50%}
.board.push .square::before{content:'';position:absolute;inset:15%;border-radius:50%;background:var(--table-dark,#7b684d);box-shadow:inset 0 2px 4px #0006;border:1px solid var(--table-line,#52442e)}
.board.push .square.group-selected{outline:3px solid var(--table-highlight,#d19b33);outline-offset:-4px}
.board:is(.push,.swarm) .coord{display:none}
.board:is(.push,.swarm) .piece{width:88%;height:88%}
.board.swarm .square:not(.side-0) .cell-theme-art{display:block;position:absolute;inset:1px;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);background:var(--table-ink,#243c30)}
.board.swarm .square.side-2 .cell-theme-art{background:var(--table-paper,#fffbea)}
.board.swarm .square.side-0:hover{outline:1px dashed var(--table-line,#57452c)}
.board.swarm .piece-badge{font-size:.38em;min-width:46%}
.board.dojo .square{background:var(--table-light,#ddc591);border:1px solid var(--table-line,#52432c)}
.board.dojo .special{box-shadow:inset 0 0 0 4px var(--table-ink,#2a3c32)}
.board.dojo .cell-theme-art{display:block;position:absolute;inset:0;background:var(--theme-motif) center/180px auto;filter:var(--light-texture-filter);z-index:0;pointer-events:none}
.dojo-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:8px;width:100%}
.dojo-card{border:1px solid var(--table-line,#554b3c);border-radius:8px;padding:8px;background:var(--table-light,#ddcba1);color:var(--table-ink,#263d2f)}
.dojo-card strong{font-size:11px;display:block;min-height:30px}
.dojo-card svg{display:block;width:100%;max-height:95px;margin:auto}
.dojo-card.active-camp{outline:2px solid var(--table-ink,#263d2f)}
.card-empty{fill:var(--table-paper,#fffbea);opacity:.7}.card-origin{fill:var(--table-ink,#263d2f)}.card-target{fill:var(--table-highlight,#d4992e);stroke:var(--table-ink,#263d2f);stroke-width:.08}
/* Unmodified generated atlases, displayed through square windows: no stretching. */
.board .generated-piece{background:none!important;border:0!important;box-shadow:none!important;position:relative;display:flex;align-items:center;justify-content:center;width:90%;height:90%}
.token-art-window{display:block;position:relative;width:100%;aspect-ratio:1;overflow:hidden;pointer-events:none}
.token-art-crop{display:block;position:absolute;overflow:hidden}
.token-art-window img{position:absolute;height:auto!important;max-width:none!important;max-height:none!important;object-fit:initial!important;transform:none!important}
.board.jungle .square:has(.generated-piece) .animal-name{display:none}
.board.jungle .generated-piece .piece-badge{font-size:clamp(9px,1.5vw,13px);padding:1px 3px}
.native-art .board.swarm .generated-piece .piece-badge{font-size:clamp(9px,1.1vw,12px);min-width:0;padding:2px 4px;left:50%;right:auto;bottom:12%;transform:translateX(-50%)}
.board.swarm .square:has(.generated-piece) .cell-theme-art{display:none}
.board.swarm .generated-piece{width:99%;height:99%}
.board.swarm .token-art-window{width:120%;flex-shrink:0}
.board.dojo .generated-piece{width:94%;height:94%}
/* Complete v3 emblems: one square asset, no atlas/rim layering. */
.game-emblem{display:block;aspect-ratio:1;object-fit:contain;align-self:flex-start;flex-shrink:0;background:#20352b;border-radius:10px}
.card-image .game-emblem{width:100%;height:100%;object-fit:contain;transform:none}
.game-card:hover .card-image .game-emblem{transform:none}
.learn-card .game-emblem{width:80px;height:80px}
.resume-card .game-emblem{width:72px;height:72px}
@media(max-width:600px){.learn-card .game-emblem{width:64px;height:64px}}
/* Archived v1/v2 atlas styles retained for artwork regression fixtures only. */
.game-icon-atlas{display:block;position:relative;overflow:hidden;aspect-ratio:1;flex-shrink:0;width:var(--icon-size,100%);border-radius:inherit}
.game-icon-atlas img,.card-image .game-icon-atlas img{position:absolute;height:auto!important;max-width:none!important;object-fit:initial!important;transform:none!important}
.card-image .game-icon-atlas{position:absolute;top:50%;left:0;transform:translateY(-50%)}
.icon-size-72{--icon-size:72px}.icon-size-80{--icon-size:80px}
.game-medallion{display:block;position:relative;flex-shrink:0;width:var(--icon-size,100%);aspect-ratio:1;background:#20352b;border-radius:8%;isolation:isolate;overflow:hidden}
.game-medallion .game-icon-atlas,.card-image .game-medallion .game-icon-atlas{position:absolute;width:65%;height:65%;left:17.5%;top:17.5%;transform:none;border-radius:50%;overflow:hidden}
.game-medallion .medallion-rim,.card-image .game-medallion .medallion-rim{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;transform:none;z-index:1}
.card-image:has(.game-medallion){background:#20352b}
.card-image .game-medallion{position:absolute;height:100%;width:auto;aspect-ratio:1;left:50%;top:0;transform:translateX(-50%)}
.online-modes[inert]{opacity:.5;filter:grayscale(.35)}
.online-modes[inert]{display:none}
.pyramid-model{width:100%;padding:12px;border:1px solid var(--table-line,#5a513d);border-radius:12px;background:var(--table-paper,#fff7dd);color:var(--table-ink,#283d30)}
.pyramid-model .muted{color:inherit;opacity:.85}
.pyramid-model>svg{display:block;width:100%;max-height:320px}
.board.pyramid .square{border:0;background:transparent}
.native-art .board.pyramid .square::before,.board.pyramid .square::before{content:'';position:absolute;inset:9%;border:1px solid var(--table-line,#5a513d);border-radius:50%;box-shadow:inset 0 2px 3px #0003;background:transparent;opacity:1}
.board .sculpted-piece{background:none!important;border:0!important;box-shadow:none!important;position:relative;display:flex;align-items:center;justify-content:center;width:88%;height:88%;filter:drop-shadow(0 2px 1px #0005)}
.sculpted-token{display:block;width:100%;height:100%;overflow:visible}
/* One continuous surface across rectangular arenas, not a repeated stamp per cell. */
.native-art:not(.has-square-art) .board:is(.maze,.attributes,.jungle,.ludo,.ur,[data-game="reversi"]) .square .cell-theme-art{background-size:calc(var(--columns)*100%) calc(var(--rows)*100%);background-position:var(--tile-x,0%) var(--tile-y,0%);background-repeat:no-repeat}
.board.maze .sculpted-piece,.board.ludo .sculpted-piece{height:96%;width:88%}
.board .generated-piece .token-art-window{filter:drop-shadow(0 1px 2px var(--skin-accent,#b89851))}
/* Static crop rules keep the strict CSP: no inline styles in Twig. */
.icon-reversi img{width:441.73228346456693%;left:-5.118110236220472%;top:-1.1811023622047243%}
.icon-gomoku img{width:441.73228346456693%;left:-115.74803149606299%;top:-1.1811023622047243%}
.icon-hex img{width:441.73228346456693%;left:-225.98425196850394%;top:-1.1811023622047243%}
.icon-morris img{width:441.73228346456693%;left:-336.61417322834643%;top:-1.1811023622047243%}
.icon-alquerque img{width:441.73228346456693%;left:-5.118110236220472%;top:-103.14960629921259%}
.icon-jungle img{width:441.73228346456693%;left:-115.74803149606299%;top:-103.14960629921259%}
.icon-surakarta img{width:441.73228346456693%;left:-225.98425196850394%;top:-103.14960629921259%}
.icon-ur img{width:441.73228346456693%;left:-336.61417322834643%;top:-103.14960629921259%}
.icon-backgammon img{width:441.73228346456693%;left:-5.118110236220472%;top:-205.11811023622047%}
.icon-chinese_checkers img{width:441.73228346456693%;left:-115.74803149606299%;top:-205.11811023622047%}
.icon-ludo img{width:441.73228346456693%;left:-225.98425196850394%;top:-205.11811023622047%}
.icon-attributes img{width:441.73228346456693%;left:-336.61417322834643%;top:-205.11811023622047%}
.icon-maze img{width:441.73228346456693%;left:-5.118110236220472%;top:-307.4803149606299%}
.icon-pyramid img{width:441.73228346456693%;left:-115.74803149606299%;top:-307.4803149606299%}
.icon-dojo img{width:441.73228346456693%;left:-225.98425196850394%;top:-307.4803149606299%}
.icon-push img{width:441.73228346456693%;left:-336.61417322834643%;top:-307.4803149606299%}
.icon-swarm img{width:409.4890510948905%;left:-1.094890510948905%;top:-395.2554744525548%}
.icon-carrom img{width:409.4890510948905%;left:-103.64963503649636%;top:-395.2554744525548%}
.icon-renju img{width:409.4890510948905%;left:-205.83941605839416%;top:-395.2554744525548%}
.board.carrom{display:block;position:relative;background-color:var(--table-light,#e0c993)}
.board.carrom>.square{display:none}
.carrom-surface{display:block;width:100%;height:100%;position:relative;z-index:2;touch-action:pan-y}
.carrom-line{fill:none;stroke:var(--table-ink,#293d30);stroke-width:.22}
.carrom-base{fill:var(--table-highlight,#ad422e);stroke:var(--table-ink,#293d30);stroke-width:.2}
.carrom-pocket{fill:#141b19;stroke:var(--table-line,#473824);stroke-width:.4}
.carrom-white{fill:#fff4d1;stroke:#332b20;stroke-width:.2}.carrom-black{fill:#252b29;stroke:#fff4d1;stroke-width:.2}
.carrom-queen{fill:#ad243b;stroke:#fff4d1;stroke-width:.3}.carrom-striker{fill:#edd18c;stroke:#273e33;stroke-width:.35}
.carrom-surface [data-disc] image{filter:drop-shadow(0 0 .12px #20170e)}
.carrom-mark{font-size:2.8px;fill:#fff4d1;pointer-events:none}.carrom-striker~.carrom-mark{fill:#273e33}
.carrom-aim{stroke:var(--table-ink,#273e33);stroke-width:.5;pointer-events:none}
.carrom-controls{display:grid;gap:12px;width:100%}.carrom-controls label{font-size:13px}.carrom-controls input{display:block;width:100%;accent-color:var(--table-ink,#273e33)}
