Compare commits

...

60 Commits

Author SHA1 Message Date
Jesse D. McDonald 21623b24f0 0.8.7 2021-09-26 18:21:16 -05:00
Jesse D. McDonald d2fe0f47c3 update dependencies to latest versions 2021-09-26 18:21:01 -05:00
Jesse D. McDonald f5bd481975 0.8.6 2021-09-26 18:21:01 -05:00
Jesse D. McDonald efe995e247 add <!DOCTYPE html> to index.html to avoid quirks mode 2021-09-26 18:21:01 -05:00
Jesse D. McDonald b553eb434a distinguish between 0 and undefined for afterTime when polling metadata 2021-09-26 18:21:01 -05:00
Jesse D. McDonald 4f72d75642 0.8.5 2020-06-24 21:45:23 -05:00
Jesse D. McDonald a829e7224c minor layout tweaks 2020-06-24 21:45:15 -05:00
Jesse D. McDonald 23202e7a7b 0.8.4 2020-06-22 14:26:52 -05:00
Jesse D. McDonald 06c605344f fix missing CSS import for traditional chess icon theme 2020-06-22 14:26:45 -05:00
Jesse D. McDonald 015447dc57 0.8.3 2020-06-21 23:04:48 -05:00
Jesse D. McDonald 59af2e0a29 fix for missing data when showing tiles for old games 2020-06-21 23:04:33 -05:00
Jesse D. McDonald 8de753aac5 use horizontal clip effect instead of fold 2020-06-21 23:02:51 -05:00
Jesse D. McDonald 0febac8b3c use CSS grid for game selection list 2020-06-21 23:01:34 -05:00
Jesse D. McDonald 2c1892303e 0.8.2 2020-05-21 16:14:59 -05:00
Jesse D. McDonald 0df3a7c647 display cumulative waiting time since each player's first move 2020-05-21 16:14:55 -05:00
Jesse D. McDonald 3bae819cb2 0.8.1 2020-05-20 13:39:38 -05:00
Jesse D. McDonald d020e94ac0 highlight the piece beside the name of the current player or winner 2020-05-20 13:39:29 -05:00
Jesse D. McDonald f2fad336a3 0.8.0 2020-05-14 23:48:24 -05:00
Jesse D. McDonald 6495c49022 add "private copy" feature for client-only exploration of moves 2020-05-14 23:46:14 -05:00
Jesse D. McDonald 6dd6c2e3d6 fix issues reported by eslint 2020-05-12 18:26:05 -05:00
Jesse D. McDonald 04638e650d 0.7.4 2020-05-11 13:04:04 -05:00
Jesse D. McDonald d1439b3f09 fix (maybe) for page not reloading after updating service worker 2020-05-11 13:04:00 -05:00
Jesse D. McDonald 994880f454 0.7.3 2020-05-10 20:20:37 -05:00
Jesse D. McDonald 9795c83583 fix for race between polling and server response after update 2020-05-10 20:20:31 -05:00
Jesse D. McDonald f4318b2464 0.7.2 2020-05-10 17:56:05 -05:00
Jesse D. McDonald fd3a8db71d fix for too much padding in side-panel header 2020-05-10 17:56:00 -05:00
Jesse D. McDonald 994da62aac add -moz-appearance alongside -webkit-appearance (formality) 2020-05-10 17:39:48 -05:00
Jesse D. McDonald 07069e25a8 0.7.1 2020-05-10 17:29:10 -05:00
Jesse D. McDonald 0f3313902c add background & gradient border to side panel 2020-05-10 17:29:06 -05:00
Jesse D. McDonald 5f94e931a0 0.7.0 2020-05-10 15:42:41 -05:00
Jesse D. McDonald cb99962074 completely redesign the user interface 2020-05-10 15:42:23 -05:00
Jesse D. McDonald 8b06a83361 use 11 KiB .mp3 for audio rather than 188 KiB .wav 2020-05-10 11:07:18 -05:00
Jesse D. McDonald 91a7884a4d mark completed feature in roadmap 2020-05-09 13:06:17 -05:00
Jesse D. McDonald 555864b1cf 0.6.1 2020-05-09 13:05:38 -05:00
Jesse D. McDonald a1a9eea758 fix for not notifying on next move after switching game 2020-05-09 13:05:32 -05:00
Jesse D. McDonald 327d7a74bc 0.6.0 2020-05-09 12:54:56 -05:00
Jesse D. McDonald 8621724c40 add notifications for games which are not currently visible 2020-05-09 12:54:49 -05:00
Jesse D. McDonald a523c81f88 fix for dragging from phantom square broken (again) 2020-05-09 12:53:45 -05:00
Jesse D. McDonald 21214dd5df factor the code for the status message out of renderBoard() 2020-05-09 11:30:30 -05:00
Jesse D. McDonald 6f6600c6f4 remember the notify and reverse flags for each game separately 2020-05-09 11:29:25 -05:00
Jesse D. McDonald c2dbd6267c add getGameId() and $ (jQuery) to the Admin object 2020-05-09 10:30:46 -05:00
Jesse D. McDonald aee33bf30e mark completed feature in roadmap 2020-05-08 22:18:47 -05:00
Jesse D. McDonald f314f35e39 0.5.0 2020-05-08 22:15:22 -05:00
Jesse D. McDonald 5873a97d93 remove piece IDs and unused <img> elements; animate click moves 2020-05-08 22:15:11 -05:00
Jesse D. McDonald 56cce3340e prohibit castling through check 2020-05-08 20:52:22 -05:00
Jesse D. McDonald b1caa69920 move (de)serialization into the Game class & add rule versioning 2020-05-08 20:40:48 -05:00
Jesse D. McDonald 503a26eda3 add a project roadmap to track planned future changes 2020-05-08 15:29:44 -05:00
Jesse D. McDonald 2d12e909f8 0.4.8 2020-05-08 12:02:00 -05:00
Jesse D. McDonald 4d87a9b2d1 fix for undo state becoming corrupted after redo 2020-05-08 12:01:45 -05:00
Jesse D. McDonald 7842058370 0.4.7 2020-05-07 21:07:07 -05:00
Jesse D. McDonald 3877414058 fix for too much padding in certain history diffs 2020-05-07 21:07:01 -05:00
Jesse D. McDonald b97d328760 0.4.6 2020-05-04 00:41:47 -05:00
Jesse D. McDonald 8cc870a827 add more elegant styling for the player name inputs 2020-05-04 00:41:23 -05:00
Jesse D. McDonald f605e13b80 0.4.5 2020-05-04 00:18:34 -05:00
Jesse D. McDonald 3f37803c34 use view boxes instead of CSS :target to allow theme preview 2020-05-04 00:18:10 -05:00
Jesse D. McDonald 695aabd48c 0.4.4 2020-05-03 22:37:48 -05:00
Jesse D. McDonald ab704b9c7b update traditional theme to consistent 80pt square view boxes 2020-05-03 22:36:31 -05:00
Jesse D. McDonald 106e43e8ad create combined SVGs for each chess icon theme using :target selectors 2020-05-03 21:29:23 -05:00
Jesse D. McDonald 4f7dcd7ff9 0.4.3 2020-05-02 20:44:26 -05:00
Jesse D. McDonald 34911ab952 add rounded corners and drop shadows for a more 2.5D look 2020-05-02 20:44:12 -05:00
21 changed files with 19496 additions and 6810 deletions

21
.eslintrc.js Normal file
View File

@ -0,0 +1,21 @@
module.exports = {
"env": {
"browser": true,
"commonjs": true,
"jquery": true,
"es6": true
},
"extends": "eslint:recommended",
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"rules": {
"no-console": "off",
"semi": "warn",
}
};

13
ROADMAP.md Normal file
View File

@ -0,0 +1,13 @@
# Road Map
- [x] Block castling through check (middle square needs to be clear of check).
- [x] Notifications for games other than the currently selected game.
- [ ] Protocol and UI for offering and accepting a draw.
- [ ] In-browser local, private games.
- [ ] Password-protected user accounts.
- [ ] Server-side storage for settings across browsers.
- [ ] Persistent (but changeable) display names.
- [ ] Games "owned" by specific player accounts.
- [ ] Invite specific other players to join new games.
- [ ] Create open games for other players to join.
- [ ] Create games controlled entirely by one player.

View File

