From: Benjamin Auder Date: Mon, 2 May 2022 07:52:20 +0000 (+0200) Subject: Add Madrasi, fix Absorption, better pieces management X-Git-Url: https://git.auder.net/variants/Baroque/current/js/index.js?a=commitdiff_plain;h=57b8015b5c22ccfd419df11b9d0174484397c417;p=xogo.git Add Madrasi, fix Absorption, better pieces management --- diff --git a/base_pieces.css b/base_pieces.css index 207228c..6e9938e 100644 --- a/base_pieces.css +++ b/base_pieces.css @@ -1,67 +1,70 @@ /** Embedded SVGs for all chess pieces */ -piece.pawn.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg=='); +piece.black.pawn { + background-image: url('/pieces/black_pawn.svg'); } -piece.bishop.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PC9nPjwvc3ZnPg=='); +piece.black.rook { + background-image: url('/pieces/black_rook.svg'); } -piece.knight.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPg=='); +piece.black.knight { + background-image: url('/pieces/black_knight.svg'); } -piece.rook.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy0zdi00aDIxdjRIMTJ6bS0xLTIyVjloNHYyaDVWOWg1djJoNVY5aDR2NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMzQgMTRsLTMgM0gxNGwtMy0zIi8+PHBhdGggZD0iTTMxIDE3djEyLjVIMTRWMTciIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMxIDI5LjVsMS41IDIuNWgtMjBsMS41LTIuNSIvPjxwYXRoIGQ9Ik0xMSAxNGgyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4='); +piece.black.bishop { + background-image: url('/pieces/black_bishop.svg'); } -piece.queen.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik04IDEyYTIgMiAwIDEgMS00IDAgMiAyIDAgMSAxIDQgMHptMTYuNS00LjVhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAwek00MSAxMmEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTE2IDguNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTMzIDlhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAweiIvPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi0xMi03IDExVjExbC01LjUgMTMuNS0zLTE1LTMgMTUtNS41LTE0VjI1TDcgMTRsMiAxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTkgMjZjMCAyIDEuNSAyIDIuNSA0IDEgMS41IDEgMSAuNSAzLjUtMS41IDEtMS41IDIuNS0xLjUgMi41LTEuNSAxLjUuNSAyLjUuNSAyLjUgNi41IDEgMTYuNSAxIDIzIDAgMCAwIDEuNS0xIDAtMi41IDAgMCAuNS0xLjUtMS0yLjUtLjUtMi41LS41LTIgLjUtMy41IDEtMiAyLjUtMiAyLjUtNC04LjUtMS41LTE4LjUtMS41LTI3IDB6IiBzdHJva2UtbGluZWNhcD0iYnV0dCIvPjxwYXRoIGQ9Ik0xMS41IDMwYzMuNS0xIDE4LjUtMSAyMiAwTTEyIDMzLjVjNi0xIDE1LTEgMjEgMCIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz4='); +piece.black.queen { + background-image: url('/pieces/black_queen.svg'); } -piece.king.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjZNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTEuNSAzN2M1LjUgMy41IDE1LjUgMy41IDIxIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0VjI3di0zLjVjLTMuNS03LjUtMTMtMTAuNS0xNi00LTMgNiA1IDEwIDUgMTBWMzd6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExLjUgMzBjNS41LTMgMTUuNS0zIDIxIDBtLTIxIDMuNWM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwIi8+PC9nPjwvc3ZnPg=='); +piece.black.king { + background-image: url('/pieces/black_king.svg'); } -piece.pawn.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg=='); + +piece.white.pawn { + background-image: url('/pieces/white_pawn.svg'); } -piece.bishop.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48L2c+PC9zdmc+'); +piece.white.rook { + background-image: url('/pieces/white_rook.svg'); } -piece.knight.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjZWNlY2VjIiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMjQuNTUgMTAuNGwtLjQ1IDEuNDUuNS4xNWMzLjE1IDEgNS42NSAyLjQ5IDcuOSA2Ljc1UzM1Ljc1IDI5LjA2IDM1LjI1IDM5bC0uMDUuNWgyLjI1bC4wNS0uNWMuNS0xMC4wNi0uODgtMTYuODUtMy4yNS0yMS4zNC0yLjM3LTQuNDktNS43OS02LjY0LTkuMTktNy4xNmwtLjUxLS4xeiIgZmlsbD0iI2VjZWNlYyIgc3Ryb2tlPSJub25lIi8+PC9nPjwvc3ZnPg=='); +piece.white.knight { + background-image: url('/pieces/white_knight.svg'); } -piece.rook.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy41LTdsMS41LTIuNWgxN2wxLjUgMi41aC0yMHptLS41IDR2LTRoMjF2NEgxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE0IDI5LjV2LTEzaDE3djEzSDE0eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTQgMTYuNUwxMSAxNGgyM2wtMyAyLjVIMTR6TTExIDE0VjloNHYyaDVWOWg1djJoNVY5aDR2NUgxMXoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTEyIDM1LjVoMjFtLTIwLTRoMTltLTE4LTJoMTdtLTE3LTEzaDE3TTExIDE0aDIzIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4='); +piece.white.bishop { + background-image: url('/pieces/white_bishop.svg'); } -piece.queen.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIHN0cm9rZT0ibm9uZSI+PGNpcmNsZSBjeD0iNiIgY3k9IjEyIiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMTQiIGN5PSI5IiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjgiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzMSIgY3k9IjkiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjEyIiByPSIyLjc1Ii8+PC9nPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi41LTEyLjVMMzEgMjVsLS4zLTE0LjEtNS4yIDEzLjYtMy0xNC41LTMgMTQuNS01LjItMTMuNkwxNCAyNSA2LjUgMTMuNSA5IDI2eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNOSAyNmMwIDIgMS41IDIgMi41IDQgMSAxLjUgMSAxIC41IDMuNS0xLjUgMS0xLjUgMi41LTEuNSAyLjUtMS41IDEuNS41IDIuNS41IDIuNSA2LjUgMSAxNi41IDEgMjMgMCAwIDAgMS41LTEgMC0yLjUgMCAwIC41LTEuNS0xLTIuNS0uNS0yLjUtLjUtMiAuNS0zLjUgMS0yIDIuNS0yIDIuNS00LTguNS0xLjUtMTguNS0xLjUtMjcgMHoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTExIDM4LjVhMzUgMzUgMSAwIDAgMjMgMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMTEgMjlhMzUgMzUgMSAwIDEgMjMgMG0tMjEuNSAyLjVoMjBtLTIxIDNhMzUgMzUgMSAwIDAgMjIgMG0tMjMgM2EzNSAzNSAxIDAgMCAyNCAwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiLz48L2c+PC9zdmc+'); +piece.white.queen { + background-image: url('/pieces/white_queen.svg'); } -piece.king.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjYiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBmaWxsPSIjMDAwIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjxwYXRoIGQ9Ik0xMS41IDM3YzUuNSAzLjUgMTUuNSAzLjUgMjEgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMy41LTcuNS0xMy0xMC41LTE2LTQtMyA2IDUgMTAgNSAxMFYzN3oiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMyIDI5LjVzOC41LTQgNi4wMy05LjY1QzM0LjE1IDE0IDI1IDE4IDIyLjUgMjQuNWwuMDEgMi4xLS4wMS0yLjFDMjAgMTggOS45MDYgMTQgNi45OTcgMTkuODVjLTIuNDk3IDUuNjUgNC44NTMgOSA0Ljg1MyA5IiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMTEuNSAzMGM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwbS0yMSAzLjVjNS41LTMgMTUuNS0zIDIxIDAiIHN0cm9rZT0iI2VjZWNlYyIvPjwvZz48L3N2Zz4='); +piece.white.king { + background-image: url('/pieces/white_king.svg'); } -piece.king-pawn.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjA0OCAyMDQ4Ij4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDI0IDIwNWgtNTQwcS00MCAxMDAtNDAgMjA5IDAgMTg1IDEwNSAzMzJ0MjcwIDIxMHEtNzEgMzMtMTE1IDk5dC00NSAxNTFxMCAxMDUgNzAgMTgydDE3MiA4OXEtODEgNjEtODEgMTYxIDAgODQgNTkgMTQ0dDE0NSA2MHE4NCAwIDE0NC02MHQ2MC0xNDRxMC0xMDAtODEtMTYxIDEwMi0xMiAxNzItODl0NzAtMTgycTAtODQtNDUtMTUwdC0xMTYtMTAwcTE2NS02MyAyNzAtMjEwdDEwNS0zMzJxMC0xMDgtMzktMjA5aC01NDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+Cjwvc3ZnPgo='); + +piece.black.king-pawn { + background-image: url('/pieces/black_king_pawn.svg'); } -piece.king-rook.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTExNjEgMTcwNmgxNzB2MTM3aDI3NHYtMzc1bC0yMjItMTcxdi00NzhsMTcwLTE3MHYtMjA1aDE1M3YtMjM5aC0xMzY1djIzOWgxNTN2MjA1bDE3MSAxNzB2NDc4bC0yMjIgMTcxdjM3NWgyNzN2LTEzN2gxNzF2MTM3aDI3NHYtMTM3em0tNTk3LTEyNDZ2LTEwMmg5MjB2MTAyaC05MjB6bTQ2MCAxMDkyaC01MTJ2LTQ2bDczLTU1aDg3OWw3MSA1NXY0NmgtNTExem0wLTE2OWgtMzUwbDYwLTQ3di01N2g1ODB2NTdsNjAgNDdoLTM1MHptMC01NDZoLTI5MHYtNDZsLTYwLTU4aDcwMGwtNjAgNTh2NDZoLTI5MHptMC0xNzJoLTQxNGwtNDYtNDN2LTU4aDkyMHY1OGwtNDYgNDNoLTQxNHoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNhMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTU2NCAxNTg4djEwMmg5MjB2LTEwMmgtOTIweiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCA0OTZoLTUxMnY0Nmw3MyA1NWg4NzlsNzEtNTV2LTQ2aC01MTF6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDI0IDY2NWgtMzUwbDYwIDQ3djU3aDU4MHYtNTdsNjAtNDdoLTM1MHoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTIxMWgtMjkwdjQ2bC02MCA1OGg3MDBsLTYwLTU4di00NmgtMjkweiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxMzgzaC00MTRsLTQ2IDQzdjU4aDkyMHYtNThsLTQ2LTQzaC00MTR6IiBkaXNwbGF5PSJibG9jayIvPgogPC9nPgo8L3N2Zz4K'); +piece.black.king-rook { + background-image: url('/pieces/black_king_rook.svg'); } -piece.king-knight.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTQ5MCA2ODNxNCA5IDEzIDI3IDE3IDQyIDE3IDUwLTIgMjgtMjkgMjgtMjAgMC00Ny01Ny00LTgtMTItMTQtMjctMjggOC00NyAzMi0xOSA1MCAxM3ptNTkwIDM3MXE3MCA5MiA2OSAyMDUtNCAzMy0zOCAzMy00NiAwLTM2LTM0IDMtNTUtMTEtOTEtMjMtNTctNTEtODUtMTUtMzAgMTgtNDQgMzItMTUgNDkgMTZ6bS0yNjEgNDg4cS01IDM2IDIgNzgtNjAtMTItMTEzLTU2LTMyLTE3LTE1LTQ3IDE3LTMxIDQ3LTEwIDIxIDExIDM4IDIwdDQxIDE1em05MzctMTI2OHEtMSAwIDIgNTR0MyAxMThxMSAxMjUgMCAyNTh0LTM2IDI2N3EtMzQgMTI4LTc1IDIxOHQtODkgMTU3cS03MiAxMDgtMTk2IDE4M3QtMjU5IDk4cTQtMjMgMy00N3QwLTQ2cTk3LTMzIDE4My04MnQxMjYtMTA2cTQ4LTY2IDg5LTE1NnQ3NS0yMTlxMzQtMTMzIDM1LTI2NnQxLTI1OXEwLTYzLTMtMTE3dDAtNTVoMTQxem0tNjc3IDE0MjNxMTU3LTEwIDI5MS04MXQyMjgtMTgycTY2LTc4IDEyNC0xODh0OTQtMjMzcTQwLTE0MyA1MC0zMDB0MTEtMjkydi0yMTh0LTE1NSAwLTQwNCAwaC02NzFxLTkgMC05IDQ5dDcgNzlxNCAyNCAxOSA2OHQ1MCAxMDdxMTYgMzIgNzYgOTN0MTM4IDE0M3E0NSA0NiA3MCAxMTZ0MjIgMTI3cS0zNy0zMC04MS00OS0yMTItNzYtMzA3LTIyMC03LTktNDUtODEtMjAtMzgtMzQtNTItMTktMTktNTUtMjEtNTYtMy04NyA1NC00Mi0xMi03NS0xMC01NiAyMS04MSA0NS01MSA1MS02NiAxMDJ0LTE2IDExMHEwIDg0IDEwNCAyMjIgMTIyIDE1OSAxMzAgMjQyIDAgMzYgNyA4MSA2IDMxIDI1IDYwIDEzIDIwIDE3IDI3dDE3IDIzcTkgMTIgMTUgMTh0MTUgMThxMTEgMTMgMjggMzAtNTMgMTQ2LTQzIDMwMSAxOTktNzEgMzM0LTIyMyAzMyAxMTMgMTMwIDE4MyA4MC01NiAxMjctMTQ4em0tNjc1LTgzNnEyOSAyMCA2IDQ4LTI0IDIzLTUzIDQtNjEtNDAtNjUtMTA1IDEtMzMgMzktMzEgMzYgMyAzNSAzNyA4IDMyIDM4IDQ3em0yNTIgNDk4cTIyIDExIDIyIDExIDMwIDEyIDE5IDQ0LTEyIDMwLTQ2IDIwLTExOC00My0xNjMtMTU4LTctMzMgMjQtNDUgMzEtMTAgNDIgMjIgOCAxNyAxMiAyMiAxMS05IDI5LTEyIDYxLTEwIDcxIDU0IDMgMjItMTAgNDJ6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+CiA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNmZmYiPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im00OTAgMTM2NXE0LTkgMTMtMjcgMTctNDIgMTctNTAtMi0yOC0yOS0yOC0yMCAwLTQ3IDU3LTQgOC0xMiAxNC0yNyAyOCA4IDQ3IDMyIDE5IDUwLTEzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTA4MCA5OTRxNzAtOTIgNjktMjA1LTQtMzMtMzgtMzMtNDYgMC0zNiAzNCAzIDU1LTExIDkxLTIzIDU3LTUxIDg1LTE1IDMwIDE4IDQ0IDMyIDE1IDQ5LTE2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtODE5IDUwNnEtNS0zNiAyLTc4LTYwIDEyLTExMyA1Ni0zMiAxNy0xNSA0NyAxNyAzMSA0NyAxMCAyMS0xMSAzOC0yMHQ0MS0xNXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE3NTYgMTc3NHEtMSAwIDItNTR0My0xMThxMS0xMjUgMC0yNTh0LTM2LTI2N3EtMzQtMTI4LTc1LTIxOHQtODktMTU3cS03Mi0xMDgtMTk2LTE4M3QtMjU5LTk4cTQgMjMgMyA0N3QwIDQ2cTk3IDMzIDE4MyA4MnQxMjYgMTA2cTQ4IDY2IDg5IDE1NnQ3NSAyMTlxMzQgMTMzIDM1IDI2NnQxIDI1OXEwIDYzLTMgMTE3dDAgNTVoMTQxeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtNDA0IDExODdxMjktMjAgNi00OC0yNC0yMy01My00LTYxIDQwLTY1IDEwNSAxIDMzIDM5IDMxIDM2LTMgMzUtMzcgOC0zMiAzOC00N3oiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTY1NiA2ODlxMjItMTEgMjItMTEgMzAtMTIgMTktNDQtMTItMzAtNDYtMjAtMTE4IDQzLTE2MyAxNTgtNyAzMyAyNCA0NSAzMSAxMCA0Mi0yMiA4LTE3IDEyLTIyIDExIDkgMjkgMTIgNjEgMTAgNzEtNTQgMy0yMi0xMC00MnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo='); +piece.black.king-knight { + background-image: url('/pieces/black_king_knight.svg'); } -piece.king-bishop.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEyOTAgNTgybC00MiAxMDJxLTEwMiAyMi0yMjQgMjItMTIxIDAtMjIyLTIybC00Mi0xMDFxMTI0IDMxIDI2NCAzMSAxMzggMCAyNjYtMzJ6bS04NCAyMDZsLTI5IDcwdjI3cS03NiAxMS0xNTMgMTEtNzUgMC0xNTItMTFsLTEtMjctMjctNzBxODUgMTUgMTgwIDE1IDk2IDAgMTgyLTE1em0tMzUtMzc4cS00MCAzMC04MCA5NWgtMzJxMC00OSAyMy05NWg4OXptLTIwNiAwcTIzIDQ5IDIzIDk1aC0zMnEtMzktNjQtODEtOTVoOTB6bTU5LTE4cS0xNC01Ny0zNC03OXQtNTMtNDZxLTM2LTI1LTg1LTQydC0xMDktOWwtMjgxIDM5cS0xNyAyLTMwIDB0LTI2LTJxLTIxIDAtNTMtOXQtNTEtMjhsLTk3IDE1OXExOCAyMCAzMiAyOHQzMyAxN3E1OCAyNyAxMjQgMzMgMjggMiA1NSAxdDU2IDJxNTQtOSAxMDgtMTZ0MTEwLTE2cTYwIDAgODEgMTIgMTEgNiAzNSAyMnQ0OCA0N3EtNTMgNi0xMDggMjB0LTk3IDMxbDEwNCAyNThxLTc4IDQ1LTEwOSA3MnQtNDkgNjRxLTI2IDQ2LTMzIDg5dC03IDc3cTEgNjAgMjggMTMydDEwNCAxMzBxNjMgNDggMTIzIDk5dDExOSAxMTlxLTc0IDM4LTc0IDEyMSAwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC04Mi03NC0xMjEgNTgtNjggMTE3LTExOXQxMjUtOTlxNzUtNTcgMTAyLTEyOXQyOS0xMzNxMC0zNC03LTc3dC0zMi04OXEtMjAtMzYtNTAtNjN0LTEwOC03M2wxMDQtMjU4cS00NC0xNi05OS0zMHQtMTA2LTIxcTIzLTMxIDQ3LTQ3dDM2LTIycTIxLTEyIDgxLTEyIDU0IDggMTA4IDE1dDExMCAxN3EyNy0zIDU0LTJ0NTctMXE2NC02IDEyNC0zMyAxOC05IDMyLTE3dDMzLTI4bC05OC0xNTlxLTE4IDE4LTUwIDI3dC01MyAxMHEtMTMgMC0yNiAydC0zMSAwbC0yODAtMzlxLTYwLTktMTExIDh0LTg1IDQ1cS0zMyAyNy01MiA0NnQtMzMgNzd6bS0zNyA3NDR2LTg1cTAtMzcgMzctMzd0MzcgMzd2ODZoOTBxMzUgMCAzNSAzNnQtMzUgMzZoLTkwdjkwcTAgMzctMzcgMzd0LTM3LTM3di05MGgtODhxLTM1IDAtMzUtMzZ0MzUtMzZsODgtMXoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNhMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEyOTAgMTQ2Ni00Mi0xMDJxLTEwMi0yMi0yMjQtMjItMTIxIDAtMjIyIDIybC00MiAxMDFxMTI0LTMxIDI2NC0zMSAxMzggMCAyNjYgMzJ6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMjA2IDEyNjAtMjktNzB2LTI3cS03Ni0xMS0xNTMtMTEtNzUgMC0xNTIgMTFsLTEgMjctMjcgNzBxODUtMTUgMTgwLTE1IDk2IDAgMTgyIDE1eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTE3MSAxNjM4cS00MC0zMC04MC05NWgtMzJxMCA0OSAyMyA5NWg4OXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTk2NSAxNjM4cTIzLTQ5IDIzLTk1aC0zMnEtMzkgNjQtODEgOTVoOTB6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im05ODcgOTEydjg1cTAgMzcgMzcgMzd0MzctMzd2LTg2aDkwcTM1IDAgMzUtMzZ0LTM1LTM2aC05MHYtOTBxMC0zNy0zNy0zN3QtMzcgMzd2OTBoLTg4cS0zNSAwLTM1IDM2dDM1IDM2bDg4IDF6IiBkaXNwbGF5PSJibG9jayIvPgogPC9nPgo8L3N2Zz4K'); +piece.black.king-bishop { + background-image: url('/pieces/black_king_bishop.svg'); } -piece.king-queen.black { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1ODggNzkzcS04MyAzMC0yMzMgNDl0LTMzMyAyMHEtMTc4IDAtMzI2LTE4dC0yMzMtNDlsNTAtOTFxODQgMjUgMjE4IDM2dDI5MyAxMXExNTkgMCAyOTQtMTF0MjE5LTM3bDUxIDkwem0yMjYgNjY4cS01NyAwLTk3IDM5dC00MCA5N3EwIDU2IDQwIDk2dDk3IDQxcTU2IDAgOTYtNDB0NDAtOTdxMC01Ny00MC05NnQtOTYtNDB6bS0xNTc4IDBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDFxNTcgMCA5Ny00MHQ0MC05N3EwLTU3LTQwLTk2dC05Ny00MHptMTIwOCAxMTBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDBxNTcgMCA5Ny00MHQ0MC05NnEwLTU3LTQwLTk2dC05Ny00MHptLTg0MCAwcS01NyAwLTk3IDM5dC00MCA5N3EwIDU2IDQwIDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC01Ny00MC05NnQtOTYtNDB6bTEwMzYtMTI4OHEtNDktNDMtMjIwLTcydC0zOTQtMjlxLTIyNyAwLTM5OSAzMHQtMjE3IDc1bDYzIDI0MC0yOCAxNTctODggMTUzLTg1IDYyMiA0OSAxOSAyNzQtNDYyIDYgNTUwIDY4IDEyIDIwOS01NTMgMTEyIDU5NWg2OWwxMTItNTkzIDIwNyA1NTEgNjktMTIgNi01NTAgMjc1IDQ2MyA0Ny0yMi04My02MTktODktMTUzLTI4LTE1OSA2NS0yNDN6bS05NiAzMmwtMzAgMTE4cS0xOTUgNDUtNDkwIDQ1LTI5MiAwLTQ4OC00NWwtMzItMTE5cTE5MCA1OCA1MjEgNTggMTU5IDAgMjk1LTE2dDIyNC00MXptLTI2IDI5OXEtMTg0IDUxLTQ5MCA1MS0zMDggMC00OTYtNTJsMTUtMTAxcTE4OSA0OSA0ODEgNDkgMjkxIDAgNDc0LTQ4bDE2IDEwMXptLTQ5NCAxMDA3cS01NyAwLTk2IDQwdC00MCA5N3EwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDEtOTZxMC01Ny00MC05N3QtOTctNDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjYTAwIi8+CiA8ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNmZmYiPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTg4IDEyNTVxLTgzLTMwLTIzMy00OXQtMzMzLTIwcS0xNzggMC0zMjYgMTh0LTIzMyA0OWw1MCA5MXE4NC0yNSAyMTgtMzZ0MjkzLTExIDI5NCAxMSAyMTkgMzdsNTEtOTB6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTQ0IDE3MzMtMzAtMTE4cS0xOTUtNDUtNDkwLTQ1LTI5MiAwLTQ4OCA0NWwtMzIgMTE5cTE5MC01OCA1MjEtNTggMTU5IDAgMjk1IDE2dDIyNCA0MXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1MTggMTQzNHEtMTg0LTUxLTQ5MC01MS0zMDggMC00OTYgNTJsMTUgMTAxcTE4OS00OSA0ODEtNDkgMjkxIDAgNDc0IDQ4bDE2LTEwMXoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo='); +piece.black.king-queen { + background-image: url('/pieces/black_king_queen.svg'); } -piece.king-pawn.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMjczaDQ5MXEyMSA3MiAyMSAxNDEgMCAxNTYtODYgMjgzdC0yMjMgMTg3cS02NiA1LTY2IDcyIDAgNTMgNjcgNzggOTMgNjUgOTMgMTcyIDAgNzctNTIgMTM1dC0xMjYgNjdxLTYwIDUtNjAgNjggMCAyOCAyMiA1MiA1NCA0MiA1NCAxMTAgMCA1Ni00MCA5NnQtOTUgNDBxLTU3IDAtOTYtNDB0LTQwLTk2cTAtNjcgNTQtMTEwIDIyLTIyIDIyLTUyIDAtNjMtNTktNjgtNzUtOS0xMjYtNjd0LTUyLTEzNXEwLTEwNyA5My0xNzIgNjctMjYgNjctNzggMC02Ny02Ny03Mi0xMzYtNjAtMjIyLTE4N3QtODYtMjgzcTAtNzQgMjEtMTQxaDQ5MXptMC02OGgtNTQwcS00MCAxMDAtNDAgMjA5IDAgMTg1IDEwNSAzMzJ0MjcwIDIxMHEtNzEgMzMtMTE1IDk5dC00NSAxNTFxMCAxMDUgNzAgMTgydDE3MiA4OXEtODEgNjEtODEgMTYxIDAgODQgNTkgMTQ0dDE0NSA2MHE4NCAwIDE0NC02MHQ2MC0xNDRxMC0xMDAtODEtMTYxIDEwMi0xMiAxNzItODl0NzAtMTgycTAtODQtNDUtMTUwdC0xMTYtMTAwcTE2NS02MyAyNzAtMjEwdDEwNS0zMzJxMC0xMDgtMzktMjA5aC01NDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjA0OCkgc2NhbGUoMSwtMSkiIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjMDAwIi8+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxNzc1aDQ5MXEyMS03MiAyMS0xNDEgMC0xNTYtODYtMjgzdC0yMjMtMTg3cS02Ni01LTY2LTcyIDAtNTMgNjctNzggOTMtNjUgOTMtMTcyIDAtNzctNTItMTM1dC0xMjYtNjdxLTYwLTUtNjAtNjggMC0yOCAyMi01MiA1NC00MiA1NC0xMTAgMC01Ni00MC05NnQtOTUtNDBxLTU3IDAtOTYgNDB0LTQwIDk2cTAgNjcgNTQgMTEwIDIyIDIyIDIyIDUyIDAgNjMtNTkgNjgtNzUgOS0xMjYgNjd0LTUyIDEzNXEwIDEwNyA5MyAxNzIgNjcgMjYgNjcgNzggMCA2Ny02NyA3Mi0xMzYgNjAtMjIyIDE4N3QtODYgMjgzcTAgNzQgMjEgMTQxaDQ5MXoiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KPC9zdmc+Cg=='); + +piece.white.king-pawn { + background-image: url('/pieces/white_king_pawn.svg'); } -piece.king-rook.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTExNjEgMTcwNmgxNzB2MTM3aDI3NHYtMzc1bC0yMjItMTcxdi00NzhsMTcwLTE3MHYtMjA1aDE1M3YtMjM5aC0xMzY1djIzOWgxNTN2MjA1bDE3MSAxNzB2NDc4bC0yMjIgMTcxdjM3NWgyNzN2LTEzN2gxNzF2MTM3aDI3NHYtMTM3em00NzgtMTMzMGgtMTIzMHYtMTAzaDEyMzB2MTAzem0tMTU1IDIwNGgtOTIwdi0xMzZoOTIwdjEzNnptLTE3MCA3MTdoLTU4MHYtNDc4aDU4MHY0Nzh6bTIyMiAyMzl2MjM5aC0xMzd2LTEzN2gtMzA4djEzN2gtMTM1di0xMzdoLTMwN3YxMzdoLTEzN3YtMjM5aDEwMjR6bS03Ny04ODdsLTEwMyAxMDJoLTY2M2wtMTA1LTEwMmg4NzF6bS0xMTAgNzE2bDEyNyAxMDNoLTkwNGwxMjgtMTAzaDY0OXoiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiMwMDAiLz4KIDxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI2ZjMCI+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE2MzkgMTY3MmgtMTIzMHYxMDNoMTIzMHYtMTAzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTQ4NCAxNDY4aC05MjB2MTM2aDkyMHYtMTM2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTMxNCA3NTFoLTU4MHY0NzhoNTgwdi00Nzh6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTM2IDUxMnYtMjM5aC0xMzd2MTM3aC0zMDh2LTEzN2gtMTM1djEzN2gtMzA3di0xMzdoLTEzN3YyMzloMTAyNHoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTQ1OSAxMzk5LTEwMy0xMDJoLTY2M2wtMTA1IDEwMmg4NzF6IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGRpc3BsYXk9ImJsb2NrIiBmaWxsPSIjZmMwIi8+CiA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTM0OSA2ODMgMTI3LTEwM2gtOTA0bDEyOCAxMDNoNjQ5eiIgZmlsbC1ydWxlPSJub256ZXJvIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iI2ZjMCIvPgo8L3N2Zz4K'); +piece.white.king-rook { + background-image: url('/pieces/white_king_rook.svg'); } -piece.king-knight.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE3NTYgMTc3NHEtMSAwIDItNTR0My0xMThxMS0xMjUgMC0yNTh0LTM2LTI2N3EtMzQtMTI4LTc1LTIxOHQtODktMTU3cS03Mi0xMDgtMTk2LTE4M3QtMjU5LTk4cTkgNDkgOCA5Ni0yIDM2LTM0IDM2LTM3IDAtMzMtMzYgMy0xMzItOTQtMjI2LTc2IDgwLTgyIDE4Ni0yIDM1LTM2IDMxLTMyLTEtMzItMzcgMCAwIDItOC00MSAxMy04NiAzNy0yOSAyMC00Ny0xMHQxNi00N3E0My0yMiA2NS0zMy04Ni04OC0xOTYtMTQyIDEyIDEzOSA3NiAyNjMgMTcgMjYtOCA0Ni0yOCAyMi00Ny03LTctMTAtMjAtMzYtMjEgMjEtMjggMzEtNyA5LTI0IDQwdC0yNiA1MXEtOSAyNS04IDQwdDMgMzVxLTkgNTktNDAgMTExdC04MSAxMjdxLTQ3IDcyLTcyIDEwOHQtMzggOTJxLTkgMzQgMCA4MnQzOSA3NnE0NiA0NyA4OSA0MyAxNCAwIDM3LTExdDM3LTQycTI2LTU3IDQzLTU3IDI1IDAgMjcgMjggMCA2LTE2IDUwLTkgMjAtMjQgNDItMTkgMjYtMTcgMjIgMTYgNTcgNTMgMjAgMTEtMTEgMjUtNDF0NDQtODFxMzUtNTkgNzUtOTZ0NzEtNjBxMTgtMTMgNDQtMzB0NzAtMzVxMzUtMTQgNzctMzR0NzYtNTNxNDYtNDUgNzEtMTExIDEzLTM3IDEwLTkxLTktMzQgMzQtMzQgMzIgMCAzNiAzMyAwIDExMy02NCAyMDYgMjEgNjQgMTEgMTQwLTkgNjEtNDIgMTMwdC0xMzYgMTU1cS0yMDcgMTcyLTE5NiAzNTQgMCAwIDE3MCAwdDMyMSAwaDU0N3oiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im02OTcgMTM1OXExMy0yMCAxMC00Mi0xMC02NC03MS01NC0xOCAzLTI5IDEyLTQtNS0xMi0yMi0xMS0zMi00Mi0yMi0zMSAxMi0yNCA0NSA0NSAxMTUgMTYzIDE1OCAzNCAxMCA0NS0yMCAxMi0zMi0xOC00NC02LTMtMTEtNXQtMTEtNnptLTI5Ny00NzdxLTI5LTE4LTM1LTQ4IDEtMzMtMzEtMzYtMzUtNC0zNiAzMCA0IDY2IDU5IDEwNSAyNiAyMSA0OC00IDIyLTI3LTUtNDd6bTY3OSA4MTVxMTU3LTEwIDI5MS04MXQyMjgtMTgycTY2LTc4IDEyNC0xODh0OTQtMjMzcTQwLTE0MyA1MC0zMDB0MTEtMjkydi0yMTh0LTE1NSAwLTQwNCAwaC02NzFxLTkgMC05IDQ5dDcgNzlxNCAyNCAxOSA2OHQ1MCAxMDdxMTYgMzIgNzYgOTN0MTM4IDE0M3E0NSA0NiA3MCAxMTZ0MjIgMTI3cS0zNy0zMC04MS00OS0yMTItNzYtMzA3LTIyMC03LTktNDUtODEtMjAtMzgtMzQtNTItMTktMTktNTUtMjEtNTYtMy04NyA1NC00Mi0xMi03NS0xMC01NiAyMS04MSA0NS01MSA1MS02NiAxMDJ0LTE2IDExMHEwIDg0IDEwNCAyMjIgMTIyIDE1OSAxMzAgMjQyIDAgMzYgNyA4MSA2IDMxIDI1IDYwIDEzIDIwIDE3IDI3dDE3IDIzcTkgMTIgMTUgMTh0MTUgMThxMTEgMTMgMjggMzAtNTMgMTQ2LTQzIDMwMSAxOTktNzEgMzM0LTIyMyAzMyAxMTMgMTMwIDE4MyA4MC01NiAxMjctMTQ4em02NzctMTQyM3EtMSAwIDIgNTR0MyAxMThxMSAxMjUgMCAyNTh0LTM2IDI2N3EtMzQgMTI4LTc1IDIxOHQtODkgMTU3cS03MiAxMDgtMTk2IDE4M3QtMjU5IDk4cTktNDkgOC05Ni0yLTM2LTM0LTM2LTM3IDAtMzMgMzYgMyAxMzItOTQgMjI2LTc2LTgwLTgyLTE4Ni0yLTM1LTM2LTMxLTMyIDEtMzIgMzcgMCAwIDIgOC00MS0xMy04Ni0zNy0yOS0yMC00NyAxMHQxNiA0N3E0MyAyMiA2NSAzMy04NiA4OC0xOTYgMTQyIDEyLTEzOSA3Ni0yNjMgMTctMjYtOC00Ni0yOC0yMi00NyA3LTcgMTAtMjAgMzYtMjEtMjEtMjgtMzEtNy05LTI0LTQwdC0yNi01MXEtOS0yNS04LTQwdDMtMzVxLTktNTktNDAtMTExdC04MS0xMjdxLTQ3LTcyLTcyLTEwOHQtMzgtOTJxLTktMzQgMC04MnQzOS03NnE0Ni00NyA4OS00MyAxNCAwIDM3IDExdDM3IDQycTI2IDU3IDQzIDU3IDI1IDAgMjctMjggMC02LTE2LTUwLTktMjAtMjQtNDItMTktMjYtMTctMjIgMTYtNTcgNTMtMjAgMTEgMTEgMjUgNDF0NDQgODFxMzUgNTkgNzUgOTZ0NzEgNjBxMTggMTMgNDQgMzB0NzAgMzVxMzUgMTQgNzcgMzR0NzYgNTNxNDYgNDUgNzEgMTExIDEzIDM3IDEwIDkxLTkgMzQgMzQgMzQgMzIgMCAzNi0zMyAwLTExMy02NC0yMDYgMjEtNjQgMTEtMTQwLTktNjEtNDItMTMwdC0xMzYtMTU1cS0yMDctMTcyLTE5Ni0zNTQgMCAwIDE3MCAwdDMyMSAwaDU0N3oiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDQ4KSBzY2FsZSgxLC0xKSIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiMwMDAiLz4KPC9zdmc+Cg=='); +piece.white.king-knight { + background-image: url('/pieces/white_king_knight.svg'); } -piece.king-bishop.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTE2NnE5NyAwIDE4NiAxNSA5OC0zNSAxNDItMTA5IDM4LTY0IDM4LTE0MSAwLTQ2LTIzLTEwMXQtNzUtMTAxcS01OS00OS0xMjktMTA3dC0xMzktMTM3cS03MCA3OC0xNDAgMTM2dC0xMjggMTA4cS01MyA0NS03NSAxMDB0LTIzIDEwMnEwIDc3IDM3IDE0MSA0MyA3NCAxNDMgMTA5IDg4LTE1IDE4Ni0xNXoiIGZpbGwtcnVsZT0ibm9uemVybyIgZGlzcGxheT0iYmxvY2siIGZpbGw9IiNmYzAiLz4KIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im05ODggMTEzOGwtODMgMXEtMzQgMC0zNCAzNHQzNCAzNGg4M3Y4NnEwIDM1IDM2IDM1IDM1IDAgMzUtMzV2LTg2aDg2cTMzIDAgMzMtMzR0LTMzLTM0aC04NnYtODJxMC0zNi0zNS0zNi0zNiAwLTM2IDM2djgxem0zNi01NzhxNjggMCAxMzIgMTF0MTI1IDI4cS0xMTcgMzEtMjU3IDMxLTE0MiAwLTI1Ny0zMSA1OC0xNiAxMjMtMjd0MTM0LTEyem0wIDEwODlxNjggMCA2OCA2OHQtNjggNjgtNjgtNjggNjgtNjh6bTAtOTQ5cTExNyAwIDIyNS0yM2wtNDggMTIzcS04OCAxNC0xNzcgMTQtOTEgMC0xNzgtMTRsLTQ4LTEyM3ExMDcgMjMgMjI2IDIzem0wIDE4MnE5NyAwIDE4Ni0xNSA5OCAzNSAxNDIgMTA5IDM4IDY0IDM4IDE0MSAwIDQ2LTIzIDEwMXQtNzUgMTAxcS01OSA0OS0xMjkgMTA3dC0xMzkgMTM3cS03MC03OC0xNDAtMTM2dC0xMjgtMTA4cS01My00NS03NS0xMDB0LTIzLTEwMnEwLTc3IDM3LTE0MSA0My03NCAxNDMtMTA5IDg4IDE1IDE4NiAxNXptLTM2LTM3N2gtMzJxLTU2LTkwLTEwNy0xMTMtMjQtMTItNTMtMjJ0LTY3LTEwcS03IDAtMTA3IDE2LTQ4IDctNzYgMTV0LTQ0IDEwcS01NyA3LTEzMy02LTQ2LTgtODYtMjlsNDgtNzhxMTIgMTIgMzEgMTV0MzYgOHE0MiA3IDgwIDIgMTMtMyA1MS03dDEwMS0xNXE3NS0xMSAxMDItMTEgMTA1IDAgMTYxIDQwIDM0IDI2IDY0IDcydDMxIDExM3ptMzYtMTEzcS0xNC01Ny0zNC03OXQtNTMtNDZxLTM2LTI1LTg1LTQydC0xMDktOWwtMjgxIDM5cS0xNyAyLTMwIDB0LTI2LTJxLTIxIDAtNTMtOXQtNTEtMjhsLTk3IDE1OXExOCAyMCAzMiAyOHQzMyAxN3E1OCAyNyAxMjQgMzMgMjggMiA1NSAxdDU2IDJxNTQtOSAxMDgtMTZ0MTEwLTE2cTYwIDAgODEgMTIgMTEgNiAzNSAyMnQ0OCA0N3EtNTMgNi0xMDggMjB0LTk3IDMxbDEwNCAyNThxLTc4IDQ1LTEwOSA3MnQtNDkgNjRxLTI2IDQ2LTMzIDg5dC03IDc3cTEgNjAgMjggMTMydDEwNCAxMzBxNjMgNDggMTIzIDk5dDExOSAxMTlxLTc0IDM4LTc0IDEyMSAwIDU2IDM5IDk2dDk3IDQwcTU2IDAgOTYtNDB0NDAtOTZxMC04Mi03NC0xMjEgNTgtNjggMTE3LTExOXQxMjUtOTlxNzUtNTcgMTAyLTEyOXQyOS0xMzNxMC0zNC03LTc3dC0zMi04OXEtMjAtMzYtNTAtNjN0LTEwOC03M2wxMDQtMjU4cS00NC0xNi05OS0zMHQtMTA2LTIxcTIzLTMxIDQ3LTQ3dDM2LTIycTIxLTEyIDgxLTEyIDU0IDggMTA4IDE1dDExMCAxN3EyNy0zIDU0LTJ0NTctMXE2NC02IDEyNC0zMyAxOC05IDMyLTE3dDMzLTI4bC05OC0xNTlxLTE4IDE4LTUwIDI3dC01MyAxMHEtMTMgMC0yNiAydC0zMSAwbC0yODAtMzlxLTYwLTktMTExIDh0LTg1IDQ1cS0zMyAyNy01MiA0NnQtMzMgNzd6bTM1IDExM3EwLTY2IDMwLTExMnQ2Ni03M3E1NS00MCAxNjEtNDAgMjYgMCAxMDIgMTEgNjIgMTAgMTAwIDE0dDUxIDhxMzggNSA4MC0yIDE2LTQgMzUtN3QzMy0xNmw0OCA3OHEtNDEgMjEtODcgMjktNzYgMTMtMTMzIDYtMTctMi00NC0xMHQtNzUtMTVxLTEwMS0xNi0xMDctMTYtMzkgMC02OCAxMHQtNTIgMjJxLTUzIDI0LTEwOCAxMTNoLTMyeiIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwNDgpIHNjYWxlKDEsLTEpIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iIzAwMCIvPgogPGcgZmlsbC1ydWxlPSJub256ZXJvIiBmaWxsPSIjZmMwIj4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxNDg4cTY4IDAgMTMyLTExdDEyNS0yOHEtMTE3LTMxLTI1Ny0zMS0xNDIgMC0yNTcgMzEgNTggMTYgMTIzIDI3dDEzNCAxMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMzk5cTY4IDAgNjgtNjh0LTY4LTY4LTY4IDY4IDY4IDY4eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAxMzQ4cTExNyAwIDIyNSAyM2wtNDgtMTIzcS04OC0xNC0xNzctMTQtOTEgMC0xNzggMTRsLTQ4IDEyM3ExMDctMjMgMjI2LTIzeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtOTg4IDE1NDNoLTMycS01NiA5MC0xMDcgMTEzLTI0IDEyLTUzIDIydC02NyAxMHEtNyAwLTEwNy0xNi00OC03LTc2LTE1dC00NC0xMHEtNTctNy0xMzMgNi00NiA4LTg2IDI5bDQ4IDc4cTEyLTEyIDMxLTE1dDM2LThxNDItNyA4MC0yIDEzIDMgNTEgN3QxMDEgMTVxNzUgMTEgMTAyIDExIDEwNSAwIDE2MS00MCAzNC0yNiA2NC03MnQzMS0xMTN6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xMDU5IDE1NDNxMCA2NiAzMCAxMTJ0NjYgNzNxNTUgNDAgMTYxIDQwIDI2IDAgMTAyLTExIDYyLTEwIDEwMC0xNHQ1MS04cTM4LTUgODAgMiAxNiA0IDM1IDd0MzMgMTZsNDgtNzhxLTQxLTIxLTg3LTI5LTc2LTEzLTEzMy02LTE3IDItNDQgMTB0LTc1IDE1cS0xMDEgMTYtMTA3IDE2LTM5IDAtNjgtMTB0LTUyLTIycS01My0yNC0xMDgtMTEzaC0zMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo='); +piece.white.king-bishop { + background-image: url('/pieces/white_king_bishop.svg'); } -piece.king-queen.white { - background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiPgogPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTEwMjQgMTYyMXEtNTcgMC05NiA0MHQtNDAgOTdxMCA1NiAzOSA5NnQ5NyA0MHE1NiAwIDk2LTQwdDQxLTk2cTAtNTctNDAtOTd0LTk3LTQwem0wIDcwcTY3IDAgNjcgNjcgMCA2Ni02NyA2Ni02NiAwLTY2LTY2IDAtNjcgNjYtNjd6bTUwOS0xMDA3cS0xOTMgNDktNTA1IDQ5LTMyMCAwLTUxMS01MGwxNS05NnExOTUgNDYgNDk2IDQ2IDI5OSAwIDQ4OC00NWwxNyA5NnptMjUgNjAgNjUgMTE1cS00OC0xOS05OC0xOS0xMzQgMC0yMTQgMTA5LTYwLTUwLTEzNC01MC05NiAwLTE1MyA3NS02NC03MC0xNTMtNzAtNzIgMC0xMzIgNDktODQtMTA3LTIxNy0xMDctNTEgMC0xMDEgMTlsNzAtMTIwcTE5NCA1NiA1MzMgNTYgMzQ1IDAgNTM0LTU3em0tNDQ4IDIzOS04NSA0ODktODUtNDgzcTMgMiAxNCAxMCAyMyA0NSA3MCA0NSA1MSAwIDY2LTQ1IDYtNiAyMC0xNnptMjc3LTE5djQ2M2wtMTY1LTQ1NHExOSA3IDMyIDE4IDIwIDI1IDU0IDI1IDQwIDAgNjQtMzUgMy00IDctOHQ4LTl6bS01NjIgMTQtMTY0IDQ0OXYtNDU3cTMgNCA5IDEwIDIwIDQyIDY2IDQyIDM4IDAgNjItMzIgMjctMTIgMjctMTJ6bS0yNTQtNTYtMjE1IDM3MSA1NS0zMzhxNTctNDAgMTExLTQwIDIxIDAgNDkgN3ptOTAzLTVxMjMtNyA1MS03IDYxIDAgMTE0IDM4bDU1IDM0Ni0yMjAtMzc3em02MC01MDYtMzAgMTEzcS0xOTYgNDMtNDgwIDQzLTI4MSAwLTQ3OS00M2wtMzEtMTE0cTE4NiA1NiA1MTEgNTYgMzE3IDAgNTA5LTU1em0xMDYtMTI4cS00OS00My0yMjAtNzJ0LTM5NC0yOXEtMjI3IDAtMzk5IDMwdC0yMTcgNzVsNjMgMjQwLTI4IDE1Ny04OCAxNTMtODUgNjIyIDQ5IDE5IDI3NC00NjIgNiA1NTAgNjggMTIgMjA5LTU1MyAxMTIgNTk1aDY5bDExMi01OTMgMjA3IDU1MSA2OS0xMiA2LTU1MCAyNzUgNDYzIDQ3LTIyLTgzLTYxOS04OS0xNTMtMjgtMTU5IDY1LTI0M3ptLTgxIDM2cS0xODMgNzYtNTMxIDc2LTM1NSAwLTUzNy03OCAxNzUtNjkgNTM0LTY5IDE3MiAwIDMxNCAxOXQyMjAgNTJ6bS05NTUgMTI1MnEtNTcgMC05NyAzOXQtNDAgOTdxMCA1NiA0MCA5NnQ5NyA0MHE1NiAwIDk2LTQwdDQwLTk2cTAtNTctNDAtOTZ0LTk2LTQwem0wIDcwcTY2IDAgNjYgNjZ0LTY2IDY2cS02NyAwLTY3LTY2dDY3LTY2em04NDAgMHE2NyAwIDY3IDY2dC02NyA2NnEtNjYgMC02Ni02NnQ2Ni02NnptMC03MHEtNTcgMC05NiAzOXQtNDAgOTdxMCA1NiAzOSA5NnQ5NyA0MHE1NyAwIDk3LTQwdDQwLTk2cTAtNTctNDAtOTZ0LTk3LTQwem0tMTIwOC0xMTBxLTU3IDAtOTYgMzl0LTQwIDk3cTAgNTYgMzkgOTZ0OTcgNDFxNTcgMCA5Ny00MHQ0MC05Ny00MC05Ni05Ny00MHptMCA3MHE2NyAwIDY3IDY2IDAgNjctNjcgNjctNjYgMC02Ni02NyAwLTY2IDY2LTY2em0xNTc4IDBxNjYgMCA2NiA2NiAwIDY3LTY2IDY3LTY3IDAtNjctNjcgMC02NiA2Ny02NnptMC03MHEtNTcgMC05NyAzOXQtNDAgOTdxMCA1NiA0MCA5NnQ5NyA0MXE1NiAwIDk2LTQwdDQwLTk3LTQwLTk2LTk2LTQweiIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIwNDgpIHNjYWxlKDEsLTEpIiBkaXNwbGF5PSJibG9jayIgZmlsbD0iIzAwMCIvPgogPGcgZmlsbC1ydWxlPSJub256ZXJvIiBmaWxsPSIjZmMwIj4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTAyNCAzNTdxNjcgMCA2Ny02NyAwLTY2LTY3LTY2LTY2IDAtNjYgNjYgMCA2NyA2NiA2N3oiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1MzMgMTM2NHEtMTkzLTQ5LTUwNS00OS0zMjAgMC01MTEgNTBsMTUgOTZxMTk1LTQ2IDQ5Ni00NiAyOTkgMCA0ODggNDVsMTctOTZ6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNTU4IDEzMDQgNjUtMTE1cS00OCAxOS05OCAxOS0xMzQgMC0yMTQtMTA5LTYwIDUwLTEzNCA1MC05NiAwLTE1My03NS02NCA3MC0xNTMgNzAtNzIgMC0xMzItNDktODQgMTA3LTIxNyAxMDctNTEgMC0xMDEtMTlsNzAgMTIwcTE5NC01NiA1MzMtNTYgMzQ1IDAgNTM0IDU3eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTExMCAxMDY1LTg1LTQ4OS04NSA0ODNxMy0yIDE0LTEwIDIzLTQ1IDcwLTQ1IDUxIDAgNjYgNDUgNiA2IDIwIDE2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTM4NyAxMDg0di00NjNsLTE2NSA0NTRxMTktNyAzMi0xOCAyMC0yNSA1NC0yNSA0MCAwIDY0IDM1IDMgNCA3IDh0OCA5eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtODI1IDEwNzAtMTY0LTQ0OXY0NTdxMy00IDktMTAgMjAtNDIgNjYtNDIgMzggMCA2MiAzMiAyNyAxMiAyNyAxMnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTU3MSAxMTI2LTIxNS0zNzEgNTUgMzM4cTU3IDQwIDExMSA0MCAyMSAwIDQ5LTd6IiBkaXNwbGF5PSJibG9jayIvPgogIDxwYXRoIHN0eWxlPSJjb2xvcjpibGFjazsiIGQ9Im0xNDc0IDExMzFxMjMgNyA1MSA3IDYxIDAgMTE0LTM4bDU1LTM0Ni0yMjAgMzc3eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTUzNCAxNjM3LTMwLTExM3EtMTk2LTQzLTQ4MC00My0yODEgMC00NzkgNDNsLTMxIDExNHExODYtNTYgNTExLTU2IDMxNyAwIDUwOSA1NXoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE1NTkgMTcyOXEtMTgzLTc2LTUzMS03Ni0zNTUgMC01MzcgNzggMTc1IDY5IDUzNCA2OSAxNzIgMCAzMTQtMTl0MjIwLTUyeiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtNjA0IDQwN3E2NiAwIDY2LTY2dC02Ni02NnEtNjcgMC02NyA2NnQ2NyA2NnoiIGRpc3BsYXk9ImJsb2NrIi8+CiAgPHBhdGggc3R5bGU9ImNvbG9yOmJsYWNrOyIgZD0ibTE0NDQgNDA3cTY3IDAgNjctNjZ0LTY3LTY2cS02NiAwLTY2IDY2dDY2IDY2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMjM2IDUxN3E2NyAwIDY3LTY2IDAtNjctNjctNjctNjYgMC02NiA2NyAwIDY2IDY2IDY2eiIgZGlzcGxheT0iYmxvY2siLz4KICA8cGF0aCBzdHlsZT0iY29sb3I6YmxhY2s7IiBkPSJtMTgxNCA1MTdxNjYgMCA2Ni02NiAwLTY3LTY2LTY3LTY3IDAtNjcgNjcgMCA2NiA2NyA2NnoiIGRpc3BsYXk9ImJsb2NrIi8+CiA8L2c+Cjwvc3ZnPgo='); +piece.white.king-queen { + background-image: url('/pieces/white_king_queen.svg'); } diff --git a/base_rules.js b/base_rules.js index efeb078..5d91c72 100644 --- a/base_rules.js +++ b/base_rules.js @@ -880,7 +880,7 @@ export default class ChessRules { touchLocation = e.changedTouches[0]; if (touchLocation) return {x: touchLocation.clientX, y: touchLocation.clientY}; - return [0, 0]; //shouldn't reach here =) + return {x: 0, y: 0}; //shouldn't reach here =) } const centerOnCursor = (piece, e) => { @@ -1240,7 +1240,7 @@ export default class ChessRules { getPotentialMovesFrom(sq, color) { if (typeof sq[0] == "string") return this.getDropMovesFrom(sq); - if (this.options["madrasi"] && this.isImmobilized(sq)) + if (this.isImmobilized(sq)) return []; const piece = this.getPieceType(sq[0], sq[1]); let moves = this.getPotentialMovesOf(piece, sq); @@ -1267,138 +1267,151 @@ export default class ChessRules { const color = this.getColor(moves[0].start.x, moves[0].start.y); const oppCol = C.GetOppCol(color); - if (this.options["capture"] && this.atLeastOneCapture()) { - // Filter out non-capturing moves (not using m.vanish because of - // self captures of Recycle and Teleport). - moves = moves.filter(m => { - return ( - this.board[m.end.x][m.end.y] != "" && - this.getColor(m.end.x, m.end.y) == oppCol - ); - }); - } + if (this.options["capture"] && this.atLeastOneCapture()) + moves = this.capturePostProcess(moves, oppCol); - if (this.options["atomic"]) { - moves.forEach(m => { - if ( - this.board[m.end.x][m.end.y] != "" && - this.getColor(m.end.x, m.end.y) == oppCol - ) { - // Explosion! - let steps = [ - [-1, -1], - [-1, 0], - [-1, 1], - [0, -1], - [0, 1], - [1, -1], - [1, 0], - [1, 1] - ]; - for (let step of steps) { - let x = m.end.x + step[0]; - let y = this.computeY(m.end.y + step[1]); - if ( - this.onBoard(x, y) && - this.board[x][y] != "" && - this.getPieceType(x, y) != "p" - ) { - m.vanish.push( - new PiPo({ - p: this.getPiece(x, y), - c: this.getColor(x, y), - x: x, - y: y - }) - ); - } - } - if (!this.options["rifle"]) - m.appear.pop(); //nothin appears - } - }); - } + if (this.options["atomic"]) + this.atomicPostProcess(moves, oppCol); if ( moves.length > 0 && this.getPieceType(moves[0].start.x, moves[0].start.y) == "p" ) { - let moreMoves = []; - const lastRank = (color == "w" ? 0 : this.size.x - 1); - const initPiece = this.getPiece(moves[0].start.x, moves[0].start.y); - moves.forEach(m => { - let finalPieces = ["p"]; - const [x1, y1] = [m.start.x, m.start.y]; - const [x2, y2] = [m.end.x, m.end.y]; - const promotionOk = ( - x2 == lastRank && - (!this.options["rifle"] || this.board[x2][y2] == "") - ); - if (!promotionOk) - return; //nothing to do - if (!this.options["pawnfall"]) { - if ( - this.options["cannibal"] && - this.board[x2][y2] != "" && - this.getColor(x2, y2) == oppCol - ) { - finalPieces = [this.getPieceType(x2, y2)]; - } - else - finalPieces = this.pawnPromotions; - } - m.appear[0].p = finalPieces[0]; - if (initPiece == "!") //cannibal king-pawn - m.appear[0].p = C.CannibalKingCode[finalPieces[0]]; - for (let i=1; i { + this.riflePromotePostProcess(moves); + } + + return moves; + } + + capturePostProcess(moves, oppCol) { + // Filter out non-capturing moves (not using m.vanish because of + // self captures of Recycle and Teleport). + return moves.filter(m => { + return ( + this.board[m.end.x][m.end.y] != "" && + this.getColor(m.end.x, m.end.y) == oppCol + ); + }); + } + + atomicPostProcess(moves, oppCol) { + moves.forEach(m => { + if ( + this.board[m.end.x][m.end.y] != "" && + this.getColor(m.end.x, m.end.y) == oppCol + ) { + // Explosion! + let steps = [ + [-1, -1], + [-1, 0], + [-1, 1], + [0, -1], + [0, 1], + [1, -1], + [1, 0], + [1, 1] + ]; + for (let step of steps) { + let x = m.end.x + step[0]; + let y = this.computeY(m.end.y + step[1]); + if ( + this.onBoard(x, y) && + this.board[x][y] != "" && + this.getPieceType(x, y) != "p" + ) { + m.vanish.push( + new PiPo({ + p: this.getPiece(x, y), + c: this.getColor(x, y), + x: x, + y: y + }) + ); + } + } + if (!this.options["rifle"]) + m.appear.pop(); //nothin appears + } + }); + } + + pawnPostProcess(moves, color, oppCol) { + let moreMoves = []; + const lastRank = (color == "w" ? 0 : this.size.x - 1); + const initPiece = this.getPiece(moves[0].start.x, moves[0].start.y); + moves.forEach(m => { + let finalPieces = ["p"]; + const [x1, y1] = [m.start.x, m.start.y]; + const [x2, y2] = [m.end.x, m.end.y]; + const promotionOk = ( + x2 == lastRank && + (!this.options["rifle"] || this.board[x2][y2] == "") + ); + if (!promotionOk) + return; //nothing to do + if (!this.options["pawnfall"]) { if ( - m.start.x == lastRank && - m.appear.length >= 1 && - m.appear[0].p == "p" && - m.appear[0].x == m.start.x && - m.appear[0].y == m.start.y + this.options["cannibal"] && + this.board[x2][y2] != "" && + this.getColor(x2, y2) == oppCol ) { - const promotionPiece0 = this.pawnSpecs.promotions[0]; - m.appear[0].p = this.pawnPromotions[0]; - for (let i=1; i { + if ( + m.start.x == lastRank && + m.appear.length >= 1 && + m.appear[0].p == "p" && + m.appear[0].x == m.start.x && + m.appear[0].y == m.start.y + ) { + const promotionPiece0 = this.pawnSpecs.promotions[0]; + m.appear[0].p = this.pawnPromotions[0]; + for (let i=1; i 1e-7) - continue; - distance = Math.round(distance); //in case of (numerical...) - if (a.range < distance) + if (!C.CompatibleStep([i, j], [x, y], s, a.range)) continue; // Finally verify that nothing stand in-between let [ii, jj] = [i + s[0], this.computeY(j + s[1])]; @@ -1568,6 +1574,25 @@ export default class ChessRules { return moves; } + static CompatibleStep([x1, y1], [x2, y2], step, range) { + const rx = (x2 - x1) / step[0], + ry = (y2 - y1) / step[1]; + if ( + (!Number.isFinite(rx) && !Number.isNaN(rx)) || + (!Number.isFinite(ry) && !Number.isNaN(ry)) + ) { + return false; + } + let distance = (Number.isNaN(rx) ? ry : rx); + // TODO: 1e-7 here is totally arbitrary + if (Math.abs(distance - Math.round(distance)) > 1e-7) + return false; + distance = Math.round(distance); //in case of (numerical...) + if (range < distance) + return false; + return true; + } + // Build a regular move from its initial and destination squares. // tr: transformation getBasicMove([sx, sy], [ex, ey], tr) { @@ -2204,8 +2229,8 @@ export default class ChessRules { const r = container.querySelector(".chessboard").getBoundingClientRect(); const animateRec = i => { this.animate(moves[i], () => { - this.playVisual(moves[i], r); this.play(moves[i]); + this.playVisual(moves[i], r); if (i < moves.length - 1) setTimeout(() => animateRec(i+1), 300); else diff --git a/pieces/black_amazon.svg b/pieces/black_amazon.svg new file mode 100644 index 0000000..0215b87 --- /dev/null +++ b/pieces/black_amazon.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/pieces/black_bishop.svg b/pieces/black_bishop.svg new file mode 100644 index 0000000..f0a098c --- /dev/null +++ b/pieces/black_bishop.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pieces/black_empress.svg b/pieces/black_empress.svg new file mode 100644 index 0000000..3b29027 --- /dev/null +++ b/pieces/black_empress.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pieces/black_king.svg b/pieces/black_king.svg new file mode 100644 index 0000000..f3936d1 --- /dev/null +++ b/pieces/black_king.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/pieces/black_king_bishop.svg b/pieces/black_king_bishop.svg new file mode 100644 index 0000000..508381b --- /dev/null +++ b/pieces/black_king_bishop.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pieces/black_king_knight.svg b/pieces/black_king_knight.svg new file mode 100644 index 0000000..537dc09 --- /dev/null +++ b/pieces/black_king_knight.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/black_king_pawn.svg b/pieces/black_king_pawn.svg new file mode 100644 index 0000000..718a4a3 --- /dev/null +++ b/pieces/black_king_pawn.svg @@ -0,0 +1,3 @@ + + + diff --git a/pieces/black_king_queen.svg b/pieces/black_king_queen.svg new file mode 100644 index 0000000..52fcc2d --- /dev/null +++ b/pieces/black_king_queen.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/pieces/black_king_rook.svg b/pieces/black_king_rook.svg new file mode 100644 index 0000000..e4051e4 --- /dev/null +++ b/pieces/black_king_rook.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pieces/black_knight.svg b/pieces/black_knight.svg new file mode 100644 index 0000000..261eec4 --- /dev/null +++ b/pieces/black_knight.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/black_pawn.svg b/pieces/black_pawn.svg new file mode 100644 index 0000000..3eaa9f5 --- /dev/null +++ b/pieces/black_pawn.svg @@ -0,0 +1,3 @@ + + + diff --git a/pieces/black_princess.svg b/pieces/black_princess.svg new file mode 100644 index 0000000..c34593d --- /dev/null +++ b/pieces/black_princess.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/pieces/black_queen.svg b/pieces/black_queen.svg new file mode 100644 index 0000000..49bfbe3 --- /dev/null +++ b/pieces/black_queen.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/pieces/black_rook.svg b/pieces/black_rook.svg new file mode 100644 index 0000000..c95631c --- /dev/null +++ b/pieces/black_rook.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/pieces/white_amazon.svg b/pieces/white_amazon.svg new file mode 100644 index 0000000..beeaaea --- /dev/null +++ b/pieces/white_amazon.svg @@ -0,0 +1,25 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/pieces/white_bishop.svg b/pieces/white_bishop.svg new file mode 100644 index 0000000..2dfcf08 --- /dev/null +++ b/pieces/white_bishop.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/white_empress.svg b/pieces/white_empress.svg new file mode 100644 index 0000000..cc1099c --- /dev/null +++ b/pieces/white_empress.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pieces/white_king.svg b/pieces/white_king.svg new file mode 100644 index 0000000..a31f36b --- /dev/null +++ b/pieces/white_king.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/white_king_bishop.svg b/pieces/white_king_bishop.svg new file mode 100644 index 0000000..4af5154 --- /dev/null +++ b/pieces/white_king_bishop.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/white_king_knight.svg b/pieces/white_king_knight.svg new file mode 100644 index 0000000..20541c8 --- /dev/null +++ b/pieces/white_king_knight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/pieces/white_king_pawn.svg b/pieces/white_king_pawn.svg new file mode 100644 index 0000000..bc21051 --- /dev/null +++ b/pieces/white_king_pawn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/pieces/white_king_queen.svg b/pieces/white_king_queen.svg new file mode 100644 index 0000000..185be0e --- /dev/null +++ b/pieces/white_king_queen.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/pieces/white_king_rook.svg b/pieces/white_king_rook.svg new file mode 100644 index 0000000..6c6528f --- /dev/null +++ b/pieces/white_king_rook.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/pieces/white_knight.svg b/pieces/white_knight.svg new file mode 100644 index 0000000..8bf5d89 --- /dev/null +++ b/pieces/white_knight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/pieces/white_pawn.svg b/pieces/white_pawn.svg new file mode 100644 index 0000000..eccfc27 --- /dev/null +++ b/pieces/white_pawn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/pieces/white_princess.svg b/pieces/white_princess.svg new file mode 100644 index 0000000..ee56aff --- /dev/null +++ b/pieces/white_princess.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/pieces/white_queen.svg b/pieces/white_queen.svg new file mode 100644 index 0000000..b98b76f --- /dev/null +++ b/pieces/white_queen.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/pieces/white_rook.svg b/pieces/white_rook.svg new file mode 100644 index 0000000..d2a6ea2 --- /dev/null +++ b/pieces/white_rook.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/server.js b/server.js index 5661136..0382e37 100644 --- a/server.js +++ b/server.js @@ -63,9 +63,9 @@ wss.on("connection", (socket, req) => { switch (obj.code) { // Send challenge (may trigger game creation) case "seekgame": { - let opponent = undefined, - choice = undefined; - const vname = obj.vname, + let oppIndex = undefined, //variant name + choice = undefined; //variant finally played + const vname = obj.vname, //variant requested randvar = (obj.vname == "_random"); if (vname == "_random") { // Pick any current challenge if possible @@ -73,22 +73,28 @@ wss.on("connection", (socket, req) => { if (currentChalls.length >= 1) { choice = currentChalls[Math.floor(Math.random() * currentChalls.length)]; - opponent = challenges[choice]; + oppIndex = choice; } } else if (challenges[vname]) { - opponent = challenges[vname]; + // Anyone wanting to play the same variant ? choice = vname; + oppIndex = vname; } - if (opponent) { - delete challenges[choice]; + else if (challenges["_random"]) { + // Anyone accepting any variant (including vname) ? + choice = vname; + oppIndex = "_random"; + } + if (oppIndex) { if (choice == "_random") choice = getRandomVariant(); // Launch game let players = [ {sid: sid, name: obj.name, randvar: randvar}, - opponent + Object.assign({}, challenges[oppIndex]) ]; + delete challenges[oppIndex]; if (Math.random() < 0.5) players = players.reverse(); // Empty options = default diff --git a/variants.js b/variants.js index a5d62ce..9111e07 100644 --- a/variants.js +++ b/variants.js @@ -87,7 +87,7 @@ const variants = [ // { name: 'Koth', desc: 'King of the Hill', disp:'King of the Hill' }, // { name: 'Losers', desc: 'Get strong at self-mate' }, // { name: 'Madhouse', desc: 'Rearrange enemy pieces' }, -// { name: 'Madrasi', desc: 'Paralyzed pieces' }, + { name: 'Madrasi', desc: 'Paralyzed pieces' }, // { name: 'Magnetic', desc: 'Laws of attraction' }, // { name: 'Maharajah', desc: 'Augmented Queens' }, // { name: 'Makpong', desc: 'Thai Chess (v2)' }, @@ -113,11 +113,11 @@ const variants = [ // { name: 'Pawnsking', desc: 'Reach the last rank (v2)', disp: 'Pawns & King' }, // { name: 'Perfect', desc: 'Powerful pieces' }, // { name: 'Pocketknight', desc: 'Knight in pocket', disp: 'Pocket Knight' }, -// { name: 'Progressive', desc: 'Play more and more moves' }, + { name: 'Progressive', desc: 'Play more and more moves' }, // { name: 'Racingkings', desc: 'Kings cross the 8x8 board', disp: 'Racing Kings' }, // { name: 'Rampage', desc: 'Move under cover' }, // { name: 'Relayup', desc: 'Upgrade pieces', disp: 'Relay-up' }, -// { name: 'Rifle', desc: 'Shoot pieces' }, + { name: 'Rifle', desc: 'Shoot pieces' }, { name: 'Recycle', desc: 'Reuse pieces' }, // { name: 'Refusal', desc: 'Do not play that!' }, // { name: 'Rollerball', desc: 'As in the movie' }, diff --git a/variants/Absorption/class.js b/variants/Absorption/class.js index 9869414..3979662 100644 --- a/variants/Absorption/class.js +++ b/variants/Absorption/class.js @@ -14,14 +14,14 @@ export default class AbsorptionRules extends ChessRules { "doublemove", "progressive", "recycle", - "rifle", + //"rifle", //TODO "teleport", "zen" ] }; } - pieces(color) { + pieces(color, x, y) { let fusions = { // amazon 'a': { @@ -45,145 +45,105 @@ export default class AbsorptionRules extends ChessRules { // empress 'e': { "class": "empress", - steps: [ - [1, 2], [1, -2], [-1, 2], [-1, -2], - [2, 1], [-2, 1], [2, -1], [-2, -1] - ], + moves: [ + { + steps: [ + [1, 0], [-1, 0], [0, 1], [0, -1] + ] + }, + { + steps: [ + [1, 2], [1, -2], [-1, 2], [-1, -2], + [2, 1], [-2, 1], [2, -1], [-2, -1] + ], + range: 1 + } + ] }, // princess - 'b': { - "class": "bishop", - steps: [[1, 1], [1, -1], [-1, 1], [-1, -1]] + 's': { + "class": "princess", + moves: [ + { + steps: [ + [1, 1], [1, -1], [-1, 1], [-1, -1] + ] + }, + { + steps: [ + [1, 2], [1, -2], [-1, 2], [-1, -2], + [2, 1], [-2, 1], [2, -1], [-2, -1] + ], + range: 1 + } + ] } }; - return Object.assign(fusions, super.pieces(color)); + return Object.assign(fusions, super.pieces(color, x, y)); } static get MergeComposed() { return { "be": "a", + "bq": "q", + "br": "q", "bs": "s", + "eq": "a", "er": "e", + "es": "a", "rs": "a", - "eq": "a", + "qr": "q", "qs": "a", - "ee": "e", - "es": "a", - "ss": "s" + "rs": "a" }; } + // Assumption p1 != p2 static Fusion(p1, p2) { - if (p1 == V.KING) return p1; - if (p1 == V.PAWN) return p2; - if (p2 == V.PAWN) return p1; - if ([p1, p2].includes(V.KNIGHT)) { - if ([p1, p2].includes(V.QUEEN)) return V.QN; - if ([p1, p2].includes(V.ROOK)) return V.RN; - if ([p1, p2].includes(V.BISHOP)) return V.BN; + if (p1 == "k") + return p1; + if (p1 == "p") + return p2; + if (p2 == "p") + return p1; + if ([p1, p2].includes("n")) { + if ([p1, p2].includes("q")) + return "a"; + if ([p1, p2].includes("r")) + return "e"; + if ([p1, p2].includes("b")) + return "s"; // p1 or p2 already have knight + other piece - return (p1 == V.KNIGHT ? p2 : p1); - } - if ([p1, p2].includes(V.QN)) return V.QN; - for (let p of [p1, p2]) { - if ([V.BN, V.RN].includes(p)) - return V.MergeComposed[[p1, p2].sort().join("")]; + return (p1 == "n" ? p2 : p1); } - // bishop + rook, or queen + [bishop or rook] - return V.QUEEN; + if ([p1, p2].includes("a")) + return "a"; + // No king, no pawn, no knight or amazon => 5 remaining pieces + return V.MergeComposed[[p1, p2].sort().join("")]; } - getPotentialMovesFrom(sq) { - let moves = []; - const piece = this.getPiece(sq[0], sq[1]); - switch (piece) { - case V.RN: - moves = - super.getPotentialRookMoves(sq).concat( - super.getPotentialKnightMoves(sq)); - break; - case V.BN: - moves = - super.getPotentialBishopMoves(sq).concat( - super.getPotentialKnightMoves(sq)); - break; - case V.QN: - moves = - super.getPotentialQueenMoves(sq).concat( - super.getPotentialKnightMoves(sq)); - break; - default: - moves = super.getPotentialMovesFrom(sq); - } + // TODO: interaction with rifle ? + postProcessPotentialMoves(moves) { // Filter out capturing promotions (except one), // because they are all the same. moves = moves.filter(m => { return ( m.vanish.length == 1 || - m.vanish[0].p != V.PAWN || - [V.PAWN, V.QUEEN].includes(m.appear[0].p) + m.vanish[0].p != "p" || + ["p", "q"].includes(m.appear[0].p) ); }); moves.forEach(m => { if ( m.vanish.length == 2 && m.appear.length == 1 && - piece != m.vanish[1].p + m.vanish[0].p != m.vanish[1].p ) { // Augment pieces abilities in case of captures - m.appear[0].p = V.Fusion(piece, m.vanish[1].p); + m.appear[0].p = V.Fusion(m.vanish[0].p, m.vanish[1].p); } }); - return moves; - } - - isAttacked(sq, color) { - return ( - super.isAttacked(sq, color) || - this.isAttackedByBN(sq, color) || - this.isAttackedByRN(sq, color) || - this.isAttackedByQN(sq, color) - ); - } - - isAttackedByBN(sq, color) { - return ( - this.isAttackedBySlideNJump(sq, color, V.BN, V.steps[V.BISHOP]) || - this.isAttackedBySlideNJump( - sq, color, V.BN, V.steps[V.KNIGHT], 1) - ); - } - - isAttackedByRN(sq, color) { - return ( - this.isAttackedBySlideNJump(sq, color, V.RN, V.steps[V.ROOK]) || - this.isAttackedBySlideNJump( - sq, color, V.RN, V.steps[V.KNIGHT], 1) - ); - } - - isAttackedByQN(sq, color) { - return ( - this.isAttackedBySlideNJump( - sq, color, V.QN, V.steps[V.BISHOP].concat(V.steps[V.ROOK])) || - this.isAttackedBySlideNJump( - sq, color, V.QN, V.steps[V.KNIGHT], 1) - ); - } - - static get VALUES() { - return Object.assign( - { a: 12, e: 7, s: 5 }, - ChessRules.VALUES - ); - } - - getNotation(move) { - let notation = super.getNotation(move); - if (move.vanish[0].p != V.PAWN && move.appear[0].p != move.vanish[0].p) - // Fusion (not from a pawn: handled in ChessRules) - notation += "=" + move.appear[0].p.toUpperCase(); - return notation; + super.postProcessPotentialMoves(moves); } }; diff --git a/variants/Absorption/pieces.css b/variants/Absorption/pieces.css deleted file mode 100644 index afafb05..0000000 --- a/variants/Absorption/pieces.css +++ /dev/null @@ -1,23 +0,0 @@ -piece.black.amazon { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgaGVpZ2h0PSIyNiIKICAgd2lkdGg9IjI2IgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJzdmcyNSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iQ2hlc3NfQWR0MjYuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjQgNWRhNjg5YzMxMywgMjAxOS0wMS0xNCI+CiAgPGRlZnMKICAgICBpZD0iZGVmczI5Ij4KICAgIDxmaWx0ZXIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQjsiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQ29sb3JpemUiCiAgICAgICBpZD0iZmlsdGVyMjgzIj4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImFyaXRobWV0aWMiCiAgICAgICAgIGsxPSIwIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyNjkiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICB2YWx1ZXM9IjEiCiAgICAgICAgIHR5cGU9InNhdHVyYXRlIgogICAgICAgICByZXN1bHQ9ImNvbG9ybWF0cml4MSIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgyNzEiIC8+CiAgICAgIDxmZUZsb29kCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjEiCiAgICAgICAgIGZsb29kLWNvbG9yPSJyZ2IoMjYsMjMsMjEpIgogICAgICAgICByZXN1bHQ9ImZsb29kMSIKICAgICAgICAgaWQ9ImZlRmxvb2QyNzMiIC8+CiAgICAgIDxmZUJsZW5kCiAgICAgICAgIGluPSJmbG9vZDEiCiAgICAgICAgIGluMj0iY29sb3JtYXRyaXgxIgogICAgICAgICBtb2RlPSJtdWx0aXBseSIKICAgICAgICAgcmVzdWx0PSJibGVuZDEiCiAgICAgICAgIGlkPSJmZUJsZW5kMjc1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImJsZW5kMSIKICAgICAgICAgbW9kZT0ic2NyZWVuIgogICAgICAgICByZXN1bHQ9ImJsZW5kMiIKICAgICAgICAgaWQ9ImZlQmxlbmQyNzciIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJibGVuZDIiCiAgICAgICAgIHZhbHVlcz0iMSIKICAgICAgICAgdHlwZT0ic2F0dXJhdGUiCiAgICAgICAgIHJlc3VsdD0iY29sb3JtYXRyaXgyIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDI3OSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJjb2xvcm1hdHJpeDIiCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyODEiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQjsiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iQ29sb3JpemUiCiAgICAgICBpZD0iZmlsdGVyMjk5Ij4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImFyaXRobWV0aWMiCiAgICAgICAgIGsxPSIwIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUxIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyODUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJjb21wb3NpdGUxIgogICAgICAgICB2YWx1ZXM9IjEiCiAgICAgICAgIHR5cGU9InNhdHVyYXRlIgogICAgICAgICByZXN1bHQ9ImNvbG9ybWF0cml4MSIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgyODciIC8+CiAgICAgIDxmZUZsb29kCiAgICAgICAgIGZsb29kLW9wYWNpdHk9IjEiCiAgICAgICAgIGZsb29kLWNvbG9yPSJyZ2IoMjYsMjMsMjEpIgogICAgICAgICByZXN1bHQ9ImZsb29kMSIKICAgICAgICAgaWQ9ImZlRmxvb2QyODkiIC8+CiAgICAgIDxmZUJsZW5kCiAgICAgICAgIGluPSJmbG9vZDEiCiAgICAgICAgIGluMj0iY29sb3JtYXRyaXgxIgogICAgICAgICBtb2RlPSJtdWx0aXBseSIKICAgICAgICAgcmVzdWx0PSJibGVuZDEiCiAgICAgICAgIGlkPSJmZUJsZW5kMjkxIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImJsZW5kMSIKICAgICAgICAgbW9kZT0ic2NyZWVuIgogICAgICAgICByZXN1bHQ9ImJsZW5kMiIKICAgICAgICAgaWQ9ImZlQmxlbmQyOTMiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJibGVuZDIiCiAgICAgICAgIHZhbHVlcz0iMSIKICAgICAgICAgdHlwZT0ic2F0dXJhdGUiCiAgICAgICAgIHJlc3VsdD0iY29sb3JtYXRyaXgyIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDI5NSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGluPSJjb2xvcm1hdHJpeDIiCiAgICAgICAgIGluMj0iU291cmNlR3JhcGhpYyIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBrMj0iMSIKICAgICAgICAgcmVzdWx0PSJjb21wb3NpdGUyIgogICAgICAgICBpZD0iZmVDb21wb3NpdGUyOTciIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI5NjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpZD0ibmFtZWR2aWV3MjciCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjI1LjY3MzQxNSIKICAgICBpbmtzY2FwZTpjeD0iMTMuMjIwMzM5IgogICAgIGlua3NjYXBlOmN5PSIxMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyNSIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEyIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzU3NTc1NzQsMCwwLDAuNzU3NTc1NzQsMi44NzkxNTE1LC03LjkzOTM5MzIpIgogICAgIGlkPSJnMTAiCiAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjI4MykiPgogICAgPHBhdGgKICAgICAgIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiCiAgICAgICBkPSJtMTQuNDQsMjkuNWMwLjIyMiwxLjY4LTMuMDksNC4wNi00LjUsNS0xLjczLDEuMTYtMS43NCwyLjctMywyLjUtMC42MDItMC41NDUsMC44MTctMi4wMiwwLTItMC41OCwwLDAuMTksMS4xLTAuNSwxLjUtMC41OCwwLTIuNSwwLjQtMi41LTIuNSwwLTEuMiwzLjUtNi41LDMuNS02LjVzMC45MzQtMS4wOCwxLTJjLTAuNDE5LTAuNTc1LTAuMjU4LTEuNDgsMC0yLDAuMzY1LTAuNzMxLDEuNSwxLjUsMS41LDEuNWgxczAuNS0xLjUsMS41LTJjMC41MTctMC4yNTgsMC41LDIsMC41LDIsNi4wNywwLjU3OCw5LjI5LDQuMzcsOSwxNi41aC0xMi41YzAtNC45LDQuOC0zLjcsNC41LTEwLjUiCiAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICBzdHJva2U9IiMwMDAiCiAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICBzdHJva2UtbWl0ZXJsaW1pdD0iNCIKICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiCiAgICAgICBzdHJva2Utd2lkdGg9IjEuMzE5OTk5OTMiCiAgICAgICBmaWxsPSIjRkZGIgogICAgICAgaWQ9InBhdGg0IiAvPgogICAgPHBhdGgKICAgICAgIGZpbGw9IiMwMDAiCiAgICAgICBkPSJtOSwyMy41YTAuNSwwLjUsMCwxLDEsLTEsMCwwLjUsMC41LDAsMSwxLDEsMHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMy40OTk5OTk5LDEwKSIKICAgICAgIGlkPSJwYXRoNiIgLz4KICAgIDxwYXRoCiAgICAgICBmaWxsPSIjMDAwIgogICAgICAgZD0ibTkuNjA1OCwzMC4yOGExLjAyODEsMS40NzI5LDMwLDAsMSwtMS43ODA3LC0xLjAyOCwxLjAyODEsMS40NzI5LDMwLDAsMSwxLjc4MDcsMS4wMjh6IgogICAgICAgaWQ9InBhdGg4IiAvPgogIDwvZz4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTQpIgogICAgIGlkPSJnMjMiCiAgICAgc3R5bGU9ImZpbHRlcjp1cmwoI2ZpbHRlcjI5OSkiPgogICAgPHBhdGgKICAgICAgIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgICAgICBkPSJtMTgsMTgsNC04LTQsNCwwLTYtMyw1LjEyNS0yLTUtMiw1bC0zLTUuMTI1djZsLTQtNCwzLDhzMi4wMzQ5LTIuNSw2LTIuNSw1LDIuNSw1LDIuNXoiCiAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICBzdHJva2U9IiMwMDAiCiAgICAgICBzdHJva2UtbGluZWNhcD0iYnV0dCIKICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PSI0IgogICAgICAgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIKICAgICAgIHN0cm9rZS13aWR0aD0iMC44MDAwMDAwMSIKICAgICAgIGZpbGw9IiNGRkYiCiAgICAgICBpZD0icGF0aDEyIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzgwNCIKICAgICAgIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiCiAgICAgICBkPSJtNS41LDEwYTEuNSwxLjUsMCwwLDEsLTMsMCwxLjUsMS41LDAsMSwxLDMsMHoiCiAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iMCIKICAgICAgIHN0cm9rZT0iIzAwMCIKICAgICAgIHN0cm9rZS1saW5lY2FwPSJidXR0IgogICAgICAgc3Ryb2tlLW1pdGVybGltaXQ9IjQiCiAgICAgICBzdHJva2UtZGFzaGFycmF5PSJub25lIgogICAgICAgc3Ryb2tlLXdpZHRoPSIwLjc1IgogICAgICAgZmlsbD0iI0ZGRiIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQsLTIpIgogICAgICAgaGVpZ2h0PSIyNiIKICAgICAgIHdpZHRoPSIyNiIKICAgICAgIHk9IjAiCiAgICAgICB4PSIwIgogICAgICAgaWQ9InVzZTE1IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI3BhdGgzODA0IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOSwtMikiCiAgICAgICBoZWlnaHQ9IjI2IgogICAgICAgd2lkdGg9IjI2IgogICAgICAgeT0iMCIKICAgICAgIHg9IjAiCiAgICAgICBpZD0idXNlMTciIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjcGF0aDM4MDQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSwyNiwwKSIKICAgICAgIGhlaWdodD0iMjYiCiAgICAgICB3aWR0aD0iMjYiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJ1c2UxOSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDIyLC0yKSIKICAgICAgIGhlaWdodD0iMjYiCiAgICAgICB3aWR0aD0iMjYiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJ1c2UyMSIgLz4KICA8L2c+Cjwvc3ZnPgo='); -} - -piece.black.empress { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImJtLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjIyLjUgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0NSA6IDIyLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDIyLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjguMDAwMDAwNCIKICAgICBpbmtzY2FwZTpjeD0iLTMuNjgwNTk0OSIKICAgICBpbmtzY2FwZTpjeT0iMzIuMTUwMTc3IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0iZzM0ODEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjEsMCwwLDEuMSwtMC43MzkwNDUyNywtMi40ODE2NTI2KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzMTI3IgogICAgICAgICBkPSJtIDM0LDM1LjEzMDIyMyAtMywtMyBIIDE0IGwgLTMsMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzM0NzYiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgZD0ibSAxMSwzNS4xMzAyMjMgdiA1IGggNCB2IC0yIGggNSB2IDIgaCA1IHYgLTIgaCA1IHYgMiBoIDQgdiAtNSIKICAgICAgICAgICBpZD0icGF0aDMxMjkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGQ9Ik0gMzEuNTUyNzAzLDMyLjQxNzc2MSBWIDMwLjMwMjgyMiBIIDEzLjQ0NzI5NyB2IDIuMTE0OTM5IgogICAgICAgICAgIGlkPSJwYXRoMzEyNSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJNIDExLDM1LjEzMDIyMyBIIDM0IgogICAgICAgICAgIGlkPSJwYXRoNTE3NSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgaWQ9ImczMzIzIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NDE5NjQ2NCwwLDAsLTAuODQxOTY0NjQsNDAuMTg3MTI5LDM2LjU1ODY1MikiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5MSIKICAgICAgICAgZD0iTSAyMi4wMjg5NTgsMzYgQyAxMS41Mjg5NTgsMzUgNS41Mjg5NTg1LDI4IDYuMDI4OTU4NSw3IEggMjkuMDI4OTU4IGMgMCw5IC0xMCw2LjUgLTgsMjEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM0OTUiCiAgICAgICAgIGQ9Im0gMjAuMDI4OTU4LDI4IGMgLTAuMzg0NDYxLC0yLjkxMTI3OCA1LjU1MjkzNiwtNy4zNjg2MjQgOCwtOSAzLC0yIDIuODE5MTk4LC00LjM0Mjg5MiA1LC00IDEuMDQxNzIsMC45NDQwMTYgLTEuNDEzNDI5LDMuMDM3NTQ5IDAsMyAxLDAgLTAuMTg3MzMyLC0xLjIzMTcyNyAxLC0yIDEsMCA0LjAwMzE2MSwtMC45OTk5OTkgNCw0IDAsMiAtNiwxMiAtNiwxMiAwLDAgLTEuODg1ODY2LDEuOTAyMTI5IC0yLDMuNSAwLjcyNjA0NywwLjk5NDM2OSAwLjUsMiAwLjUsMyAtMSwxIC0zLC0yLjUgLTMsLTIuNSBoIC0yIGMgMCwwIC0wLjc4MTc4MSwxLjk5MTkyNiAtMi41LDMgLTEsMCAtMSwtMyAtMSwtMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8Y2lyY2xlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE4MCwyMS43NjQ0NzksMjIpIgogICAgICAgICBpZD0icGF0aDM0OTkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSI4LjUiCiAgICAgICAgIGN5PSIyMy41IgogICAgICAgICByPSIwLjUiIC8+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKC0xNDkuOTk5OTksMjQuMDI0MTA0LDIwLjk4NjUwNSkiCiAgICAgICAgIGlkPSJwYXRoMzUwMSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTAwMDAwNDg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSIxNC41IgogICAgICAgICBjeT0iMTUuNSIKICAgICAgICAgcng9IjAuNSIKICAgICAgICAgcnk9IjEuNSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaWQ9InBhdGg4MDQ5IgogICAgICAgICBkPSJtIDcuMDI4OTU4NSw3IGMgLTEsMjAgNS40OTk5OTk1LDI3LjUgMTEuOTk5OTk5NSwyOC41IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMTAwMDAwMDI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzIuMjYwOTU1LDMwLjg1ODY0MiBoIC0xNi41IgogICAgICAgaWQ9InBhdGg0NTkwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9InN0cm9rZS13aWR0aDowLjEzNzQ5OTk5IgogICAgICAgZD0ibSAxNC4yNDIyOTksMTIuMzUwOTQ4IGMgLTAuNDMzNDE4LC0wLjQzMzQxOSAtMC4wODE0NSwtMS42NzAwOTkgMC43MzEzODksLTIuNTY5ODE0NyAwLjUxOTY2NCwtMC41NzUyMDU0IDAuODM2OTc1LC0wLjY3NzQyMTggMS4zMTI2NTEsLTAuNDIyODQ3NyAwLjYxMDQ3OCwwLjMyNjcxNzYgMC4wMjY2OSwyLjMxOTMwODQgLTAuODYxODQ4LDIuOTQxNjY0NCAtMC4zNjYyODIsMC4yNTY1NTQgLTAuOTUxMzk0LDAuMjgxNzk0IC0xLjE4MjE5MiwwLjA1MSB6IgogICAgICAgaWQ9InBhdGgyNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4xMzc0OTk5OSIKICAgICAgIGQ9Im0gMTQuMjQyMjk5LDEyLjM1MDk0OCBjIC0wLjQzMzQxOCwtMC40MzM0MTkgLTAuMDgxNDUsLTEuNjcwMDk5IDAuNzMxMzg5LC0yLjU2OTgxNDcgMC41MTk2NjQsLTAuNTc1MjA1NCAwLjgzNjk3NSwtMC42Nzc0MjE4IDEuMzEyNjUxLC0wLjQyMjg0NzcgMC42MTA0NzgsMC4zMjY3MTc2IDAuMDI2NjksMi4zMTkzMDg0IC0wLjg2MTg0OCwyLjk0MTY2NDQgLTAuMzY2MjgyLDAuMjU2NTU0IC0wLjk1MTM5NCwwLjI4MTc5NCAtMS4xODIxOTIsMC4wNTEgeiIKICAgICAgIGlkPSJwYXRoMjciCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMTM3NDk5OTkiCiAgICAgICBkPSJNIDkuOTYyMjc5MywxOS44NTM2NTQgQyA5LjYzMTk4OTksMTkuNDMzNzYgOS42MjQ3MjgzLDE5LjM4MTc2OCA5LjgzMjYzNiwxOC45MjU0NjEgYyAwLjQ3MDA1OSwtMS4wMzE2NjkgMi4wMDcxMTksLTAuNTEyNjYyIDEuNzg1NzY1LDAuNjAyOTg3IC0wLjE0NjAzMywwLjczNjAyMyAtMS4xNzQxNjUsMC45Mzc5MTQgLTEuNjU2MTIxNywwLjMyNTIwNiB6IgogICAgICAgaWQ9InBhdGgyOSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4xMzc0OTk5OSIKICAgICAgIGQ9Im0gMTYuNTc2OTk1LDI5LjI1NjU3MiBjIDAuMjQyMTA5LC0xLjQwMjA1OCAwLjgyMzQ5NiwtMi4zMDk4MTcgMi43Nzc3MDIsLTQuMzM3MDIgMC45OTkzNCwtMS4wMzY2NyAyLjAyMDc1OCwtMi4xODI2MzIgMi4yNjk4MTYsLTIuNTQ2NTggMS4wNjQ1NTQsLTEuNTU1NjM3IDEuNjA1MTcxLC0zLjMzODg1MSAxLjc0MzgyNSwtNS43NTE5NzggMC4wNTI5OCwtMC45MjE5MTkgMC4xNzQ3MTYsLTEuNjUwODg2IDAuMzQ1Mzg1LC0yLjA2ODAzNyAwLjI2NDA1MSwtMC42NDU0MDEgMC4zNDc5MjQsLTEuNjk2MzMyIDAuMTU4MzQ2LC0xLjk4NDEwMSAtMC4xNzIyMDQsLTAuMjYxMzk2IC0wLjY1MzEsLTAuMzM4MjI1IC0wLjkxNTYwMywtMC4xNDYyNzggLTAuMTUwMjU1LDAuMTA5ODY4IC0wLjI5NDk1NSwwLjQ2NjMwOSAtMC4zNjIzMzMsMC44OTI1NDMgLTAuMDcwMzcsMC40NDUxNDggLTAuMjk2OTc0LDAuOTg4MDMzIC0wLjYwODAxMSwxLjQ1NjYzMSAtMC42Nzc3MDcsMS4wMjEwMDggLTIuODgwMDU1LDMuMDk3ODcgLTQuNjA2Njc2LDQuMzQ0MTk2IC0xLjc4MzUwNywxLjI4NzM4NiAtMi41ODg0NTUsMi4wMTU2MSAtMy41MzM2ODYsMy4xOTY4NzUgLTAuODMwNTc4LDEuMDM3OTc4IC0xLjE1MzgsMS4yMDY5NTYgLTAuNzMzNzU1LDAuMzgzNjAzIDAuNTY0Mzc1LC0xLjEwNjI2OCAwLjI1Mjc0NCwtMS45MzA0NzggLTAuNzI5OTA3LC0xLjkzMDQ3OCAtMC42ODUzNzcsMCAtMS4wNTQ3OTksMC4zODUyNTEgLTEuMDU0Nzk5LDEuMSB2IDAuNTUgaCAtMC43NjI4MTUgYyAtMC42NDI4NzA5LDAgLTAuODE0MzgzOSwtMC4wNTU2NCAtMS4wOTA3NzgsLTAuMzUzODc5IC0wLjMyNjQ5NTEsLTAuMzUyMjkzIC0wLjYyMTQwNjMsLTEuMzU5NzQ1IC0wLjYyMTQwNjMsLTIuMTIyNzk5IDAsLTAuNTIzOTczIDAuMzc4MjE1LC0xLjQ2OTE0IDEuNDI5ODkwMywtMy41NzMzMjIgMS4yOTY2MzMsLTIuNTk0MjkzIDMuMTgzMzYsLTUuODUyMDkgNC4wODAyODEsLTcuMDQ1MzkzNSAwLjk4NzQzNSwtMS4zMTM3MjM2IDEuMzcyNDg5LC0yLjM3NDIzMjIgMS4xMDE1MDcsLTMuMDMzNzQ5NiAtMC4wOTkzNCwtMC4yNDE3ODM4IC0wLjIxMjg5OCwtMC42MjUyMzE4IC0wLjI1MjM0NCwtMC44NTIxMDY4IC0wLjA3MTU4LC0wLjQxMTcwMjcgLTAuMDcxMTYsLTAuNDExOTk2NCAwLjIyMDQwMSwtMC4xNTE5ODU5IDAuMTYwNjY3LDAuMTQzMjgyNyAwLjQ4NDkwNCwwLjU2MDkzOSAwLjcyMDUyOCwwLjkyODEyNSBsIDAuNDI4NDAzLDAuNjY3NjEwOCBoIDEuMjg5NjAxIDEuMjg5NTk5IGwgMC4zMzU1NDUsLTAuNjUzMTI0OSBjIDAuMzg4Mzk1LC0wLjc1NTk5NDcgMS4xMTU0MiwtMS42NTQwNjgzIDEuMjQwMjcxLC0xLjUzMjA3MDYgMC4wNDcwMywwLjA0NTk1NSAwLjEyMzg3MywwLjQ5NDM4NTMgMC4xNzA3NjMsMC45OTY1MTIyIDAuMDQ2ODksMC41MDIxMjY5IDAuMTUzNjY0LDAuOTY5NTgyIDAuMjM3Mjc5LDEuMDM4Nzg5MyAwLjA4MzYxLDAuMDY5MjA4IDAuNzcwNzc1LDAuMjMwOTk4NSAxLjUyNzAyNSwwLjM1OTUzNjMgMy4yNDczNjIsMC41NTE5NDUxIDUuNzAwOTU2LDEuNzg3MjQ4IDcuMDEwNzc0LDMuNTI5Njg5NyAyLjg1NTE5NywzLjc5ODI1MiA0LjE5Mzk2Nyw5LjI2MzY2MSA0LjE5NTE0MiwxNy4xMjYyOTIgbCAzLjMzZS00LDIuMjM0Mzc1IGggLTguNzEyNDc5IC04LjcxMjQ3OCB6IG0gLTUuMTEyMTk2LC05LjE3ODEyNCBjIDAuMzUwNDc4LC0wLjM1MDQ3OSAwLjM1OTIyMiwtMS4xMDMwMjcgMC4wMTc3MSwtMS41MjQ3NjkgLTAuNTA2NzU0LC0wLjYyNTgxNCAtMS42NTkwNDc2LC0wLjMxMzgyNyAtMS44NjQ1MTYsMC41MDQ4MjUgLTAuMDkwNDQ3LDAuMzYwMzcxIDAuMjEzMjM1MSwxLjA4NjIxNSAwLjUwMzI4MywxLjIwMjkxNiAwLjQxOTc4MSwwLjE2ODg5NyAxLjA4MTgxLDAuMDc4NzQgMS4zNDM1MTgsLTAuMTgyOTcyIHogbSA0LjEyMTIxMSwtNy43ODY2NjIgYyAwLjk3MjA5MywtMC44MTc5NjIgMS40MzQwNzUsLTIuNTUzOTAzNiAwLjc5ODE5NSwtMi45OTkyOTE0IC0wLjQzNzU2NywtMC4zMDY0ODMxIC0wLjg1MDIyLC0wLjI2NTAyNzQgLTEuMzIzMTY1LDAuMTMyOTMwNiAtMC41Mjg5ODksMC40NDUxMTM5IC0xLjEyMTI0MSwxLjYzMjE3MzggLTEuMTIxMjQxLDIuMjQ3MzE4OCAwLDAuOTY2MDc4IDAuODUyNzA3LDEuMjg2NzMxIDEuNjQ2MjExLDAuNjE5MDQyIHoiCiAgICAgICBpZD0icGF0aDMzIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjEzNzQ5OTk5IgogICAgICAgZD0ibSAxNC4xNDYwNDksMzQuNjUzNDQ3IDAuOTU1MTI1LC0wLjk2MjUgaCA4Ljk0NDg3NSA4Ljk0NDg3NSBsIDAuOTU1MTI0LDAuOTYyNSAwLjk1NTEyNSwwLjk2MjUgSCAyNC4wNDYwNDkgMTMuMTkwOTI1IFoiCiAgICAgICBpZD0icGF0aDM5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjEwMDAwMDAycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMTEuNzczNDU0LDM4LjQyMTE0MiAyMy45MjQ5OTksMC4xMzc1IgogICAgICAgaWQ9InBhdGg0MSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIyIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIzEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiAvPgo8L3N2Zz4K'); -} - -piece.black.princess { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImJjLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIxMS4zMTM3MDkiCiAgICAgaW5rc2NhcGU6Y3g9IjIxLjg0Mzc5NCIKICAgICBpbmtzY2FwZTpjeT0iMTcuNDY2Njg1IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iOTYwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMCIKICAgICAgIG9yaWdpbnk9IjAiCiAgICAgICBzcGFjaW5neD0iMC41IgogICAgICAgc3BhY2luZ3k9IjAuNSIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxMzMiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS42NDk5OTk5ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzNy41LDM3LjUgYyAtMy43MjM3ODEsLTEuMDY5NTYyIC0xMS4xMjYyMTksMC40NzM5MDMgLTE0Ljg1LC0yLjIgLTMuNzIzNzgyLDIuNjczOTAzIC0xMS4xMjYyMiwxLjEzMDQzOCAtMTQuODUwMDAwMiwyLjIgMCwwIC0xLjgxMDQ4NzgsMC41OTU2NTggLTMuMywyLjIgMC43NDQ3NTYxLDEuMDY5NTYxIDEuODEwNDg3OCwxLjA4NDc4IDMuMywwLjU1IEMgMTEuNTIzNzgsMzkuMTgwNDM5IDE4LjkyNjIxOCw0MC43NTQzNDIgMjIuNjUsMzkuMTUgYyAzLjcyMzc4MSwxLjYwNDM0MiAxMS4xMjYyMTksMC4wMzA0NCAxNC44NSwxLjEgMS40ODk1MTIsMC41MzQ3OCAyLjU1NTI0NCwwLjUxOTU2MSAzLjMsLTAuNTUgLTEuNDg5NTEyLC0yLjEzOTEyMyAtMy4zLC0yLjIgLTMuMywtMi4yIHoiCiAgICAgICBpZD0icGF0aDQ1ODIiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS42NDk5OTk5ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMC45LDMzLjEgYyAtMi43NSwyLjc1IC0xMy43NSwyLjc1IC0xNi41LDAgLTAuNTUsLTEuNjUgMCwtMi4yIDAsLTIuMiBoIDE2LjUgYyAwLDAgMC41NSwwLjU1IDAsMi4yIHoiCiAgICAgICBpZD0icGF0aDQ1ODQiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY0OTk5OTk4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMwLjksMzAuOSBIIDE0LjQiCiAgICAgICBpZD0icGF0aDQ1OTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzMzMjMiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg0MTk2NDY0LDAsMCwtMC44NDE5NjQ2NCwzOC44MjYxNzQsMzYuNjAwMDEpIgogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNDkxIgogICAgICAgICBkPSJNIDIyLjAyODk1OCwzNiBDIDExLjUyODk1OCwzNSA1LjUyODk1ODUsMjggNi4wMjg5NTg1LDcgSCAyOS4wMjg5NTggYyAwLDkgLTEwLDYuNSAtOCwyMSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5NSIKICAgICAgICAgZD0ibSAyMC4wMjg5NTgsMjggYyAtMC4zODQ0NjEsLTIuOTExMjc4IDUuNTUyOTM2LC03LjM2ODYyNCA4LC05IDMsLTIgMi44MTkxOTgsLTQuMzQyODkyIDUsLTQgMS4wNDE3MiwwLjk0NDAxNiAtMS40MTM0MjksMy4wMzc1NDkgMCwzIDEsMCAtMC4xODczMzIsLTEuMjMxNzI3IDEsLTIgMSwwIDQuMDAzMTYxLC0wLjk5OTk5OSA0LDQgMCwyIC02LDEyIC02LDEyIDAsMCAtMS44ODU4NjYsMS45MDIxMjkgLTIsMy41IDAuNzI2MDQ3LDAuOTk0MzY5IDAuNSwyIDAuNSwzIC0xLDEgLTMsLTIuNSAtMywtMi41IGggLTIgYyAwLDAgLTAuNzgxNzgxLDEuOTkxOTI2IC0yLjUsMyAtMSwwIC0xLC0zIC0xLC0zIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxjaXJjbGUKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTgwLDIxLjc2NDQ3OSwyMikiCiAgICAgICAgIGlkPSJwYXRoMzQ5OSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjguNSIKICAgICAgICAgY3k9IjIzLjUiCiAgICAgICAgIHI9IjAuNSIgLz4KICAgICAgPGVsbGlwc2UKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTE0OS45OTk5OSwyNC4wMjQxMDQsMjAuOTg2NTA1KSIKICAgICAgICAgaWQ9InBhdGgzNTAxIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MS41MDAwMDA0ODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjE0LjUiCiAgICAgICAgIGN5PSIxNS41IgogICAgICAgICByeD0iMC41IgogICAgICAgICByeT0iMS41IiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpZD0icGF0aDgwNDkiCiAgICAgICAgIGQ9Im0gNy4wMjg5NTg1LDcgYyAtMSwyMCA1LjQ5OTk5OTUsMjcuNSAxMS45OTk5OTk1LDI4LjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMTQuNCwzMC45IEggMzAuOSIKICAgICAgIGlkPSJwYXRoMzM2OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIyIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIzEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiAvPgo8L3N2Zz4K'); -} - -piece.white.amazon { - background-image: url('data:image/svg+xml;base64,PCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+DQ0KPHN2ZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNiIgd2lkdGg9IjI2IiB2ZXJzaW9uPSIxLjAiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPg0NCiA8bWV0YWRhdGE+DQ0KICA8cmRmOlJERj4NDQogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+DQ0KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0NCiAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+DQ0KICAgIDxkYzp0aXRsZS8+DQ0KICAgPC9jYzpXb3JrPg0NCiAgPC9yZGY6UkRGPg0NCiA8L21ldGFkYXRhPg0NCiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1NzU3NTc0LDAsMCwwLjc1NzU3NTc0LDIuODc5MTUxNSwtNy45MzkzOTMyKSI+DQ0KICA8cGF0aCBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBkPSJtMTQuNDQsMjkuNWMwLjIyMiwxLjY4LTMuMDksNC4wNi00LjUsNS0xLjczLDEuMTYtMS43NCwyLjctMywyLjUtMC42MDItMC41NDUsMC44MTctMi4wMiwwLTItMC41OCwwLDAuMTksMS4xLTAuNSwxLjUtMC41OCwwLTIuNSwwLjQtMi41LTIuNSwwLTEuMiwzLjUtNi41LDMuNS02LjVzMC45MzQtMS4wOCwxLTJjLTAuNDE5LTAuNTc1LTAuMjU4LTEuNDgsMC0yLDAuMzY1LTAuNzMxLDEuNSwxLjUsMS41LDEuNWgxczAuNS0xLjUsMS41LTJjMC41MTctMC4yNTgsMC41LDIsMC41LDIsNi4wNywwLjU3OCw5LjI5LDQuMzcsOSwxNi41aC0xMi41YzAtNC45LDQuOC0zLjcsNC41LTEwLjUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSI0IiBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzdHJva2Utd2lkdGg9IjEuMzE5OTk5OTMiIGZpbGw9IiNGRkYiLz4NDQogIDxwYXRoIGZpbGw9IiMwMDAiIGQ9Im05LDIzLjVhMC41LDAuNSwwLDEsMSwtMSwwLDAuNSwwLjUsMCwxLDEsMSwweiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMuNDk5OTk5OSwxMCkiLz4NDQogIDxwYXRoIGZpbGw9IiMwMDAiIGQ9Im05LjYwNTgsMzAuMjhhMS4wMjgxLDEuNDcyOSwzMCwwLDEsLTEuNzgwNywtMS4wMjgsMS4wMjgxLDEuNDcyOSwzMCwwLDEsMS43ODA3LDEuMDI4eiIvPg0NCiA8L2c+DQ0KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTQpIj4NDQogIDxwYXRoIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGQ9Im0xOCwxOCw0LTgtNCw0LDAtNi0zLDUuMTI1LTItNS0yLDVsLTMtNS4xMjV2NmwtNC00LDMsOHMyLjAzNDktMi41LDYtMi41LDUsMi41LDUsMi41eiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbWl0ZXJsaW1pdD0iNCIgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwLjgwMDAwMDAxIiBmaWxsPSIjRkZGIi8+DQ0KICA8cGF0aCBpZD0icGF0aDM4MDQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiIGQ9Im01LjUsMTBhMS41LDEuNSwwLDAsMSwtMywwLDEuNSwxLjUsMCwxLDEsMywweiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1taXRlcmxpbWl0PSI0IiBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzdHJva2Utd2lkdGg9IjAuNzUiIGZpbGw9IiNGRkYiLz4NDQogIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgzODA0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0LC0yKSIgaGVpZ2h0PSIyNiIgd2lkdGg9IjI2IiB5PSIwIiB4PSIwIi8+DQ0KICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMzgwNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOSwtMikiIGhlaWdodD0iMjYiIHdpZHRoPSIyNiIgeT0iMCIgeD0iMCIvPg0NCiAgPHVzZSB4bGluazpocmVmPSIjcGF0aDM4MDQiIHRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDI2LDApIiBoZWlnaHQ9IjI2IiB3aWR0aD0iMjYiIHk9IjAiIHg9IjAiLz4NDQogIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgzODA0IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSwyMiwtMikiIGhlaWdodD0iMjYiIHdpZHRoPSIyNiIgeT0iMCIgeD0iMCIvPg0NCiA8L2c+DQ0KPC9zdmc+DQ0K'); -} - -piece.white.empress { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndtLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjIyLjUgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0NSA6IDIyLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDIyLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjguMDAwMDAwNCIKICAgICBpbmtzY2FwZTpjeD0iLTMuOTMwNTk0OSIKICAgICBpbmtzY2FwZTpjeT0iMzIuMTUwMTc3IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0iZzM0ODEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjEsMCwwLDEuMSwtMS4xMTQwNDUyLC0yLjQ4MTY1MjYpIj4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIgogICAgICAgICBpZD0icGF0aDMxMjciCiAgICAgICAgIGQ9Im0gMzQsMzUuMTMwMjIzIC0zLC0zIEggMTQgbCAtMywzIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzQ3NiI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBkPSJtIDExLDM1LjEzMDIyMyB2IDUgaCA0IHYgLTIgaCA1IHYgMiBoIDUgdiAtMiBoIDUgdiAyIGggNCB2IC01IgogICAgICAgICAgIGlkPSJwYXRoMzEyOSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjYyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgZD0iTSAzMS41NTI3MDMsMzIuNDE3NzYxIFYgMzAuMzAyODIyIEggMTMuNDQ3Mjk3IHYgMi4xMTQ5MzkiCiAgICAgICAgICAgaWQ9InBhdGgzMTI1IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGQ9Ik0gMTEsMzUuMTMwMjIzIEggMzQiCiAgICAgICAgICAgaWQ9InBhdGg1MTc1IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzMzMjMiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg0MTk2NDY0LDAsMCwtMC44NDE5NjQ2NCwzOS44MTIxMjksMzYuNTU4NjUyKSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNDkxIgogICAgICAgICBkPSJNIDIyLjAyODk1OCwzNiBDIDExLjUyODk1OCwzNSA1LjUyODk1ODUsMjggNi4wMjg5NTg1LDcgSCAyOS4wMjg5NTggYyAwLDkgLTEwLDYuNSAtOCwyMSIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY2NjY2NjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5NSIKICAgICAgICAgZD0ibSAyMC4wMjg5NTgsMjggYyAtMC4zODQ0NjEsLTIuOTExMjc4IDUuNTUyOTM2LC03LjM2ODYyNCA4LC05IDMsLTIgMi44MTkxOTgsLTQuMzQyODkyIDUsLTQgMS4wNDE3MiwwLjk0NDAxNiAtMS40MTM0MjksMy4wMzc1NDkgMCwzIDEsMCAtMC4xODczMzIsLTEuMjMxNzI3IDEsLTIgMSwwIDQuMDAzMTYxLC0wLjk5OTk5OSA0LDQgMCwyIC02LDEyIC02LDEyIDAsMCAtMS44ODU4NjYsMS45MDIxMjkgLTIsMy41IDAuNzI2MDQ3LDAuOTk0MzY5IDAuNSwyIDAuNSwzIC0xLDEgLTMsLTIuNSAtMywtMi41IGggLTIgYyAwLDAgLTAuNzgxNzgxLDEuOTkxOTI2IC0yLjUsMyAtMSwwIC0xLC0zIC0xLC0zIgogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDxjaXJjbGUKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoMTgwLDIxLjc2NDQ3OSwyMikiCiAgICAgICAgIGlkPSJwYXRoMzQ5OSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjguNSIKICAgICAgICAgY3k9IjIzLjUiCiAgICAgICAgIHI9IjAuNSIgLz4KICAgICAgPGVsbGlwc2UKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTE0OS45OTk5OSwyNC4wMjQxMDQsMjAuOTg2NTA1KSIKICAgICAgICAgaWQ9InBhdGgzNTAxIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41MDAwMDA0ODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgY3g9IjE0LjUiCiAgICAgICAgIGN5PSIxNS41IgogICAgICAgICByeD0iMC41IgogICAgICAgICByeT0iMS41IiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpZD0icGF0aDgwNDkiCiAgICAgICAgIGQ9Im0gNy4wMjg5NTg1LDcgYyAtMSwyMCA1LjQ5OTk5OTUsMjcuNSAxMS45OTk5OTk1LDI4LjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4xMDAwMDAwMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzMS44ODU5NTUsMzAuODU4NjQyIGggLTE2LjUiCiAgICAgICBpZD0icGF0aDQ1OTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8L2c+CiAgPGcKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjIiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEjMSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiIC8+Cjwvc3ZnPgo='); -} - -piece.white.princess { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDUiCiAgIGhlaWdodD0iNDUiCiAgIGlkPSJzdmczMTI4IgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndjLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzMTMwIj4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjQ1IDogMjIuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjIuNSA6IDE1IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTE1IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyMi41IDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNDUgOiAyMi41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMi41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4LjAwMDAwMDQiCiAgICAgaW5rc2NhcGU6Y3g9IjYwLjMwODc3OSIKICAgICBpbmtzY2FwZTpjeT0iMjQuNTExNDc5IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgaGVpZ2h0PSI0NXB4IgogICAgIHdpZHRoPSI0NXB4IgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTA2MCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwIgogICAgICAgb3JpZ2lueT0iMCIKICAgICAgIHNwYWNpbmd4PSIwLjUiCiAgICAgICBzcGFjaW5neT0iMC41IgogICAgICAgY29sb3I9IiMwMDAwZmYiCiAgICAgICBlbXBjb2xvcj0iIzAwMDBmZiIKICAgICAgIG9wYWNpdHk9IjAuMiIKICAgICAgIGVtcG9wYWNpdHk9IjAuNCIKICAgICAgIGVtcHNwYWNpbmc9IjUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzEzMyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjY0OTk5OTk4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDM3LjcyNSwzOC4wMDg5MTggYyAtMy43MjM3ODEsLTEuMDY5NTYyIC0xMS4xMjYyMTksMC40NzM5MDMgLTE0Ljg1LC0yLjIgLTMuNzIzNzgyLDIuNjczOTAzIC0xMS4xMjYyMiwxLjEzMDQzOCAtMTQuODUwMDAwMiwyLjIgMCwwIC0xLjgxMDQ4NzgsMC41OTU2NTggLTMuMywyLjIgMC43NDQ3NTYxLDEuMDY5NTYxIDEuODEwNDg3OCwxLjA4NDc4IDMuMywwLjU1IDMuNzIzNzgwMiwtMS4wNjk1NjEgMTEuMTI2MjE4MiwwLjUwNDM0MiAxNC44NTAwMDAyLC0xLjEgMy43MjM3ODEsMS42MDQzNDIgMTEuMTI2MjE5LDAuMDMwNDQgMTQuODUsMS4xIDEuNDg5NTEyLDAuNTM0NzggMi41NTUyNDQsMC41MTk1NjEgMy4zLC0wLjU1IC0xLjQ4OTUxMiwtMi4xMzkxMjMgLTMuMywtMi4yIC0zLjMsLTIuMiB6IgogICAgICAgaWQ9InBhdGg0NTgyIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzEuMTI1LDMzLjYwODkxOCBjIC0yLjc1LDIuNzUgLTEzLjc1LDIuNzUgLTE2LjUsMCAtMC41NSwtMS42NSAwLC0yLjIgMCwtMi4yIGggMTYuNSBjIDAsMCAwLjU1LDAuNTUgMCwyLjIgeiIKICAgICAgIGlkPSJwYXRoNDU4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNjQ5OTk5OTg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzEuMTI1LDMxLjQwODkxOCBoIC0xNi41IgogICAgICAgaWQ9InBhdGg0NTkwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczMzIzIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NDE5NjQ2NCwwLDAsLTAuODQxOTY0NjQsMzkuMDUxMTc0LDM3LjEwODkyOCkiPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiCiAgICAgICAgIGlkPSJwYXRoMzQ5MSIKICAgICAgICAgZD0iTSAyMi4wMjg5NTgsMzYgQyAxMS41Mjg5NTgsMzUgNS41Mjg5NTg1LDI4IDYuMDI4OTU4NSw3IEggMjkuMDI4OTU4IGMgMCw5IC0xMCw2LjUgLTgsMjEiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM0OTUiCiAgICAgICAgIGQ9Im0gMjAuMDI4OTU4LDI4IGMgLTAuMzg0NDYxLC0yLjkxMTI3OCA1LjU1MjkzNiwtNy4zNjg2MjQgOCwtOSAzLC0yIDIuODE5MTk4LC00LjM0Mjg5MiA1LC00IDEuMDQxNzIsMC45NDQwMTYgLTEuNDEzNDI5LDMuMDM3NTQ5IDAsMyAxLDAgLTAuMTg3MzMyLC0xLjIzMTcyNyAxLC0yIDEsMCA0LjAwMzE2MSwtMC45OTk5OTkgNCw0IDAsMiAtNiwxMiAtNiwxMiAwLDAgLTEuODg1ODY2LDEuOTAyMTI5IC0yLDMuNSAwLjcyNjA0NywwLjk5NDM2OSAwLjUsMiAwLjUsMyAtMSwxIC0zLC0yLjUgLTMsLTIuNSBoIC0yIGMgMCwwIC0wLjc4MTc4MSwxLjk5MTkyNiAtMi41LDMgLTEsMCAtMSwtMyAtMSwtMyIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8Y2lyY2xlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE4MCwyMS43NjQ0NzksMjIpIgogICAgICAgICBpZD0icGF0aDM0OTkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSI4LjUiCiAgICAgICAgIGN5PSIyMy41IgogICAgICAgICByPSIwLjUiIC8+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKC0xNDkuOTk5OTksMjQuMDI0MTA0LDIwLjk4NjUwNSkiCiAgICAgICAgIGlkPSJwYXRoMzUwMSIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuNTAwMDAwNDg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGN4PSIxNC41IgogICAgICAgICBjeT0iMTUuNSIKICAgICAgICAgcng9IjAuNSIKICAgICAgICAgcnk9IjEuNSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaWQ9InBhdGg4MDQ5IgogICAgICAgICBkPSJtIDcuMDI4OTU4NSw3IGMgLTEsMjAgNS40OTk5OTk1LDI3LjUgMTEuOTk5OTk5NSwyOC41IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPC9nPgogIDwvZz4KICA8ZwogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMiIKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSMxIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgLz4KPC9zdmc+Cg=='); -} diff --git a/variants/Absorption/rules.html b/variants/Absorption/rules.html new file mode 100644 index 0000000..53d5e45 --- /dev/null +++ b/variants/Absorption/rules.html @@ -0,0 +1 @@ +

