@font-face{font-family:PhoXiangqi;src:url('art/xiangqi-pieces.ttf') format('truetype');font-weight:700;font-display:swap}
/* V84 board experience, GPL-3.0-or-later. Existing V83 styles are unchanged. */
*{box-sizing:border-box}body{margin:0;background:#fff8ed;color:#352944;font-family:system-ui,-apple-system,"Segoe UI",sans-serif}body.chess{--accent:#733bb0;--soft:#f3eafa}body.xiangqi{--accent:#ae282d;--soft:#ffebe2}button,select{font:inherit}button,a,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid #d5c9ba;background:#fffdf8;color:#43392f;border-radius:999px;padding:10px 16px;font-weight:750;min-height:44px}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid var(--accent,#087f4f);outline-offset:3px}a{color:var(--accent)}[hidden]{display:none!important}.board-main{max-width:1260px;margin:0 auto;padding:20px 24px 40px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.page-heading h1{color:var(--accent);font-size:clamp(1.7rem,3vw,2.7rem);margin:2px 0}.page-heading p{margin:5px 0}.eyebrow{font-size:.74rem;font-weight:850;letter-spacing:.08em;color:var(--accent)}.return-link{white-space:nowrap;text-decoration:none;font-weight:750}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:22px;align-items:start}.table-scene{background:linear-gradient(135deg,#fff4d9,var(--soft));border:1px solid #ead8be;border-radius:26px;padding:16px 22px 22px;box-shadow:0 12px 35px #72553615;min-width:0;position:relative;overflow:hidden}.opponent{height:164px;display:flex;justify-content:center;align-items:center;gap:18px}.mascot{width:158px;height:158px;flex:none;background-image:url('art/expressions-polished.webp');background-repeat:no-repeat;background-size:300% 200%;background-position:0% 0%;filter:drop-shadow(0 8px 5px #663c2320)}.expression-1{background-position:50% 0%}.expression-2{background-position:100% 0%}.expression-3{background-position:0% 100%}.expression-4{background-position:50% 100%}.expression-5{background-position:100% 100%}.opponent-copy{max-width:250px;min-width:0}.opponent-copy strong{color:#087f4f}.opponent-copy p{padding:12px 15px;border-radius:18px 18px 18px 3px;background:#fffdf6;box-shadow:0 4px 14px #76532812;line-height:1.4;margin:5px 0}.opponent-copy span{font-size:.7rem;color:#665647}.turn-bar,.player-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 4px;font-size:.92rem}.turn-bar b{color:var(--accent)}.turn-bar time{font-variant-numeric:tabular-nums;background:#fff9;padding:5px 12px;border-radius:20px}.wood-table{width:min(100%,570px);margin:auto;padding:14px;border-radius:15px;background:linear-gradient(135deg,#bd8348,#986133);box-shadow:0 8px 0 #734322,0 13px 24px #70472630}.board{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));grid-template-rows:repeat(8,minmax(0,1fr));aspect-ratio:1;width:100%;position:relative;isolation:isolate;border:2px solid #7f4f28;overflow:hidden}.square{padding:0;border-radius:0;border:0;min-width:0;min-height:0;position:relative;display:grid;place-items:center;font-family:"DejaVu Sans","Segoe UI Symbol",serif;font-size:clamp(23px,4vw,49px);touch-action:manipulation;user-select:none;color:#fffaf0;background:#f0d9af;text-shadow:0 1px 0 #6c461e,-1px 0 #6c461e,1px 0 #6c461e,0 -1px #6c461e;z-index:1}.square.dark{background:#9e6e43}.square.black-piece{color:#29222d;text-shadow:0 1px #f4dfbb}.square.selected{box-shadow:inset 0 0 0 4px #fdcb44}.square.last{background:#d3b78c}.square.legal::after{content:'';position:absolute;width:22%;aspect-ratio:1;border-radius:50%;background:#22805299;pointer-events:none}.square.legal:has(.piece)::after{width:90%;background:none;border:3px solid #168a65}.square.check{box-shadow:inset 0 0 0 4px #bf292e}.square.hinted{box-shadow:inset 0 0 0 4px #358bde}.square .coordinate{position:absolute;font:650 9px system-ui;bottom:1px;left:3px;color:#302219;text-shadow:none}.piece{pointer-events:none}.xiangqi .wood-table{width:min(100%,535px);padding:12px}.xiangqi .board{grid-template-columns:repeat(9,minmax(0,1fr));grid-template-rows:repeat(10,minmax(0,1fr));aspect-ratio:9/10;background:#f4d49d;border:0;overflow:visible}.xiangqi .square{background:transparent;overflow:visible;font-family:serif;font-size:clamp(20px,3vw,31px);text-shadow:none}.xiangqi .square::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(to bottom,transparent calc(50% - .5px),#87582e calc(50% - .5px),#87582e calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(to right,transparent calc(50% - .5px),#87582e calc(50% - .5px),#87582e calc(50% + .5px),transparent calc(50% + .5px))}.xiangqi .square.file-start::before{clip-path:inset(0 0 0 50%)}.xiangqi .square.file-end::before{clip-path:inset(0 50% 0 0)}.xiangqi .square.rank-start::before{clip-path:inset(50% 0 0 0)}.xiangqi .square.rank-end::before{clip-path:inset(0 0 50% 0)}.xiangqi .square.river-top::before{background:linear-gradient(to bottom,transparent calc(50% - .5px),#87582e calc(50% - .5px),#87582e calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(to right,transparent calc(50% - .5px),#87582e calc(50% - .5px),#87582e calc(50% + .5px),transparent calc(50% + .5px));clip-path:inset(0 0 50% 0)}.xiangqi .square.river-bottom::before{clip-path:inset(50% 0 0 0)}.xiangqi .square.river-edge::before{clip-path:none}.xiangqi .piece{font-family:PhoXiangqi,serif;display:grid;place-items:center;width:86%;height:86%;border-radius:50%;border:2px solid currentColor;box-shadow:0 3px 0 #a97738,0 5px 5px #5a391a55;background:radial-gradient(circle at 30% 20%,#fff2cf,#e4b772);color:#ad2225;font-weight:850}.xiangqi .black-piece .piece{color:#342b25}.xiangqi .square.selected{box-shadow:none;background:#ffdf5a90;border-radius:50%}.river-label{position:absolute;left:8%;right:8%;top:47.7%;height:5%;text-align:center;letter-spacing:.3em;color:#775329;font:750 clamp(8px,1.1vw,13px) serif;z-index:0;pointer-events:none}.palace{position:absolute;left:38.888%;width:22.222%;height:20%;z-index:0;pointer-events:none;background:linear-gradient(42deg,transparent calc(50% - .6px),#87582e calc(50% - .6px),#87582e calc(50% + .6px),transparent calc(50% + .6px)),linear-gradient(-42deg,transparent calc(50% - .6px),#87582e calc(50% - .6px),#87582e calc(50% + .6px),transparent calc(50% + .6px))}.palace.top{top:5%}.palace.bottom{bottom:5%}.game-actions{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:12px}.game-actions button{font-size:.84rem;padding:9px 14px}.player-bar{margin-top:8px}.player-bar span{font-size:1.1rem;max-width:65%;overflow-wrap:anywhere}#message{font-size:.86rem;line-height:1.4;min-height:1.3em;margin:12px 0 0;color:#684432;text-align:center}.game-sidebar{display:flex;flex-direction:column;gap:14px}.panel{background:#fffdfa;border:1px solid #e6dccc;padding:18px;border-radius:20px}.panel h2{font-size:1.04rem;margin:0 0 12px;color:var(--accent)}.panel p{font-size:.86rem;line-height:1.45}.settings label{display:block;font-size:.86rem;font-weight:750;margin-bottom:5px}.settings select{width:100%;min-height:44px;border:1px solid #d6c8b7;border-radius:12px;padding:8px 10px;background:#fff;margin-bottom:14px}.primary{background:var(--accent);color:white;border-color:transparent;box-shadow:0 4px 0 #43224425}.settings .primary{width:100%}.secondary{background:var(--soft);color:var(--accent);border-color:transparent}.fine{font-size:.74rem!important;color:#716255}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;text-align:center}.stats b{font-size:1.25rem;color:var(--accent);display:block}.stats span{font-size:.72rem}.move-list{font-size:.78rem;max-height:160px;overflow:auto;display:grid;grid-template-columns:1fr 1fr;gap:4px;padding-left:25px}#history{padding-left:20px;font-size:.76rem;line-height:1.7}summary{cursor:pointer;font-weight:750;font-size:.85rem}#result{background:#fffdf5;border:2px solid var(--accent);border-radius:20px;padding:16px;text-align:center;margin-top:16px}#result h2{color:var(--accent);margin-top:0}dialog{max-width:min(90vw,420px);border:0;border-radius:22px;padding:24px;box-shadow:0 20px 90px #0006}dialog::backdrop{background:#30231866}#promotion-options{display:flex;gap:8px;margin-bottom:18px}#promotion-options button{font-size:2.5rem;padding:6px 14px}#reward-info{color:var(--accent);font-weight:750}#puzzle-progress{color:#087f4f;font-weight:750}
@media(max-width:900px){.game-layout{grid-template-columns:minmax(0,1fr)}.game-sidebar{display:grid;grid-template-columns:1fr 1fr}.wood-table{width:min(100%,535px)}.page-heading{margin-bottom:10px}.board-main{padding:14px 14px 30px}.square{font-size:clamp(24px,8vw,48px)}}
@media(max-width:550px){.board-main{padding:12px 8px 26px}.table-scene{padding:10px 8px 16px;border-radius:20px}.opponent{height:120px;gap:8px}.mascot{width:118px;height:118px}.opponent-copy p{font-size:.78rem;padding:9px 10px}.opponent-copy span{font-size:.64rem}.opponent-copy strong{font-size:.82rem}.turn-bar{font-size:.79rem;padding:8px 4px}.wood-table{padding:8px;border-radius:10px}.xiangqi .wood-table{padding:8px}.xiangqi .square{font-size:clamp(19px,5.7vw,29px)}.square{font-size:clamp(24px,8.5vw,41px)}.game-sidebar{grid-template-columns:minmax(0,1fr)}.page-heading .return-link{font-size:.72rem}.page-heading p{font-size:.79rem}.page-heading .eyebrow{font-size:.68rem}.game-actions{gap:5px}.game-actions button{padding:8px 11px;font-size:.76rem}.panel{padding:16px}.river-label{font-size:9px}.player-bar{font-size:.8rem}.square .coordinate{font-size:8px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.xiangqi #captured{font-family:PhoXiangqi,serif}

/* Sculpted, font-independent chess silhouettes; board hit areas stay unchanged. */
.chess .square .piece{display:block;width:88%;height:88%;font-size:0;background-size:contain;background-position:center;background-repeat:no-repeat;filter:drop-shadow(0 3px 2px #39261d45)}
.xiangqi .square .piece{border:3px double currentColor;background:radial-gradient(ellipse at 35% 18%,#fff9e4 0%,#efd6a5 48%,#cc934d 100%);box-shadow:inset 0 0 0 2px #ffffff65,inset 0 -3px 3px #98632530,0 3px 0 #91602d,0 5px 7px #5a391a45}

/* Production 3D sets share one image request per game, with crisp real labels. */
.chess .piece,.chess .captured-piece{display:inline-block;width:24px;height:28px;font-size:0;background-image:url('art/chess-pieces-3d.webp');background-size:300% 400%;background-repeat:no-repeat;vertical-align:middle}
.chess .square .piece{background-size:300% 400%;filter:none}
.chess #promotion-options button{width:66px;height:78px;padding:5px;display:grid;place-items:center}
.chess #promotion-options .piece{width:52px;height:65px}
.xiangqi .square .piece{background-color:transparent;background-image:url('art/xiangqi-discs-3d.webp');background-size:200% 100%;background-repeat:no-repeat;border:0;box-shadow:none;width:98%;height:98%;text-shadow:0 1px 0 #fff6;line-height:1}
.xiangqi #captured .captured-piece{display:inline-grid;place-items:center;width:28px;height:28px;background-image:url('art/xiangqi-discs-3d.webp');background-size:200% 100%;background-repeat:no-repeat;font-size:17px;color:#ad2225}
.xiangqi #captured .captured-piece[data-piece="k"],.xiangqi #captured .captured-piece[data-piece="a"],.xiangqi #captured .captured-piece[data-piece="b"],.xiangqi #captured .captured-piece[data-piece="n"],.xiangqi #captured .captured-piece[data-piece="r"],.xiangqi #captured .captured-piece[data-piece="c"],.xiangqi #captured .captured-piece[data-piece="p"]{color:#342b25}

.chess .square .piece{align-self:end;margin-bottom:7%}
.chess #promotion-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.chess #promotion-options button{width:100%;height:auto;aspect-ratio:1;min-width:0;min-height:44px;padding:0}