@ -2,86 +2,373 @@
box-sizing: border-box;
}
html, body, #page {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
background: white;
}
body {
font-family: 'Roboto', sans-serif;
padding: 0;
margin: 0;
}
#page {
body > #page {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
display: flex;
flex-flow: column nowrap;
}
h1 {
font-family: 'Vollkorn', serif;
font-size: 2em;
line-height: 1.4em;
height: 1.4em;
margin-top: 8px;
margin-left: 8px;
margin-bottom: 0;
}
a.plain-link {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
color: inherit;
background-color: inherit;
text-decoration: inherit;
}
.media-button-svg {
width: 12pt;
height: 12pt;
}
button:disabled .silhouette {
fill: #c0c0c0;
}
#content {
display: flex;
flex-flow: row nowrap;
}
#cb_outer2 {
flex: 1 1 auto;
#board_ui {
display: flex;
flex-flow: column nowrap;
justify-content: stretch;
align-items: center;
width: 100%;
max-width: calc(100vh - (8px + 2.8em + 8px));
margin-left: 8px;
height: 100%;
background-color: #FFFFF0;
}
#cb_outer {
#page.horizontal-layout #board_ui {
border-left: 10px solid #C4B28F;
border-image:
linear-gradient(
to right,
#C4B28F,
#F5DEB3 15%,
#C4B28F 45%,
#FFFFF0 80%,
#C4B28F) 1 100%;
}
#header {
display: flex;
flex-flow: row nowrap;
flex: 0 0 auto;
width: 100%;
max-width: calc(100vw - (8px + 24px));
height: 2.5rem;
font-size: 2rem;
line-height: 2.4rem;
margin: 0;
background-image: linear-gradient(#FFFFF0, #F5DEB3);
border-bottom: 1px solid black;
align-items: center;
}
#header > h1 {
font-family: 'Vollkorn', serif;
text-align: center;
font-size: 1.2rem;
line-height: 2.4rem;
margin: 0;
padding: 0;
padding-top: 0.1rem;
height: 2.5rem;
white-space: nowrap;
flex: 1 0 auto;
}
#header > button {
flex: 0 0 auto;
width: 2.5rem;
height: 2.5rem;
border: none;
background: none;
padding: 0;
margin: 0;
}
#header > button:active {
background-image: linear-gradient(#F5DEB3, #FFFFF0);
}
input.image-checkbox {
display: inline-block;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding: 0;
margin: 0;
}
input.image-checkbox:checked {
color: #00f;
}
input.image-checkbox:focus {
outline: blue solid medium;
outline: -webkit-focus-ring-color solid medium;
outline-offset: 3px;
}
#header > .checkbox-container {
flex: 0 0 auto;
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
width: 2.5rem;
height: 2.5rem;
border: none;
background: none;
}
button#settings, button#cb_choose_game {
border-right: 1px solid #DCC8A1;
}
#header > .checkbox-container, button#help {
border-left: 1px solid #DCC8A1;
}
#cb_container {
position: relative;
width: 100%;
padding-top: 100%;
flex: 1 1 auto;
position: relative;
}
#cb_inner {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
#page.horizontal-layout #cb_container {
flex: 0 0.5 auto;
}
#cb_board {
position: relative;
width: 100%;
height: 100%;
border: 1px solid black;
position: absolute;
border-collapse: collapse;
padding-top: 100%;
border-style: hidden;
box-shadow: 0 0 0 1px black, 2px 2px 4px #00000080;
border-radius: 6pt;
overflow: hidden;
background-color: #FAEED2;
}
#cb_status {
display: flex;
position: relative;
flex-flow: column nowrap;
width: 100%;
padding-top: 0.25rem;
padding-left: 0.25rem;
padding-right: 0.25rem;
padding-bottom: 0.5rem;
}
#page.horizontal-layout #cb_status {
flex: 1 1 auto;
}
#cb_status::after {
content: '';
display: block;
position: absolute;
width: 100%;
height: 1.5em;
left: 0;
bottom: 0.5rem;
background: linear-gradient(rgba(255,255,240,0),rgba(255,255,240,1));
pointer-events: none;
}
#cb_message {
height: 1.2em;
margin-bottom: 0.1rem;
flex: 1 1 auto;
}
#cb_explain_check {
color: red;
height: 2.4em;
margin-bottom: 0.1em;
}
#cb_scrollable {
flex: 0 0 auto;
overflow: auto;
height: 4.8em;
padding-bottom: 1.2em;
}
#page.horizontal-layout #cb_scrollable {
flex: 1 1 auto;
}
#cb_history {
color: black;
}
#cb_history_future {
color: grey;
}
#cb_times {
display: flex;
flex-flow: row nowrap;
white-space: nowrap;
justify-content: stretch;
align-items: flex-end;
width: 100%;
padding-left: 3rem;
padding-right: 3rem;
}
#cb_times.cb-hide-times {
visibility: hidden;
}
#cb_light_time, #cb_dark_time {
width: 100%;
}
#cb_light_time {
text-align: left;
}
#cb_dark_time {
text-align: right;
}
#cb_names {
position: relative;
display: flex;
flex-flow: row nowrap;
white-space: nowrap;
justify-content: stretch;
align-items: flex-end;
font-size: 1.5rem;
width: 100%;
height: 3rem;
padding-left: 2rem;
padding-right: 2rem;
}
#cb_names_text {
display: flex;
flex-flow: row nowrap;
white-space: nowrap;
justify-content: stretch;
align-items: baseline;
width: 100%;
z-index: 1;
}
#cb_names::before {
content: '';
display: block;
background-image: url(../svg/pacosako-theme.svg#light_king_left);
background-size: contain;
background-repeat: no-repeat;
position: absolute;
bottom: 0;
left: 0.5rem;
width: 3rem;
height: 3rem;
}
#cb_names.cb-light-turn::before {
filter: drop-shadow(0 0 5px blue);
-webkit-filter: drop-shadow(0 0 5px blue);
}
#cb_names.cb-light-won::before {
filter: drop-shadow(0 0 5px darkviolet);
-webkit-filter: drop-shadow(0 0 5px darkviolet);
}
#cb_names::after {
content: '';
display: block;
background-image: url(../svg/pacosako-theme.svg#dark_king_right);
background-size: contain;
background-repeat: no-repeat;
position: absolute;
bottom: 0;
right: 0.5rem;
width: 3rem;
height: 3rem;
}
#cb_names.cb-dark-turn::after {
filter: drop-shadow(0 0 5px blue);
-webkit-filter: drop-shadow(0 0 5px blue);
}
#cb_names.cb-dark-won::after {
filter: drop-shadow(0 0 5px darkviolet);
-webkit-filter: drop-shadow(0 0 5px darkviolet);
}
#cb_names .cb-names-vs {
padding-left: 0.25em;
padding-right: 0.25em;
}
#cb_names input {
flex: 1 1 auto;
width: 4em;
background-color: inherit;
border: none;
margin: 2px;
font-size: 1.5rem;
}
#cb_names input:focus {
outline: 1px solid blue;
outline-offset: 2px;
}
#cb_dark_name {
text-align: right;
}
#cb_navigate {
display: flex;
flex-flow: row nowrap;
align-items: stretch;
justify-content: stretch;
border-top: 1px solid black;
background-image: linear-gradient(#FFFFF0, #F5DEB3);
white-space: nowrap;
width: 100%;
flex: 0 1 auto;
font-size: 1.25rem;
}
#cb_navigate .nav-spacer {
flex: 1 1 auto;
min-width: 1rem;
width: 100%;
background: none;
background-color: #DCC8A140;
}
#cb_navigate button {
padding: 0;
margin: 0;
border: none;
width: 2rem;
min-width: 2rem;
min-height: 2rem;
background: none;
font-size: inherit;
}
#cb_navigate button:active {
background-image: linear-gradient(#F5DEB3, #FFFFF0);
}
#cb_navigate > .nav-spacer, #cb_navigate > button {
border-left: 1px solid #DCC8A1;
}
#cb_navigate > .nav-spacer:first-child, #cb_navigate > button:first-child {
border-left: none;
}
#cb_board tr {
@ -93,146 +380,14 @@ button:disabled .silhouette {
position: relative;
}
#cb_light_name, #cb_dark_name {
width: 8em;
}
#cb_control_container {
display: flex;
flex-flow: column nowrap;
flex: 0 1000 auto;
margin-left: 1em;
width: 100%;
min-width: 24em;
max-height: calc(100vh - (8px + 2.8em));
}
#cb_control_form {
flex: 0 1 auto;
display: flex;
flex-flow: column nowrap;
margin-right: auto;
}
#cb_scrollable {
flex: 1 1000 auto;
padding-right: calc(8px + 3em);
overflow: auto;
}
#cb_scrollable > *:last-child {
margin-bottom: 0.5em;
}
#cb_controls, #cb_theme, #cb_names, #cb_message, #cb_navigate {
margin-top: 0.5em;
white-space: nowrap;
}
#cb_controls, #cb_theme, #cb_names {
padding-right: calc(3.25em + 12px);
}
#cb_theme {
display: flex;
flex-flow: row nowrap;
align-items: baseline;
}
.cb-spacer {
flex: 1 1 auto;
}
#cb_choose_game {
margin-left: 0.2em;
}
#cb_theme label {
flex: 0 0 auto;
padding-right: 0.2em;
}
#cb_undo {
margin-left: auto;
margin-right: 0.1em;
}
#cb_redo {
margin-left: 0.1em;
margin-right: auto;
}
#cb_resign {
margin-left: 0.1em;
margin-right: 0;
}
#cb_navigate {
display: flex;
flex-flow: row nowrap;
justify-items: center;
justify-content: center;
padding-left: 1em;
}
#cb_navigate button {
margin-left: 0.1em;
margin-right: 0.1em;
}
#cb_navigate button:first-child {
margin-left: 0;
}
#cb_navigate button:last-child {
margin-right: 0;
}
#cb_history {
max-width: 7.5in;
margin-bottom: 0.5em;
}
#cb_history_future {
color: grey;
}
#cb_explain_check {
color: red;
margin-top: 0.5em;
}
.cb-hbox {
display: flex;
flex-flow: row nowrap;
align-items: center;
}
.cb-vbox {
display: flex;
flex-flow: column nowrap;
align-items: center;
}
.cb-align-start {
align-items: start;
}
.cb-align-stretch {
align-items: stretch;
}
.cb-square {
position: relative;
width: calc((100% - 16pt) / 8);
height: calc((100% - 16pt) / 8);
border: 1px solid black;
padding: 0;
}
.cb-horiz-label {
position: relative;
width: calc((100% - 16pt) / 8);
height: 8pt;
border: 1px solid black;
padding: 0;
@ -240,7 +395,7 @@ button:disabled .silhouette {
.cb-horiz-label div {
position: absolute;
top: calc(50% - (1em / 2));
top: calc(50% - 3pt);
left: 0;
bottom: 0;
right: 0;
@ -252,7 +407,6 @@ button:disabled .silhouette {
.cb-vert-label {
position: relative;
width: 8pt;
height: calc((100% - 16pt) / 8);
border: 1px solid black;
padding: 0;
}
@ -309,35 +463,31 @@ button:disabled .silhouette {
.cb-lt-piece, .cb-dk-piece {
position: absolute;
top: 17.5%;
width: 55%;
height: 65%;
top: 0;
left: 0;
bottom: auto;
right: auto;
width: 100%;
height: 100%;
}
#cb_board .cb-lt-piece {
left: -2.5%;
.cb-phantom .cb-lt-piece,
.cb-phantom .cb-dk-piece {
top: 5%;
}
#cb_board .cb-dk-piece {
left: 47.5%;
#cb_board .cb-phantom .cb-lt-piece,
#cb_board.cb-reversed .cb-phantom .cb-dk-piece {
left: 15%;
right: auto;
clip-path: inset(0 15% 0 0);
}
#cb_board.cb-reversed .cb-lt-piece {
left: 47.5%;
}
#cb_board.cb-reversed .cb-dk-piece {
left: -2.5%;
}
#cb_board #cb_phantom .cb-dk-piece {
top: 22.5%;
left: 22.5%;
}
#cb_board #cb_phantom .cb-lt-piece {
top: 22.5%;
left: 22.5%;
#cb_board .cb-phantom .cb-dk-piece,
#cb_board.cb-reversed .cb-phantom .cb-lt-piece {
left: auto;
right: 15%;
clip-path: inset(0 0 0 15%);
}
.noselect {
@ -376,13 +526,62 @@ button:disabled .silhouette {
z-index: 1;
}
.badges {
position: fixed;
bottom: 12px;
right: 12px;
margin: 0;
.cb-private .cb-hide-if-private {
display: none !important;
}
.cb-show-if-private {
display: none !important;
}
.cb-private .cb-show-if-private {
display: initial !important;
}
div.hbox {
display: flex;
flex-flow: column nowrap;
flex-flow: row nowrap;
justify-content: stretch;
align-items: stretch;
}
.private-link {
flex: 0 1 auto;
margin: 0.1em;
color: black;
}
.private-link:visited {
color: black;
}
.private-link:hover {
color: blue;
}
.jBox-wrapper.jBox-hasTitle > .jBox-container {
padding: 4px; /* same as border-radius */
}
.jBox-title h2 {
margin: 0;
}
.rules {
display: block;
max-width: 80vw;
}
.badges {
position: static;
bottom: auto;
right: auto;
margin-top: 0;
margin-bottom: 0;
margin-left: auto;
margin-right: 5px;
display: flex;
flex-flow: row nowrap;
justify-content: flex-end;
align-items: center;
}
@ -392,23 +591,31 @@ button:disabled .silhouette {
}
.badge img {
width: 3em;
height: 3em;
opacity: 0.5;
width: 3rem;
height: 3rem;
margin: 0;
}
.badge.game-link-badge img {
width: 1.8em;
height: 1.8em;
margin: 0.6em;
#cb_theme {
display: flex;
flex-flow: row nowrap;
align-items: baseline;
margin-top: 1rem;
}
#cb_theme label {
flex: 0 0 auto;
padding-right: 0.2rem;
}
.game-tiles {
max-width: 80vw;
max-height: 80vh;
overflow-y: auto;
text-align: center;
width: calc(100vw - 6rem);
max-width: calc(100vw - 6rem);
max-height: calc(100vh - 12rem);
display: grid;
grid-template-columns: repeat(auto-fill, minmax(15em, auto));
align-items: center;
justify-items: center;
}
.game-tiles > * {
@ -417,17 +624,16 @@ button:disabled .silhouette {
.game-tile {
position: relative;
display: inline-flex;
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
width: 14em;
height: 14em;
border: 1px solid black;
box-shadow: 3px 3px 3px black;
margin: 1em;
box-shadow: 0 0 0 1px black, 5px 5px 3px #00000080;
margin: 0.5em;
padding: 0.5em;
border-radius: 5px;
border-radius: 6pt;
background-color: #FFFFF0;
overflow: hidden;
background-image:
@ -440,11 +646,11 @@ button:disabled .silhouette {
}
.game-tile:hover {
box-shadow: 3px 3px 3px blue;
box-shadow: 0 0 0 1px black, 5px 5px 3px #0000FF80;
}
.game-tile.game-tile-selected {
box-shadow: 0 0 0 2px blue, 5px 5px 3px black;
box-shadow: 0 0 0 2px blue, 5px 5px 3px #00000080;
}
.game-tile.game-tile-selected:hover {
@ -458,6 +664,7 @@ button:disabled .silhouette {
font-size: 3em;
text-shadow: 2px 2px 4px #000000c0;
font-weight: bold;
text-align: center;
}
.new-game-text::before {
@ -495,15 +702,15 @@ button:disabled .silhouette {
.game-tile-lt-name::before {
content: '';
display: inline-block;
background-image: url(../svg/pacosako/kl.svg);
background-image: url(../svg/pacosako-theme.svg#light_king_left);
background-size: contain;
background-repeat: no-repeat;
width: 1.2em;
height: 1.2em;
margin-left: 0;
margin-top: 0;
margin-bottom: -0.1em;
margin-right: -0.15em;
margin-bottom: -0.2em;
margin-right: -0.4em;
}
/* extra space to keep the line centered */
@ -512,9 +719,9 @@ button:disabled .silhouette {
display: inline-block;
width: 1.2em;
height: 1.2em;
margin-left: -0.15em;
margin-left: -0.4em;
margin-top: 0;
margin-bottom: -0.1em;
margin-bottom: -0.2em;
margin-right: 0;
}
@ -526,21 +733,21 @@ button:disabled .silhouette {
height: 1.2em;
margin-left: 0;
margin-top: 0;
margin-bottom: -0.1em;
margin-right: -0.05em;
margin-bottom: -0.2em;
margin-right: -0.4em;
}
.game-tile-dk-name::after {
content: '';
display: inline-block;
background-image: url(../svg/pacosako/kd.svg);
background-image: url(../svg/pacosako-theme.svg#dark_king_right);
background-size: contain;
background-repeat: no-repeat;
width: 1.2em;
height: 1.2em;
margin-left: -0.05em;
margin-left: -0.4em;
margin-top: 0;
margin-bottom: -0.1em;
margin-bottom: -0.2em;
margin-right: 0;
}
@ -580,72 +787,46 @@ button:disabled .silhouette {
margin-top: 0.5em;
}
.game-tile {
font-size: calc(12in * 0.015);
.game-tiles {
font-size: calc(12in * 0.014);
}
@media only screen and (min-width: 6in) and (max-width: 12in) {
.game-tile {
font-size: 1.5vw;
.game-tiles {
font-size: 1.4vw;
}
}
@media only screen and (max-width: 6in) {
.game-tile {
font-size: calc(6in * 0.015);
.game-tiles {
font-size: calc(6in * 0.014);
}
}
@media only screen and (max-aspect-ratio: 3/2) {
#content {
flex-flow: column nowrap;
}
.cb-dk-piece.cb-king { content: url(../svg/pacosako-theme.svg#dark_king_right); }
.cb-dk-piece.cb-queen { content: url(../svg/pacosako-theme.svg#dark_queen_right); }
.cb-dk-piece.cb-bishop { content: url(../svg/pacosako-theme.svg#dark_bishop_right); }
.cb-dk-piece.cb-knight { content: url(../svg/pacosako-theme.svg#dark_knight_right); }
.cb-dk-piece.cb-rook { content: url(../svg/pacosako-theme.svg#dark_rook_right); }
.cb-dk-piece.cb-pawn { content: url(../svg/pacosako-theme.svg#dark_pawn_right); }
.cb-lt-piece.cb-king { content: url(../svg/pacosako-theme.svg#light_king_left); }
.cb-lt-piece.cb-queen { content: url(../svg/pacosako-theme.svg#light_queen_left); }
.cb-lt-piece.cb-bishop { content: url(../svg/pacosako-theme.svg#light_bishop_left); }
.cb-lt-piece.cb-knight { content: url(../svg/pacosako-theme.svg#light_knight_left); }
.cb-lt-piece.cb-rook { content: url(../svg/pacosako-theme.svg#light_rook_left); }
.cb-lt-piece.cb-pawn { content: url(../svg/pacosako-theme.svg#light_pawn_left); }
#cb_outer2 {
width: auto;
}
#cb_control_container {
margin-top: 0.5em;
margin-left: 8px;
max-height: none;
overflow: visible;
width: 100%;
max-width: calc(100vw - (8px + 24px));
}
#cb_scrollable {
padding-right: 8px;
}
.badges {
position: static;
bottom: auto;
right: auto;
margin-left: auto;
margin-right: 8px;
display: flex;
flex-flow: row nowrap;
justify-content: flex-end;
}
}
.cb-dk-piece.cb-king { content: url(../svg/Chess_kdt45.svg); }
.cb-dk-piece.cb-queen { content: url(../svg/Chess_qdt45.svg); }
.cb-dk-piece.cb-rook { content: url(../svg/Chess_rdt45.svg); }
.cb-dk-piece.cb-knight { content: url(../svg/Chess_ndt45.svg); }
.cb-dk-piece.cb-bishop { content: url(../svg/Chess_bdt45.svg); }
.cb-dk-piece.cb-pawn { content: url(../svg/Chess_pdt45.svg); }
.cb-lt-piece.cb-king { content: url(../svg/Chess_klt45.svg); }
.cb-lt-piece.cb-queen { content: url(../svg/Chess_qlt45.svg); }
.cb-lt-piece.cb-rook { content: url(../svg/Chess_rlt45.svg); }
.cb-lt-piece.cb-knight { content: url(../svg/Chess_nlt45.svg); }
.cb-lt-piece.cb-bishop { content: url(../svg/Chess_blt45.svg); }
.cb-lt-piece.cb-pawn { content: url(../svg/Chess_plt45.svg); }
#cb_board.cb-reversed .cb-piece {
-webkit-transform: scaleX(-1);
transform: scaleX(-1);
}
.cb-reversed .cb-dk-piece.cb-king { content: url(../svg/pacosako-theme.svg#dark_king_left); }
.cb-reversed .cb-dk-piece.cb-queen { content: url(../svg/pacosako-theme.svg#dark_queen_left); }
.cb-reversed .cb-dk-piece.cb-bishop { content: url(../svg/pacosako-theme.svg#dark_bishop_left); }
.cb-reversed .cb-dk-piece.cb-knight { content: url(../svg/pacosako-theme.svg#dark_knight_left); }
.cb-reversed .cb-dk-piece.cb-rook { content: url(../svg/pacosako-theme.svg#dark_rook_left); }
.cb-reversed .cb-dk-piece.cb-pawn { content: url(../svg/pacosako-theme.svg#dark_pawn_left); }
.cb-reversed .cb-lt-piece.cb-king { content: url(../svg/pacosako-theme.svg#light_king_right); }
.cb-reversed .cb-lt-piece.cb-queen { content: url(../svg/pacosako-theme.svg#light_queen_right); }
.cb-reversed .cb-lt-piece.cb-bishop { content: url(../svg/pacosako-theme.svg#light_bishop_right); }
.cb-reversed .cb-lt-piece.cb-knight { content: url(../svg/pacosako-theme.svg#light_knight_right); }
.cb-reversed .cb-lt-piece.cb-rook { content: url(../svg/pacosako-theme.svg#light_rook_right); }
.cb-reversed .cb-lt-piece.cb-pawn { content: url(../svg/pacosako-theme.svg#light_pawn_right); }
/* vim: set expandtab sw=3 ts=8: */

View File

@ -1,45 +1,25 @@
.cb-theme-pacosako .cb-dk-piece.cb-king { content: url(../../svg/pacosako/kd.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-queen { content: url(../../svg/pacosako/qd.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-rook { content: url(../../svg/pacosako/rd.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-knight { content: url(../../svg/pacosako/nd.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-bishop { content: url(../../svg/pacosako/bd.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-pawn { content: url(../../svg/pacosako/pd.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-king { content: url(../../svg/pacosako/kl.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-queen { content: url(../../svg/pacosako/ql.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-rook { content: url(../../svg/pacosako/rl.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-knight { content: url(../../svg/pacosako/nl.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-bishop { content: url(../../svg/pacosako/bl.svg); }
.cb-theme-pacosako .cb-lt-piece.cb-pawn { content: url(../../svg/pacosako/pl.svg); }
.cb-theme-pacosako .cb-dk-piece.cb-king { content: url(../../svg/pacosako-theme.svg#dark_king_right); }
.cb-theme-pacosako .cb-dk-piece.cb-queen { content: url(../../svg/pacosako-theme.svg#dark_queen_right); }
.cb-theme-pacosako .cb-dk-piece.cb-bishop { content: url(../../svg/pacosako-theme.svg#dark_bishop_right); }
.cb-theme-pacosako .cb-dk-piece.cb-knight { content: url(../../svg/pacosako-theme.svg#dark_knight_right); }
.cb-theme-pacosako .cb-dk-piece.cb-rook { content: url(../../svg/pacosako-theme.svg#dark_rook_right); }
.cb-theme-pacosako .cb-dk-piece.cb-pawn { content: url(../../svg/pacosako-theme.svg#dark_pawn_right); }
.cb-theme-pacosako .cb-lt-piece.cb-king { content: url(../../svg/pacosako-theme.svg#light_king_left); }
.cb-theme-pacosako .cb-lt-piece.cb-queen { content: url(../../svg/pacosako-theme.svg#light_queen_left); }
.cb-theme-pacosako .cb-lt-piece.cb-bishop { content: url(../../svg/pacosako-theme.svg#light_bishop_left); }
.cb-theme-pacosako .cb-lt-piece.cb-knight { content: url(../../svg/pacosako-theme.svg#light_knight_left); }
.cb-theme-pacosako .cb-lt-piece.cb-rook { content: url(../../svg/pacosako-theme.svg#light_rook_left); }
.cb-theme-pacosako .cb-lt-piece.cb-pawn { content: url(../../svg/pacosako-theme.svg#light_pawn_left); }
.cb-theme-pacosako .cb-piece {
position: absolute;
top: 10%;
width: calc(55% * 80 / 65);
height: 80%;
}
#cb_board.cb-theme-pacosako .cb-lt-piece {
left: 0;
right: auto;
}
#cb_board.cb-theme-pacosako .cb-dk-piece {
left: auto;
right: 0;
}
#cb_board.cb-theme-pacosako.cb-reversed .cb-lt-piece {
right: 0;
left: auto;
}
#cb_board.cb-theme-pacosako.cb-reversed .cb-dk-piece {
left: 0;
right: auto;
}
#cb_board.cb-theme-pacosako #cb_phantom .cb-piece {
top: 15%;
left: calc((100% - (55% * 80 / 65)) / 2);
right: auto;
}
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-king { content: url(../../svg/pacosako-theme.svg#dark_king_left); }
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-queen { content: url(../../svg/pacosako-theme.svg#dark_queen_left); }
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-bishop { content: url(../../svg/pacosako-theme.svg#dark_bishop_left); }
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-knight { content: url(../../svg/pacosako-theme.svg#dark_knight_left); }
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-rook { content: url(../../svg/pacosako-theme.svg#dark_rook_left); }
.cb-theme-pacosako.cb-reversed .cb-dk-piece.cb-pawn { content: url(../../svg/pacosako-theme.svg#dark_pawn_left); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-king { content: url(../../svg/pacosako-theme.svg#light_king_right); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-queen { content: url(../../svg/pacosako-theme.svg#light_queen_right); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-bishop { content: url(../../svg/pacosako-theme.svg#light_bishop_right); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-knight { content: url(../../svg/pacosako-theme.svg#light_knight_right); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-rook { content: url(../../svg/pacosako-theme.svg#light_rook_right); }
.cb-theme-pacosako.cb-reversed .cb-lt-piece.cb-pawn { content: url(../../svg/pacosako-theme.svg#light_pawn_right); }

25
css/theme/traditional.css Normal file
View File

@ -0,0 +1,25 @@
.cb-theme-traditional .cb-dk-piece.cb-king { content: url(../../svg/traditional-theme.svg#dark_king_right); }
.cb-theme-traditional .cb-dk-piece.cb-queen { content: url(../../svg/traditional-theme.svg#dark_queen_right); }
.cb-theme-traditional .cb-dk-piece.cb-bishop { content: url(../../svg/traditional-theme.svg#dark_bishop_right); }
.cb-theme-traditional .cb-dk-piece.cb-knight { content: url(../../svg/traditional-theme.svg#dark_knight_right); }
.cb-theme-traditional .cb-dk-piece.cb-rook { content: url(../../svg/traditional-theme.svg#dark_rook_right); }
.cb-theme-traditional .cb-dk-piece.cb-pawn { content: url(../../svg/traditional-theme.svg#dark_pawn_right); }
.cb-theme-traditional .cb-lt-piece.cb-king { content: url(../../svg/traditional-theme.svg#light_king_left); }
.cb-theme-traditional .cb-lt-piece.cb-queen { content: url(../../svg/traditional-theme.svg#light_queen_left); }
.cb-theme-traditional .cb-lt-piece.cb-bishop { content: url(../../svg/traditional-theme.svg#light_bishop_left); }
.cb-theme-traditional .cb-lt-piece.cb-knight { content: url(../../svg/traditional-theme.svg#light_knight_left); }
.cb-theme-traditional .cb-lt-piece.cb-rook { content: url(../../svg/traditional-theme.svg#light_rook_left); }
.cb-theme-traditional .cb-lt-piece.cb-pawn { content: url(../../svg/traditional-theme.svg#light_pawn_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-king { content: url(../../svg/traditional-theme.svg#dark_king_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-queen { content: url(../../svg/traditional-theme.svg#dark_queen_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-bishop { content: url(../../svg/traditional-theme.svg#dark_bishop_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-knight { content: url(../../svg/traditional-theme.svg#dark_knight_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-rook { content: url(../../svg/traditional-theme.svg#dark_rook_left); }
.cb-theme-traditional.cb-reversed .cb-dk-piece.cb-pawn { content: url(../../svg/traditional-theme.svg#dark_pawn_left); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-king { content: url(../../svg/traditional-theme.svg#light_king_right); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-queen { content: url(../../svg/traditional-theme.svg#light_queen_right); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-bishop { content: url(../../svg/traditional-theme.svg#light_bishop_right); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-knight { content: url(../../svg/traditional-theme.svg#light_knight_right); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-rook { content: url(../../svg/traditional-theme.svg#light_rook_right); }
.cb-theme-traditional.cb-reversed .cb-lt-piece.cb-pawn { content: url(../../svg/traditional-theme.svg#light_pawn_right); }

View File

@ -1,3 +1,4 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
@ -14,14 +15,18 @@
</head>
<body>
<div id="page">
<h1><a href="." class="plain-link">Paco Ŝako</a></h1>
<div id="board_ui">
<div id="header">
<button id="settings" title="Settings" type="button"><span class="fas fa-cog"></span></button>
<button id="cb_choose_game" title="Choose Game" type="button" class="cb-hide-if-private"><span class="fas fa-list"></span></button>
<h1>Paco Ŝako<span class="cb-show-if-private" style="display: none"> - Private Mode</span></h1>
<div class="checkbox-container"><input id="cb_reverse" title="Reverse Board" type="checkbox" autocomplete="off" class="image-checkbox fas fa-sync"></div>
<div class="checkbox-container cb-hide-if-private"><input id="cb_notify" title="Notify" type="checkbox" autocomplete="off" class="image-checkbox fas fa-bell-slash"></div>
<button id="help" title="Help" type="button"><span class="fas fa-question-circle"></span></button>
</div>
<div id="content">
<div id="cb_outer2">
<div id="cb_outer">
<div id="cb_container">
<div id="cb_inner">
<table id="cb_board" class="noselect">
<table id="cb_board" class="noselect cb-theme-pacosako" style="visibility: hidden">
<tr id="cb_row9">
<td id="cb_L9" class="cb-corner"></td>
<td id="cb_a9" class="cb-horiz-label"><div>A</div></td>
@ -144,89 +149,47 @@
</tr>
</table>
</div>
</div>
</div>
</div>
<div id="cb_control_container">
<form id="cb_control_form" autocomplete="off" onsubmit="return false;">
<div id="cb_controls">
<div class="cb-hbox">
<div class="cb-vbox cb-align-start">
<div><input id="cb_notify" type="checkbox"><label for="cb_notify">Notify</label></div>
<div><input id="cb_sound" type="checkbox"><label for="cb_sound">Sound</label></div>
<div><input id="cb_reverse" type="checkbox"><label for="cb_reverse">Reverse</label></div>
</div>
<div class="cb-spacer"></div>
<div class="cb-vbox cb-align-stretch">
<div class="cb-hbox">
<button id="cb_undo" type="button" disabled="true">Undo</button>
<button id="cb_redo" type="button" disabled="true">Redo</button>
<button id="cb_resign" type="button" disabled="true">Resign</button>
</div>
<div id="cb_navigate">
<button id="cb_nav_first" title="View First Turn" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 6 24 H 24 V 120 H 6"/>
<path d="M 18 72 L 90 24 V 120"/>
<path d="M 66 72 L 138 24 V 120"/>
</svg>
</button>
<button id="cb_nav_prev_turn" title="View Prior Turn" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 12 72 L 84 24 V 120"/>
<path d="M 60 72 L 132 24 V 120"/>
</svg>
</button>
<button id="cb_nav_prev_state" title="View Prior State" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 36 72 L 108 24 V 120"/>
</svg>
</button>
<button id="cb_nav_next_state" title="View Next State" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 108 72 L 36 24 V 120"/>
</svg>
</button>
<button id="cb_nav_next_turn" title="View Next Turn" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 84 72 L 12 24 V 120"/>
<path d="M 132 72 L 60 24 V 120"/>
</svg>
</button>
<button id="cb_nav_last" title="View Current Move" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 78 72 L 6 24 V 120"/>
<path d="M 126 72 L 54 24 V 120"/>
<path d="M 138 24 H 120 V 120 H 138"/>
</svg>
</button>
</div>
</div>
</div>
</div>
<div id="cb_theme">
<label for="cb_select_theme">Theme:</label>
<select id="cb_select_theme">
<option value="traditional">Traditional</option>
<option value="pacosako">Paco Ŝako</option>
</select>
<div class="cb-spacer"></div>
<button id="cb_choose_game">Choose Game…</button>
</div>
<div id="cb_names">
<label for="cb_light_name">Players:</label>
<input id="cb_light_name" placeholder="Light"> vs. <input id="cb_dark_name" placeholder="Dark">
</div>
<div id="cb_status">
<div class="hbox">
<div id="cb_message"></div>
</form>
<div class="cb-hide-if-private"><a class="private-link" target="_blank" title="Open Private Copy"><span class="fas fa-copy"></span></a></div>
</div>
<div id="cb_explain_check"></div>
<div id="cb_scrollable">
<div id="cb_history">
<span id="cb_history_past"></span><span id="cb_history_future"></span>
<div id="cb_explain_check"></div>
</div>
<details>
<summary>Rule Reference</summary>
</div>
</div>
<div id="cb_names" class="cb-hide-if-private">
<div id="cb_names_text">
<input id="cb_light_name" autocomplete="off" placeholder="Light">
<span class="cb-names-vs">vs.</span>
<input id="cb_dark_name" autocomplete="off" placeholder="Dark">
</div>
</div>
<div id="cb_times" class="cb-hide-if-private">
<div id="cb_light_time">0:00:00</div>
<div id="cb_dark_time">0:00:00</div>
</div>
<div id="cb_navigate">
<button id="cb_undo" title="Undo" type="button" disabled="true"><span class="fas fa-undo"></span></button>
<button id="cb_redo" title="Redo" type="button" disabled="true"><span class="fas fa-redo"></span></button>
<div class="nav-spacer"></div>
<button id="cb_resign" title="Resign" type="button" disabled="true"><span class="fas fa-flag"></span></button>
<div class="nav-spacer"></div>
<button id="cb_nav_first" title="View First Turn" type="button" disabled="true"><span class="fas fa-fast-backward"></span></button>
<button id="cb_nav_prev_turn" title="View Prior Turn" type="button" disabled="true"><span class="fas fa-backward"></span></button>
<button id="cb_nav_prev_state" title="View Prior Move" type="button" disabled="true"><span class="fas fa-play fa-flip-horizontal"></span></button>
<button id="cb_nav_next_state" title="View Next Move" type="button" disabled="true"><span class="fas fa-play"></span></button>
<button id="cb_nav_next_turn" title="View Next Turn" type="button" disabled="true"><span class="fas fa-forward"></span></button>
<button id="cb_nav_last" title="View Current Move" type="button" disabled="true"><span class="fas fa-fast-forward"></span></button>
</div>
</div> <!-- board_ui -->
</div>
<div id="rules_content" style="display: none">
<div id="rules" class="rules">
<p>The basic movement for each piece is the same as traditional chess.</p>
<p>Pieces are never removed from the board. Instead, the capturing piece shares the square with the captured piece, and the two pieces become a joined pair.</p>
<p>When either piece moves from a square containing two pieces, the other piece moves with it.
@ -241,35 +204,23 @@
<p>When a pawn is captured <i>en passant</i> while joined with another piece, the captured pawn moves back one square to become joined with the capturing pawn
and the joined piece from the capturing side moves to a new location from its original position as with any other capture.</p>
<p>Pawns are promoted when they reach the final row on the opposite side of the board, even if they were moved there by the other player as part of a joined pair.</p>
</details>
</div>
</div>
</div>
<div class="badges">
<!-- "external-link-alt" by Font Awesome (fontawesome.com/icons/external-link-alt?style=solid) / CC BY 4.0 (creativecommons.org/licenses/by/4.0) -->
<div class="badge game-link-badge"><a id="game_link" href="#" rel="noopener noreferer" target="_blank"><img src="<%=require('./svg/external-link-alt-solid.svg')%>" alt="This Game" title="Link to This Game"></a></div>
<div class="badge official-badge"><a href="https://pacosako.com/" rel="noopener noreferer" target="_blank"><img src="<%=require('./svg/pacosako-logo.svg')%>" alt="Official Site" title="Official Site"></a></div>
<div class="badge jitsi-badge"><a id="jitsi_link" href="https://meet.jit.si/PacoSako" rel="noopener noreferer" target="_blank"><img src="<%=require('./svg/jitsi-logo-blue.svg')%>" alt="Jitsi Meet" title="Jitsi Meet"></a></div>
<div class="badge gogs-badge"><a href="https://jessemcdonald.info/gogs/nybble/paco_sako" rel="noopener noreferer" target="_blank"><img src="<%=require('./png/gogs.png')%>" alt="Source Code" title="Source Code"></a></div>
</div>
</div>
<div id="cb_hidden" style="display: none">
<div id="cb_phantom" class="cb-phantom"></div>
<div id="cb_pieces" style="display: none">
<div id="cb_piece_kd" class="cb-piece cb-dk-piece cb-king" ><img src="<%=require('./svg/Chess_kdt45.svg')%>" alt="kd"></div>
<div id="cb_piece_qd" class="cb-piece cb-dk-piece cb-queen" ><img src="<%=require('./svg/Chess_qdt45.svg')%>" alt="qd"></div>
<div id="cb_piece_rd" class="cb-piece cb-dk-piece cb-rook" ><img src="<%=require('./svg/Chess_rdt45.svg')%>" alt="rd"></div>
<div id="cb_piece_nd" class="cb-piece cb-dk-piece cb-knight" ><img src="<%=require('./svg/Chess_ndt45.svg')%>" alt="nd"></div>
<div id="cb_piece_bd" class="cb-piece cb-dk-piece cb-bishop" ><img src="<%=require('./svg/Chess_bdt45.svg')%>" alt="bd"></div>
<div id="cb_piece_pd" class="cb-piece cb-dk-piece cb-pawn" ><img src="<%=require('./svg/Chess_pdt45.svg')%>" alt="pd"></div>
<div id="cb_piece_kl" class="cb-piece cb-lt-piece cb-king" ><img src="<%=require('./svg/Chess_klt45.svg')%>" alt="kl"></div>
<div id="cb_piece_ql" class="cb-piece cb-lt-piece cb-queen" ><img src="<%=require('./svg/Chess_qlt45.svg')%>" alt="ql"></div>
<div id="cb_piece_rl" class="cb-piece cb-lt-piece cb-rook" ><img src="<%=require('./svg/Chess_rlt45.svg')%>" alt="rl"></div>
<div id="cb_piece_nl" class="cb-piece cb-lt-piece cb-knight" ><img src="<%=require('./svg/Chess_nlt45.svg')%>" alt="nl"></div>
<div id="cb_piece_bl" class="cb-piece cb-lt-piece cb-bishop" ><img src="<%=require('./svg/Chess_blt45.svg')%>" alt="bl"></div>
<div id="cb_piece_pl" class="cb-piece cb-lt-piece cb-pawn" ><img src="<%=require('./svg/Chess_plt45.svg')%>" alt="pl"></div>
<div id="settings_content" style="display: none">
<div id="settings">
<div><input id="cb_sound" type="checkbox"><label for="cb_sound">Sound</label></div>
<div id="cb_theme">
<label for="cb_select_theme">Theme:</label>
<select id="cb_select_theme">
<option value="pacosako">Paco Ŝako</option>
<option value="traditional">Traditional</option>
</select>
</div>
</div>
</div>

View File

@ -1,4 +1,8 @@
import './css/chess.css';
import './css/theme/pacosako.css';
import './css/theme/traditional.css';
import '@fortawesome/fontawesome-free/css/fontawesome.css';
import '@fortawesome/fontawesome-free/css/solid.css';
import './js/pacosako_ui.js';

View File

@ -90,6 +90,9 @@ export class Iterator {
}
flatMap(f) {
if (typeof f === 'undefined') {
f = identity;
}
const next = this.next;
let innerNext;
@ -108,7 +111,8 @@ export class Iterator {
return z;
}
const iter = y.value.__proto__[Symbol.iterator].call(y.value);
const mapped = f(z.value);
const iter = mapped.__proto__[Symbol.iterator].call(mapped);
innerNext = iter.next.bind(iter);
}
});
@ -194,6 +198,6 @@ export class Iterator {
strictlyIncludes(x) {
return this.some(function matches(y) { return y === x; });
}
};
}
export default Iterator;

View File

@ -1,6 +1,7 @@
'use strict';
import {Iterator} from './iterator.js';
import {Buffer} from 'buffer';
/* Game states */
const PLAYING = 'playing';
@ -31,26 +32,39 @@ const INITIAL_EDGE_ROW = ROOK + KNIGHT + BISHOP + QUEEN + KING + BISHOP + KNIGHT
const ROWS = '12345678';
const COLUMNS = 'abcdefgh';
/*
* Rule Version
*
* Increment this whenever a change in the rules would make some previously
* illegal moves illegal. The implementation in the Game class needs to check
* this._version and apply the appropriate rules based on which rules were in
* effect when the game was started.
*
* Version 1: Initial version. (Default if version field is missing.)
* Version 2: Prohibit moving through check.
*/
const CURRENT_VERSION = 2;
function otherSide(side) {
if (side === LIGHT) {
return DARK;
} else if (side === DARK) {
return LIGHT;
} else {
throw { message: 'invalid side', side: side };
throw new Error(`invalid side: ${side}`);
}
}
function squareIndex(square) {
if (typeof square !== 'string' || square.length !== 2) {
throw { message: 'invalid square', square: square };
throw new Error(`invalid square: ${square}`);
}
const column = COLUMNS.indexOf(square[0].toLowerCase());
const row = ROWS.indexOf(square[1]);
if (column < 0 || row < 0) {
throw { message: 'invalid square', square: square };
throw new Error(`invalid square: ${square}`);
}
return (row * 8) + column;
@ -72,7 +86,7 @@ function encodePiece(side, type) {
let result = ALL_PIECES.indexOf(type);
if (result < 0) {
throw { message: 'invalid piece', piece: type };
throw new Error(`invalid piece: ${type}`);
}
if (side === LIGHT) {
@ -80,7 +94,7 @@ function encodePiece(side, type) {
} else if (side === DARK) {
return result;
} else {
throw { message: 'invalid side', side: side };
throw new Error(`invalid side: ${side}`);
}
}
@ -92,7 +106,7 @@ function decodePiece(side, value) {
} else if (side === DARK) {
sideShift = 0;
} else {
throw { message: 'invalid side', side: side };
throw new Error(`invalid side: ${side}`);
}
let pieceValue = (value >>> sideShift) & 0b1111;
@ -100,7 +114,7 @@ function decodePiece(side, value) {
if (pieceValue < ALL_PIECES.length) {
return ALL_PIECES[pieceValue];
} else {
throw { message: 'invalid encoded piece', value: pieceValue };
throw new Error(`invalid encoded piece: ${pieceValue}`);
}
}
@ -108,7 +122,7 @@ class Board {
constructor(original) {
if (original !== null && original !== undefined) {
if (!(original instanceof this.constructor)) {
throw { message: 'can only clone from another Board instance' };
throw new TypeError(`can only clone from another Board instance`);
}
this._board = new Uint8Array(original._board);
@ -175,7 +189,7 @@ class Board {
if (type !== EMPTY) {
if (this._phantom) {
throw { message: 'phantom square is already occupied' };
throw new Error(`phantom square is already occupied`);
}
this.putPiece(side, square, EMPTY);
@ -190,17 +204,17 @@ class Board {
move(from, to) {
if (this._phantom && from !== PHANTOM) {
throw { message: 'must complete prior move before moving other pieces' };
throw new Error(`must complete prior move before moving other pieces`);
}
let lightPiece = this.getPiece(LIGHT, from);
let darkPiece = this.getPiece(DARK, from);
if (lightPiece === EMPTY && darkPiece === EMPTY) {
throw { message: 'cannot move from empty square' };
throw new Error(`cannot move from empty square: ${from}${to}`);
} else if (lightPiece !== EMPTY && darkPiece !== EMPTY) {
if (!this.isEmpty(to)) {
throw { message: 'cannot capture with joined pieces' };
throw new Error(`cannot capture with joined pieces`);
}
const fromIndex = squareIndex(from);
@ -214,7 +228,7 @@ class Board {
const displaced = this.getPiece(moving, to);
if (displaced !== EMPTY && this.getPiece(other, to) === EMPTY) {
throw { message: 'cannot join with piece of same color' };
throw new Error(`cannot join with piece of same color`);
}
if (from === PHANTOM) {
@ -258,7 +272,7 @@ class Board {
function testFunction(getPiece, match) {
if (match === undefined) {
return function(here) { return true; }
return function(/*here*/) { return true; };
} else if (match === false) {
return function(here) { return getPiece(here) === EMPTY; };
} else if (match === true) {
@ -273,7 +287,7 @@ class Board {
const test = function(here) { return testSide(here) && testOther(here); };
if (this._phantom && this._phantom.side === side) {
const getPhantom = (here) => this._phantom.type;
const getPhantom = (/*here*/) => this._phantom.type;
const testPhantom = testFunction(getPhantom, type);
if (testPhantom(PHANTOM)) {
yield this._phantom.from;
@ -302,8 +316,8 @@ const KNIGHT_DIR =
[-1, -2], [ 1, -2]];
const NBSP = '\u00a0'; /* non-breaking space */
const SHY = '\u00ad' /* soft hyphen */
const ZWSP = '\u200b'; /* zero-width space */
const SHY = '\u00ad'; /* soft hyphen */
/* const ZWSP = '\u200b'; */ /* zero-width space */
function addHistory(game) {
const prior = game._undo;
@ -452,7 +466,7 @@ function diffHistory(game1, game2) {
}
}
let suffix = hist.history.slice(history_before.length).trimStart();
let suffix = hist.history.slice(history_before.length).match(/^(?:\s|…)*(.*)$/)[1];
if (!suffix.match(/^\d+\./)) {
suffix = `${turn_before}.${NBSP}${suffix}`;
}
@ -462,9 +476,38 @@ function diffHistory(game1, game2) {
class Game {
constructor(original) {
if (typeof original === 'string') {
const moves = JSON.parse(original);
original = new Game();
if ('version' in moves === false) {
original._version = 1;
} else if (!Number.isInteger(moves.version) ||
moves.version < 1 || moves.version > CURRENT_VERSION) {
throw new Error('invalid version');
} else {
original._version = moves.version;
}
for (const move of moves.past) {
original.replayMove(move);
}
let n = 0;
for (const move of moves.future.slice().reverse()) {
original.replayMove(move);
n += 1;
}
for (let i = 0; i < n; ++i) {
original.undo();
}
}
if (original !== undefined) {
if (!(original instanceof this.constructor)) {
throw { message: 'can only clone from another Game instance' };
throw new TypeError(`can only clone from another Game instance`);
}
Object.assign(this, original, {
@ -488,6 +531,7 @@ class Game {
this._undo = null;
this._checkCache = {};
this._ignoreCheck = false;
this._version = CURRENT_VERSION;
/* set to false when the king or rook moves */
this._castling = {
@ -525,6 +569,41 @@ class Game {
this._ignoreCheck = !!value;
}
get version() {
return this._version;
}
toJSON(style) {
function shrinkMove(move) {
if (move.resign) {
return { side: move.side, resign: true };
} else if (move.phantom) {
return { side: move.side, phantom: true, to: move.to };
} else {
return { side: move.side, from: move.from, to: move.to };
}
}
if (style === 'minify') {
/* Just the fields that are used by the constructor to replay the game */
/* Omits metadata and extra annotation fields */
const state = { past: [], future: [], version: this._version };
for (const move of this._moves) {
state.past.push(shrinkMove(move));
}
for (const move of this._redo) {
state.future.push(shrinkMove(move));
}
return JSON.stringify(state);
}
return JSON.stringify({
past: this._moves,
future: this._redo,
version: this._version,
});
}
canCapture(side, from) {
if (from === PHANTOM) {
return true;
@ -568,7 +647,18 @@ class Game {
board.isEmpty('f' + row) &&
board.isEmpty('g' + row)) {
if (!this.isInCheck(side)) {
if (this._version < 2) {
yield 'g' + row;
} else {
/* Prohibit castling through check */
const testGame = new Game(this);
testGame._board.putPiece(side, 'e' + row, EMPTY);
testGame._board.putPiece(side, 'f' + row, KING);
testGame._checkCache = {};
if (!testGame.isInCheck(side)) {
yield 'g' + row;
}
}
}
}
@ -577,7 +667,18 @@ class Game {
board.isEmpty('c' + row) &&
board.isEmpty('b' + row)) {
if (!this.isInCheck(side)) {
if (this._version < 2) {
yield 'c' + row;
} else {
/* Prohibit castling through check */
const testGame = new Game(this);
testGame._board.putPiece(side, 'e' + row, EMPTY);
testGame._board.putPiece(side, 'd' + row, KING);
testGame._checkCache = {};
if (!testGame.isInCheck(side)) {
yield 'c' + row;
}
}
}
}
}
@ -671,8 +772,6 @@ class Game {
/* if a piece has few moves (king, pawn, knight) then just enumerate them */
/* if movement is more extensive (bishop, rook, queen) then we can do better */
if (type === BISHOP || type === ROOK || type === QUEEN) {
const ortho = (type === ROOK || type === QUEEN);
const diag = (type === BISHOP || type === QUEEN);
const fromIndex = squareIndex(fromSquare);
const toIndex = squareIndex(to);
const rowsDiff = (toIndex >>> 3) - (fromIndex >>> 3);
@ -732,7 +831,7 @@ class Game {
const kings = [...this._board.findPieces(side, KING)];
if (kings.length !== 1) {
throw { message: 'there should be exactly one king per side' };
throw new Error(`there should be exactly one king per side`);
}
const king = kings[0];
@ -756,7 +855,7 @@ class Game {
try {
sim.move(from, king);
check = diffHistory(this, sim) || true;
} catch(err) {}
} catch(err) {/*ignore*/}
}
return recordCheck(this, check);
}
@ -812,7 +911,7 @@ class Game {
try {
game2.move(PHANTOM, king);
check = diffHistory(this, game2) || true;
} catch(err) {}
} catch(err) {/*ignore*/}
}
return recordCheck(this, check);
}
@ -894,7 +993,7 @@ class Game {
move(from, to, meta) {
if (this._status !== PLAYING) {
throw { message: "can't move, game is already over" };
throw new Error(`can't move, game is already over`);
}
const side = this._player;
@ -906,13 +1005,13 @@ class Game {
const alongside = board.getPiece(other, from);
if (from === PHANTOM && !board.phantom) {
throw { message: "attempted to continue a completed move" };
throw new Error(`attempted to continue a completed move`);
}
const fromSquare = (from === PHANTOM) ? board.phantom.from : from;
if (!this.isLegalMove(side, from, to, alongside === EMPTY)) {
throw { message: "illegal move", side: side, from: fromSquare, to: to };
throw new Error(`illegal move by ${side} side: ${fromSquare}${to}`);
}
const move = {
@ -1053,7 +1152,7 @@ class Game {
resign(meta) {
if (this._status !== PLAYING) {
throw { message: "can't resign, game is already over" };
throw new Error(`can't resign, game is already over`);
}
const move = {
@ -1101,8 +1200,8 @@ class Game {
}
replayMove(move) {
if (!move || move.side !== this._player) {
throw { message: "other player's move", move: move };
if (otherSide(move.side) === this._player) {
throw new Error(`other player's move`);
}
if (move.resign) {
@ -1129,7 +1228,7 @@ class Game {
const savedRedo = this._redo;
/* copy all the properties from the saved prior game to this one */
Object.assign(this, this._undo);
Object.assign(this, new Game(this._undo));
/* restore the original redo history and add the undone move */
this._redo = savedRedo;
@ -1164,6 +1263,7 @@ class Game {
renderHistory() {
if (this._history === undefined) {
const replay = new Game();
replay._version = this._version;
for (const move of this._moves) {
replay.replayMove(move);
}
@ -1190,6 +1290,9 @@ export default {
/* Coordinates */
ROWS, COLUMNS, PHANTOM,
/* Versioning */
CURRENT_VERSION,
/* Miscellaneous */
Util: { otherSide, offsetSquare, diffHistory },
};

View File

@ -23,7 +23,7 @@ const meta = {
};
const stateListeners = {};
const stateNextId = 1;
let stateNextId = 1;
/* One-time request, no caching or polling */
function getGameState(gameId, retries) {
@ -37,7 +37,7 @@ function getGameState(gameId, retries) {
url: `${API_BASE}/game/${gameId}`,
cache: false,
timeout: SHORT_TIMEOUT,
}).done((data, textStatus, jqXHR) => {
}).done((data/*, textStatus, jqXHR*/) => {
resolve(data);
}).fail((jqXHR, textStatus, errorThrown) => {
if ((!jqXHR.status || jqXHR.status < 400 || jqXHR.status > 499) && retries > 0) {
@ -63,7 +63,7 @@ function getGameMeta(gameId, retries) {
url: `${API_BASE}/meta/${gameId}`,
cache: false,
timeout: SHORT_TIMEOUT,
}).done((data, textStatus, jqXHR) => {
}).done((data/*, textStatus, jqXHR*/) => {
resolve(data);
}).fail((jqXHR, textStatus, errorThrown) => {
if ((!jqXHR.status || jqXHR.status < 400 || jqXHR.status > 499) && retries > 0) {
@ -106,7 +106,7 @@ function onGameUpdate(gameId, callback) {
stopGamePoll(gameId);
}
}
}
};
}
function getCachedGame(gameId) {
@ -150,7 +150,7 @@ function onMetaUpdate(callback) {
stopMetaPoll();
}
}
}
};
}
function sendUpdate(gameId, data, retries) {
@ -306,7 +306,7 @@ function startGamePoll(gameId, afterTime) {
setConnectionState(game, 'polling');
startGamePoll(gameId, afterTime);
}
}).fail((jqXHR, textStatus, errorThrown) => {
}).fail((/*jqXHR, textStatus, errorThrown*/) => {
if (game.currentRequest === thisRequest) {
setConnectionState(game, 'failed');
setTimeout(() => {
@ -370,9 +370,9 @@ function startMetaPoll(afterTime) {
const thisRequest = meta.currentRequest = $.ajax({
dataType: 'json',
contentType: 'application/json',
url: `${API_BASE}/games${!afterTime ? '' : `/poll/${afterTime}`}`,
url: `${API_BASE}/games${(afterTime === undefined) ? '' : `/poll/${afterTime}`}`,
cache: false,
timeout: afterTime ? LONG_TIMEOUT : SHORT_TIMEOUT,
timeout: (afterTime === undefined) ? SHORT_TIMEOUT : LONG_TIMEOUT,
}).done((data, textStatus, jqXHR) => {
if (meta.currentRequest === thisRequest) {
meta.currentRequest = null;
@ -383,7 +383,7 @@ function startMetaPoll(afterTime) {
setConnectionState('polling');
startMetaPoll(afterTime);
}
}).fail((jqXHR, textStatus, errorThrown) => {
}).fail((/*jqXHR, textStatus, errorThrown*/) => {
if (meta.currentRequest === thisRequest) {
setConnectionState('failed');
setTimeout(() => {

File diff suppressed because it is too large Load Diff

Binary file not shown.

23145
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "paco-sako",
"version": "0.4.2",
"version": "0.8.7",
"description": "Online version of the Paco Ŝako chess variation",
"keywords": [
"game",
@ -31,28 +31,35 @@
"url": "https://jessemcdonald.info/gogs/nybble/paco_sako.git"
},
"devDependencies": {
"clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.1.1",
"@fortawesome/fontawesome-free": "^5.13.0",
"buffer": "^6.0.3",
"clean-webpack-plugin": "^4.0.0",
"copy-webpack-plugin": "^6.4.1",
"css-element-queries": "^1.2.3",
"deep-equal": "git+https://jessemcdonald.info/gogs/nybble/node-deep-equal",
"extract-loader": "^5.0.1",
"html-webpack-plugin": "^4.3.0",
"html-webpack-plugin": "^4.5.2",
"jbox": "^1.2.0",
"jquery-ui-touch-punch": "^0.2.3",
"lodash": "^4.17.15",
"mini-css-extract-plugin": "^0.9.0",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"mini-css-extract-plugin": "^1.6.2",
"optimize-css-assets-webpack-plugin": "^6.0.1",
"pako": "^2.0.4",
"sprintf-js": "^1.0.3",
"svgo": "^2.7.0",
"svgo-loader": "^3.0.0",
"webpack": "^4.46.0",
"webpack-cli": "^4.8.0",
"webpack-jquery-ui": "^2.0.1",
"workbox-precaching": "^5.1.3",
"workbox-routing": "^5.1.3",
"workbox-strategies": "^5.1.3",
"workbox-webpack-plugin": "^5.1.3",
"workbox-window": "^5.1.3"
"workbox-precaching": "^6.3.0",
"workbox-routing": "^6.3.0",
"workbox-strategies": "^6.3.0",
"workbox-webpack-plugin": "^6.3.0",
"workbox-window": "^6.3.0"
},
"dependencies": {
"paco-sako-server": "git+https://jessemcdonald.info/gogs/nybble/paco_sako_server"
},
"dependencies": {},
"optionalDependencies": {
"paco-sako-server": "git+https://jessemcdonald.info/gogs/nybble/paco_sako_server"
},

View File

@ -0,0 +1,29 @@
import Text.Printf
edge = 28.223 :: Double
spacing = 32 :: Double
gap = spacing - edge
across = [("light", "left"), ("dark", "right"), ("dark", "left"), ("light", "right")]
down = ["king", "queen", "bishop", "knight", "rook", "pawn"]
useElement :: Double -> Double -> String -> String -> String -> String
useElement x y side kind place = printf format name x y edge edge x y name
where
format =
"<view id=\"%s\" width=\"80pt\" height=\"80pt\" viewBox=\"%.3f %.3f %.3f %.3f\"/>\n" ++
"<use transform=\"translate(%.3f %.3f)\" xlink:href=\"#sym_%s\"/>"
name = side ++ "_" ++ kind ++ "_" ++ place
main = do
putStr $ unlines $ concat $
flip map (zip [5*spacing,4*spacing..] down) $ \(y, kind) ->
flip map (zip [0,spacing..] across) $ \(x, (side, place)) ->
useElement x y side kind place
putStr "<path stroke-width=\"0.25\" stroke=\"#000\" d=\""
putStr $ flip concatMap [0..6] $ \row ->
printf "M%0.3f %0.3fH%0.3f" (0 - gap/2) (row*spacing-(gap/2)) (4*spacing - gap/2)
putStr $ flip concatMap [0..4] $ \col ->
printf "M%0.3f %0.3fV%0.3f" (col*spacing-(gap/2)) (0 - gap/2) (6*spacing - gap/2)
putStrLn "\"/>"
printf "viewBox=\"%.3f %0.3f %.3f %.3f\"\n"
(0-spacing) (0-gap) (6*spacing + 2*gap) (6*spacing + 2*gap)

View File

@ -1 +0,0 @@
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="external-link-alt" class="svg-inline--fa fa-external-link-alt fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z"></path></svg>

Before

Width:  |  Height:  |  Size: 597 B

View File

@ -1,160 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="160"
height="160"
viewBox="0 0 150 150.00001"
id="svg3526"
version="1.1"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
inkscape:export-filename="/Users/ystamcheva/Dropbox/Designs/appLogo.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:docname="jitsi-logo-blue.svg">
<defs
id="defs3528">
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Blur"
id="filter921">
<feGaussianBlur
stdDeviation="4 4"
result="blur"
id="feGaussianBlur919" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="89.185304"
inkscape:cy="80.953412"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="999"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px"
inkscape:snap-bbox="true"
inkscape:snap-page="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata3531">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-902.36211)"
style="opacity:1">
<path
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.91489375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;filter:url(#filter921)"
d="M 142.5,977.36212 A 67.499998,67.499998 0 0 1 74.999998,1044.8621 67.499998,67.499998 0 0 1 7.5,977.36212 a 67.499998,67.499998 0 0 1 67.499998,-67.5 67.499998,67.499998 0 0 1 67.500002,67.5 z"
id="path1006-7"
inkscape:connector-curvature="0"
transform="matrix(0.97916666,0,0,0.97916666,1.562503,20.361715)" />
<path
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.87500012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 141.09375,977.36212 A 66.09375,66.09375 0 0 1 75.000003,1043.4558 66.09375,66.09375 0 0 1 8.9062529,977.36212 66.09375,66.09375 0 0 1 75.000003,911.26837 66.09375,66.09375 0 0 1 141.09375,977.36212 Z"
id="path1006"
inkscape:connector-curvature="0" />
<g
id="g1247"
transform="matrix(0.93034217,0,0,0.93034217,4.9699418,67.566622)"
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333">
<path
inkscape:connector-curvature="0"
id="path3618"
d=""
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path35"
d="m 66.150479,984.58608 c 3.546945,0 11.036812,-2.11769 15.990996,-3.51965 0.720489,-0.20282 1.392044,-0.39263 2.002303,-0.56287 0.09877,-0.0272 0.194448,-0.0519 0.284976,-0.0746 -0.27828,-0.27544 -0.741093,-0.6937 -1.495321,-1.32572 -3.300213,-2.23667 -6.416409,-3.27807 -9.805606,-3.27807 -0.73929,0 -1.507554,0.0453 -2.344712,0.14011 -2.869465,0.32644 -5.26015,1.01023 -6.408683,1.33796 -0.582186,0.16689 -0.757576,0.21672 -0.939018,0.21672 -0.346144,0 -0.643483,-0.20591 -0.759765,-0.52398 -0.116412,-0.31974 -0.01674,-0.67258 0.253555,-0.89897 l 0.01635,-0.0131 c 1.980412,-1.65899 5.670166,-4.74737 12.67005,-6.12731 1.214078,-0.23862 2.512891,-0.36006 3.859091,-0.36006 3.133581,0 6.378164,0.64722 9.641162,1.92195 4.444111,1.7351 7.480982,3.9625 9.923563,5.75233 1.31491,0.96438 2.45057,1.79755 3.43891,2.2556 0.25252,0.11744 0.38361,0.15053 0.44465,0.15916 0.0449,-0.0582 0.14243,-0.21891 0.28575,-0.64052 0.0384,-0.11165 0.31588,-1.29018 -1.67496,-7.99311 -1.15703,-3.89116 -2.552556,-7.86512 -3.279226,-9.62945 -1.405694,-3.41366 -1.060709,-5.83293 -0.62803,-7.2479 -1.190899,0.4377 -2.408198,1.11879 -3.688853,2.05948 l -0.07984,0.059 c -0.639877,0.4744 -1.29173,1.01126 -1.993675,1.63864 -4.13029,3.69813 -7.224723,5.62613 -9.201529,5.73095 l -0.05447,0.003 -0.05421,-0.005 c -1.741536,-0.14783 -4.380754,-2.68287 -5.460393,-3.96636 -0.224453,-0.15054 -0.480197,-0.21879 -0.817713,-0.21879 -0.338933,0 -0.718944,0.0712 -1.086593,0.14101 -0.267463,0.0507 -0.543168,0.10237 -0.816555,0.13006 -0.871412,0.0874 -2.092831,0.36919 -3.271626,0.64052 -0.568278,0.13058 -1.154714,0.26566 -1.690799,0.37628 -0.01017,0.002 -0.240292,0.0492 -0.651595,0.15762 -2.913377,0.86188 -5.108841,1.85073 -6.182685,2.78512 -0.01172,0.0102 -0.04636,0.0371 -0.101603,0.0777 -0.726284,0.51625 -2.472327,1.98916 -2.99914,4.4951 l -0.0055,0.0209 c -1.099856,4.61487 0.567635,10.33796 2.783445,13.60701 1.042166,1.53653 2.165202,2.49512 3.083359,2.62956 0.228573,0.0324 0.502861,0.0497 0.813978,0.0497 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path39"
d="m 82.429799,960.11108 c 0.0707,0.0139 0.15337,0.0209 0.24467,0.0209 1.90392,0 6.155901,-2.75679 6.942451,-4.01838 l 0.06258,-0.10045 0.08937,-0.0787 c 0.268236,-0.26476 1.042938,-1.65925 1.418958,-2.49396 -4.032164,-1.2097 -4.477077,-3.3928 -4.870352,-5.33252 -0.04572,-0.22523 -0.08589,-0.42804 -0.12182,-0.60936 -0.04597,-0.2372 -0.09413,-0.47813 -0.13547,-0.66434 -6.00678,1.99226 -7.842965,3.1104 -8.845083,3.94189 -0.518572,0.43075 -0.823894,1.65577 0.671555,5.04652 0.763886,1.7284 3.397825,4.06809 4.543138,4.28842 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path43"
d="m 51.013383,1000.8062 c -0.746759,-0.88008 -1.063414,-1.98921 -0.939147,-3.29974 0.528616,-6.36104 -0.19638,-7.8977 -0.532093,-8.26238 -0.081,-0.0882 -0.124782,-0.0882 -0.159422,-0.0882 -0.01301,0 -0.02511,7.7e-4 -0.03812,0.002 -0.623265,0.14899 -4.821418,2.98729 -5.748203,11.46142 -0.446973,4.0896 0.336228,9.3415 1.003663,12.5359 0.536342,-1.886 1.383287,-3.9635 3.023994,-6.1018 1.527514,-1.9888 3.193718,-3.5571 5.260665,-4.9318 -0.642581,-0.2672 -1.332293,-0.6791 -1.87134,-1.3155 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path47"
d="m 95.474451,928.32276 c -0.501702,3.30962 -1.318514,6.4535 -2.842938,9.77174 1.661697,-1.88125 2.63278,-3.92515 2.958062,-6.21925 0.135341,-0.95035 0.263342,-1.85937 -0.115124,-3.55249 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path51"
d="m 86.212271,943.73132 c 2.97918,-2.69331 4.792959,-7.14115 5.547315,-9.78307 -2.594662,2.49911 -5.747945,3.84003 -7.771624,4.70178 -0.696924,0.29721 -1.29804,0.55309 -1.658349,0.76312 -0.151695,0.0882 -0.304807,0.17693 -0.459851,0.26643 -1.2276,0.71019 -3.080783,1.78352 -3.35095,2.44503 l -0.0077,0.0215 -0.01004,0.0213 c -0.840764,1.76678 -1.314522,4.42364 -1.466347,5.94729 1.948991,-1.19013 3.958248,-1.98441 5.627284,-2.6436 1.549149,-0.61206 2.888653,-1.14132 3.550293,-1.73973 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path55"
d="m 89.217464,946.05955 c -0.01816,0.046 -0.0376,0.0895 -0.05859,0.13096 -0.49359,1.43492 0.186206,3.38675 1.445743,4.12295 0.335069,0.19599 0.660866,0.31575 0.9734,0.35696 0.04301,0.002 0.08576,0.003 0.128903,0.003 0.978809,0 1.777206,-0.71599 2.369437,-2.12722 0.372929,-1.07397 0.425983,-2.34754 0.14487,-3.49724 -0.2184,-0.89317 -0.783459,-1.95929 -1.143511,-2.49087 -0.67207,0.46127 -2.000242,1.47601 -2.912218,2.28136 -0.636915,0.61515 -0.867034,1.0025 -0.948032,1.21962 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path59"
d="m 97.64004,982.53162 c 1.082085,-0.29489 1.941393,-0.53634 2.57522,-0.72409 -1.305382,-0.90928 -2.816414,-2.04055 -4.870613,-3.63825 -5.034538,-3.91524 -10.43312,-5.90119 -16.043535,-5.90119 -3.07267,0 -5.749361,0.59133 -7.867818,1.30719 0.528101,-0.0328 1.065087,-0.0485 1.616625,-0.0485 0.655201,0 1.341823,0.0231 2.040034,0.0697 2.182586,0.14628 7.80575,1.139 12.891025,7.20244 1.024524,1.21936 2.125668,2.22869 5.257575,2.22869 1.117627,0 2.420431,-0.12453 3.980783,-0.38104 0.09645,-0.0269 0.242352,-0.0667 0.420704,-0.11487 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path63"
d="m 104.77707,956.11317 c -0.99864,-1.55082 -2.25329,-2.51418 -3.27214,-2.51418 -0.18853,0 -0.36855,0.0332 -0.53493,0.0985 -0.54587,0.21531 -1.41033,2.70966 -1.027486,4.52331 0.260506,1.23391 1.760336,5.40335 2.480436,7.40707 0.27584,0.76723 0.4095,1.14209 0.45419,1.28142 0.0354,0.10985 0.0863,0.26747 0.15066,0.46629 0.58168,1.77257 2.07468,6.32859 2.51908,10.0177 0.92395,-3.93455 1.44728,-8.6742 1.24228,-14.34655 -0.0931,-2.60111 -0.80793,-5.06378 -2.01209,-6.93357 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path67"
d="m 86.080664,982.55557 c -0.0197,-0.0258 -0.03863,-0.0511 -0.0573,-0.0753 -0.07907,0.0129 -0.208099,0.0411 -0.410145,0.0999 l -0.0846,0.0254 c -1.031607,0.37988 -2.924066,1.01834 -5.111545,1.75647 -2.625311,0.88468 -5.598697,1.88769 -8.088022,2.78087 -3.167319,1.18021 -4.194419,1.64586 -4.516482,1.80901 -0.05846,0.15685 -0.124009,0.35696 -0.197024,0.57768 -0.749077,2.27994 -2.4646,7.4985 -10.924006,11.1469 1.747203,1.7699 5.550278,4.9468 13.037055,4.9468 0.648376,0 1.320961,-0.024 1.99522,-0.073 5.652653,-0.4019 10.966115,-2.903 14.964283,-7.04037 3.635669,-3.76149 5.699397,-8.45284 5.731333,-12.97525 -0.884804,-0.0735 -2.384761,-0.29373 -3.7732,-0.95292 -0.0161,-0.008 -1.602847,-0.7729 -2.565559,-2.02626 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path71"
d="m 53.890317,990.77391 c -0.01571,1.33075 -0.191744,2.60703 -0.363142,3.85124 -0.0922,0.67168 -0.188525,1.36693 -0.25935,2.06566 -0.09607,1.40544 0.207583,1.89516 0.342409,2.03836 0.07353,0.081 0.194835,0.17333 0.455344,0.17333 0.20063,0 0.440149,-0.0556 0.693189,-0.1611 2.51199,-1.05285 4.897523,-2.88028 6.044254,-3.8945 -1.76008,-0.78488 -4.467033,-2.48018 -6.912704,-4.07299 z" />
<path
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333"
inkscape:connector-curvature="0"
id="path75"
d="m 95.375553,985.509 c -0.07108,0.93464 -0.22368,2.69768 -0.467577,4.04066 -0.295536,1.62628 -0.784876,3.00172 -1.069466,3.72015 0.508012,0.46976 1.014479,0.93077 1.342981,1.2218 1.321863,-0.8651 5.661019,-4.15901 8.654629,-11.63703 -0.95898,0.64774 -2.30583,1.21769 -4.051869,1.71682 -1.776691,0.50595 -3.503161,0.80213 -4.408698,0.9376 z" />
<path
d="m 113.82909,953.6111 c -1.81082,-3.78531 -4.33568,-5.69644 -6.07954,-6.80467 -1.46622,-0.93142 -3.15225,-1.60825 -5.02372,-2.01878 -0.20887,-1.30809 -0.56622,-2.64527 -1.05569,-3.9464 3.15586,-4.70424 3.91563,-9.99349 2.19019,-15.35151 -1.32521,-4.11947 -2.35412,-6.77569 -3.23905,-8.36102 -1.911774,-3.42899 -4.56065,-4.14858 -6.446413,-4.14858 -1.943196,0 -3.803719,0.8257 -5.108069,2.26771 -1.335383,1.47601 -1.959035,3.40761 -1.755701,5.43786 0.173716,1.73149 -0.280469,4.87692 -0.581928,6.00008 -0.0052,0.0151 -0.541108,1.51644 -4.528716,3.44908 -0.09606,0.0345 -0.3003,0.10443 -0.614637,0.20977 -2.293718,0.76814 -6.556258,2.19714 -9.395719,5.9518 -2.169451,2.62788 -2.702317,5.23194 -3.317984,8.24615 -0.368036,1.79704 -0.752812,4.14484 -0.65739,6.92095 -7.127627,1.58275 -12.26261,4.80815 -15.273726,9.59879 -3.116711,4.96037 -3.657432,11.10957 -1.605551,18.28497 l 0.01803,0.0533 c 0.0376,0.13058 0.07726,0.26064 0.118601,0.39019 -0.350007,-0.06 -0.703749,-0.11049 -1.066891,-0.15054 -0.317942,-0.0366 -0.6458,-0.0541 -0.970954,-0.0541 -3.558791,0 -7.345641,2.23693 -10.130116,5.98463 -2.115366,2.84564 -4.655943,7.87207 -4.74557,15.65802 -0.06735,5.7826 0.551023,11.1139 1.839276,15.8461 0.96078,3.526 2.032564,5.6921 2.443997,6.4503 l 8.729958,16.3644 3.999713,-18.1224 c 1.365002,-6.1728 2.712748,-8.7931 4.451837,-10.525 4.046715,2.4388 8.826282,3.7217 13.899968,3.7217 5.655614,0 11.552937,-1.6311 16.603314,-4.5923 3.280769,-1.9257 6.07722,-4.2913 8.322519,-7.0385 0.03039,0 0.06039,0 0.09066,0 h 0.239133 c 1.388438,-0.047 3.286563,-0.7336 5.206829,-1.884 1.5995,-0.9571 4.01092,-2.71815 6.43174,-5.67428 2.43963,-2.98176 4.43007,-6.60919 5.91407,-10.78236 1.73845,-4.88554 2.79658,-10.57425 3.1426,-16.90438 0.41889,-5.88793 -0.2676,-10.75686 -2.04507,-14.47211 z m -4.00796,14.09132 c -0.31098,5.76971 -1.2549,10.90199 -2.80263,15.25209 -1.25078,3.51578 -2.89766,6.53385 -4.89404,8.97425 -3.437747,4.19944 -6.797068,5.32543 -7.153514,5.3396 h -0.02833 c -0.32554,0 -0.51664,-0.1329 -1.428745,-0.7711 -0.254843,-0.17758 -0.639877,-0.44646 -0.957562,-0.65352 -1.907525,3.7101 -5.040848,6.91526 -9.099024,9.29556 -4.13338,2.424 -8.941019,3.7604 -13.534121,3.7604 -5.453826,0 -10.241634,-1.8001 -13.887219,-5.2144 -4.973371,3.1622 -7.962467,5.8005 -10.38586,16.7757 l -0.458692,2.0806 -1.002762,-1.8788 c -0.25304,-0.4625 -1.121233,-2.1754 -1.938946,-5.1807 -1.14042,-4.19 -1.688224,-8.9624 -1.627314,-14.1831 0.121563,-10.41898 5.714078,-15.64835 8.811602,-15.64835 0.101988,0 0.203205,0.005 0.299785,0.0165 2.936041,0.3285 4.854641,1.59705 8.337456,3.90069 0.360052,0.23862 0.739162,0.48934 1.138747,0.75178 1.247817,0.819 3.011631,1.81893 3.455643,1.90469 0.845014,-0.0491 1.672256,-1.94178 1.912677,-3.69748 0.01468,-0.10675 0.0291,-0.20578 0.04301,-0.29811 0.01893,-0.20758 0.02923,-0.39019 0.03477,-0.54008 -0.147317,-0.0514 -0.300429,-0.1119 -0.45676,-0.18067 l -0.03477,-0.0117 c -2.190699,-0.75422 -5.3915,-4.45879 -7.002459,-9.83638 -1.555716,-5.43554 -1.247947,-9.93129 0.914164,-13.37058 3.505351,-5.57951 11.114077,-6.89132 13.630573,-7.3222 0.786679,-0.15633 1.609414,-0.30275 2.446573,-0.435 0.390828,-0.0981 0.658033,-0.18015 0.830462,-0.25471 0.07469,-0.0519 0.107526,-0.10727 0.05653,-0.30945 l 0.06825,-0.0191 -0.06606,0.0148 c -0.03052,-0.13714 -0.07276,-0.29759 -0.121176,-0.48328 -0.06709,-0.25717 -0.142037,-0.54807 -0.219559,-0.89318 -0.779081,-3.49505 -0.381428,-6.42375 0.111132,-8.8286 0.553341,-2.70669 0.859951,-4.20523 2.138288,-5.70197 1.693632,-2.33119 4.73926,-3.35134 6.561409,-3.96237 0.508399,-0.17024 0.947646,-0.31704 1.201588,-0.43938 5.581569,-2.67707 7.358776,-5.49168 7.866917,-7.38105 0.402675,-1.49918 1.041007,-5.44108 0.763757,-8.19387 -0.03078,-0.31228 0.04198,-0.56931 0.218271,-0.76428 0.156461,-0.17268 0.378853,-0.27094 0.611418,-0.27094 0.52295,0 1.23919,0 3.91176,8.30308 1.409944,4.37779 0.358635,8.48207 -3.12199,12.20002 -0.04468,0.0483 -0.09014,0.0956 -0.133925,0.14101 -0.09504,0.0979 -0.237974,0.24583 -0.257419,0.29953 7.73e-4,0 -0.0062,0.13418 0.225998,0.51909 1.47124,2.42918 2.270668,5.45009 2.038746,7.6959 -0.05524,0.52308 -0.155301,1.02646 -0.241966,1.46944 -0.05151,0.25343 -0.113192,0.56364 -0.144999,0.80368 0.01429,0 0.0291,0 0.04468,0 0.397654,-0.0421 1.013064,-0.0901 1.754929,-0.0901 1.745657,0 4.245547,0.26747 6.245917,1.53898 1.20816,0.76646 2.73709,1.94925 3.86077,4.30156 1.32392,2.76503 1.81519,6.62579 1.46402,11.47554 z"
id="path87"
inkscape:connector-curvature="0"
style="fill:#0096d5;fill-opacity:1;stroke-width:1.07487333" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

238
svg/pacosako-theme.svg Normal file
View File

@ -0,0 +1,238 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6in" height="6in" viewBox="-32.000 -3.777 199.554 199.554">
<defs>
<symbol id="sym_light_rook_left">
<g transform="translate(-.851 -271.208)">
<path d="M3.528 278.656a.704.704 0 00-.706.706v9.524c0 .391.315.706.706.706H12.7c.39 0 .705-.315.705-.706v-9.524a.704.704 0 00-.705-.706h-.706v3.528a.352.352 0 01-.352.353h-.706a.352.352 0 01-.353-.353v-3.528H8.996v3.528a.352.352 0 01-.353.353H7.584a.352.352 0 01-.352-.353v-3.528H5.645v3.528a.352.352 0 01-.353.353h-.706a.352.352 0 01-.353-.353v-3.528z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<rect x="3.881" y="290.18" width="8.467" height="1.674" rx=".706" ry=".706" fill="#fff" stroke="#000004" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".529"/>
<path d="M2.822 287.83h10.583" fill="none" stroke="#000" stroke-width=".706"/>
</g>
</symbol>
<symbol id="sym_light_pawn_right">
<g transform="matrix(-1 0 0 1 29.122 -271.21)" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".529">
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<rect x="4.939" y="290.65" width="6.703" height="1.411" rx=".353" ry=".353" stroke-linejoin="round"/>
<circle cx="8.29" cy="284.87" r="4.586" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_knight_left">
<g fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width=".529">
<path d="M.912 22.262c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.386-16.294-2.502z" stroke-linecap="round" stroke-linejoin="bevel"/>
<path d="M3.756 19.052C2.61 16.9 1.86 15.193 1.908 12.223c.047-2.97 1.567-5.098 2.923-5.987 1.357-.888 3.62-1.53 4.548-.7.274.246.583-.008.787.278.096.133.243.516.208.563-.07.093-.702.444-1.427.537-.725.094-3.204.304-4.186 2.526-.982 2.222-1.192 4.654-1.005 9.612z"/>
<path d="M1.97 20.852h10.232s-2.47-2.823-3.175-3.88c-.706-1.06-1.047-3.298-.673-3.628.584-.514 1.77.524 2.122.877.353.352.91 1.045 1.373.986.548-.07.992-.554 1.058-1.058.05-.373-.385-1.156-.705-1.764-.368-.698-.992-1.615-1.059-2.304-.033-.351-.046-.821-.066-1.158-.024-.407-.95-.535-1.279-1.273-.15-.338-.15-.429-.314-.678-.282-.429-.562-.165-.893-.298-.33-.132-.86-2.182-.959-2.38-.11-.223-.315-.22-.413-.026-.224.447-.646 2.187-.753 2.39-.138.262-.984.43-1.802 1.323-.85.927-1.761 2.464-1.761 4.862 0 2.397.314 5.225.132 5.87-.182.645-.711.728-1.064.728v1.41z"/>
</g>
</symbol>
<symbol id="sym_light_bishop_left">
<g fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".529">
<path d="M.912 22.262c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.386-16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<path d="M9.38 19.442h2.116c.196 0 .353.157.353.352v.706a.352.352 0 01-.353.353H3.03a.352.352 0 01-.353-.353v-.706c0-.195.157-.352.353-.352h2.116s-1.92-1.804-2.178-3.412c-.359-3.526 2.167-6.617 3.68-9.64.17-.339-.555.189-.8-.354-.132-.295.083-.777.357-1.058.279-.286.936-.706 1.058-.706s.758.406 1.058.706c.3.3.43.766.353 1.058-.148.568-.982 0-.811.353.522 1.082 1.165 1.475 1.87 3.528l-2.117 2.117.705 1.41 2.117-2.116c1.058 1.411 1.45 3.434 1.037 5.184-.308 1.305-2.096 2.93-2.096 2.93z" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_queen_left">
<g transform="translate(-.851 -271.208)" fill="#fff" stroke-width=".529">
<path d="M5.292 289.94l-3.175-10.583 2.47 2.822.705-3.175 1.41 3.175 1.412-3.528 1.411 3.528 1.411-3.175.706 3.175 2.116-2.822-2.822 10.583z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round"/>
<rect x="3.881" y="289.94" width="8.467" height="2.469" rx=".706" ry=".706" stroke="#000004" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel"/>
<circle cx="8.114" cy="276.54" r="1.411" stroke="#060606" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_king_left">
<g transform="translate(-.828 -271.208)">
<path d="M7.914 274.42a.176.176 0 00-.176.176v.53H7.21a.176.176 0 00-.177.176v.353c0 .097.08.176.177.176h.53v.706h.705v-.706h.529a.176.176 0 00.176-.176v-.353a.176.176 0 00-.176-.177h-.53v-.529a.176.176 0 00-.176-.176zm-.176 2.822h.706z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".353"/>
<path d="M5.974 278.3v-1.411c0-.196.157-.353.353-.353h3.528c.195 0 .352.157.352.353v1.411" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M4.21 289.94l-2.822-10.583h1.764v-1.058h9.525v1.058h1.764l-2.47 10.583z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".529"/>
<rect x="2.446" y="289.94" width="11.289" height="2.469" rx=".706" ry=".706" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M1.74 293.47c5.292 0 11.643 0 16.295 2.502-5.71.673-13.824-.385-16.294-2.502z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".529"/>
<path d="M7.915 279.91l-.529.637v1.636H5.622v1.059h1.764v2.822h1.059v-2.822h1.763v-1.059H8.445v-1.636z" color="#000" fill="#040404"/>
</g>
</symbol>
<symbol id="sym_dark_pawn_right">
<g transform="translate(9.324 -271.208)" stroke="#fafafa" stroke-linecap="round" stroke-width=".353">
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<rect transform="scale(-1 1)" x="-14.859" y="290.65" width="6.703" height="1.411" rx=".353" ry=".353" stroke-linejoin="round"/>
<circle transform="scale(-1 1)" cx="-11.508" cy="284.87" r="4.586" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_rook_right">
<g transform="translate(9.324 -271.208)" stroke="#f7f7ff">
<path d="M16.27 278.66c.39 0 .706.315.706.705v9.525a.705.705 0 01-.706.706H7.098a.704.704 0 01-.705-.706v-9.525c0-.39.314-.705.705-.705h.705v3.527c0 .196.158.353.353.353h.706a.352.352 0 00.353-.353v-3.527h1.587v3.527c0 .196.158.353.353.353h1.058a.352.352 0 00.353-.353v-3.527h1.587v3.527c0 .196.158.353.353.353h.706a.352.352 0 00.353-.353v-3.527z" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<rect transform="scale(-1 1)" x="-15.918" y="290.18" width="8.467" height="1.674" rx=".706" ry=".706" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".353"/>
<path d="M16.976 287.83H6.393" fill-rule="evenodd" stroke-width=".529"/>
</g>
</symbol>
<symbol id="sym_dark_knight_right">
<g fill="#040404" fill-rule="evenodd" stroke="#fff" stroke-width=".353">
<path d="M27.358 22.262c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.386 16.294-2.502z" stroke-linecap="round" stroke-linejoin="bevel"/>
<path d="M24.515 19.052c1.146-2.152 1.894-3.859 1.848-6.829-.047-2.97-1.567-5.098-2.924-5.987s-3.62-1.53-4.547-.7c-.274.246-.583-.008-.787.278-.096.133-.243.516-.208.563.07.093.701.444 1.426.537.725.094 3.204.304 4.187 2.526.982 2.222 1.192 4.654 1.005 9.612z"/>
<path d="M26.3 20.852H16.07s2.468-2.823 3.174-3.88c.706-1.06 1.047-3.298.673-3.628-.584-.514-1.77.524-2.123.877-.352.352-.91 1.045-1.372.986-.548-.07-.992-.554-1.058-1.058-.05-.373.385-1.156.705-1.764.368-.698.992-1.615 1.058-2.304.034-.351.047-.821.067-1.158.024-.407.95-.535 1.278-1.273.151-.338.15-.429.315-.678.282-.429.562-.165.893-.298.33-.132.86-2.182.959-2.38.11-.223.315-.22.413-.026.224.447.645 2.187.752 2.39.139.262.984.43 1.803 1.323.85.927 1.761 2.464 1.761 4.862 0 2.397-.314 5.225-.132 5.87s.71.728 1.064.728v1.41z"/>
</g>
</symbol>
<symbol id="sym_dark_bishop_right">
<g fill="#030303" stroke="#fefefe" stroke-linecap="round" stroke-width=".353">
<path d="M27.358 22.262c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.386 16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<path d="M18.892 19.442h-2.117a.352.352 0 00-.353.352v.706c0 .195.158.353.353.353h8.467a.352.352 0 00.353-.353v-.706a.352.352 0 00-.353-.352h-2.117s1.92-1.804 2.178-3.412c.36-3.526-2.166-6.617-3.68-9.64-.169-.339.556.189.8-.354.133-.295-.083-.777-.356-1.058-.28-.286-.936-.706-1.059-.706-.122 0-.758.406-1.058.706-.3.3-.429.766-.353 1.058.148.568.983 0 .812.353-.523 1.082-1.165 1.475-1.87 3.528l2.117 2.117-.706 1.41-2.116-2.116c-1.059 1.411-1.45 3.434-1.037 5.184.308 1.305 2.095 2.93 2.095 2.93z" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_queen_right">
<g transform="translate(9.324 -271.208)" stroke="#fff" stroke-width=".353">
<path d="M14.507 289.94l3.175-10.583-2.47 2.822-.705-3.175-1.411 3.175-1.411-3.528-1.411 3.528-1.411-3.175-.706 3.175-2.117-2.822 2.823 10.583z" fill-rule="evenodd" stroke-linejoin="round"/>
<rect transform="scale(-1 1)" x="-15.918" y="289.94" width="8.467" height="2.469" rx=".706" ry=".706" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel"/>
<circle transform="scale(-1 1)" cx="-11.684" cy="276.54" r="1.411" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_king_right">
<g transform="translate(9.723 -271.208)">
<path d="M11.462 274.42c.098 0 .176.079.176.176v.53h.53c.097 0 .176.078.176.176v.353a.176.176 0 01-.177.176h-.529v.706h-.705v-.706h-.53a.176.176 0 01-.176-.176v-.353c0-.098.079-.177.177-.177h.529v-.529c0-.097.078-.176.176-.176zm.176 2.822h-.705z" stroke="#fff" stroke-linecap="round" stroke-width=".265"/>
<path d="M13.402 278.3v-1.411a.352.352 0 00-.353-.353H9.521a.352.352 0 00-.352.353v1.411" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M15.166 289.94l2.822-10.583h-1.764v-1.058H6.7v1.058H4.935l2.47 10.583z" fill="#070707" fill-rule="evenodd" stroke="#fefefe" stroke-linejoin="round" stroke-width=".353"/>
<rect transform="scale(-1 1)" x="-16.93" y="289.94" width="11.289" height="2.469" rx=".706" ry=".706" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M17.636 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke="#fff" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".353"/>
<path transform="translate(0 274.07)" d="M11.461 5.84l.53.637v1.637h1.763v1.059H11.99v2.822h-1.058V9.173H9.168V8.114h1.764V6.477z" color="#000" fill="#fff"/>
</g>
</symbol>
<symbol id="sym_light_pawn_left">
<g transform="translate(-.851 -271.208)" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".529">
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<rect x="4.939" y="290.65" width="6.703" height="1.411" rx=".353" ry=".353" stroke-linejoin="round"/>
<circle cx="8.29" cy="284.87" r="4.586" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_rook_right">
<g transform="matrix(-1 0 0 1 29.122 -271.21)">
<path d="M3.528 278.656a.704.704 0 00-.706.706v9.524c0 .391.315.706.706.706H12.7c.39 0 .705-.315.705-.706v-9.524a.704.704 0 00-.705-.706h-.706v3.528a.352.352 0 01-.352.353h-.706a.352.352 0 01-.353-.353v-3.528H8.996v3.528a.352.352 0 01-.353.353H7.584a.352.352 0 01-.352-.353v-3.528H5.645v3.528a.352.352 0 01-.353.353h-.706a.352.352 0 01-.353-.353v-3.528z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<rect x="3.881" y="290.18" width="8.467" height="1.674" rx=".706" ry=".706" fill="#fff" stroke="#000004" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".529"/>
<path d="M2.822 287.83h10.583" fill="none" stroke="#000" stroke-width=".706"/>
</g>
</symbol>
<symbol id="sym_light_knight_right">
<g fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width=".529">
<path d="M27.358 22.26c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" stroke-linecap="round" stroke-linejoin="bevel"/>
<path d="M24.515 19.05c1.146-2.151 1.894-3.859 1.847-6.829-.046-2.97-1.567-5.098-2.923-5.987-1.356-.888-3.62-1.53-4.547-.7-.274.246-.583-.007-.788.278-.095.134-.242.516-.207.563.07.093.701.444 1.426.538.725.093 3.204.304 4.186 2.525.983 2.222 1.193 4.654 1.006 9.612z"/>
<path d="M26.3 20.85H16.069s2.47-2.822 3.175-3.88c.705-1.059 1.047-3.298.672-3.627-.584-.515-1.77.523-2.122.876-.353.353-.91 1.045-1.372.987-.548-.07-.992-.555-1.059-1.059-.049-.373.386-1.156.706-1.764.368-.697.992-1.615 1.058-2.304.034-.35.046-.821.066-1.157.025-.408.95-.536 1.28-1.274.15-.337.15-.429.313-.678.283-.429.563-.165.893-.297.331-.133.86-2.183.96-2.381.11-.222.315-.22.413-.025.223.446.645 2.187.752 2.39.138.26.984.43 1.803 1.322.85.927 1.76 2.464 1.76 4.862s-.313 5.225-.132 5.87c.182.645.712.728 1.064.728v1.41z"/>
</g>
</symbol>
<symbol id="sym_light_bishop_right">
<g fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".529">
<path d="M27.358 22.26c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<path d="M18.891 19.44h-2.117a.351.351 0 00-.352.353v.705a.352.352 0 00.352.353h8.468a.352.352 0 00.353-.353v-.705a.352.352 0 00-.353-.353h-2.117s1.92-1.804 2.178-3.411c.36-3.527-2.166-6.617-3.679-9.64-.17-.34.555.188.799-.354.133-.296-.082-.778-.356-1.059-.279-.286-.936-.706-1.058-.705s-.759.405-1.059.705c-.3.3-.429.766-.352 1.059.147.567.982-.001.811.352-.523 1.082-1.165 1.475-1.87 3.528l2.117 2.117-.706 1.41-2.116-2.116c-1.059 1.411-1.45 3.434-1.037 5.185.308 1.305 2.095 2.929 2.095 2.929z" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_queen_right">
<g transform="matrix(-1 0 0 1 29.122 -271.21)" fill="#fff" stroke-width=".529">
<path d="M5.292 289.94l-3.175-10.583 2.47 2.822.705-3.175 1.41 3.175 1.412-3.528 1.411 3.528 1.411-3.175.706 3.175 2.116-2.822-2.822 10.583z" fill-rule="evenodd" stroke="#000" stroke-linejoin="round"/>
<rect x="3.881" y="289.94" width="8.467" height="2.469" rx=".706" ry=".706" stroke="#000004" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M1.764 293.47c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel"/>
<circle cx="8.114" cy="276.54" r="1.411" stroke="#060606" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_light_king_right">
<g transform="matrix(-1 0 0 1 29.099 -271.21)">
<path d="M7.914 274.42a.176.176 0 00-.176.176v.53H7.21a.176.176 0 00-.177.176v.353c0 .097.08.176.177.176h.53v.706h.705v-.706h.529a.176.176 0 00.176-.176v-.353a.176.176 0 00-.176-.177h-.53v-.529a.176.176 0 00-.176-.176zm-.176 2.822h.706z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".353"/>
<path d="M5.974 278.3v-1.411c0-.196.157-.353.353-.353h3.528c.195 0 .352.157.352.353v1.411" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M4.21 289.94l-2.822-10.583h1.764v-1.058h9.525v1.058h1.764l-2.47 10.583z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-width=".529"/>
<rect x="2.446" y="289.94" width="11.289" height="2.469" rx=".706" ry=".706" fill="#fff" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".529"/>
<path d="M1.74 293.47c5.292 0 11.643 0 16.295 2.502-5.71.673-13.824-.385-16.294-2.502z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".529"/>
<path d="M7.915 279.91l-.529.637v1.636H5.622v1.059h1.764v2.822h1.059v-2.822h1.763v-1.059H8.445v-1.636z" color="#000" fill="#040404"/>
</g>
</symbol>
<symbol id="sym_dark_pawn_left">
<g transform="matrix(-1 0 0 1 18.947 -271.21)" stroke="#fafafa" stroke-linecap="round" stroke-width=".353">
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<rect transform="scale(-1 1)" x="-14.859" y="290.65" width="6.703" height="1.411" rx=".353" ry=".353" stroke-linejoin="round"/>
<circle transform="scale(-1 1)" cx="-11.508" cy="284.87" r="4.586" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_rook_left">
<g transform="matrix(-1 0 0 1 18.947 -271.3)" stroke="#f7f7ff">
<path d="M16.27 278.66c.39 0 .706.315.706.705v9.525a.705.705 0 01-.706.706H7.098a.704.704 0 01-.705-.706v-9.525c0-.39.314-.705.705-.705h.705v3.527c0 .196.158.353.353.353h.706a.352.352 0 00.353-.353v-3.527h1.587v3.527c0 .196.158.353.353.353h1.058a.352.352 0 00.353-.353v-3.527h1.587v3.527c0 .196.158.353.353.353h.706a.352.352 0 00.353-.353v-3.527z" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<rect transform="scale(-1 1)" x="-15.918" y="290.18" width="8.467" height="1.674" rx=".706" ry=".706" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".353"/>
<path d="M16.976 287.83H6.393" fill-rule="evenodd" stroke-width=".529"/>
</g>
</symbol>
<symbol id="sym_dark_knight_left">
<g fill="#040404" fill-rule="evenodd" stroke="#fff" stroke-width=".353">
<path d="M.913 22.26c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" stroke-linecap="round" stroke-linejoin="bevel"/>
<path d="M3.756 19.05c-1.146-2.151-1.894-3.859-1.847-6.829.046-2.97 1.566-5.098 2.923-5.987s3.62-1.53 4.547-.7c.274.246.583-.007.787.278.096.134.243.516.208.563-.07.093-.701.444-1.426.538-.725.093-3.204.304-4.186 2.525-.983 2.222-1.193 4.654-1.006 9.612z"/>
<path d="M1.971 20.85h10.231s-2.47-2.822-3.175-3.88c-.706-1.059-1.047-3.298-.672-3.627.583-.515 1.769.523 2.122.876s.91 1.045 1.372.987c.548-.07.992-.555 1.059-1.059.049-.373-.386-1.156-.706-1.764-.368-.697-.992-1.615-1.058-2.304-.034-.35-.046-.821-.066-1.157-.025-.408-.95-.536-1.28-1.274-.15-.337-.15-.429-.313-.678-.283-.429-.563-.165-.893-.297-.331-.133-.86-2.183-.96-2.381-.11-.222-.315-.22-.413-.025-.223.446-.645 2.187-.752 2.39-.139.26-.984.43-1.803 1.322-.85.927-1.761 2.464-1.761 4.862s.314 5.225.132 5.87-.71.728-1.064.728v1.41z"/>
</g>
</symbol>
<symbol id="sym_dark_bishop_left">
<g fill="#030303" stroke="#fefefe" stroke-linecap="round" stroke-width=".353">
<path d="M.913 22.26c5.292 0 11.642 0 16.294 2.502-5.71.673-13.824-.385-16.294-2.502z" fill-rule="evenodd" stroke-linejoin="bevel"/>
<path d="M9.379 19.44h2.118a.352.352 0 01.353.353v.705a.352.352 0 01-.353.353H3.03a.352.352 0 01-.352-.353v-.705a.352.352 0 01.352-.353h2.117s-1.92-1.804-2.178-3.411c-.36-3.527 2.166-6.617 3.68-9.64.169-.34-.556.188-.8-.354-.132-.296.083-.778.356-1.059.28-.286.936-.706 1.059-.705.122 0 .758.405 1.058.705.3.3.429.766.353 1.059-.148.567-.983-.001-.812.352.523 1.082 1.165 1.475 1.87 3.528l-2.117 2.117.706 1.41 2.117-2.116c1.058 1.411 1.45 3.434 1.036 5.185-.308 1.305-2.095 2.929-2.095 2.929z" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_queen_left">
<g transform="matrix(-1 0 0 1 18.947 -271.3)" stroke="#fff" stroke-width=".353">
<path d="M14.507 289.94l3.175-10.583-2.47 2.822-.705-3.175-1.411 3.175-1.411-3.528-1.411 3.528-1.411-3.175-.706 3.175-2.117-2.822 2.823 10.583z" fill-rule="evenodd" stroke-linejoin="round"/>
<rect transform="scale(-1 1)" x="-15.918" y="289.94" width="8.467" height="2.469" rx=".706" ry=".706" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.034 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel"/>
<circle transform="scale(-1 1)" cx="-11.684" cy="276.54" r="1.411" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</symbol>
<symbol id="sym_dark_king_left">
<g transform="matrix(-1 0 0 1 18.548 -271.21)">
<path d="M11.462 274.42c.098 0 .176.079.176.176v.53h.53c.097 0 .176.078.176.176v.353a.176.176 0 01-.177.176h-.529v.706h-.705v-.706h-.53a.176.176 0 01-.176-.176v-.353c0-.098.079-.177.177-.177h.529v-.529c0-.097.078-.176.176-.176zm.176 2.822h-.705z" stroke="#fff" stroke-linecap="round" stroke-width=".265"/>
<path d="M13.402 278.3v-1.411a.352.352 0 00-.353-.353H9.521a.352.352 0 00-.352.353v1.411" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M15.166 289.94l2.822-10.583h-1.764v-1.058H6.7v1.058H4.935l2.47 10.583z" fill="#070707" fill-rule="evenodd" stroke="#fefefe" stroke-linejoin="round" stroke-width=".353"/>
<rect transform="scale(-1 1)" x="-16.93" y="289.94" width="11.289" height="2.469" rx=".706" ry=".706" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".353"/>
<path d="M17.636 293.47c-5.292 0-11.642 0-16.294 2.502 5.71.673 13.824-.385 16.294-2.502z" fill-rule="evenodd" stroke="#fff" stroke-linecap="round" stroke-linejoin="bevel" stroke-width=".353"/>
<path transform="translate(0 274.07)" d="M11.461 5.84l.53.637v1.637h1.763v1.059H11.99v2.822h-1.058V9.173H9.168V8.114h1.764V6.477z" color="#000" fill="#fff"/>
</g>
</symbol>
</defs>
<view id="light_king_left" viewBox="0.000 160.000 28.223 28.223"/>
<view id="dark_king_right" viewBox="32.000 160.000 28.223 28.223"/>
<view id="dark_king_left" viewBox="64.000 160.000 28.223 28.223"/>
<view id="light_king_right" viewBox="96.000 160.000 28.223 28.223"/>
<view id="light_queen_left" viewBox="0.000 128.000 28.223 28.223"/>
<view id="dark_queen_right" viewBox="32.000 128.000 28.223 28.223"/>
<view id="dark_queen_left" viewBox="64.000 128.000 28.223 28.223"/>
<view id="light_queen_right" viewBox="96.000 128.000 28.223 28.223"/>
<view id="light_bishop_left" viewBox="0.000 96.000 28.223 28.223"/>
<view id="dark_bishop_right" viewBox="32.000 96.000 28.223 28.223"/>
<view id="dark_bishop_left" viewBox="64.000 96.000 28.223 28.223"/>
<view id="light_bishop_right" viewBox="96.000 96.000 28.223 28.223"/>
<view id="light_knight_left" viewBox="0.000 64.000 28.223 28.223"/>
<view id="dark_knight_right" viewBox="32.000 64.000 28.223 28.223"/>
<view id="dark_knight_left" viewBox="64.000 64.000 28.223 28.223"/>
<view id="light_knight_right" viewBox="96.000 64.000 28.223 28.223"/>
<view id="light_rook_left" viewBox="0.000 32.000 28.223 28.223"/>
<view id="dark_rook_right" viewBox="32.000 32.000 28.223 28.223"/>
<view id="dark_rook_left" viewBox="64.000 32.000 28.223 28.223"/>
<view id="light_rook_right" viewBox="96.000 32.000 28.223 28.223"/>
<view id="light_pawn_left" viewBox="0.000 0.000 28.223 28.223"/>
<view id="dark_pawn_right" viewBox="32.000 0.000 28.223 28.223"/>
<view id="dark_pawn_left" viewBox="64.000 0.000 28.223 28.223"/>
<view id="light_pawn_right" viewBox="96.000 0.000 28.223 28.223"/>
<path stroke-width="0.25" stroke="#000" d="M-1.889 -1.889H126.112M-1.889 30.112H126.112M-1.889 62.112H126.112M-1.889 94.112H126.112M-1.889 126.112H126.112M-1.889 158.112H126.112M-1.889 190.112H126.112M-1.889 -1.889V190.112M30.112 -1.889V190.112M62.112 -1.889V190.112M94.112 -1.889V190.112M126.112 -1.889V190.112"/>
<use transform="translate(0.000 160.000)" xlink:href="#sym_light_king_left"/>
<use transform="translate(32.000 160.000)" xlink:href="#sym_dark_king_right"/>
<use transform="translate(64.000 160.000)" xlink:href="#sym_dark_king_left"/>
<use transform="translate(96.000 160.000)" xlink:href="#sym_light_king_right"/>
<use transform="translate(0.000 128.000)" xlink:href="#sym_light_queen_left"/>
<use transform="translate(32.000 128.000)" xlink:href="#sym_dark_queen_right"/>
<use transform="translate(64.000 128.000)" xlink:href="#sym_dark_queen_left"/>
<use transform="translate(96.000 128.000)" xlink:href="#sym_light_queen_right"/>
<use transform="translate(0.000 96.000)" xlink:href="#sym_light_bishop_left"/>
<use transform="translate(32.000 96.000)" xlink:href="#sym_dark_bishop_right"/>
<use transform="translate(64.000 96.000)" xlink:href="#sym_dark_bishop_left"/>
<use transform="translate(96.000 96.000)" xlink:href="#sym_light_bishop_right"/>
<use transform="translate(0.000 64.000)" xlink:href="#sym_light_knight_left"/>
<use transform="translate(32.000 64.000)" xlink:href="#sym_dark_knight_right"/>
<use transform="translate(64.000 64.000)" xlink:href="#sym_dark_knight_left"/>
<use transform="translate(96.000 64.000)" xlink:href="#sym_light_knight_right"/>
<use transform="translate(0.000 32.000)" xlink:href="#sym_light_rook_left"/>
<use transform="translate(32.000 32.000)" xlink:href="#sym_dark_rook_right"/>
<use transform="translate(64.000 32.000)" xlink:href="#sym_dark_rook_left"/>
<use transform="translate(96.000 32.000)" xlink:href="#sym_light_rook_right"/>
<use transform="translate(0.000 0.000)" xlink:href="#sym_light_pawn_left"/>
<use transform="translate(32.000 0.000)" xlink:href="#sym_dark_pawn_right"/>
<use transform="translate(64.000 0.000)" xlink:href="#sym_dark_pawn_left"/>
<use transform="translate(96.000 0.000)" xlink:href="#sym_light_pawn_right"/>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

234
svg/traditional-theme.svg Normal file
View File

@ -0,0 +1,234 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6in" height="6in" viewBox="-32.000 -3.777 199.554 199.554">
<defs>
<symbol id="sym_dark_pawn_right" stroke-width="1.01">
<path transform="matrix(1.37 0 0 1.3436 30.822 -39.214)" d="M-7.219 36.174a1.058 1.058 0 00-.852 1.688 1.708 1.708 0 00-.23 2.818c-.794.28-1.96 1.468-1.96 3.564h6.085c0-2.096-1.167-3.284-1.96-3.564a1.708 1.708 0 00-.23-2.818 1.058 1.058 0 00-.852-1.688z" stroke="#000" stroke-linecap="round" stroke-width=".401"/>
</symbol>
<symbol id="sym_dark_pawn_left" stroke-width="1.01">
<path transform="matrix(-1.37 0 0 1.3436 -2.6 -39.214)" d="M-7.219 36.174a1.058 1.058 0 00-.852 1.688 1.708 1.708 0 00-.23 2.818c-.794.28-1.96 1.468-1.96 3.564h6.085c0-2.096-1.167-3.284-1.96-3.564a1.708 1.708 0 00-.23-2.818 1.058 1.058 0 00-.852-1.688z" stroke="#000" stroke-linecap="round" stroke-width=".401"/>
</symbol>
<symbol id="sym_dark_knight_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(-.36249 0 0 .3555 15.27 6.368)" d="M22 10c10.5 1 16.5 8 16 29H15c0-9 10-6.5 8-21" fill="#000"/>
<path transform="matrix(-.36249 0 0 .3555 15.27 6.368)" d="M24 18c.38 2.91-5.55 7.37-8 9-3 2-2.82 4.34-5 4-1.042-.94 1.41-3.04 0-3-1 0 .19 1.23-1 2-1 0-4.003 1-4-4 0-2 6-12 6-12s1.89-1.9 2-3.5c-.73-.994-.5-2-.5-3 1-1 3 2.5 3 2.5h2s.78-1.992 2.5-3c1 0 1 3 1 3" fill="#000"/>
<path transform="matrix(-.36249 0 0 .3555 15.27 6.368)" d="M9.5 25.5a.5.5 0 11-1 0 .5.5 0 111 0z" fill="#fff" stroke="#fff"/>
<path transform="matrix(-.31392 .17775 .18125 .30785 11.757 4.53)" d="M15 15.5a.5 1.5 0 11-1 0 .5 1.5 0 111 0z" fill="#fff" stroke="#fff"/>
<path transform="matrix(-.36249 0 0 .3555 15.27 6.368)" d="M24.55 10.4l-.45 1.45.5.15c3.15 1 5.65 2.49 7.9 6.75S35.75 29.06 35.25 39l-.05.5h2.25l.05-.5c.5-10.06-.88-16.85-3.25-21.34s-5.79-6.64-9.19-7.16z" fill="#fff" stroke="none"/>
</symbol>
<symbol id="sym_dark_bishop_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<g fill="#000" stroke-linecap="butt">
<path transform="matrix(-.36249 0 0 .3555 15.446 6.434)" d="M9 36c3.39-.97 10.11.43 13.5-2 3.39 2.43 10.11 1.03 13.5 2 0 0 1.65.54 3 2-.68.97-1.65.99-3 .5-3.39-.97-10.11.46-13.5-1-3.39 1.46-10.11.03-13.5 1-1.354.49-2.323.47-3-.5 1.354-1.94 3-2 3-2z"/>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.434)" d="M15 32c2.5 2.5 12.5 2.5 15 0 .5-1.5 0-2 0-2 0-2.5-2.5-4-2.5-4 5.5-1.5 6-11.5-5-15.5-11 4-10.5 14-5 15.5 0 0-2.5 1.5-2.5 4 0 0-.5.5 0 2z"/>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.434)" d="M25 8a2.5 2.5 0 11-5 0 2.5 2.5 0 115 0z"/>
</g>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.434)" d="M17.5 26h10M15 30h15m-7.5-14.5v5M20 18h5" stroke="#fff" stroke-linejoin="miter"/>
</symbol>
<symbol id="sym_dark_queen_left" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<g stroke="none" transform="matrix(-.36249 0 0 .3555 15.446 5.855)">
<circle cx="6" cy="12" r="2.75"/>
<circle cx="14" cy="9" r="2.75"/>
<circle cx="22.5" cy="8" r="2.75"/>
<circle cx="31" cy="9" r="2.75"/>
<circle cx="39" cy="12" r="2.75"/>
</g>
<path d="M9 26c8.5-1.5 21-1.5 27 0l2.5-12.5L31 25l-.3-14.1-5.2 13.6-3-14.5-3 14.5-5.2-13.6L14 25 6.5 13.5z" stroke-linecap="butt" transform="matrix(-.36249 0 0 .3555 15.446 5.855)"/>
<path d="M9 26c0 2 1.5 2 2.5 4 1 1.5 1 1 .5 3.5-1.5 1-1.5 2.5-1.5 2.5-1.5 1.5.5 2.5.5 2.5 6.5 1 16.5 1 23 0 0 0 1.5-1 0-2.5 0 0 .5-1.5-1-2.5-.5-2.5-.5-2 .5-3.5 1-2 2.5-2 2.5-4-8.5-1.5-18.5-1.5-27 0z" stroke-linecap="butt" transform="matrix(-.36249 0 0 .3555 15.446 5.855)"/>
<path d="M11 38.5a35 35 1 0023 0" fill="none" stroke-linecap="butt" transform="matrix(-.36249 0 0 .3555 15.446 5.855)"/>
<path d="M11 29a35 35 1 0123 0m-21.5 2.5h20m-21 3a35 35 1 0022 0m-23 3a35 35 1 0024 0" fill="none" stroke="#fff" transform="matrix(-.36249 0 0 .3555 15.446 5.855)"/>
</symbol>
<symbol id="sym_dark_king_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M22.5 11.63V6" stroke-linejoin="miter"/>
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M22.5 25s4.5-7.5 3-10.5c0 0-1-2.5-3-2.5s-3 2.5-3 2.5c-1.5 3 3 10.5 3 10.5" fill="#000" stroke-linecap="butt" stroke-linejoin="miter"/>
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M11.5 37c5.5 3.5 15.5 3.5 21 0v-7s9-4.5 6-10.5c-4-6.5-13.5-3.5-16 4V27v-3.5c-3.5-7.5-13-10.5-16-4-3 6 5 10 5 10z" fill="#000"/>
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M20 8h5" stroke-linejoin="miter"/>
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M32 29.5s8.5-4 6.03-9.65C34.15 14 25 18 22.5 24.5l.01 2.1-.01-2.1C20 18 9.906 14 6.997 19.85c-2.497 5.65 4.853 9 4.853 9" stroke="#fff"/>
<path transform="matrix(-.36249 0 0 .3555 15.435 6.145)" d="M11.5 30c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0" stroke="#fff"/>
</symbol>
<symbol id="sym_light_pawn_left">
<path d="M7.289 9.174a1.45 1.45 0 00-1.167 2.312 2.35 2.35 0 00-1.189 2.038c0 .736.341 1.391.873 1.823-1.087.384-2.686 2.012-2.686 4.882h8.338c0-2.87-1.599-4.498-2.686-4.882a2.34 2.34 0 00.873-1.823 2.35 2.35 0 00-1.19-2.038 1.45 1.45 0 00-1.167-2.313z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".54426905"/>
</symbol>
<symbol id="sym_light_rook_left" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M2.397 20.23h9.787V19.14H2.397zm1.087-1.089v-1.45h7.612v1.45zm-.362-7.974V9.353h1.45v.725h1.813v-.725h1.811v.725h1.813v-.725h1.45v1.813" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M11.46 11.167l-1.088 1.087H4.21l-1.088-1.087" stroke-width=".5434065"/>
<path d="M10.372 12.254v4.53H4.21v-4.53" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M10.372 16.785l.543.906h-7.25l.544-.905" stroke-width=".5434065"/>
<path d="M3.122 11.167h8.337" fill="none" stroke-linejoin="miter" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_knight_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M7.296 9.717c-3.807.362-5.982 2.9-5.8 10.512h8.337c0-3.262-3.625-2.356-2.9-7.612" fill="#fff" stroke-width=".5434065"/>
<path d="M6.57 12.617c-.138 1.054 2.012 2.671 2.9 3.262 1.087.725 1.022 1.574 1.813 1.45.377-.34-.511-1.102 0-1.088.362 0-.07.446.362.725.362 0 1.452.362 1.45-1.449 0-.725-2.175-4.35-2.175-4.35s-.685-.69-.724-1.269c.264-.36.18-.724.18-1.087-.361-.363-1.087.905-1.087.905h-.724s-.283-.722-.907-1.087c-.362 0-.362 1.087-.362 1.087" fill="#fff" stroke-width=".5434065"/>
<path d="M11.827 15.335a.181.181 0 10.362 0 .181.181 0 10-.362 0zm-1.97-3.534a.544.181 59.999 10.315-.181.544.181 59.999 10-.314.181z" fill="#000" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_bishop_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<g fill="#fff" stroke-linecap="butt">
<path d="M2.397 19.209c1.229-.352 3.665.155 4.894-.725 1.228.88 3.664.373 4.893.725 0 0 .598.196 1.087.724-.246.352-.598.36-1.087.181-1.23-.35-3.665.168-4.893-.362-1.23.53-3.666.011-4.894.362-.491.179-.842.171-1.087-.18.49-.704 1.087-.725 1.087-.725z" stroke-width=".5434065"/>
<path d="M4.572 17.759c.906.906 4.53.906 5.437 0 .18-.544 0-.725 0-.725 0-.906-.906-1.45-.906-1.45 1.993-.543 2.174-4.168-1.812-5.618-3.988 1.449-3.807 5.074-1.813 5.618 0 0-.906.544-.906 1.45 0 0-.181.18 0 .725z" stroke-width=".5434065"/>
<path d="M8.196 9.06a.906.906 0 11-1.812 0 .906.906 0 111.812 0z" stroke-width=".5434065"/>
</g>
<path d="M5.478 15.584h3.625m-4.531 1.45h5.437m-2.718-5.256v1.812m-.907-.906h1.812" stroke-linejoin="miter" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_queen_left" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M2.034 10.351a.725.725 0 11-1.449 0 .725.725 0 111.45 0zM8.015 8.72a.725.725 0 11-1.449 0 .725.725 0 111.45 0zm5.981 1.632a.725.725 0 11-1.449 0 .725.725 0 111.45 0zm-9.062-1.27a.725.725 0 11-1.449 0 .725.725 0 111.45 0zm6.162.183a.725.725 0 11-1.449 0 .725.725 0 111.45 0z" stroke-width=".5434065"/>
<path d="M2.397 15.427c3.08-.544 7.612-.544 9.787 0l.724-4.35-2.536 3.987V9.989l-1.994 4.893L7.29 9.445l-1.088 5.437L4.21 9.808v5.256l-2.538-3.987z" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M2.397 15.427c0 .724.543.724.905 1.449.363.543.363.362.182 1.269-.543.362-.543.906-.543.906-.544.544.181.906.181.906 2.356.362 5.98.362 8.337 0 0 0 .544-.362 0-.906 0 0 .182-.543-.362-.906-.181-.906-.181-.725.181-1.268.363-.726.906-.726.906-1.45-3.081-.544-6.706-.544-9.787 0z" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M3.303 16.877c1.268-.363 6.706-.363 7.974 0m-7.793 1.268c2.176-.363 5.438-.363 7.612 0" fill="none" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_king_left" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M7.302 10.082V8.039m-.907.726h1.813" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M7.302 14.927s1.63-2.718 1.087-3.805c0 0-.363-.907-1.087-.907s-1.088.906-1.088.906c-.543 1.088 1.087 3.806 1.087 3.806" fill="#fff" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M3.314 19.278c1.994 1.268 5.619 1.268 7.612 0V16.74s3.263-1.63 2.176-3.806c-1.45-2.356-4.894-1.269-5.8 1.45v1.269-1.269c-1.269-2.719-4.713-3.806-5.8-1.45C.414 15.11 3.313 16.56 3.313 16.56z" fill="#fff" stroke-width=".5434065"/>
<path d="M3.314 16.74c1.994-1.087 5.619-1.087 7.612 0m-7.612 1.268c1.994-1.086 5.619-1.086 7.612 0m-7.612 1.27c1.994-1.087 5.619-1.087 7.612 0" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_dark_rook_left" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(-.36249 0 0 .3555 15.446 6.368)" d="M9 39h27v-3H9zm3.5-7l1.5-2.5h17l1.5 2.5zm-.5 4v-4h21v4z" stroke-linecap="butt"/>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.368)" d="M14 29.5v-13h17v13z" stroke-linecap="butt" stroke-linejoin="miter"/>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.368)" d="M14 16.5L11 14h23l-3 2.5zM11 14V9h4v2h5V9h5v2h5V9h4v5z" stroke-linecap="butt"/>
<path transform="matrix(-.36249 0 0 .3555 15.446 6.368)" d="M12 35.5h21m-20-4h19m-18-2h17m-17-13h17M11 14h23" fill="none" stroke="#fff" stroke-linejoin="miter" stroke-width="1.01"/>
</symbol>
<symbol id="sym_dark_rook_right" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(.36249 0 0 .3555 12.777 6.368)" d="M9 39h27v-3H9zm3.5-7l1.5-2.5h17l1.5 2.5zm-.5 4v-4h21v4z" stroke-linecap="butt"/>
<path transform="matrix(.36249 0 0 .3555 12.777 6.368)" d="M14 29.5v-13h17v13z" stroke-linecap="butt" stroke-linejoin="miter"/>
<path transform="matrix(.36249 0 0 .3555 12.777 6.368)" d="M14 16.5L11 14h23l-3 2.5zM11 14V9h4v2h5V9h5v2h5V9h4v5z" stroke-linecap="butt"/>
<path transform="matrix(.36249 0 0 .3555 12.777 6.368)" d="M12 35.5h21m-20-4h19m-18-2h17m-17-13h17M11 14h23" fill="none" stroke="#fff" stroke-linejoin="miter" stroke-width="1.01"/>
</symbol>
<symbol id="sym_dark_knight_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(.36249 0 0 .3555 12.953 6.368)" d="M22 10c10.5 1 16.5 8 16 29H15c0-9 10-6.5 8-21" fill="#000"/>
<path transform="matrix(.36249 0 0 .3555 12.953 6.368)" d="M24 18c.38 2.91-5.55 7.37-8 9-3 2-2.82 4.34-5 4-1.042-.94 1.41-3.04 0-3-1 0 .19 1.23-1 2-1 0-4.003 1-4-4 0-2 6-12 6-12s1.89-1.9 2-3.5c-.73-.994-.5-2-.5-3 1-1 3 2.5 3 2.5h2s.78-1.992 2.5-3c1 0 1 3 1 3" fill="#000"/>
<path transform="matrix(.36249 0 0 .3555 12.953 6.368)" d="M9.5 25.5a.5.5 0 11-1 0 .5.5 0 111 0z" fill="#fff" stroke="#fff"/>
<path transform="matrix(.31392 .17775 -.18125 .30785 16.466 4.53)" d="M15 15.5a.5 1.5 0 11-1 0 .5 1.5 0 111 0z" fill="#fff" stroke="#fff"/>
<path transform="matrix(.36249 0 0 .3555 12.953 6.368)" d="M24.55 10.4l-.45 1.45.5.15c3.15 1 5.65 2.49 7.9 6.75S35.75 29.06 35.25 39l-.05.5h2.25l.05-.5c.5-10.06-.88-16.85-3.25-21.34s-5.79-6.64-9.19-7.16z" fill="#fff" stroke="none"/>
</symbol>
<symbol id="sym_dark_bishop_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<g fill="#000" stroke-linecap="butt">
<path transform="matrix(.36249 0 0 .3555 12.777 6.434)" d="M9 36c3.39-.97 10.11.43 13.5-2 3.39 2.43 10.11 1.03 13.5 2 0 0 1.65.54 3 2-.68.97-1.65.99-3 .5-3.39-.97-10.11.46-13.5-1-3.39 1.46-10.11.03-13.5 1-1.354.49-2.323.47-3-.5 1.354-1.94 3-2 3-2z"/>
<path transform="matrix(.36249 0 0 .3555 12.777 6.434)" d="M15 32c2.5 2.5 12.5 2.5 15 0 .5-1.5 0-2 0-2 0-2.5-2.5-4-2.5-4 5.5-1.5 6-11.5-5-15.5-11 4-10.5 14-5 15.5 0 0-2.5 1.5-2.5 4 0 0-.5.5 0 2z"/>
<path transform="matrix(.36249 0 0 .3555 12.777 6.434)" d="M25 8a2.5 2.5 0 11-5 0 2.5 2.5 0 115 0z"/>
</g>
<path transform="matrix(.36249 0 0 .3555 12.777 6.434)" d="M17.5 26h10M15 30h15m-7.5-14.5v5M20 18h5" stroke="#fff" stroke-linejoin="miter"/>
</symbol>
<symbol id="sym_dark_queen_right" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<g stroke="none" transform="matrix(.36249 0 0 .3555 12.777 5.855)">
<circle cx="6" cy="12" r="2.75"/>
<circle cx="14" cy="9" r="2.75"/>
<circle cx="22.5" cy="8" r="2.75"/>
<circle cx="31" cy="9" r="2.75"/>
<circle cx="39" cy="12" r="2.75"/>
</g>
<path d="M9 26c8.5-1.5 21-1.5 27 0l2.5-12.5L31 25l-.3-14.1-5.2 13.6-3-14.5-3 14.5-5.2-13.6L14 25 6.5 13.5z" stroke-linecap="butt" transform="matrix(.36249 0 0 .3555 12.777 5.855)"/>
<path d="M9 26c0 2 1.5 2 2.5 4 1 1.5 1 1 .5 3.5-1.5 1-1.5 2.5-1.5 2.5-1.5 1.5.5 2.5.5 2.5 6.5 1 16.5 1 23 0 0 0 1.5-1 0-2.5 0 0 .5-1.5-1-2.5-.5-2.5-.5-2 .5-3.5 1-2 2.5-2 2.5-4-8.5-1.5-18.5-1.5-27 0z" stroke-linecap="butt" transform="matrix(.36249 0 0 .3555 12.777 5.855)"/>
<path d="M11 38.5a35 35 1 0023 0" fill="none" stroke-linecap="butt" transform="matrix(.36249 0 0 .3555 12.777 5.855)"/>
<path d="M11 29a35 35 1 0123 0m-21.5 2.5h20m-21 3a35 35 1 0022 0m-23 3a35 35 1 0024 0" fill="none" stroke="#fff" transform="matrix(.36249 0 0 .3555 12.777 5.855)"/>
</symbol>
<symbol id="sym_dark_king_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.515">
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M22.5 11.63V6" stroke-linejoin="miter"/>
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M22.5 25s4.5-7.5 3-10.5c0 0-1-2.5-3-2.5s-3 2.5-3 2.5c-1.5 3 3 10.5 3 10.5" fill="#000" stroke-linecap="butt" stroke-linejoin="miter"/>
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M11.5 37c5.5 3.5 15.5 3.5 21 0v-7s9-4.5 6-10.5c-4-6.5-13.5-3.5-16 4V27v-3.5c-3.5-7.5-13-10.5-16-4-3 6 5 10 5 10z" fill="#000"/>
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M20 8h5" stroke-linejoin="miter"/>
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M32 29.5s8.5-4 6.03-9.65C34.15 14 25 18 22.5 24.5l.01 2.1-.01-2.1C20 18 9.906 14 6.997 19.85c-2.497 5.65 4.853 9 4.853 9" stroke="#fff"/>
<path transform="matrix(.36249 0 0 .3555 12.788 6.145)" d="M11.5 30c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0m-21 3.5c5.5-3 15.5-3 21 0" stroke="#fff"/>
</symbol>
<symbol id="sym_light_pawn_right">
<path d="M20.934 9.174a1.45 1.45 0 011.167 2.312 2.35 2.35 0 011.189 2.038c0 .736-.341 1.391-.873 1.823 1.087.384 2.686 2.012 2.686 4.882h-8.338c0-2.87 1.599-4.498 2.686-4.882a2.34 2.34 0 01-.873-1.823c0-.874.483-1.631 1.19-2.037a1.45 1.45 0 011.166-2.313z" fill="#fff" stroke="#000" stroke-linecap="round" stroke-width=".54426905"/>
</symbol>
<symbol id="sym_light_rook_right" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M25.826 20.23H16.04V19.14h9.787zM24.74 19.14v-1.45h-7.612v1.45zm.362-7.974V9.353h-1.449v.725h-1.813v-.725h-1.812v.725h-1.813v-.725h-1.45v1.813" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M16.764 11.167l1.087 1.087h6.163l1.087-1.087" stroke-width=".5434065"/>
<path d="M17.851 12.254v4.53h6.163v-4.53" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M17.851 16.785l-.543.906h7.25l-.544-.905" stroke-width=".5434065"/>
<path d="M25.101 11.167h-8.336" fill="none" stroke-linejoin="miter" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_knight_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M20.928 9.717c3.806.362 5.981 2.9 5.8 10.512H18.39c0-3.262 3.625-2.356 2.9-7.612" fill="#fff" stroke-width=".5434065"/>
<path d="M21.653 12.617c.138 1.054-2.012 2.671-2.9 3.262-1.087.725-1.022 1.574-1.813 1.45-.377-.34.511-1.102 0-1.088-.362 0 .07.446-.362.725-.362 0-1.451.362-1.45-1.449 0-.725 2.175-4.35 2.175-4.35s.685-.69.724-1.269c-.264-.36-.18-.724-.18-1.087.361-.363 1.087.905 1.087.905h.724s.283-.722.907-1.087c.362 0 .362 1.087.362 1.087" fill="#fff" stroke-width=".5434065"/>
<path d="M16.396 15.335a.181.181 0 11-.362 0 .181.181 0 11.362 0zm1.97-3.533a.181.544 30.001 11-.315-.181.181.544 30.001 11.314.181z" fill="#000" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_bishop_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<g fill="#fff" stroke-linecap="butt">
<path d="M25.826 19.209c-1.229-.352-3.664.155-4.894-.725-1.228.88-3.664.373-4.893.725 0 0-.598.196-1.087.724.246.352.598.36 1.087.181 1.23-.35 3.665.168 4.893-.362 1.23.53 3.666.011 4.894.362.491.179.842.171 1.087-.18-.49-.704-1.087-.725-1.087-.725z" stroke-width=".5434065"/>
<path d="M23.651 17.759c-.906.906-4.53.906-5.437 0-.18-.544 0-.725 0-.725 0-.906.906-1.45.906-1.45-1.993-.543-2.174-4.168 1.812-5.618 3.988 1.449 3.807 5.074 1.813 5.618 0 0 .906.544.906 1.45 0 0 .181.18 0 .725z" stroke-width=".5434065"/>
<path d="M20.027 9.06a.906.906 0 101.812 0 .906.906 0 10-1.812 0z" stroke-width=".5434065"/>
</g>
<path d="M22.745 15.584H19.12m4.531 1.45h-5.437m2.718-5.256v1.812m.907-.906h-1.812" stroke-linejoin="miter" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_queen_right" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M26.19 10.351a.725.725 0 101.449 0 .725.725 0 10-1.45 0zM20.208 8.72a.725.725 0 101.449 0 .725.725 0 10-1.45 0zm-5.981 1.632a.725.725 0 101.449 0 .725.725 0 10-1.45 0zm9.062-1.27a.725.725 0 101.449 0 .725.725 0 10-1.45 0zm-6.163.183a.725.725 0 101.45 0 .725.725 0 10-1.45 0z" stroke-width=".5434065"/>
<path d="M25.826 15.427c-3.08-.544-7.612-.544-9.787 0l-.724-4.35 2.536 3.987V9.989l1.995 4.893 1.086-5.437 1.088 5.437 1.993-5.074v5.256l2.538-3.987z" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M25.826 15.427c0 .724-.543.724-.905 1.449-.363.543-.363.362-.182 1.269.543.362.543.906.543.906.544.544-.18.906-.18.906-2.357.362-5.982.362-8.337 0 0 0-.544-.362 0-.906 0 0-.182-.543.362-.906.18-.906.18-.725-.181-1.268-.363-.726-.907-.726-.907-1.45 3.081-.544 6.706-.544 9.787 0z" stroke-linecap="butt" stroke-width=".5434065"/>
<path d="M24.92 16.877c-1.268-.363-6.706-.363-7.974 0m7.793 1.268c-2.176-.363-5.438-.363-7.612 0" fill="none" stroke-width=".5434065"/>
</g>
</symbol>
<symbol id="sym_light_king_right" fill="none" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
<g stroke-width=".63">
<path d="M20.921 10.082V8.041m.907.725h-1.813" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M20.921 14.928s-1.63-2.719-1.087-3.806c0 0 .363-.906 1.087-.906s1.088.906 1.088.906c.543 1.087-1.087 3.806-1.087 3.806" fill="#fff" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5434065"/>
<path d="M24.909 19.278c-1.994 1.269-5.619 1.269-7.612 0V16.74s-3.262-1.632-2.176-3.807c1.45-2.356 4.894-1.268 5.8 1.449v1.27-1.27c1.269-2.718 4.713-3.806 5.8-1.45 1.088 2.175-1.811 3.625-1.811 3.625z" fill="#fff" stroke-width=".5434065"/>
<path d="M24.909 16.74c-1.994-1.087-5.619-1.087-7.612 0m7.612 1.269c-1.994-1.087-5.619-1.087-7.612 0m7.612 1.269c-1.994-1.087-5.619-1.087-7.612 0" stroke-width=".5434065"/>
</g>
</symbol>
</defs>
<view id="light_king_left" viewBox="0.000 160.000 28.223 28.223"/>
<view id="dark_king_right" viewBox="32.000 160.000 28.223 28.223"/>
<view id="dark_king_left" viewBox="64.000 160.000 28.223 28.223"/>
<view id="light_king_right" viewBox="96.000 160.000 28.223 28.223"/>
<view id="light_queen_left" viewBox="0.000 128.000 28.223 28.223"/>
<view id="dark_queen_right" viewBox="32.000 128.000 28.223 28.223"/>
<view id="dark_queen_left" viewBox="64.000 128.000 28.223 28.223"/>
<view id="light_queen_right" viewBox="96.000 128.000 28.223 28.223"/>
<view id="light_bishop_left" viewBox="0.000 96.000 28.223 28.223"/>
<view id="dark_bishop_right" viewBox="32.000 96.000 28.223 28.223"/>
<view id="dark_bishop_left" viewBox="64.000 96.000 28.223 28.223"/>
<view id="light_bishop_right" viewBox="96.000 96.000 28.223 28.223"/>
<view id="light_knight_left" viewBox="0.000 64.000 28.223 28.223"/>
<view id="dark_knight_right" viewBox="32.000 64.000 28.223 28.223"/>
<view id="dark_knight_left" viewBox="64.000 64.000 28.223 28.223"/>
<view id="light_knight_right" viewBox="96.000 64.000 28.223 28.223"/>
<view id="light_rook_left" viewBox="0.000 32.000 28.223 28.223"/>
<view id="dark_rook_right" viewBox="32.000 32.000 28.223 28.223"/>
<view id="dark_rook_left" viewBox="64.000 32.000 28.223 28.223"/>
<view id="light_rook_right" viewBox="96.000 32.000 28.223 28.223"/>
<view id="light_pawn_left" viewBox="0.000 0.000 28.223 28.223"/>
<view id="dark_pawn_right" viewBox="32.000 0.000 28.223 28.223"/>
<view id="dark_pawn_left" viewBox="64.000 0.000 28.223 28.223"/>
<view id="light_pawn_right" viewBox="96.000 0.000 28.223 28.223"/>
<path stroke-width="0.25" stroke="#000" d="M-1.889 -1.889H126.112M-1.889 30.112H126.112M-1.889 62.112H126.112M-1.889 94.112H126.112M-1.889 126.112H126.112M-1.889 158.112H126.112M-1.889 190.112H126.112M-1.889 -1.889V190.112M30.112 -1.889V190.112M62.112 -1.889V190.112M94.112 -1.889V190.112M126.112 -1.889V190.112"/>
<use transform="translate(0.000 160.000)" xlink:href="#sym_light_king_left"/>
<use transform="translate(32.000 160.000)" xlink:href="#sym_dark_king_right"/>
<use transform="translate(64.000 160.000)" xlink:href="#sym_dark_king_left"/>
<use transform="translate(96.000 160.000)" xlink:href="#sym_light_king_right"/>
<use transform="translate(0.000 128.000)" xlink:href="#sym_light_queen_left"/>
<use transform="translate(32.000 128.000)" xlink:href="#sym_dark_queen_right"/>
<use transform="translate(64.000 128.000)" xlink:href="#sym_dark_queen_left"/>
<use transform="translate(96.000 128.000)" xlink:href="#sym_light_queen_right"/>
<use transform="translate(0.000 96.000)" xlink:href="#sym_light_bishop_left"/>
<use transform="translate(32.000 96.000)" xlink:href="#sym_dark_bishop_right"/>
<use transform="translate(64.000 96.000)" xlink:href="#sym_dark_bishop_left"/>
<use transform="translate(96.000 96.000)" xlink:href="#sym_light_bishop_right"/>
<use transform="translate(0.000 64.000)" xlink:href="#sym_light_knight_left"/>
<use transform="translate(32.000 64.000)" xlink:href="#sym_dark_knight_right"/>
<use transform="translate(64.000 64.000)" xlink:href="#sym_dark_knight_left"/>
<use transform="translate(96.000 64.000)" xlink:href="#sym_light_knight_right"/>
<use transform="translate(0.000 32.000)" xlink:href="#sym_light_rook_left"/>
<use transform="translate(32.000 32.000)" xlink:href="#sym_dark_rook_right"/>
<use transform="translate(64.000 32.000)" xlink:href="#sym_dark_rook_left"/>
<use transform="translate(96.000 32.000)" xlink:href="#sym_light_rook_right"/>
<use transform="translate(0.000 0.000)" xlink:href="#sym_light_pawn_left"/>
<use transform="translate(32.000 0.000)" xlink:href="#sym_dark_pawn_right"/>
<use transform="translate(64.000 0.000)" xlink:href="#sym_dark_pawn_left"/>
<use transform="translate(96.000 0.000)" xlink:href="#sym_light_pawn_right"/>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

4
sw.js
View File

@ -14,3 +14,7 @@ addEventListener('message', (event) => {
skipWaiting();
}
});
self.addEventListener('activate', (event) => {
event.waitUntil(clients.claim());
});

View File

@ -23,7 +23,7 @@ module.exports = {
loaders: [MiniCssExtractPlugin.loader, "css-loader"]
},
{
test: { and: [ /\.(jpe?g|png|gif|svg)$/i, /jquery-ui/i ] },
test: { and: [ /\.(jpe?g|png|gif|svg|ttf|eot|woff2?)$/i, /jquery-ui/i ] },
loader: "file-loader",
options: {
name: '[name].[contenthash].[ext]',
@ -31,7 +31,7 @@ module.exports = {
}
},
{
test: { and: [ /\.(jpe?g|png|gif|mp3|wav)$/i, { not: [ /jquery-ui/i ] } ] },
test: { and: [ /\.(jpe?g|png|gif|mp3|wav|ttf|eot|woff2?)$/i, { not: [ /jquery-ui/i ] } ] },
loader: "file-loader",
options: {
name: '[path][name].[contenthash].[ext]',
@ -48,7 +48,21 @@ module.exports = {
outputPath: 'assets/'
}
},
{ loader: "svgo-loader" }
{
loader: "svgo-loader",
options: {
plugins: [
{
name: "preset-default",
params: {
overrides: {
cleanupIDs: false,
}
}
},
]
}
}
]
},
{
@ -81,12 +95,14 @@ module.exports = {
"window.jQuery": "jquery'",
"window.$": "jquery"
}),
new CopyPlugin([
new CopyPlugin({
patterns: [
{ from: '.htaccess' },
]),
],
}),
new InjectManifest({
swSrc: './sw.js',
dontCacheBustURLsMatching: /\.[0-9a-f]{16,}\.(css|js|svg|png|jpg|wav)$/,
dontCacheBustURLsMatching: /\.[0-9a-f]{16,}\.\w{2,4}$/,
exclude: [ /(^|[/\\])\.htaccess$/ ],
}),
],