@font-face{font-family:BoardSerif;src:url(../fonts/board-serif.woff2) format("woff2");font-weight:600;font-display:swap}:root{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;color:#422b1d;background:#f7f1e6;font-synthesis:none;--ink:#422b1d;--muted:#76614d;--brown:#70452d;--line:#d7c9b6;--red:#ac3228;--page:#f7f1e6;color-scheme:light}*{box-sizing:border-box}html{touch-action:manipulation}body{margin:0;min-width:300px}button,a,dialog,.rules-copy{touch-action:manipulation}button{font:inherit;cursor:pointer;color:inherit;-webkit-tap-highlight-color:transparent}button[aria-disabled=true]{cursor:default}a{color:inherit;text-underline-offset:4px}button,a{outline-offset:4px}button:focus-visible,a:focus-visible{outline:3px solid #a3422b}::selection{background:#dec6a0;color:#382013}body,dialog{scrollbar-color:#af9475 #f7f1e6}svg{display:block}h1,h2,h3,p{margin:0}h1,h2,h3,.game-description strong,.piece,.river-text{font-family:BoardSerif,Songti SC,"Noto Serif SC",serif;font-weight:600}button svg,a svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}.shell{margin:0 auto;padding:calc(14px + env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) calc(16px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));max-width:1080px}.lobby{max-width:920px}.back-link,.text-button{display:inline-flex;gap:5px;align-items:center;justify-content:center;min-height:44px;background:none;border:0;padding:8px 0;text-decoration:none}.back-link{font-size:14px}.lobby h1{font-size:34px;line-height:1.3;margin:14px 0 22px;letter-spacing:.02em}.game-choices{display:grid;gap:12px}.game-choice{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--line);background:transparent;border-radius:10px;text-align:left;padding:14px;min-width:0}.game-choice.active{border:2px solid #a37748;padding:13px;background:#fffaf080}.game-description{display:grid;gap:8px;min-width:0}.game-description strong{font-size:26px;line-height:1.25}.game-description>span{font-size:13px;line-height:1.5;color:var(--muted)}.game-description small{font-size:11px;color:var(--brown);line-height:1.5}.game-choice .board{width:38%;max-width:155px;flex:none}.game-choice .xiangqi-board{width:34.2%;aspect-ratio:9/10;overflow:hidden}.game-choice .xiangqi-board .board-lines{height:100%}.setup{display:grid;gap:14px;padding-top:24px}.setup fieldset{border:0;margin:0;padding:0;min-width:0}.setup legend{padding:0;margin-bottom:9px;font-size:15px;font-weight:600}.segments{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.segments button{flex:1;min-height:45px;padding:8px;border:0;background:transparent;font-size:15px}.segments button[aria-pressed=true]{background:var(--brown);color:#fffaf0}.primary,.secondary{display:flex;align-items:center;justify-content:center;min-height:48px;width:100%;padding:10px 15px;border-radius:8px;font-weight:600;line-height:1.4}.primary{border:1px solid var(--brown);background:var(--brown);color:#fff9ed;font-size:18px}.primary[aria-disabled=true]{border-color:#d8c9b4;background:#e2d6c5;color:#766858}.secondary{border:1px solid var(--line);background:#efe6d7;font-size:16px}.secondary[aria-disabled=true]{background:transparent;color:#948779}.rules-link{font-size:14px;justify-self:center;min-height:36px}.rules-link svg{width:16px;height:16px}.local-note{color:var(--muted);font-size:12px;text-align:center}.match{max-width:1100px}.match-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.match-header h1{font-size:25px;line-height:1.3;letter-spacing:.02em}.match-header .text-button{font-size:15px;flex:none}.match-header .text-button:last-child{gap:7px}.play-layout{max-width:570px;margin:auto}.turn-bar{display:flex;align-items:center;gap:8px;padding:10px 11px;min-height:49px;margin-bottom:10px;border-radius:7px;background:#ece3d5;color:var(--muted);transition:background-color .18s ease-out,color .18s ease-out}.turn-bar strong{font-size:17px;line-height:1.4}.turn-bar.yours{background:#583820;color:#fff8e8}.turn-bar.ended{background:#e6d6bb;color:var(--ink)}.turn-context{font-size:12px;margin-left:auto;white-space:nowrap;opacity:.88}.turn-symbol{width:22px;height:22px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:15px;border:1px solid #bda789;background:#f0dbb7;color:var(--ink);font-family:BoardSerif,serif}.turn-symbol.black:empty{background:#292c2c;border-color:#a69a88}.turn-symbol.white:empty{background:#fffaf0;border-color:#d8c7af}.turn-symbol.red{color:var(--red)}.turn-bar.arriving{animation:turn-arrival .48s ease-out 2}.board{position:relative;width:100%;aspect-ratio:1;background:#e5b97e url(./wood-8ApV2eeE.webp) center/cover;border:1px solid #b58a51;border-radius:7px;color:#74502d;isolation:isolate;touch-action:manipulation;user-select:none;-webkit-user-select:none}.xiangqi-board{aspect-ratio:9/10}.board-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1}.intersection{position:absolute;transform:translate(-50%,-50%);display:grid;place-items:center;width:calc(100% / var(--columns));height:calc(100% / var(--rows));border:0;background:none;padding:0;border-radius:0;opacity:1;color:inherit;touch-action:manipulation}.intersection:focus-visible{outline:2px solid var(--red);outline-offset:-2px;z-index:4}.piece{display:grid;place-items:center;width:84%;height:84%;aspect-ratio:1;border-radius:50%;background:#f0d4a5;border:1px solid #976435;color:#282721;box-shadow:0 2px 2px #5e391c36;line-height:1;font-size:clamp(19px,5.7vw,36px)}.piece.red{color:#aa251c}.piece.stone{width:82%;height:82%;border:1px solid #242727;background:#292c2c;box-shadow:1px 2px 2px #46291535}.piece.stone.white{background:#fff9e9;border-color:#d6c7b1}.intersection.chosen:after,.intersection.origin:after,.intersection.hint-point:after,.intersection.winning-point:after{content:"";position:absolute;inset:3%;border:2px solid var(--red);border-radius:50%;pointer-events:none}.intersection.chosen:not(:has(.piece)):after{inset:12%;background:#a83f2420}.intersection.origin:after{border-color:#984724}.intersection.hint-point:after{border:2px dashed #37634d;inset:0}.intersection.winning-point:after{border-color:#9d3022;inset:2%}.legal-dot{width:18%;height:18%;border-radius:50%;background:#855436a6}.last-mark{position:absolute;width:16%;height:16%;min-width:3px;min-height:3px;background:#b53b26;border:1px solid #fff2d6;border-radius:50%;pointer-events:none}.xiangqi-board .last-mark{width:14%;height:14%;bottom:5%;right:9%}.miniature{pointer-events:none}.miniature .piece{font-size:clamp(5px,2vw,13px);box-shadow:0 1px 1px #5e391c22}.miniature .last-mark{display:none}.turn-pulse{animation:board-turn 1.6s ease-out}.play-controls{padding-top:10px;display:grid;gap:9px}.selection-line{display:flex;align-items:center;gap:8px;min-height:24px;line-height:1.5;font-size:13px;color:var(--muted)}.move-count{margin-left:auto;white-space:nowrap;font-size:11px;font-variant-numeric:tabular-nums}.confirm{min-height:50px}.secondary-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.secondary-actions button{min-height:44px}.home-link{display:flex;align-items:center;justify-content:center;min-height:42px;font-size:14px;text-decoration:none}.result{display:grid;gap:10px;text-align:center}.result h2{font-size:26px}.result p{font-size:14px;line-height:1.6;color:var(--muted)}.message{font-size:14px;line-height:1.65;padding:10px 12px;background:#eee4d2;border-radius:6px}.message p{margin-bottom:8px}.message.error{color:#8b3024;background:#f2e2d7}.error-page{max-width:480px;display:grid;gap:20px}.error-page h1{font-size:28px}.error-page p{line-height:1.7}.error-page a{padding:12px;text-align:center}dialog{width:min(440px,calc(100% - 32px));max-height:calc(100dvh - 48px);padding:0;border:1px solid #d4bfa2;border-radius:12px;background:var(--page);color:var(--ink);box-shadow:0 14px 48px #2c1d1640;overflow:auto}dialog::backdrop{background:#2c211b88}.dialog-content{padding:24px;display:grid;gap:12px}.dialog-content h2{font-size:25px;margin-bottom:2px}.dialog-content>p{font-size:14px;line-height:1.7;color:var(--muted);margin-bottom:5px}.rules-copy{font-size:14px;line-height:1.85;max-height:55dvh;overflow:auto;overscroll-behavior:contain;padding-right:8px;touch-action:manipulation}.rules-copy h3{font-size:18px;margin:16px 0 7px}.rules-copy h3:first-child{margin-top:0}.rules-copy p+p{margin-top:10px}@keyframes board-turn{0%,45%{outline:3px solid #a65b2e;outline-offset:3px}to{outline:3px solid transparent;outline-offset:3px}}@keyframes turn-arrival{0%{filter:brightness(1.25)}to{filter:brightness(1)}}@media(hover:hover){.secondary:hover:not([aria-disabled=true]),.game-choice:hover{background:#eaddc9}.primary:hover:not([aria-disabled=true]){background:#57341f}.text-button:hover,.back-link:hover,.home-link:hover{text-decoration:underline}}@media(min-width:760px){.lobby{padding-top:32px}.lobby h1{font-size:40px;margin-bottom:28px}.lobby-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:40px;align-items:start}.setup{padding-top:0}.game-choice{min-height:155px}.game-description strong{font-size:28px}.match-header{max-width:940px;margin:0 auto 18px}.play-layout{max-width:940px;display:grid;grid-template-columns:minmax(0,590px) minmax(220px,1fr);gap:28px;align-items:start}.play-controls{padding-top:59px}.piece{font-size:clamp(24px,3.5vw,43px)}.turn-bar strong{font-size:18px}.turn-context{font-size:13px}}@media(orientation:landscape)and (max-height:600px){.shell{padding-top:max(8px,env(safe-area-inset-top));padding-bottom:max(8px,env(safe-area-inset-bottom))}.match-header{margin-bottom:4px}.match-header h1{font-size:21px}.play-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(190px,260px);gap:22px;max-width:780px;align-items:start}.board-column{width:min(100%,calc(100dvh - 110px));justify-self:center}.board-column:has(.xiangqi-board){width:min(100%,calc((100dvh - 110px)*.9))}.turn-bar{min-height:34px;padding:5px 7px;margin-bottom:6px;gap:5px}.turn-bar strong{font-size:13px}.turn-context{font-size:10px}.turn-symbol{width:17px;height:17px;font-size:12px}.piece{font-size:clamp(13px,3.5vh,26px)}.play-controls{padding-top:38px;gap:8px}.selection-line{font-size:12px}.confirm{min-height:44px}.lobby h1{margin:3px 0 12px;font-size:28px}.lobby-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:24px}.setup{padding:0;gap:10px}.game-choice{padding:10px}.game-choice.active{padding:9px}.game-choice .board{max-width:100px}.game-description strong{font-size:23px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.turn-bar.yours{outline:2px solid #b88a4d;outline-offset:1px}}