The capturer absorbs abilities of the captured piece (except for pawns and king).

diff --git a/variants/Absorption/style.css b/variants/Absorption/style.css index 2964ee1..14714ab 100644 --- a/variants/Absorption/style.css +++ b/variants/Absorption/style.css @@ -1,2 +1,25 @@ -@import "../../base_pieces.css" -@import "pieces.css" +@import url("/base_pieces.css"); + +piece.black.amazon { + background-image: url('/pieces/black_amazon.svg'); +} + +piece.black.empress { + background-image: url('/pieces/black_empress.svg'); +} + +piece.black.princess { + background-image: url('/pieces/black_princess.svg'); +} + +piece.white.amazon { + background-image: url('/pieces/white_amazon.svg'); +} + +piece.white.empress { + background-image: url('/pieces/white_empress.svg'); +} + +piece.white.princess { + background-image: url('/pieces/white_princess.svg'); +} diff --git a/variants/Atomic/style.css b/variants/Atomic/style.css index 9378e29..a3550bc 100644 --- a/variants/Atomic/style.css +++ b/variants/Atomic/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Balanced/style.css b/variants/Balanced/style.css index 9378e29..a3550bc 100644 --- a/variants/Balanced/style.css +++ b/variants/Balanced/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Benedict/style.css b/variants/Benedict/style.css index 9378e29..a3550bc 100644 --- a/variants/Benedict/style.css +++ b/variants/Benedict/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Cannibal/style.css b/variants/Cannibal/style.css index 9378e29..a3550bc 100644 --- a/variants/Cannibal/style.css +++ b/variants/Cannibal/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Capture/style.css b/variants/Capture/style.css index 9378e29..290a6f4 100644 --- a/variants/Capture/style.css +++ b/variants/Capture/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css") diff --git a/variants/Chakart/style.css b/variants/Chakart/style.css index 620a9e8..6cfd883 100644 --- a/variants/Chakart/style.css +++ b/variants/Chakart/style.css @@ -1,4 +1,4 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); /* TODO: images des bananes/bombes/oeufs/champis + Chomp etc pour animations * Toadette/Waluigi/Luigi/King boo/Koopa/Daisy/Bowser avec petit texte */ diff --git a/variants/Chess960/style.css b/variants/Chess960/style.css index 9378e29..a3550bc 100644 --- a/variants/Chess960/style.css +++ b/variants/Chess960/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Crazyhouse/style.css b/variants/Crazyhouse/style.css index 9378e29..a3550bc 100644 --- a/variants/Crazyhouse/style.css +++ b/variants/Crazyhouse/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Cylinder/style.css b/variants/Cylinder/style.css index 9378e29..a3550bc 100644 --- a/variants/Cylinder/style.css +++ b/variants/Cylinder/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Dark/style.css b/variants/Dark/style.css index 9378e29..a3550bc 100644 --- a/variants/Dark/style.css +++ b/variants/Dark/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Doublemove/style.css b/variants/Doublemove/style.css index 9378e29..a3550bc 100644 --- a/variants/Doublemove/style.css +++ b/variants/Doublemove/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css"); diff --git a/variants/Madrasi/class.js b/variants/Madrasi/class.js new file mode 100644 index 0000000..eaabf07 --- /dev/null +++ b/variants/Madrasi/class.js @@ -0,0 +1,38 @@ +import ChessRules from "/base_rules.js"; + +export default class MadrasiRules extends ChessRules { + + static get Options() { + return { + select: C.Options.select, + check: [ + { + label: "Rex Incl.", + defaut: false, + variable: "rexincl" + } + ].concat(C.Options.check), + styles: C.Options.styles.filter(s => s != "madrasi") + }; + } + + constructor(o) { + o.options["madrasi"] = true; + super(o); + } + + underCheck([x, y], color) { + if (this.options["rexincl"]) { + // If Rex Inclusive, kings do not check each other: + // we just replace it very temporarily. + const [ox, oy] = this.searchKingPos(color); + const saveOppKing = this.board[ox][oy]; + this.board[ox][oy] = C.GetOppCol(color) + "q"; //arbitrary + const res = super.underCheck([x, y], color); + this.board[ox][oy] = saveOppKing; + return res; + } + return super.underCheck([x, y], color); + } + +}; diff --git a/variants/Madrasi/rules.html b/variants/Madrasi/rules.html new file mode 100644 index 0000000..22b6681 --- /dev/null +++ b/variants/Madrasi/rules.html @@ -0,0 +1 @@ +

Pieces of same nature attacking each other are immobilized.

diff --git a/variants/Madrasi/style.css b/variants/Madrasi/style.css new file mode 100644 index 0000000..a3550bc --- /dev/null +++ b/variants/Madrasi/style.css @@ -0,0 +1 @@ +@import url("/base_pieces.css"); diff --git a/variants/Zen/style.css b/variants/Zen/style.css index 9378e29..a3550bc 100644 --- a/variants/Zen/style.css +++ b/variants/Zen/style.css @@ -1 +1 @@ -@import "../../base_pieces.css" +@import url("/base_pieces.css");