:root{--fit:1;--cell:88px;--tilt:45deg;--persp:1600px;--piece-scale:1.42;--piece-lift:10px;--piece-z:52px;--gold:#ffd04b;--board-art:102.642%;--board-art-x:-1.3004%;--board-art-y:-1.2102%;--c-select:#f90;--c-target:#b0e2ff;--c-last:#9aff9a;--c-hover:#7ce87c;--font:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif}*{box-sizing:border-box}html,body{overscroll-behavior:none;color:#fff;height:100%;font-family:var(--font);-webkit-font-smoothing:antialiased;background:#000;margin:0;overflow:hidden}#root{height:100%}#app{width:1000px;height:650px;transform:translate(-50%, -50%) scale(var(--fit));transform-origin:50%;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;background:#000;position:absolute;top:50%;left:50%;overflow:hidden;box-shadow:0 0 0 1px #ffffff0f,0 30px 80px #0009}#game{position:absolute;inset:0}#bg{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}#stage{width:calc(var(--cell) * 6);height:calc(var(--cell) * 6);perspective:var(--persp);perspective-origin:50%;position:absolute;top:76px;left:236px}#board{grid-template-columns:repeat(6, var(--cell));grid-template-rows:repeat(6, var(--cell));transform:rotateX(var(--tilt));transform-style:preserve-3d;display:grid;position:absolute;inset:0}.board-art{left:var(--board-art-x);top:var(--board-art-y);width:var(--board-art);height:var(--board-art);filter:drop-shadow(0 20px 26px #00000073);pointer-events:none;background:url(/battlechess-web/assets/board-flat.webp) 0 0/100% 100% no-repeat;position:absolute}.cell{cursor:default;transition:background-color .12s;position:relative}.cell.is-last{background:var(--c-last)}.cell.is-target{background:var(--c-target)}.cell.is-selected{background:var(--c-select)}.cell.is-hoverable:hover{background:var(--c-hover);cursor:pointer}#pieces{transform-style:preserve-3d;pointer-events:none;position:absolute;inset:0}.piece{width:calc(var(--cell) * var(--piece-scale));height:calc(var(--cell) * var(--piece-scale));transform-style:preserve-3d;transform:translate3d(var(--px), var(--py), var(--piece-z)) rotateX(calc(-1 * var(--tilt))) scale(var(--scale,1));opacity:var(--opacity,1);will-change:transform;transition:transform .3s cubic-bezier(.2,.8,.3,1),opacity .3s;position:absolute;top:0;left:0}.piece.is-eaten{--scale:.35;--opacity:0}.piece .card{transform-style:preserve-3d;transition:transform .34s;position:absolute;inset:0}.piece.is-revealed .card{transform:rotateY(180deg)}.piece .face{backface-visibility:hidden;filter:drop-shadow(0 6px 6px #00000059);background-repeat:no-repeat;position:absolute;inset:0}.piece .face.back{background-image:url(/battlechess-web/assets/unopen.webp);background-size:100% 100%}.piece .face.front{background-image:url(/battlechess-web/assets/chess.webp);background-size:600% 200%;background-position:calc(var(--lv) * 20%) calc(var(--side) * 100%);transform:rotateY(180deg)}.piece.is-dir-1 .face.front{transform:rotateY(180deg)scaleX(-1)}.piece.is-dim .face{filter:brightness(.72)saturate(.75)drop-shadow(0 6px 6px #00000059)}.piece.is-active .face{filter:drop-shadow(0 0 10px #ffd04bd9)drop-shadow(0 6px 6px #00000059)}#heads{pointer-events:none;position:absolute;inset:0}.head{width:200px;height:220px;position:absolute;top:50px}.head.is-active .plate{filter:drop-shadow(0 0 14px #ffd04be6)}.plate{--disc:#7a1c17;width:200px;height:220px;position:relative}.plate[data-side=blue]{--disc:#123a5e}.plate-art{width:200px;height:220px;display:block;position:absolute;inset:0}.plate-disc{left:var(--disc-left);top:var(--disc-top);width:var(--disc-size);height:var(--disc-size);background-color:var(--disc);background-repeat:no-repeat;border-radius:50%;position:absolute;overflow:hidden}.plate-star{filter:drop-shadow(0 1px 1px #0000008c);display:block;position:absolute}.plate-star svg{width:100%;height:100%;display:block}.plate-id{text-align:center;width:90px;height:25px;font:700 15px/25px var(--font);color:#7a3a06;position:absolute;top:94px;left:55px}.plate-title{text-align:center;width:148px;font:700 14px/16px var(--font);letter-spacing:1px;color:#ffd24a;text-shadow:0 1px 3px #0009;position:absolute;top:130px;left:26px}.plate-points{text-align:center;width:148px;font:400 13px/16px var(--font);color:#f3e3c3;text-shadow:0 1px 3px #0009;position:absolute;top:152px;left:26px}.head[data-hidden],.panel[data-hidden]{visibility:hidden}.head.is-incoming,.panel.is-incoming{animation:.42s ease-out both head-in}@keyframes head-in{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}.head[data-pos=left]{left:20px}.head[data-pos=right]{left:780px}#panels{pointer-events:none;position:absolute;inset:0}.panel{box-sizing:border-box;background:linear-gradient(#fff 0%,#f5fcff 40%,#cfe9fb 100%);border:3px solid #87d3f0;border-radius:24px;flex-direction:column;gap:11px;width:152px;height:204px;padding:7px;display:flex;position:absolute;top:300px;box-shadow:inset 0 3px 9px #fffffff2,inset 0 -6px 12px #8cc5e573,0 3px 8px #00000038}.panel[data-pos=left]{left:45px}.panel[data-pos=right]{left:803px}.prow{justify-content:center;align-items:center;gap:14px;height:28px;display:flex}.pgrp{gap:2px;display:flex}.pslot{background-repeat:no-repeat;width:28px;height:28px}.pslot.is-alive,.pslot.is-dead{background-image:url(/battlechess-web/assets/chess-mini.webp);background-size:600% 200%;background-position:calc(var(--lv) * 20%) calc(var(--pside) * 100%)}.pslot.is-dead{filter:grayscale();opacity:.45}.pslot.is-down{background-image:url(/battlechess-web/assets/back-mini.webp);background-position:50%;background-size:contain}#banner{pointer-events:none;border:2px solid var(--gold);width:300px;height:34px;font:700 15px/1 var(--font);color:#ffe9a8;letter-spacing:.5px;text-shadow:0 2px 3px #000000e6;background:#0000006b;border-radius:17px;justify-content:center;align-items:center;display:flex;position:absolute;top:112px;left:350px}#controls{pointer-events:none;position:absolute;inset:0}#controls .imgbtn{pointer-events:auto}.imgbtn{cursor:pointer;filter:drop-shadow(0 4px 6px #00000059);background-color:#0000;background-repeat:no-repeat;border:0;padding:0;position:absolute}.imgbtn:disabled{filter:grayscale(.85)brightness(.8);cursor:not-allowed}.imgbtn.b-clean:disabled{color:#7896b4d9;text-shadow:none}.imgbtn.b-start-a{top:500px;left:300px}.imgbtn.b-start-b{top:500px;left:555px}.imgbtn.b-giveup{top:584px;left:440px}.imgbtn.b-ok{top:300px;left:440px}.hint{text-align:center;width:200px;font:500 12px/1.35 var(--font);color:#fff8dc;background:#00000073;border-radius:6px;padding:4px 6px;position:absolute}#foot{text-align:center;width:300px;font:500 12px/1 var(--font);color:#ffe9a8;letter-spacing:.3px;text-shadow:0 1px 3px #000000f2,0 0 8px #000000b3;pointer-events:none;position:absolute;top:149px;left:350px}#start{background:#0d1117 url(/battlechess-web/assets/field-bg.webp) 50%/cover no-repeat;position:absolute;inset:0}#start .art{width:100%;height:100%;position:absolute;inset:0}#start .welcome{width:416px;font:500 13px/1.64 var(--font);letter-spacing:.2px;text-align:center;color:#f8ebd0;text-shadow:0 1px 3px #000000d9;position:absolute;top:268px;left:300px}#start .welcome p{text-wrap:nowrap;margin:0}#start .welcome .welcome-rules{color:#ecdcb8;text-wrap:nowrap;margin-top:7px;font-size:12px}#start .welcome .welcome-license{letter-spacing:.4px;color:#d8c29a;margin-top:7px;font-size:11px}#start .welcome .welcome-license:before{content:"";border-top:1px solid #ffd24a52;width:132px;margin:0 auto 7px;display:block}#modal{z-index:20;background:#000c;position:absolute;inset:0}#modal .result-panel{background:url(/battlechess-web/assets/wait_panel.webp) 0 100%/320px 173px no-repeat;border:0;border-radius:0;width:320px;height:295px;position:absolute;top:78px;left:340px}#modal .panel-top{width:320px;height:122px;display:block;position:absolute;top:0;left:0}#toast{z-index:30;pointer-events:none;color:#fff;font:600 14px/1 var(--font);background:#c82828e6;border-radius:8px;padding:8px 16px;position:absolute;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 6px 18px #0006}#lobby{background:linear-gradient(#00000073,#00000073),#0d1117 url(/battlechess-web/assets/field-bg.webp) 50%/cover no-repeat;position:absolute;inset:0}.lobby-panel{pointer-events:none;background:url(/battlechess-web/assets/wait_panel_clean.webp) 50%/100% 100% no-repeat;width:320px;height:173px;position:absolute;top:236px;left:340px}.lobby-title{text-align:center;width:320px;font:700 18px/1 var(--font);color:#8e2f22;letter-spacing:.5px;margin:0;position:absolute;top:262px;left:340px}.lobby-sub{text-align:center;width:304px;font:400 10.5px/1.4 var(--font);color:#7a6350;margin:0;position:absolute;top:288px;left:348px}.lobby-root[data-step=menu] .lobby-title{font-size:18px}.lobby-root[data-step=menu] .lobby-sub{top:311px}.lobby-root[data-step=menu] .lobby-back{color:#b39a7e}.lobby-link{color:#6b5540;-webkit-user-select:all;user-select:all;background:#fff6dc;border:1.5px solid #e5c46b;border-radius:5px;outline:none;width:244px;height:24px;padding:0 8px;font:400 9px/21px ui-monospace,Menlo,monospace;position:absolute;top:310px;left:378px}.lobby-field{background:#fffdf5;border:1.5px solid #e5c46b;border-radius:5px;align-items:center;gap:4px;width:244px;height:24px;padding:0 6px 0 8px;display:flex;position:absolute;top:300px;left:378px}.lobby-field input{min-width:0;font:400 11px/1 var(--font);color:#3a2e22;letter-spacing:1px;background:0 0;border:0;outline:none;flex:1}.lobby-field input::placeholder{color:#c8b79c;letter-spacing:1px}.lobby-paste{cursor:pointer;font:500 9px/1 var(--font);color:#1787f0;background:0 0;border:0;padding:0}#lobby .lobby-paste:hover{color:#0b5c9c}.lobby-label{font:400 9px/1 var(--font);color:#b39a7e;position:absolute;top:288px;left:378px}.lobby-error{width:244px;font:400 9px/1.2 var(--font);color:#c0392b;margin:0;position:absolute;top:332px;left:378px}.lobby-hint{text-align:center;width:244px;font:400 9px/1.2 var(--font);color:#8a6a2f;margin:0;position:absolute;top:340px;left:378px}.lobby-relay{top:358px}.lobby-relay-warn{color:#c0392b}.imgbtn.b-clean{width:120px;height:43px;font:300 19px/1 var(--font);color:#1e8cfa;letter-spacing:-.3px;text-shadow:0 1px #0a4e9266;background-image:url(/battlechess-web/assets/button_clean.png);background-position:0 0;background-size:100% 200%;justify-content:center;align-items:center;padding:3px 0 0 8px;display:flex}.imgbtn.b-clean.is-long{letter-spacing:0;width:145px;height:52px;padding:4px 0 0 10px;font-size:19px;font-weight:400}.imgbtn.b-clean.is-long:hover{padding:0 0 2px 10px}.imgbtn.b-clean:hover{color:#fff;text-shadow:0 1px #7a2a0fa6;background-position:0 100%;padding:0 0 0 8px}.b-create,.b-copy{top:424px;left:368px}.b-join,.b-cancel{top:424px;left:512px}.b-go{top:424px;left:440px}.lobby-back{cursor:pointer;width:320px;font:500 10px/1 var(--font);color:#fff3d6;text-shadow:0 1px 3px #000000bf;background:0 0;border:0;padding:6px 0;position:absolute;top:478px;left:340px}#lobby .lobby-back:hover{color:var(--gold)}#reveal{z-index:25;perspective:900px;flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex;position:absolute;inset:0}#reveal .reveal-backdrop{animation:reveal-out var(--fly) ease-in calc(var(--spin) + var(--hold)) forwards;background:radial-gradient(circle at 50% 44%,#00000073,#000000d1 74%);position:absolute;inset:0}#reveal .reveal-card{width:200px;height:220px;transform-style:preserve-3d;animation:reveal-spin var(--spin) cubic-bezier(.1, .72, .12, 1) forwards, reveal-fly var(--fly) cubic-bezier(.36, 0, .24, 1) calc(var(--spin) + var(--hold)) forwards;position:relative}#reveal .reveal-face{backface-visibility:hidden;filter:drop-shadow(0 12px 26px #0000008c);width:200px;height:220px;animation:reveal-shadow var(--fly) ease-in calc(var(--spin) + var(--hold)) forwards;display:block;position:absolute;inset:0}@keyframes reveal-shadow{to{filter:drop-shadow(0 0 #0000)}}#reveal .reveal-face.back{transform:rotateY(180deg)}#reveal .reveal-text{border:2px solid var(--gold);font:700 18px/1 var(--font);letter-spacing:3px;color:#ffe9a8;text-shadow:0 2px 6px #000000e6;opacity:0;animation:reveal-text .26s ease-out calc(var(--spin) - .12s) forwards, reveal-text-out .24s ease-in calc(var(--spin) + var(--hold)) forwards;background:#0000006b;border-radius:18px;margin:0;padding:7px 18px;position:absolute;top:calc(50% + 128px);left:50%;transform:translate(-50%)}@keyframes reveal-spin{0%{transform:translate(0,0)rotateY(0)}to{transform:translate3d(0, 0, 0) rotateY(var(--turns))}}@keyframes reveal-fly{0%{transform:translate3d(0, 0, 0) rotateY(var(--turns))}to{transform:translate3d(-380px, -165px, 0) rotateY(var(--turns))}}@keyframes reveal-text{0%{opacity:0;transform:translate(-50%)translateY(8px)}to{opacity:1;transform:translate(-50%)}}@keyframes reveal-text-out{0%{opacity:1}to{opacity:0}}@keyframes reveal-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@media (prefers-reduced-motion:reduce){#reveal .reveal-backdrop,#reveal .reveal-card,#reveal .reveal-face,#reveal .reveal-text{opacity:1;animation:none}#reveal .reveal-card{transform:rotateY(var(--turns))}}#rotate{z-index:100;color:var(--gold);text-align:center;pointer-events:none;background:#000;flex-direction:column;justify-content:center;align-items:center;gap:20px;padding:24px;display:none;position:fixed;inset:0}#rotate svg{width:96px;height:96px}#rotate p{color:#fff;font:500 18px/1.6 var(--font);margin:0}#rotate .sub{color:#ffffff8c;max-width:20em;font-size:13px}@media (prefers-reduced-motion:no-preference){#rotate svg{animation:2.6s ease-in-out infinite rotate-hint}}@keyframes rotate-hint{0%,35%{transform:rotate(0)}55%,to{transform:rotate(-90deg)}}@media (display-mode:standalone) and (orientation:portrait) and (pointer:coarse){html.ready #rotate{opacity:0;animation:.2s ease-out .4s forwards rotate-in;display:flex}}@keyframes rotate-in{to{opacity:1}}
