vue-pgn-viewer 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,13 +1,130 @@
1
1
  # Vue PGN Viewer
2
2
 
3
- Vue 3 wrapper around official [**Lichess PGN Viewer**](https://github.com/lichess-org/pgn-viewer)
3
+ <a href="https://dragunovartem99.github.io/vue-pgn-viewer" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/Watch_Live_Demo-red"></a>
4
+ <img alt="NPM Version" src="https://img.shields.io/npm/v/vue-pgn-viewer?color=orange">
5
+
6
+ Vue 3 adapter for the official [**Lichess PGN Viewer**](https://github.com/lichess-org/pgn-viewer)
7
+
8
+ <img src="https://github.com/user-attachments/assets/0c057310-1400-40eb-82b1-ed740a641b90" width="480" alt="Vue PGN Viewer screenshot" >
9
+
10
+ ## Features
11
+
12
+ - Easy integration with Vue 3 projects
13
+ - Supports all Lichess PGN Viewer features
14
+ - Fully typed configuration and API
15
+ - Props/emits autocompletion support
16
+
17
+ <img src="https://github.com/user-attachments/assets/060bf5fe-0e35-4bab-966b-b0aae6cd1cd5" width="360" alt="IDE integration screenshot" >
18
+
19
+ ## Installation
20
+
21
+ ```shell
22
+ npm install vue-pgn-viewer
23
+ # or
24
+ yarn add vue-pgn-viewer
25
+ # or
26
+ pnpm add vue-pgn-viewer
27
+ ```
28
+
29
+ ## Quick Start
30
+
31
+ 1. Import the styles in your main entry file:
32
+
33
+ ```js
34
+ // main.js or main.ts
35
+ import "vue-pgn-viewer/style.css";
36
+ ```
37
+
38
+ 2. [Register](https://vuejs.org/guide/components/registration.html) the component:
39
+
40
+ Locally (in any Single-File Component):
41
+
42
+ ```vue
43
+ <script setup>
44
+ import { PgnViewer } from "vue-pgn-viewer";
45
+ </script>
46
+ ```
47
+
48
+ Or globally (in your main entry file):
49
+
50
+ ```js
51
+ import { PgnViewer } from "vue-pgn-viewer";
52
+ app.component("PgnViewer", PgnViewer);
53
+ ```
54
+
55
+ 3. Use the component in your template:
56
+
57
+ ```vue
58
+ <template>
59
+ <PgnViewer
60
+ :config="{
61
+ pgn: '1. f3 e5 2. g4 Qh4#',
62
+ orientation: 'black',
63
+ }"
64
+ />
65
+ </template>
66
+ ```
67
+
68
+ ## Config
69
+
70
+ The library exports the `PgnViewerConfig` type for defining config objects separately.
71
+
72
+ Example:
73
+
74
+ ```vue
75
+ <script setup lang="ts">
76
+ import { PgnViewer, type PgnViewerConfig } from "vue-pgn-viewer";
77
+
78
+ const config: PgnViewerConfig = {
79
+ pgn: "1. e4 e5 2. Nf3 Nc6 3. Bc4 Nf6 4. Ng5 d5 5. exd5 b5",
80
+ drawArrows: false,
81
+ chessground: {
82
+ coordinates: false,
83
+ animation: {
84
+ enabled: true,
85
+ duration: 500
86
+ }
87
+ }
88
+ };
89
+ </script>
90
+
91
+ <template>
92
+ <PgnViewer :config="config" />
93
+ </template>
94
+ ```
95
+
96
+ For all configuration options, see the [documented source code](https://github.com/lichess-org/pgn-viewer/blob/master/src/config.ts) (Lichess).
97
+
98
+ ## API
99
+
100
+ The component emits a `ready` event when mounted and exposes an API for direct manipulation.
101
+ The library exports the `PgnViewerApi` type.
102
+
103
+ ```vue
104
+ <script setup lang="ts">
105
+ import { PgnViewer, type PgnViewerApi } from "vue-pgn-viewer";
106
+
107
+ function useApi(api: PgnViewerApi) {
108
+ api.flip();
109
+ api.toggleMenu();
110
+ }
111
+ </script>
112
+
113
+ <template>
114
+ <PgnViewer @ready="useApi" />
115
+ </template>
116
+ ```
117
+
118
+ For all API options, see the [source code](https://github.com/dragunovartem99/vue-pgn-viewer/blob/master/lib/types/pgn-viewer-api.ts).
119
+
120
+ <!-- ## Styling -->
121
+
122
+ ## Limitations
4
123
 
5
124
  > PGN viewer widget is designed to be embedded in content pages.
6
125
  > This won't replace a fully featured analysis board.
7
126
 
8
- For more dynamic approach, you should look in this directions:
127
+ For more flexible functionality, consider:
9
128
 
10
129
  - [lichess-org/chessground](https://github.com/lichess-org/chessground)
11
130
  - [qwerty084/vue3-chessboard](https://github.com/qwerty084/vue3-chessboard), which is a wrapper around "chessground"
12
-
13
- <img src="https://github.com/user-attachments/assets/0c057310-1400-40eb-82b1-ed740a641b90" width="480" alt="Screenshot of Vue PGN Viewer in action" >
@@ -1 +1 @@
1
- .cg-wrap{box-sizing:content-box;position:relative;display:block;height:0;padding-bottom:100%;width:100%}cg-container{position:absolute;width:100%;height:100%;display:block;top:0}cg-board{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:0;background-size:cover}cg-board square{position:absolute;top:0;left:0;width:12.5%;height:12.5%;pointer-events:none}cg-board square.move-dest{pointer-events:auto}cg-board square.last-move{will-change:transform}.cg-wrap piece{position:absolute;top:0;left:0;width:12.5%;height:12.5%;background-size:cover;z-index:2;will-change:transform;pointer-events:none}piece.anim{z-index:8}piece.fading{z-index:1;opacity:.5}.cg-wrap piece.ghost{opacity:.3}.cg-wrap piece svg{overflow:hidden;position:relative;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2;opacity:.6}.cg-wrap cg-auto-pieces,.cg-wrap .cg-shapes,.cg-wrap .cg-custom-svgs{overflow:visible;position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.cg-wrap cg-auto-pieces{z-index:2}.cg-wrap cg-auto-pieces piece{opacity:.3}.cg-wrap .cg-shapes{overflow:hidden;opacity:.6;z-index:2}.cg-wrap .cg-custom-svgs{z-index:9}.cg-wrap .cg-custom-svgs svg{overflow:visible}.cg-wrap coords{position:absolute;display:flex;pointer-events:none;opacity:.8;font-family:sans-serif;font-size:9px;color:#fffc}.cg-wrap coords.ranks{top:1px;right:0;flex-flow:column-reverse;height:100%;width:12px;text-align:center}.cg-wrap coords.ranks.black{flex-flow:column}.cg-wrap coords.ranks.left{left:-15px;align-items:flex-end}.cg-wrap coords.files{bottom:0;left:.7ch;flex-flow:row;width:100%;height:12px;text-transform:uppercase}.cg-wrap coords.files.black{flex-flow:row-reverse}.cg-wrap coords coord{flex:1 1 auto}cg-board{background-color:var(--board-color);background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgIHZpZXdCb3g9IjAgMCA4IDgiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxnIGlkPSJhIj4KICA8ZyBpZD0iYiI+CiAgICA8ZyBpZD0iYyI+CiAgICAgIDxnIGlkPSJkIj4KICAgICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZSIgb3BhY2l0eT0iMCIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iMSIgaHJlZj0iI2UiIHg6aHJlZj0iI2UiLz4KICAgICAgICA8cmVjdCB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZiIgb3BhY2l0eT0iMC4yIi8+CiAgICAgICAgPHVzZSB4PSIxIiB5PSItMSIgaHJlZj0iI2YiIHg6aHJlZj0iI2YiLz4KICAgICAgPC9nPgogICAgICA8dXNlIHg9IjIiIGhyZWY9IiNkIiB4OmhyZWY9IiNkIi8+CiAgICA8L2c+CiAgICA8dXNlIHg9IjQiIGhyZWY9IiNjIiB4OmhyZWY9IiNjIi8+CiAgPC9nPgogIDx1c2UgeT0iMiIgaHJlZj0iI2IiIHg6aHJlZj0iI2IiLz4KPC9nPgo8dXNlIHk9IjQiIGhyZWY9IiNhIiB4OmhyZWY9IiNhIi8+Cjwvc3ZnPg==)}cg-board square.move-dest{background:radial-gradient(#14551e80 22%,#208530 0,#0000004d,#0000 0)}cg-board square.premove-dest{background:radial-gradient(#141e5580 22%,#203085 0,#0000004d,#0000 0)}cg-board square.oc.move-dest{background:radial-gradient(transparent 0%,transparent 80%,rgba(20,85,0,.3) 80%)}cg-board square.oc.premove-dest{background:radial-gradient(transparent 0%,transparent 80%,rgba(20,30,85,.2) 80%)}cg-board square.move-dest:hover{background:#14551e4d}cg-board square.premove-dest:hover{background:#141e5533}cg-board square.last-move{background-color:#9bc70069}cg-board square.selected{background-color:#14551e80}cg-board square.check{background:radial-gradient(ellipse at center,red,#e70000 25%,#a9000000 89%,#9e000000)}cg-board square.current-premove{background-color:#141e5580}.cg-wrap piece.pawn.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==)}.cg-wrap piece.bishop.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.knight.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.rook.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy0zdi00aDIxdjRIMTJ6bS0xLTIyVjloNHYyaDVWOWg1djJoNVY5aDR2NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMzQgMTRsLTMgM0gxNGwtMy0zIi8+PHBhdGggZD0iTTMxIDE3djEyLjVIMTRWMTciIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMxIDI5LjVsMS41IDIuNWgtMjBsMS41LTIuNSIvPjxwYXRoIGQ9Ik0xMSAxNGgyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.queen.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik04IDEyYTIgMiAwIDEgMS00IDAgMiAyIDAgMSAxIDQgMHptMTYuNS00LjVhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAwek00MSAxMmEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTE2IDguNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTMzIDlhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAweiIvPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi0xMi03IDExVjExbC01LjUgMTMuNS0zLTE1LTMgMTUtNS41LTE0VjI1TDcgMTRsMiAxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTkgMjZjMCAyIDEuNSAyIDIuNSA0IDEgMS41IDEgMSAuNSAzLjUtMS41IDEtMS41IDIuNS0xLjUgMi41LTEuNSAxLjUuNSAyLjUuNSAyLjUgNi41IDEgMTYuNSAxIDIzIDAgMCAwIDEuNS0xIDAtMi41IDAgMCAuNS0xLjUtMS0yLjUtLjUtMi41LS41LTIgLjUtMy41IDEtMiAyLjUtMiAyLjUtNC04LjUtMS41LTE4LjUtMS41LTI3IDB6IiBzdHJva2UtbGluZWNhcD0iYnV0dCIvPjxwYXRoIGQ9Ik0xMS41IDMwYzMuNS0xIDE4LjUtMSAyMiAwTTEyIDMzLjVjNi0xIDE1LTEgMjEgMCIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.king.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjZNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTEuNSAzN2M1LjUgMy41IDE1LjUgMy41IDIxIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0VjI3di0zLjVjLTMuNS03LjUtMTMtMTAuNS0xNi00LTMgNiA1IDEwIDUgMTBWMzd6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExLjUgMzBjNS41LTMgMTUuNS0zIDIxIDBtLTIxIDMuNWM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.pawn.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==)}.cg-wrap piece.bishop.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48L2c+PC9zdmc+)}.cg-wrap piece.knight.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjZWNlY2VjIiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMjQuNTUgMTAuNGwtLjQ1IDEuNDUuNS4xNWMzLjE1IDEgNS42NSAyLjQ5IDcuOSA2Ljc1UzM1Ljc1IDI5LjA2IDM1LjI1IDM5bC0uMDUuNWgyLjI1bC4wNS0uNWMuNS0xMC4wNi0uODgtMTYuODUtMy4yNS0yMS4zNC0yLjM3LTQuNDktNS43OS02LjY0LTkuMTktNy4xNmwtLjUxLS4xeiIgZmlsbD0iI2VjZWNlYyIgc3Ryb2tlPSJub25lIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.rook.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy41LTdsMS41LTIuNWgxN2wxLjUgMi41aC0yMHptLS41IDR2LTRoMjF2NEgxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE0IDI5LjV2LTEzaDE3djEzSDE0eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTQgMTYuNUwxMSAxNGgyM2wtMyAyLjVIMTR6TTExIDE0VjloNHYyaDVWOWg1djJoNVY5aDR2NUgxMXoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTEyIDM1LjVoMjFtLTIwLTRoMTltLTE4LTJoMTdtLTE3LTEzaDE3TTExIDE0aDIzIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.queen.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIHN0cm9rZT0ibm9uZSI+PGNpcmNsZSBjeD0iNiIgY3k9IjEyIiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMTQiIGN5PSI5IiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjgiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzMSIgY3k9IjkiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjEyIiByPSIyLjc1Ii8+PC9nPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi41LTEyLjVMMzEgMjVsLS4zLTE0LjEtNS4yIDEzLjYtMy0xNC41LTMgMTQuNS01LjItMTMuNkwxNCAyNSA2LjUgMTMuNSA5IDI2eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNOSAyNmMwIDIgMS41IDIgMi41IDQgMSAxLjUgMSAxIC41IDMuNS0xLjUgMS0xLjUgMi41LTEuNSAyLjUtMS41IDEuNS41IDIuNS41IDIuNSA2LjUgMSAxNi41IDEgMjMgMCAwIDAgMS41LTEgMC0yLjUgMCAwIC41LTEuNS0xLTIuNS0uNS0yLjUtLjUtMiAuNS0zLjUgMS0yIDIuNS0yIDIuNS00LTguNS0xLjUtMTguNS0xLjUtMjcgMHoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTExIDM4LjVhMzUgMzUgMSAwIDAgMjMgMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMTEgMjlhMzUgMzUgMSAwIDEgMjMgMG0tMjEuNSAyLjVoMjBtLTIxIDNhMzUgMzUgMSAwIDAgMjIgMG0tMjMgM2EzNSAzNSAxIDAgMCAyNCAwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiLz48L2c+PC9zdmc+)}.cg-wrap piece.king.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjYiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBmaWxsPSIjMDAwIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjxwYXRoIGQ9Ik0xMS41IDM3YzUuNSAzLjUgMTUuNSAzLjUgMjEgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMy41LTcuNS0xMy0xMC41LTE2LTQtMyA2IDUgMTAgNSAxMFYzN3oiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMyIDI5LjVzOC41LTQgNi4wMy05LjY1QzM0LjE1IDE0IDI1IDE4IDIyLjUgMjQuNWwuMDEgMi4xLS4wMS0yLjFDMjAgMTggOS45MDYgMTQgNi45OTcgMTkuODVjLTIuNDk3IDUuNjUgNC44NTMgOSA0Ljg1MyA5IiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMTEuNSAzMGM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwbS0yMSAzLjVjNS41LTMgMTUuNS0zIDIxIDAiIHN0cm9rZT0iI2VjZWNlYyIvPjwvZz48L3N2Zz4=)}.lpv__fbt{background:none;border:none;outline:none;color:var(--c-lpv-font, #aaa);align-items:normal;cursor:pointer;text-transform:uppercase;font-size:1em;line-height:1.5;text-decoration:none}@media (hover: hover){.lpv__fbt:hover:not(.disabled):not([disabled]){background:var(--c-lpv-fbt-hover, lpv-fbt-hover);color:#fff}}.lpv__fbt.active{background:var(--c-lpv-accent, hsl(88, 62%, 37%))!important;color:#fff}.lpv__fbt.disabled,.lpv__fbt[disabled]{opacity:.4;cursor:default}.lpv__board .cg-wrap{position:relative;display:block;height:0;padding-bottom:100%;width:100%}.lpv{display:grid;overflow:hidden;grid-row-gap:0;--controls-height: 4em}.lpv--controls-false{--controls-height: 0em}.lpv--moves-false{grid-template-areas:"board" "controls";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height)));grid-template-rows:auto var(--controls-height)}.lpv--moves-right{grid-template-areas:"board side" "controls side";grid-template-columns:auto fit-content(40%);grid-template-rows:auto var(--controls-height)}.lpv--moves-bottom{grid-template-areas:"board" "controls" "side";grid-template-rows:auto var(--controls-height)}.lpv--moves-bottom .lpv__controls{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--moves-auto{grid-template-areas:"board side" "controls side";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height))) minmax(232px,1fr);grid-template-rows:auto var(--controls-height)}@media (max-width: 500px){.lpv--moves-auto{grid-template-areas:"board" "controls" "side";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height) - 6em));grid-template-rows:auto var(--controls-height)}}.lpv--players.lpv--moves-false{grid-template-areas:"player-top" "board" "player-bot" "controls";grid-template-rows:2em auto 2em var(--controls-height)}.lpv--players.lpv--moves-right{grid-template-areas:"player-top side" "board side" "player-bot side" "controls side";grid-template-rows:2em auto 2em var(--controls-height)}.lpv--players.lpv--moves-bottom{grid-template-areas:"player-top" "board" "player-bot" "controls" "side";grid-template-rows:2em auto 2em var(--controls-height)}.lpv--players.lpv--moves-bottom .lpv__controls{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--players.lpv--moves-auto{grid-template-areas:"player-top side" "board side" "player-bot side" "controls side";grid-template-columns:minmax(200px,calc(100vh - 2 * 2em - var(--controls-height))) minmax(232px,1fr);grid-template-rows:2em auto 2em var(--controls-height)}@media (max-width: 500px){.lpv--players.lpv--moves-auto{grid-template-areas:"player-top" "board" "player-bot" "controls" "side";grid-template-columns:minmax(200px,calc(100vh - 2 * 2em - var(--controls-height) - 6em));grid-template-rows:2em auto 2em var(--controls-height)}}.lpv__board{grid-area:board}.lpv__side{grid-area:side}.lpv__player--top{grid-area:player-top}.lpv__player--bottom{grid-area:player-bot}.lpv__controls{grid-area:controls}.lpv__menu,.lpv__pgn{grid-area:1/1/2/2}.lpv--players .lpv__menu,.lpv--players .lpv__pgn{grid-area:1/1/4/2}.lpv__side{overflow:hidden;display:flex;flex-flow:column}.lpv__moves{position:relative;flex:1 1 0;display:flex;flex-flow:row wrap;overflow-y:auto;background:var(--c-lpv-bg-movelist, hsl(37, 5%, 18%));align-items:center;align-content:flex-start;will-change:scroll-position;-webkit-user-select:none;user-select:none;line-height:1.7;min-width:20ch}.lpv__moves index{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves>index{flex:0 0 15%;margin-right:3%;display:flex;justify-content:flex-end}.lpv__moves move{border-radius:3px;padding-left:3%;font-weight:700;white-space:nowrap}.lpv__moves move.empty{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves move:not(.empty):hover{background:var(--c-lpv-move-hover, rgb(63.21144, 78.35895, 41.2794));color:var(--c-lpv-accent-over, white);cursor:pointer}.lpv__moves move.ancestor{color:var(--c-lpv-past-moves, #aaa)}.lpv__moves move.current{background:var(--c-lpv-current-move, rgb(83.23336, 120.92355, 38.1786))!important;color:var(--c-lpv-accent-over, white)}.lpv__moves move.inaccuracy{color:var(--c-lpv-inaccuracy, hsl(202, 78%, 62%))}.lpv__moves move.inaccuracy:hover{background:var(--c-lpv-bg-inaccuracy-hover, rgb(58.4919, 85.98141, 100.6281))}.lpv__moves move.mistake{color:var(--c-lpv-mistake, hsl(41, 100%, 45%))}.lpv__moves move.mistake:hover{background:var(--c-lpv-bg-mistake-hover, rgb(102.5865, 79.55235, 30.5235))}.lpv__moves move.blunder{color:var(--c-lpv-blunder, hsl(0, 69%, 60%))}.lpv__moves move.blunder:hover{background:var(--c-lpv-bg-blunder-hover, rgb(100.7505, 57.29085, 55.3095))}.lpv__moves move.good{color:var(--c-lpv-good-move, hsl(130, 67%, 62%))}.lpv__moves move.good:hover{background:var(--c-lpv-bg-good-hover, rgb(61.6896, 99.41175, 64.9689))}.lpv__moves move.brilliant{color:var(--c-lpv-brilliant, hsl(129, 71%, 45%))}.lpv__moves move.brilliant:hover{background:var(--c-lpv-bg-brilliant-hover, rgb(43.71975, 91.3716, 47.839275))}.lpv__moves move.interesting{color:var(--c-lpv-interesting, hsl(307, 80%, 70%))}.lpv__moves move.interesting:hover{background:var(--c-lpv-bg-interesting-hover, rgb(105.6465, 67.69485, 98.1495))}.lpv__moves>move{flex:0 0 41%;font-size:1.1em}.lpv__moves comment{-webkit-user-select:text;user-select:text;font-size:.9em}.lpv__moves comment.result{text-align:center;font-weight:700}.lpv__moves>comment{flex:1 1 100%;background:var(--c-lpv-bg-variation, hsl(37, 5%, 15%));border:1px solid var(--c-lpv-side-border, hsl(37, 5%, 13%));border-width:1px 0;padding:.4em 1em;line-height:1.4;overflow-wrap:break-word;word-break:break-word}.lpv__moves>comment+variation,.lpv__moves>comment+comment{border-top:none}.lpv__moves>variation{flex:1 1 100%;display:block;overflow:hidden;font-size:.8em;background:var(--c-lpv-bg-variation, hsl(37, 5%, 15%));border:1px solid var(--c-lpv-side-border, hsl(37, 5%, 13%));border-width:1px 0;padding:0 .6em}.lpv__moves>variation+variation{border-top:none}.lpv__moves>variation move{display:inline-block;padding:.1em .2em;min-width:2.5ch;text-align:center}.lpv__moves>variation move+index{margin-left:.2em}.lpv__moves>variation index{margin:0;padding:.1em 0}.lpv__moves>variation index+move{margin-left:.1em}.lpv__moves>variation comment{align-self:center;margin:0 .3em}.lpv__moves>variation paren{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves>variation paren.open{margin:0 .1em 0 .2em}.lpv__moves>variation paren.close{margin:0 .2em 0 .1em}.lpv__player{font-size:.8em;background:var(--c-lpv-bg-player, hsl(37, 5%, 18%));display:flex;flex-flow:row nowrap;padding:0 1em}.lpv__player--bottom{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--controls-false .lpv__player--bottom{border-bottom:none}.lpv__player__person{flex:1 1 auto;display:flex;flex-flow:row nowrap;align-items:center;gap:1ch;color:var(--c-lpv-font, #aaa);text-decoration:none}.lpv__player__title{font-weight:700}.lpv__player__clock{display:flex;flex-flow:row nowrap;align-items:center;font-family:monospace;font-size:1.4em;font-weight:700}.lpv__player__clock.active{color:var(--c-lpv-accent, hsl(88, 62%, 37%))}.lpv__pane{z-index:2;border-bottom:2px solid var(--c-lpv-accent, hsl(88, 62%, 37%));background:var(--c-lpv-bg-pane, rgb(55.70322, 62.397225, 42.4422));display:flex;flex-flow:column;justify-content:center}.lpv__pane .lpv__fbt{text-align:left;padding:.8em 2.5em;transition:none}.lpv__pane .lpv__fbt:before{color:var(--c-lpv-accent, hsl(88, 62%, 37%));font-size:2em}.lpv__pane .lpv__fbt:hover:before{color:var(--c-lpv-accent-over, white)}.lpv__pgn__text{flex:1 1 auto;background:var(--c-lpv-pgn-text, rgb(50.447466, 51.2240175, 43.25616));color:var(--c-lpv-font, #aaa);padding:.8em 1.3em}.lpv__controls{display:flex;flex-flow:row nowrap;align-items:stretch;-webkit-user-select:none;user-select:none;background:var(--c-lpv-bg-controls, hsl(37, 5%, 18%))}.lpv__controls .lpv__fbt{flex:1 1 auto;font-size:1.4em;padding:.4em .7em;border-left:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv__controls .lpv__fbt:first-child{border:none}.lpv__controls__menu.lpv__fbt{flex:0 1 auto;width:4em;padding:.45em 1em .35em;font-size:1.1em}.lpv__controls__goto{padding:.4rem .7rem}.lpv *::-webkit-scrollbar,.lpv *::-webkit-scrollbar-corner{width:.5rem;background:var(--c-lpv-bg, hsl(37, 5%, 18%))}.lpv *::-webkit-scrollbar-thumb{background:var(--c-lpv-font-bg, rgb(72.556, 71.1484, 68.884))}.lpv *::-webkit-scrollbar-thumb:hover,.lpv *::-webkit-scrollbar-thumb:active{background:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}@font-face{font-family:lpv-fontello;src:url(data:application/octet-stream;base64,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) format("woff"),url(data:application/octet-stream;base64,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) format("truetype")}.lpv__icon:before{font-family:lpv-fontello;font-size:1.1em;width:1em;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lpv__icon-step-forward:before{content:""}.lpv__icon-step-backward:before{content:""}.lpv__icon-left-open:before{content:""}.lpv__icon-right-open:before{content:""}.lpv__icon-ellipsis-vert:before{content:""}.lpv{border-radius:5px;box-shadow:0 2px 2px #00000024,0 3px 1px -2px #0003,0 1px 5px #0000001f;overflow:hidden;background:var(--c-lpv-bg, hsl(37, 5%, 18%));color:var(--c-lpv-font, #aaa);box-sizing:border-box}.lpv *,.lpv *:before,.lpv *:after{box-sizing:inherit}.lpv__board{-webkit-user-select:none;user-select:none}.lpv__board cg-board{box-shadow:none}.lpv:focus{outline:auto 2px var(--c-lpv-accent, hsl(88, 62%, 37%))}cg-board:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-conic-gradient(var(--board-color-light, transparent) 0% 25%,var(--board-color-dark, transparent) 0% 50%) 50% / 25% 25%}
1
+ .cg-wrap{box-sizing:content-box;position:relative;display:block;height:0;padding-bottom:100%;width:100%}cg-container{position:absolute;width:100%;height:100%;display:block;top:0}cg-board{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:0;background-size:cover}cg-board square{position:absolute;top:0;left:0;width:12.5%;height:12.5%;pointer-events:none}cg-board square.move-dest{pointer-events:auto}cg-board square.last-move{will-change:transform}.cg-wrap piece{position:absolute;top:0;left:0;width:12.5%;height:12.5%;background-size:cover;z-index:2;will-change:transform;pointer-events:none}piece.anim{z-index:8}piece.fading{z-index:1;opacity:.5}.cg-wrap piece.ghost{opacity:.3}.cg-wrap piece svg{overflow:hidden;position:relative;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2;opacity:.6}.cg-wrap cg-auto-pieces,.cg-wrap .cg-shapes,.cg-wrap .cg-custom-svgs{overflow:visible;position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.cg-wrap cg-auto-pieces{z-index:2}.cg-wrap cg-auto-pieces piece{opacity:.3}.cg-wrap .cg-shapes{overflow:hidden;opacity:.6;z-index:2}.cg-wrap .cg-custom-svgs{z-index:9}.cg-wrap .cg-custom-svgs svg{overflow:visible}.cg-wrap coords{position:absolute;display:flex;pointer-events:none;opacity:.8;font-family:sans-serif;font-size:9px;color:#fffc}.cg-wrap coords.ranks{top:1px;right:0;flex-flow:column-reverse;height:100%;width:12px;text-align:center}.cg-wrap coords.ranks.black{flex-flow:column}.cg-wrap coords.ranks.left{left:-15px;align-items:flex-end}.cg-wrap coords.files{bottom:0;left:.7ch;flex-flow:row;width:100%;height:12px;text-transform:uppercase}.cg-wrap coords.files.black{flex-flow:row-reverse}.cg-wrap coords coord{flex:1 1 auto}cg-board{background-color:var(--board-color);background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgIHZpZXdCb3g9IjAgMCA4IDgiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyI+CjxnIGlkPSJhIj4KICA8ZyBpZD0iYiI+CiAgICA8ZyBpZD0iYyI+CiAgICAgIDxnIGlkPSJkIj4KICAgICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZSIgb3BhY2l0eT0iMCIvPgogICAgICAgIDx1c2UgeD0iMSIgeT0iMSIgaHJlZj0iI2UiIHg6aHJlZj0iI2UiLz4KICAgICAgICA8cmVjdCB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBpZD0iZiIgb3BhY2l0eT0iMC4yIi8+CiAgICAgICAgPHVzZSB4PSIxIiB5PSItMSIgaHJlZj0iI2YiIHg6aHJlZj0iI2YiLz4KICAgICAgPC9nPgogICAgICA8dXNlIHg9IjIiIGhyZWY9IiNkIiB4OmhyZWY9IiNkIi8+CiAgICA8L2c+CiAgICA8dXNlIHg9IjQiIGhyZWY9IiNjIiB4OmhyZWY9IiNjIi8+CiAgPC9nPgogIDx1c2UgeT0iMiIgaHJlZj0iI2IiIHg6aHJlZj0iI2IiLz4KPC9nPgo8dXNlIHk9IjQiIGhyZWY9IiNhIiB4OmhyZWY9IiNhIi8+Cjwvc3ZnPg==)}cg-board square.move-dest{background:radial-gradient(#14551e80 22%,#208530 0,#0000004d,#0000 0)}cg-board square.premove-dest{background:radial-gradient(#141e5580 22%,#203085 0,#0000004d,#0000 0)}cg-board square.oc.move-dest{background:radial-gradient(transparent 0%,transparent 80%,rgba(20,85,0,.3) 80%)}cg-board square.oc.premove-dest{background:radial-gradient(transparent 0%,transparent 80%,rgba(20,30,85,.2) 80%)}cg-board square.move-dest:hover{background:#14551e4d}cg-board square.premove-dest:hover{background:#141e5533}cg-board square.last-move{background-color:#9bc70069}cg-board square.selected{background-color:#14551e80}cg-board square.check{background:radial-gradient(ellipse at center,red,#e70000 25%,#a9000000 89%,#9e000000)}cg-board square.current-premove{background-color:#141e5580}.cg-wrap piece.pawn.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==)}.cg-wrap piece.bishop.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.knight.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.rook.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy0zdi00aDIxdjRIMTJ6bS0xLTIyVjloNHYyaDVWOWg1djJoNVY5aDR2NSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMzQgMTRsLTMgM0gxNGwtMy0zIi8+PHBhdGggZD0iTTMxIDE3djEyLjVIMTRWMTciIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMxIDI5LjVsMS41IDIuNWgtMjBsMS41LTIuNSIvPjxwYXRoIGQ9Ik0xMSAxNGgyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.queen.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik04IDEyYTIgMiAwIDEgMS00IDAgMiAyIDAgMSAxIDQgMHptMTYuNS00LjVhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAwek00MSAxMmEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTE2IDguNWEyIDIgMCAxIDEtNCAwIDIgMiAwIDEgMSA0IDB6TTMzIDlhMiAyIDAgMSAxLTQgMCAyIDIgMCAxIDEgNCAweiIvPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi0xMi03IDExVjExbC01LjUgMTMuNS0zLTE1LTMgMTUtNS41LTE0VjI1TDcgMTRsMiAxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTkgMjZjMCAyIDEuNSAyIDIuNSA0IDEgMS41IDEgMSAuNSAzLjUtMS41IDEtMS41IDIuNS0xLjUgMi41LTEuNSAxLjUuNSAyLjUuNSAyLjUgNi41IDEgMTYuNSAxIDIzIDAgMCAwIDEuNS0xIDAtMi41IDAgMCAuNS0xLjUtMS0yLjUtLjUtMi41LS41LTIgLjUtMy41IDEtMiAyLjUtMiAyLjUtNC04LjUtMS41LTE4LjUtMS41LTI3IDB6IiBzdHJva2UtbGluZWNhcD0iYnV0dCIvPjxwYXRoIGQ9Ik0xMS41IDMwYzMuNS0xIDE4LjUtMSAyMiAwTTEyIDMzLjVjNi0xIDE1LTEgMjEgMCIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.king.white{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjZNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTIyLjUgMjVzNC41LTcuNSAzLTEwLjVjMCAwLTEtMi41LTMtMi41cy0zIDIuNS0zIDIuNWMtMS41IDMgMyAxMC41IDMgMTAuNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTEuNSAzN2M1LjUgMy41IDE1LjUgMy41IDIxIDB2LTdzOS00LjUgNi0xMC41Yy00LTYuNS0xMy41LTMuNS0xNiA0VjI3di0zLjVjLTMuNS03LjUtMTMtMTAuNS0xNi00LTMgNiA1IDEwIDUgMTBWMzd6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExLjUgMzBjNS41LTMgMTUuNS0zIDIxIDBtLTIxIDMuNWM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.pawn.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PHBhdGggZD0iTTIyLjUgOWMtMi4yMSAwLTQgMS43OS00IDQgMCAuODkuMjkgMS43MS43OCAyLjM4QzE3LjMzIDE2LjUgMTYgMTguNTkgMTYgMjFjMCAyLjAzLjk0IDMuODQgMi40MSA1LjAzLTMgMS4wNi03LjQxIDUuNTUtNy40MSAxMy40N2gyM2MwLTcuOTItNC40MS0xMi40MS03LjQxLTEzLjQ3IDEuNDctMS4xOSAyLjQxLTMgMi40MS01LjAzIDAtMi40MS0xLjMzLTQuNS0zLjI4LTUuNjIuNDktLjY3Ljc4LTEuNDkuNzgtMi4zOCAwLTIuMjEtMS43OS00LTQtNHoiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==)}.cg-wrap piece.bishop.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIGZpbGw9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJidXR0Ij48cGF0aCBkPSJNOSAzNmMzLjM5LS45NyAxMC4xMS40MyAxMy41LTIgMy4zOSAyLjQzIDEwLjExIDEuMDMgMTMuNSAyIDAgMCAxLjY1LjU0IDMgMi0uNjguOTctMS42NS45OS0zIC41LTMuMzktLjk3LTEwLjExLjQ2LTEzLjUtMS0zLjM5IDEuNDYtMTAuMTEuMDMtMTMuNSAxLTEuMzU0LjQ5LTIuMzIzLjQ3LTMtLjUgMS4zNTQtMS45NCAzLTIgMy0yeiIvPjxwYXRoIGQ9Ik0xNSAzMmMyLjUgMi41IDEyLjUgMi41IDE1IDAgLjUtMS41IDAtMiAwLTIgMC0yLjUtMi41LTQtMi41LTQgNS41LTEuNSA2LTExLjUtNS0xNS41LTExIDQtMTAuNSAxNC01IDE1LjUgMCAwLTIuNSAxLjUtMi41IDQgMCAwLS41LjUgMCAyeiIvPjxwYXRoIGQ9Ik0yNSA4YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAxIDEgNSAweiIvPjwvZz48cGF0aCBkPSJNMTcuNSAyNmgxME0xNSAzMGgxNW0tNy41LTE0LjV2NU0yMCAxOGg1IiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48L2c+PC9zdmc+)}.cg-wrap piece.knight.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMiAxMGMxMC41IDEgMTYuNSA4IDE2IDI5SDE1YzAtOSAxMC02LjUgOC0yMSIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yNCAxOGMuMzggMi45MS01LjU1IDcuMzctOCA5LTMgMi0yLjgyIDQuMzQtNSA0LTEuMDQyLS45NCAxLjQxLTMuMDQgMC0zLTEgMCAuMTkgMS4yMy0xIDItMSAwLTQuMDAzIDEtNC00IDAtMiA2LTEyIDYtMTJzMS44OS0xLjkgMi0zLjVjLS43My0uOTk0LS41LTItLjUtMyAxLTEgMyAyLjUgMyAyLjVoMnMuNzgtMS45OTIgMi41LTNjMSAwIDEgMyAxIDMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNOS41IDI1LjVhLjUuNSAwIDEgMS0xIDAgLjUuNSAwIDEgMSAxIDB6bTUuNDMzLTkuNzVhLjUgMS41IDMwIDEgMS0uODY2LS41LjUgMS41IDMwIDEgMSAuODY2LjV6IiBmaWxsPSIjZWNlY2VjIiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMjQuNTUgMTAuNGwtLjQ1IDEuNDUuNS4xNWMzLjE1IDEgNS42NSAyLjQ5IDcuOSA2Ljc1UzM1Ljc1IDI5LjA2IDM1LjI1IDM5bC0uMDUuNWgyLjI1bC4wNS0uNWMuNS0xMC4wNi0uODgtMTYuODUtMy4yNS0yMS4zNC0yLjM3LTQuNDktNS43OS02LjY0LTkuMTktNy4xNmwtLjUxLS4xeiIgZmlsbD0iI2VjZWNlYyIgc3Ryb2tlPSJub25lIi8+PC9nPjwvc3ZnPg==)}.cg-wrap piece.rook.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik05IDM5aDI3di0zSDl2M3ptMy41LTdsMS41LTIuNWgxN2wxLjUgMi41aC0yMHptLS41IDR2LTRoMjF2NEgxMnoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTE0IDI5LjV2LTEzaDE3djEzSDE0eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMTQgMTYuNUwxMSAxNGgyM2wtMyAyLjVIMTR6TTExIDE0VjloNHYyaDVWOWg1djJoNVY5aDR2NUgxMXoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTEyIDM1LjVoMjFtLTIwLTRoMTltLTE4LTJoMTdtLTE3LTEzaDE3TTExIDE0aDIzIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjwvZz48L3N2Zz4=)}.cg-wrap piece.queen.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIHN0cm9rZT0ibm9uZSI+PGNpcmNsZSBjeD0iNiIgY3k9IjEyIiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMTQiIGN5PSI5IiByPSIyLjc1Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjgiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzMSIgY3k9IjkiIHI9IjIuNzUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjEyIiByPSIyLjc1Ii8+PC9nPjxwYXRoIGQ9Ik05IDI2YzguNS0xLjUgMjEtMS41IDI3IDBsMi41LTEyLjVMMzEgMjVsLS4zLTE0LjEtNS4yIDEzLjYtMy0xNC41LTMgMTQuNS01LjItMTMuNkwxNCAyNSA2LjUgMTMuNSA5IDI2eiIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNOSAyNmMwIDIgMS41IDIgMi41IDQgMSAxLjUgMSAxIC41IDMuNS0xLjUgMS0xLjUgMi41LTEuNSAyLjUtMS41IDEuNS41IDIuNS41IDIuNSA2LjUgMSAxNi41IDEgMjMgMCAwIDAgMS41LTEgMC0yLjUgMCAwIC41LTEuNS0xLTIuNS0uNS0yLjUtLjUtMiAuNS0zLjUgMS0yIDIuNS0yIDIuNS00LTguNS0xLjUtMTguNS0xLjUtMjcgMHoiIHN0cm9rZS1saW5lY2FwPSJidXR0Ii8+PHBhdGggZD0iTTExIDM4LjVhMzUgMzUgMSAwIDAgMjMgMCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiLz48cGF0aCBkPSJNMTEgMjlhMzUgMzUgMSAwIDEgMjMgMG0tMjEuNSAyLjVoMjBtLTIxIDNhMzUgMzUgMSAwIDAgMjIgMG0tMjMgM2EzNSAzNSAxIDAgMCAyNCAwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiLz48L2c+PC9zdmc+)}.cg-wrap piece.king.black{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NSIgaGVpZ2h0PSI0NSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yMi41IDExLjYzVjYiIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiLz48cGF0aCBkPSJNMjIuNSAyNXM0LjUtNy41IDMtMTAuNWMwIDAtMS0yLjUtMy0yLjVzLTMgMi41LTMgMi41Yy0xLjUgMyAzIDEwLjUgMyAxMC41IiBmaWxsPSIjMDAwIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJtaXRlciIvPjxwYXRoIGQ9Ik0xMS41IDM3YzUuNSAzLjUgMTUuNSAzLjUgMjEgMHYtN3M5LTQuNSA2LTEwLjVjLTQtNi41LTEzLjUtMy41LTE2IDRWMjd2LTMuNWMtMy41LTcuNS0xMy0xMC41LTE2LTQtMyA2IDUgMTAgNSAxMFYzN3oiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAgOGg1IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIi8+PHBhdGggZD0iTTMyIDI5LjVzOC41LTQgNi4wMy05LjY1QzM0LjE1IDE0IDI1IDE4IDIyLjUgMjQuNWwuMDEgMi4xLS4wMS0yLjFDMjAgMTggOS45MDYgMTQgNi45OTcgMTkuODVjLTIuNDk3IDUuNjUgNC44NTMgOSA0Ljg1MyA5IiBzdHJva2U9IiNlY2VjZWMiLz48cGF0aCBkPSJNMTEuNSAzMGM1LjUtMyAxNS41LTMgMjEgMG0tMjEgMy41YzUuNS0zIDE1LjUtMyAyMSAwbS0yMSAzLjVjNS41LTMgMTUuNS0zIDIxIDAiIHN0cm9rZT0iI2VjZWNlYyIvPjwvZz48L3N2Zz4=)}.lpv__fbt{background:none;border:none;outline:none;color:var(--c-lpv-font, #aaa);align-items:normal;cursor:pointer;text-transform:uppercase;font-size:1em;line-height:1.5;text-decoration:none}@media (hover: hover){.lpv__fbt:hover:not(.disabled):not([disabled]){background:var(--c-lpv-fbt-hover, lpv-fbt-hover);color:#fff}}.lpv__fbt.active{background:var(--c-lpv-accent, hsl(88, 62%, 37%))!important;color:#fff}.lpv__fbt.disabled,.lpv__fbt[disabled]{opacity:.4;cursor:default}.lpv__board .cg-wrap{position:relative;display:block;height:0;padding-bottom:100%;width:100%}.lpv{display:grid;overflow:hidden;grid-row-gap:0;--controls-height: 4em}.lpv--controls-false{--controls-height: 0em}.lpv--moves-false{grid-template-areas:"board" "controls";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height)));grid-template-rows:auto var(--controls-height)}.lpv--moves-right{grid-template-areas:"board side" "controls side";grid-template-columns:auto fit-content(40%);grid-template-rows:auto var(--controls-height)}.lpv--moves-bottom{grid-template-areas:"board" "controls" "side";grid-template-rows:auto var(--controls-height)}.lpv--moves-bottom .lpv__controls{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--moves-auto{grid-template-areas:"board side" "controls side";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height))) minmax(232px,1fr);grid-template-rows:auto var(--controls-height)}@media (max-width: 450px){.lpv--moves-auto{grid-template-areas:"board" "controls" "side";grid-template-columns:minmax(200px,calc(100vh - var(--controls-height) - 6em));grid-template-rows:auto var(--controls-height)}}.lpv--players.lpv--moves-false{grid-template-areas:"player-top" "board" "player-bot" "controls";grid-template-rows:2em auto 2em var(--controls-height)}.lpv--players.lpv--moves-right{grid-template-areas:"player-top side" "board side" "player-bot side" "controls side";grid-template-rows:2em auto 2em var(--controls-height)}.lpv--players.lpv--moves-bottom{grid-template-areas:"player-top" "board" "player-bot" "controls" "side";grid-template-rows:2em auto 2em var(--controls-height) 6em}.lpv--players.lpv--moves-bottom .lpv__controls{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--players.lpv--moves-auto{grid-template-areas:"player-top side" "board side" "player-bot side" "controls side";grid-template-columns:minmax(200px,calc(100vh - 2 * 2em - var(--controls-height))) minmax(232px,1fr);grid-template-rows:2em auto 2em var(--controls-height)}@media (max-width: 450px){.lpv--players.lpv--moves-auto{grid-template-areas:"player-top" "board" "player-bot" "controls" "side";grid-template-columns:minmax(200px,calc(100vh - 2 * 2em - var(--controls-height) - 6em));grid-template-rows:2em auto 2em var(--controls-height) 6em}}.lpv__board{grid-area:board}.lpv__side{grid-area:side}.lpv__player--top{grid-area:player-top}.lpv__player--bottom{grid-area:player-bot}.lpv__controls{grid-area:controls}.lpv__menu,.lpv__pgn{grid-area:1/1/2/2}.lpv--players .lpv__menu,.lpv--players .lpv__pgn{grid-area:1/1/4/2}.lpv__side{overflow:hidden;display:flex;flex-flow:column}.lpv__moves{position:relative;flex:1 1 0;display:flex;flex-flow:row wrap;overflow-y:auto;background:var(--c-lpv-bg-movelist, hsl(37, 5%, 18%));align-items:center;align-content:flex-start;will-change:scroll-position;-webkit-user-select:none;user-select:none;line-height:1.7;min-width:20ch}.lpv__moves index{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves>index{flex:0 0 15%;margin-right:3%;display:flex;justify-content:flex-end}.lpv__moves move{border-radius:3px;padding-left:3%;font-weight:700;white-space:nowrap}.lpv__moves move.empty{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves move:not(.empty):hover{background:var(--c-lpv-move-hover, rgb(63.21144, 78.35895, 41.2794));color:var(--c-lpv-accent-over, white);cursor:pointer}.lpv__moves move.ancestor{color:var(--c-lpv-past-moves, #aaa)}.lpv__moves move.current{background:var(--c-lpv-current-move, rgb(83.23336, 120.92355, 38.1786))!important;color:var(--c-lpv-accent-over, white)}.lpv__moves move.inaccuracy{color:var(--c-lpv-inaccuracy, hsl(202, 78%, 62%))}.lpv__moves move.inaccuracy:hover{background:var(--c-lpv-bg-inaccuracy-hover, rgb(58.4919, 85.98141, 100.6281))}.lpv__moves move.mistake{color:var(--c-lpv-mistake, hsl(41, 100%, 45%))}.lpv__moves move.mistake:hover{background:var(--c-lpv-bg-mistake-hover, rgb(102.5865, 79.55235, 30.5235))}.lpv__moves move.blunder{color:var(--c-lpv-blunder, hsl(0, 69%, 60%))}.lpv__moves move.blunder:hover{background:var(--c-lpv-bg-blunder-hover, rgb(100.7505, 57.29085, 55.3095))}.lpv__moves move.good{color:var(--c-lpv-good-move, hsl(130, 67%, 62%))}.lpv__moves move.good:hover{background:var(--c-lpv-bg-good-hover, rgb(61.6896, 99.41175, 64.9689))}.lpv__moves move.brilliant{color:var(--c-lpv-brilliant, hsl(129, 71%, 45%))}.lpv__moves move.brilliant:hover{background:var(--c-lpv-bg-brilliant-hover, rgb(43.71975, 91.3716, 47.839275))}.lpv__moves move.interesting{color:var(--c-lpv-interesting, hsl(307, 80%, 70%))}.lpv__moves move.interesting:hover{background:var(--c-lpv-bg-interesting-hover, rgb(105.6465, 67.69485, 98.1495))}.lpv__moves>move{flex:0 0 41%;font-size:1.1em}.lpv__moves comment{-webkit-user-select:text;user-select:text;font-size:.9em}.lpv__moves comment.result{text-align:center;font-weight:700}.lpv__moves>comment{flex:1 1 100%;background:var(--c-lpv-bg-variation, hsl(37, 5%, 15%));border:1px solid var(--c-lpv-side-border, hsl(37, 5%, 13%));border-width:1px 0;padding:.4em 1em;line-height:1.4;overflow-wrap:break-word;word-break:break-word}.lpv__moves>comment+variation,.lpv__moves>comment+comment{border-top:none}.lpv__moves>variation{flex:1 1 100%;display:block;overflow:hidden;font-size:.8em;background:var(--c-lpv-bg-variation, hsl(37, 5%, 15%));border:1px solid var(--c-lpv-side-border, hsl(37, 5%, 13%));border-width:1px 0;padding:0 .6em}.lpv__moves>variation+variation{border-top:none}.lpv__moves>variation move{display:inline-block;padding:.1em .2em;min-width:2.5ch;text-align:center}.lpv__moves>variation move+index{margin-left:.2em}.lpv__moves>variation index{margin:0;padding:.1em 0}.lpv__moves>variation index+move{margin-left:.1em}.lpv__moves>variation comment{align-self:center;margin:0 .3em}.lpv__moves>variation paren{color:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}.lpv__moves>variation paren.open{margin:0 .1em 0 .2em}.lpv__moves>variation paren.close{margin:0 .2em 0 .1em}.lpv__player{font-size:.8em;background:var(--c-lpv-bg-player, hsl(37, 5%, 18%));display:flex;flex-flow:row nowrap;padding:0 1em}.lpv__player--bottom{border-bottom:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv--controls-false .lpv__player--bottom{border-bottom:none}.lpv__player__person{flex:1 1 auto;display:flex;flex-flow:row nowrap;align-items:center;gap:1ch;color:var(--c-lpv-font, #aaa);text-decoration:none}.lpv__player__title{font-weight:700}.lpv__player__clock{display:flex;flex-flow:row nowrap;align-items:center;font-family:monospace;font-size:1.4em;font-weight:700}.lpv__player__clock.active{color:var(--c-lpv-accent, hsl(88, 62%, 37%))}.lpv__pane{z-index:2;border-bottom:2px solid var(--c-lpv-accent, hsl(88, 62%, 37%));background:var(--c-lpv-bg-pane, rgb(55.70322, 62.397225, 42.4422));display:flex;flex-flow:column;justify-content:center}.lpv__pane .lpv__fbt{text-align:left;padding:.8em 2.5em;transition:none}.lpv__pane .lpv__fbt:before{color:var(--c-lpv-accent, hsl(88, 62%, 37%));font-size:2em}.lpv__pane .lpv__fbt:hover:before{color:var(--c-lpv-accent-over, white)}.lpv__pgn__text{flex:1 1 auto;background:var(--c-lpv-pgn-text, rgb(50.447466, 51.2240175, 43.25616));color:var(--c-lpv-font, #aaa);padding:.8em 1.3em}.lpv__controls{display:flex;flex-flow:row nowrap;align-items:stretch;-webkit-user-select:none;user-select:none;background:var(--c-lpv-bg-controls, hsl(37, 5%, 18%))}.lpv__controls .lpv__fbt{flex:1 1 auto;font-size:1.4em;padding:.4em .7em;border-left:1px solid var(--c-lpv-border, hsl(0, 0%, 25%))}.lpv__controls .lpv__fbt:first-child{border:none}.lpv__controls__menu.lpv__fbt{flex:0 1 auto;width:4em;padding:.45em 1em .35em;font-size:1.1em}.lpv__controls__goto{padding:.4rem .7rem}.lpv *::-webkit-scrollbar,.lpv *::-webkit-scrollbar-corner{width:.5rem;background:var(--c-lpv-bg, hsl(37, 5%, 18%))}.lpv *::-webkit-scrollbar-thumb{background:var(--c-lpv-font-bg, rgb(72.556, 71.1484, 68.884))}.lpv *::-webkit-scrollbar-thumb:hover,.lpv *::-webkit-scrollbar-thumb:active{background:var(--c-lpv-font-shy, rgb(109.0975, 108.21775, 106.8025))}@font-face{font-family:lpv-fontello;src:url(data:application/octet-stream;base64,d09GRgABAAAAAA1QAA8AAAAAF6gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABWAAAADsAAABUIIslek9TLzIAAAGUAAAARAAAAGA+I1HhY21hcAAAAdgAAABnAAABsOPJ9stjdnQgAAACQAAAAAsAAAAOAAAAAGZwZ20AAAJMAAAG7QAADgxiLvl6Z2FzcAAACTwAAAAIAAAACAAAABBnbHlmAAAJRAAAAS4AAAGiqJyODGhlYWQAAAp0AAAALwAAADYhJY5FaGhlYQAACqQAAAAdAAAAJAc9A1hobXR4AAAKxAAAABcAAAAYDTgAAGxvY2EAAArcAAAADgAAAA4BTwC6bWF4cAAACuwAAAAgAAAAIADgDmhuYW1lAAALDAAAAXQAAALNzZ0ZGnBvc3QAAAyAAAAAUwAAAG+eRru9cHJlcAAADNQAAAB6AAAAnH62O7Z4nGNgZGBg4GIwYLBjYHJx8wlh4MtJLMljkGJgYYAAkDwymzEnMz2RgQPGA8qxgGkOIGaDiAIAJjsFSAB4nGNgYTJhnMDAysDAVMW0h4GBoQdCMz5gMGRkAooysDIzYAUBaa4pDAdeMHx0Yg76n8UQxbyGYRpQmBFFERMAYwYMinic7ZGxEYAgEAT3BQwcSjGyBGJrMLL4T61A74EyvJnl5o+B4B4oQBK7yGA3RuhSaj1PbD3PHJpXubF4etr7gjNcMt3V7ove5PjZVn7Vfp5zKtHZIPr1iTrDJ7EPn8ROnjagfDLqFF4AeJxjYEAGAAAOAAEAeJytV2tbG8cVntUNjAEDQtjNuu4oY1GXHckkcRxiKw7ZZVEcJanAuN11brtIuE2TXpLe6DW9X5Q/c1a0T51v+Wl5z8xKAQfcp89TPui8M/POnOucWUhoSeJ+FMZSdh+J+Z0uVe49iOiGS9fi5KEc3o+o0Eg/mxbTot9X+269TiImEaitkXBEkPhNcjTJ5GGTClrVVb1JRS0HR8XlmvADqgYySfyssBz4WaMYUCHYO5Q0qwCCdECl3uGoUCjgGKofXK7z7Gi+5viXJaDyR1WnijVFohcdxKMVp2AUljQVPaoFEeujlSDICa4cSPq8R6XVB6NrzlwQ9kOqhFGdio14960IZHcYSer1MLUJNm0w2ohjmVk2LLqGqXwkaZ3X15n5eS+SiMYwlTTTixLMSF6bYXST0c3ETeI4dhEtmg36JHYjEl0m1zF2u3SF0ZVu+mhB9JnxqCz243iQxuR4cZx7EMsB/FF+3KSylrCg1Ejh01TQi2hK+TStfGQAW5ImVUy4EQk5yKb2fcmL7K5rzedfEknYp/JaHYuBHMohdGXr5QYitBMlPTfdjSMV12NJm/cirLkcl9yUJk1pOhd4I1GwaZ7GUPkK5aL8lAr7D8npwxCaWmvSOS3Z2nm4VRL7kk+gzSRmSrJlrJ3Ro3PzIgj9tfqkcM7rk4U0a09xPJgQwPVEhkOVclJNsIXLCSHpwsixlUitSresirkzttNV7BLul64d3zSvjUNHc7OiGEKLq+rxGor4gs4KhZAG6VaTFjSoUtKF4DU+AAAZogUe7WK0YPK1iIMWTFAkYtCHZloMEjlMJC0ibE1a0t29KCsNtuKrNHegDptU1d2dqHvPTrp1zFfN/LLOxFJwP8qWlgJyUp8WPb5yKC0/u8A/C/ghZwW5KDZ6Ucbhg7/+EBmG2oW1usK2MXbtOm/BTeaZGJ50YH8HsyeTdUYKMyGqCvFCQd0ZOY5jslXTIhOFcC+iJeXLkOZRfnOIcOLL5D+XLjliUVSF7/scgWWsOWm2PO3Rp577NMK1Ah9rXpMu6sxheQnxZvk1nRVZPqWzEktXZ2WWl3VWYfl1nU2xvKKzaZbf0Nk5lp5W4/hTJUGklWyR8w7flibpY4srk8WP7GLz2OLqZPFjuyi1oAvemX7CqX9bV9nP4/7V4Z+EXU/DP5YK/rG8Cv9YNuAfy1X4x/Kb8I/lNfjH8lvwj+Ua/GPZ0rJtCva6htpLiUTTc5LApBSXsMU1u67pukfXcR+fwVXoyDOyqdINxY39iQyXvX92nOJsvhJyxdEza1nZqYURmiJ7+dyx8JzFuaHl88by53Ga5YRf1Ylre6otPC9W/iX4b+uO2shuODX29SbiAQdOtx+XJd1o0gu6dbHdpI3/RkVh90F/ESkSKw3Zkh1uCQjt3eGwozroIREePnRdvEgbjlNbRoRvoXet0EXQSminDUPLZoVP5wPvYNhSUraHOPP2SZps2fOoovwxW1LCPWVzJzoqybJ0j0qr5adinzvtDJq2MjvUdkKV4PHrmnC3s69SKUgGisp4VLFcClIXOOFO9/ieFKah/6tt5FhBwza/WDOB0YLzTlGibE+toIkgGWUUXPkrp+JENqLBRhTxm3fSL3WhENrjWEjMllfzWKg2wvTSZIlmzPq26rBSzuKdSQjZGRtpEntRS7bxoLP1+aRku/JUUKWB0d3j3y42iadVe54txSX/8jFLgnG6Ev7AedzlcYo30T9aHMVtuhhEPRdvqmzHrWzdWca9feXE6q7bO7Hqn7r3STsCTbe8Jync0nTbG8I2rjE4dSYVCW3ROnaExmWuz1Ub+RQfaL51nQtU4fq0cPPs+ds6m8FbM97yP5Z05/9VxewT97G2Qqs6Vi/1OLezgwZ8yxtH5VWMbnt1lccl92YSgrsIQc1ee3yN4IZXW3QTt/y1M+a7OM5ZrtILwK9rehHiDY5iiHDLbTy842i9qbmg6Q3Ab+uRENsAPQCHwY4eOWZmF8DM3GNOB2CPOQzuM4fBd5jD4Lv6CL0wAIqAHINifeTYuQdAdu4t5jmM3maeQe8wz6B3mWfQe6wzBEhYJ4OUdTLYZ50M+sx5FWDAHAYHzGHwkDkMvmfs2gL6vrGL0fvGLkY/MHYx+sDYxehDYxejHxq7GP3I2MXox4hxe5LAn5gRbQJ+ZOErgB9z0M3Ix+ineGtzzs8sZM7PDcfJOb/A5pcmp/7SjMyOQwt5x68sZPqvcU5O+I2FTPithUz4Hbh3Juf93owM/RMLmf4HC5n+R+zMCX+ykAl/tpAJfwH35cl5fzUjQ/+bhUz/u4VM/wd25oR/WsiEoYVM+FSPzpsvW6q4o1KhGOKfJrTB2Pdo+oCKV3uH48e6+QUl2gFBAAAAAAEAAf//AA94nHWPsUrDUBSGz39vemOxIFdNoqI1WLBIBCExhuDSBxAUFzvZbgXb2S2j4AOkS6e6dRQEX6FPoD6Cm7tDr57EQrt4z3DPf87//XAIRD+feBVvZNNOy7MFyALhggj0QMC93hBqK4g1dKQbGmmWKfFspmjP1tEuXAveb+2piiUXvAAHEPHK1lJ5gcMZ4MqQmum2+DITpLMrFpMy5048yms2qxclEAY6gVeFjRzd3Dyhk5sxboflb8Y8XGJUwUhmnCqYArqlIzc1gW6JD02NJPu/6UOu0hrt0wkdt46oQpasWD3eCUjRKzJxw3dTp7jgMi5epNRukDibym4cHDbj0zMvCl3JujnXyVwH+NPnCN33utf36vDdvuvjn340cLlzBsUUammJFRalxf8FEfdQoAAAeJxjYGRgYADiu6a5L+L5bb4y8DO/AIow3OdVDULQ/7OYXzCD+BwMTCBRADnrCnwAeJxjYGRgYA76nwUkXzAw/P8PJIEiKIANAIfPBZsAAAB4nGN+wcDAuBWCmTogmOEaAwMAOaAEQgAAAAAAACAARABeAHYA0QAAAAEAAAAGADAAAwAAAAAAAgAMACoAjQAAAD0ODAAAAAB4nHWQ307CMBSHf+WfCokaTby1VwZiHLDEGxISEgzc6A0x3JoxxjYyVtIVEl7Dd/BhfAmfxR9bMUbilq7f+Xp62h0AV/iCQPE8chQscMqo4BJO0Ldcpn+yXCE/W66igVfLNfo3y3XcI7TcwDXeWUFUzhgt8WFZ4FJcWC7hXNxaLtM/WK6Q+5aruBEvlmv0vuU6piKz3MCd+Byq9U7HYWRkc9iSbsd15WwnFVWceon0NiZSOpMDuVCpCZJEOb5aHXgShJvE04fwME8DncUqlV2nc1DjIA20Z4L5vnq2DV1jFnKh1UqObIZca7UMfONExqx77fbv8zCEwho7aMRsVQQDiSZti7OLDodLmjFDMrPIipHCQ0LjYcMdUb6SMR5wLBiltAEzErIDn9/VkZ+QQu5PWEUfrf6Np6T9GXHuJbqs2znKGpPSPNPL7fzn7hm2PM2lNdy1v6XObyUx+lNDsh/7tSWNT+/kXTG0PbT5/vN/39pdhEl4nG3HQQ6AIAwAwRYVI5Gn8CjEokQipBD9vlGuzmkXBDQK/kkU2GGPA0ocYS6VsvGJb8ur/max7nhviuSrSZlOxWHbW2qKMeQSirmIK8ADCpgXTQB4nGPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNjIwaEFoLhR6JwMDAzcSaycDMwODy0YVxo7AiA0OHREgforLRg0QfwcHA0SAwSVSeqM6SGgXRwMDI4tDR3IITAIENjLwae1g/N+6gaV3IxODy2bWFDYGFxcAlBwqBwAA) format("woff"),url(data:application/octet-stream;base64,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) format("truetype")}.lpv__icon:before{font-family:lpv-fontello;font-size:1.1em;width:1em;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lpv__icon-step-forward:before{content:""}.lpv__icon-step-backward:before{content:""}.lpv__icon-left-open:before{content:""}.lpv__icon-right-open:before{content:""}.lpv__icon-ellipsis-vert:before{content:""}.lpv{border-radius:5px;box-shadow:0 2px 2px #00000024,0 3px 1px -2px #0003,0 1px 5px #0000001f;overflow:hidden;background:var(--c-lpv-bg, hsl(37, 5%, 18%));color:var(--c-lpv-font, #aaa);box-sizing:border-box}.lpv *,.lpv *:before,.lpv *:after{box-sizing:inherit}.lpv__board{-webkit-user-select:none;user-select:none}.lpv__board cg-board{box-shadow:none}.lpv:focus{outline:auto 2px var(--c-lpv-accent, hsl(88, 62%, 37%))}cg-board:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-conic-gradient(var(--board-color-light, transparent) 0% 25%,var(--board-color-dark, transparent) 0% 50%) 50% / 25% 25%}
@@ -1572,7 +1572,7 @@ function Cs(e, t) {
1572
1572
  }
1573
1573
  function xs(e, t) {
1574
1574
  var o;
1575
- let r = e.get("source") || e.get("site"), i = (o = e.get("timecontrol")) == null ? void 0 : o.split("+").map((a) => parseInt(a)), s = i && i[0] ? { initial: i[0], increment: i[1] || 0 } : void 0, n = e.get("orientation");
1575
+ let r = e.get("chapterurl") || e.get("gameurl") || e.get("source") || e.get("site"), i = (o = e.get("timecontrol")) == null ? void 0 : o.split("+").map((a) => parseInt(a)), s = i && i[0] ? { initial: i[0], increment: i[1] || 0 } : void 0, n = e.get("orientation");
1576
1576
  return { externalLink: r && r.match(/^https?:\/\//) ? r : void 0, isLichess: !!(t && (r != null && r.startsWith(t))), timeControl: s, orientation: n === "white" || n === "black" ? n : void 0, result: e.get("result") };
1577
1577
  }
1578
1578
  var Ss = class {
@@ -1,4 +1,4 @@
1
1
  (function(G,$){typeof exports=="object"&&typeof module<"u"?$(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],$):(G=typeof globalThis<"u"?globalThis:G||self,$(G["Vue PGN Viewer"]={},G.Vue))})(this,function(G,$){"use strict";var zo=Object.defineProperty;var Ko=(G,$,te)=>$ in G?zo(G,$,{enumerable:!0,configurable:!0,writable:!0,value:te}):G[$]=te;var Ft=(G,$,te)=>Ko(G,typeof $!="symbol"?$+"":$,te);var ee;var te=["a","b","c","d","e","f","g","h"],Ht=["1","2","3","4","5","6","7","8"],Y=["white","black"],Z=["pawn","knight","bishop","rook","queen","king"],fi=["a","h"],ke=e=>"role"in e,b=e=>e!==void 0,A=e=>e==="white"?"black":"white",ue=e=>e>>3,W=e=>e&7,nt=(e,t)=>0<=e&&e<8&&0<=t&&t<8?e+8*t:void 0,de=e=>{switch(e){case"pawn":return"p";case"knight":return"n";case"bishop":return"b";case"rook":return"r";case"queen":return"q";case"king":return"k"}};function Ke(e){switch(e.toLowerCase()){case"p":return"pawn";case"n":return"knight";case"b":return"bishop";case"r":return"rook";case"q":return"queen";case"k":return"king";default:return}}function Oe(e){if(e.length===2)return nt(e.charCodeAt(0)-97,e.charCodeAt(1)-49)}var ne=e=>te[W(e)]+Ht[ue(e)],mi=e=>ke(e)?`${de(e.role).toUpperCase()}@${ne(e.to)}`:ne(e.from)+ne(e.to)+(e.promotion?de(e.promotion):""),ot=(e,t)=>e==="white"?t==="a"?2:6:t==="a"?58:62,at=(e,t)=>e==="white"?t==="a"?3:5:t==="a"?59:61,Gt=e=>(e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),Math.imul(e+(e>>>4)&252645135,16843009)>>24),lt=e=>(e=e>>>8&16711935|(e&16711935)<<8,e>>>16&65535|(e&65535)<<16),jt=e=>(e=e>>>1&1431655765|(e&1431655765)<<1,e=e>>>2&858993459|(e&858993459)<<2,e=e>>>4&252645135|(e&252645135)<<4,lt(e)),h=class q{constructor(t,r){this.lo=t|0,this.hi=r|0}static fromSquare(t){return t>=32?new q(0,1<<t-32):new q(1<<t,0)}static fromRank(t){return new q(255,0).shl64(8*t)}static fromFile(t){return new q(16843009<<t,16843009<<t)}static empty(){return new q(0,0)}static full(){return new q(4294967295,4294967295)}static corners(){return new q(129,2164260864)}static center(){return new q(402653184,24)}static backranks(){return new q(255,4278190080)}static backrank(t){return t==="white"?new q(255,0):new q(0,4278190080)}static lightSquares(){return new q(1437226410,1437226410)}static darkSquares(){return new q(2857740885,2857740885)}complement(){return new q(~this.lo,~this.hi)}xor(t){return new q(this.lo^t.lo,this.hi^t.hi)}union(t){return new q(this.lo|t.lo,this.hi|t.hi)}intersect(t){return new q(this.lo&t.lo,this.hi&t.hi)}diff(t){return new q(this.lo&~t.lo,this.hi&~t.hi)}intersects(t){return this.intersect(t).nonEmpty()}isDisjoint(t){return this.intersect(t).isEmpty()}supersetOf(t){return t.diff(this).isEmpty()}subsetOf(t){return this.diff(t).isEmpty()}shr64(t){return t>=64?q.empty():t>=32?new q(this.hi>>>t-32,0):t>0?new q(this.lo>>>t^this.hi<<32-t,this.hi>>>t):this}shl64(t){return t>=64?q.empty():t>=32?new q(0,this.lo<<t-32):t>0?new q(this.lo<<t,this.hi<<t^this.lo>>>32-t):this}bswap64(){return new q(lt(this.hi),lt(this.lo))}rbit64(){return new q(jt(this.hi),jt(this.lo))}minus64(t){let r=this.lo-t.lo,i=(r&t.lo&1)+(t.lo>>>1)+(r>>>1)>>>31;return new q(r,this.hi-(t.hi+i))}equals(t){return this.lo===t.lo&&this.hi===t.hi}size(){return Gt(this.lo)+Gt(this.hi)}isEmpty(){return this.lo===0&&this.hi===0}nonEmpty(){return this.lo!==0||this.hi!==0}has(t){return(t>=32?this.hi&1<<t-32:this.lo&1<<t)!==0}set(t,r){return r?this.with(t):this.without(t)}with(t){return t>=32?new q(this.lo,this.hi|1<<t-32):new q(this.lo|1<<t,this.hi)}without(t){return t>=32?new q(this.lo,this.hi&~(1<<t-32)):new q(this.lo&~(1<<t),this.hi)}toggle(t){return t>=32?new q(this.lo,this.hi^1<<t-32):new q(this.lo^1<<t,this.hi)}last(){if(this.hi!==0)return 63-Math.clz32(this.hi);if(this.lo!==0)return 31-Math.clz32(this.lo)}first(){if(this.lo!==0)return 31-Math.clz32(this.lo&-this.lo);if(this.hi!==0)return 63-Math.clz32(this.hi&-this.hi)}withoutFirst(){return this.lo!==0?new q(this.lo&this.lo-1,this.hi):new q(0,this.hi&this.hi-1)}moreThanOne(){return this.hi!==0&&this.lo!==0||(this.lo&this.lo-1)!==0||(this.hi&this.hi-1)!==0}singleSquare(){return this.moreThanOne()?void 0:this.last()}*[Symbol.iterator](){let t=this.lo,r=this.hi;for(;t!==0;){let i=31-Math.clz32(t&-t);t^=1<<i,yield i}for(;r!==0;){let i=31-Math.clz32(r&-r);r^=1<<i,yield 32+i}}*reversed(){let t=this.lo,r=this.hi;for(;r!==0;){let i=31-Math.clz32(r);r^=1<<i,yield 32+i}for(;t!==0;){let i=31-Math.clz32(t);t^=1<<i,yield i}}},De=(e,t)=>{let r=h.empty();for(let i of t){let s=e+i;0<=s&&s<64&&Math.abs(W(e)-W(s))<=2&&(r=r.with(s))}return r},oe=e=>{let t=[];for(let r=0;r<64;r++)t[r]=e(r);return t},gi=oe(e=>De(e,[-9,-8,-7,-1,1,7,8,9])),vi=oe(e=>De(e,[-17,-15,-10,-6,6,10,15,17])),bi={white:oe(e=>De(e,[7,9])),black:oe(e=>De(e,[-7,-9]))},pe=e=>gi[e],$e=e=>vi[e],ye=(e,t)=>bi[e][t],ht=oe(e=>h.fromFile(W(e)).without(e)),ct=oe(e=>h.fromRank(ue(e)).without(e)),ut=oe(e=>{let t=new h(134480385,2151686160),r=8*(ue(e)-W(e));return(r>=0?t.shl64(r):t.shr64(-r)).without(e)}),dt=oe(e=>{let t=new h(270549120,16909320),r=8*(ue(e)+W(e)-7);return(r>=0?t.shl64(r):t.shr64(-r)).without(e)}),pt=(e,t,r)=>{let i=r.intersect(t),s=i.bswap64();return i=i.minus64(e),s=s.minus64(e.bswap64()),i.xor(s.bswap64()).intersect(t)},wi=(e,t)=>pt(h.fromSquare(e),ht[e],t),ki=(e,t)=>{let r=ct[e],i=t.intersect(r),s=i.rbit64();return i=i.minus64(h.fromSquare(e)),s=s.minus64(h.fromSquare(63-e)),i.xor(s.rbit64()).intersect(r)},Ce=(e,t)=>{let r=h.fromSquare(e);return pt(r,ut[e],t).xor(pt(r,dt[e],t))},Se=(e,t)=>wi(e,t).xor(ki(e,t)),ft=(e,t)=>Ce(e,t).xor(Se(e,t)),Qt=(e,t,r)=>{switch(e.role){case"pawn":return ye(e.color,t);case"knight":return $e(t);case"bishop":return Ce(t,r);case"rook":return Se(t,r);case"queen":return ft(t,r);case"king":return pe(t)}},Yt=(e,t)=>{let r=h.fromSquare(t);return ct[e].intersects(r)?ct[e].with(e):dt[e].intersects(r)?dt[e].with(e):ut[e].intersects(r)?ut[e].with(e):ht[e].intersects(r)?ht[e].with(e):h.empty()},xe=(e,t)=>Yt(e,t).intersect(h.full().shl64(e).xor(h.full().shl64(t))).withoutFirst(),Ie=class st{constructor(){}static default(){let t=new st;return t.reset(),t}reset(){this.occupied=new h(65535,4294901760),this.promoted=h.empty(),this.white=new h(65535,0),this.black=new h(0,4294901760),this.pawn=new h(65280,16711680),this.knight=new h(66,1107296256),this.bishop=new h(36,603979776),this.rook=new h(129,2164260864),this.queen=new h(8,134217728),this.king=new h(16,268435456)}static empty(){let t=new st;return t.clear(),t}clear(){this.occupied=h.empty(),this.promoted=h.empty();for(let t of Y)this[t]=h.empty();for(let t of Z)this[t]=h.empty()}clone(){let t=new st;t.occupied=this.occupied,t.promoted=this.promoted;for(let r of Y)t[r]=this[r];for(let r of Z)t[r]=this[r];return t}getColor(t){if(this.white.has(t))return"white";if(this.black.has(t))return"black"}getRole(t){for(let r of Z)if(this[r].has(t))return r}get(t){let r=this.getColor(t);if(!r)return;let i=this.getRole(t),s=this.promoted.has(t);return{color:r,role:i,promoted:s}}take(t){let r=this.get(t);return r&&(this.occupied=this.occupied.without(t),this[r.color]=this[r.color].without(t),this[r.role]=this[r.role].without(t),r.promoted&&(this.promoted=this.promoted.without(t))),r}set(t,r){let i=this.take(t);return this.occupied=this.occupied.with(t),this[r.color]=this[r.color].with(t),this[r.role]=this[r.role].with(t),r.promoted&&(this.promoted=this.promoted.with(t)),i}has(t){return this.occupied.has(t)}*[Symbol.iterator](){for(let t of this.occupied)yield[t,this.get(t)]}pieces(t,r){return this[t].intersect(this[r])}rooksAndQueens(){return this.rook.union(this.queen)}bishopsAndQueens(){return this.bishop.union(this.queen)}kingOf(t){return this.pieces(t,"king").singleSquare()}},Ee=class qe{constructor(){}static empty(){let t=new qe;for(let r of Z)t[r]=0;return t}static fromBoard(t,r){let i=new qe;for(let s of Z)i[s]=t.pieces(r,s).size();return i}clone(){let t=new qe;for(let r of Z)t[r]=this[r];return t}equals(t){return Z.every(r=>this[r]===t[r])}add(t){let r=new qe;for(let i of Z)r[i]=this[i]+t[i];return r}subtract(t){let r=new qe;for(let i of Z)r[i]=this[i]-t[i];return r}nonEmpty(){return Z.some(t=>this[t]>0)}isEmpty(){return!this.nonEmpty()}hasPawns(){return this.pawn>0}hasNonPawns(){return this.knight>0||this.bishop>0||this.rook>0||this.queen>0||this.king>0}size(){return this.pawn+this.knight+this.bishop+this.rook+this.queen+this.king}},mt=class Ae{constructor(t,r){this.white=t,this.black=r}static empty(){return new Ae(Ee.empty(),Ee.empty())}static fromBoard(t){return new Ae(Ee.fromBoard(t,"white"),Ee.fromBoard(t,"black"))}clone(){return new Ae(this.white.clone(),this.black.clone())}equals(t){return this.white.equals(t.white)&&this.black.equals(t.black)}add(t){return new Ae(this.white.add(t.white),this.black.add(t.black))}subtract(t){return new Ae(this.white.subtract(t.white),this.black.subtract(t.black))}count(t){return this.white[t]+this.black[t]}size(){return this.white.size()+this.black.size()}isEmpty(){return this.white.isEmpty()&&this.black.isEmpty()}nonEmpty(){return!this.isEmpty()}hasPawns(){return this.white.hasPawns()||this.black.hasPawns()}hasNonPawns(){return this.white.hasNonPawns()||this.black.hasNonPawns()}},We=class Vt{constructor(t,r){this.white=t,this.black=r}static default(){return new Vt(3,3)}clone(){return new Vt(this.white,this.black)}equals(t){return this.white===t.white&&this.black===t.black}},Zt=class{unwrap(e,t){let r=this._chain(i=>g.ok(e?e(i):i),i=>t?g.ok(t(i)):g.err(i));if(r.isErr)throw r.error;return r.value}map(e,t){return this._chain(r=>g.ok(e(r)),r=>g.err(t?t(r):r))}chain(e,t){return this._chain(e,t||(r=>g.err(r)))}},yi=class extends Zt{constructor(e){super(),this.value=void 0,this.isOk=!0,this.isErr=!1,this.value=e}_chain(e,t){return e(this.value)}},Ci=class extends Zt{constructor(e){super(),this.error=void 0,this.isOk=!1,this.isErr=!0,this.error=e}_chain(e,t){return t(this.error)}},g;(function(e){e.ok=function(t){return new yi(t)},e.err=function(t){return new Ci(t||new Error)},e.all=function(t){if(Array.isArray(t)){let s=[];for(let n=0;n<t.length;n++){let o=t[n];if(o.isErr)return o;s.push(o.value)}return e.ok(s)}let r={},i=Object.keys(t);for(let s=0;s<i.length;s++){let n=t[i[s]];if(n.isErr)return n;r[i[s]]=n.value}return e.ok(r)}})(g||(g={}));var T;(function(e){e.Empty="ERR_EMPTY",e.OppositeCheck="ERR_OPPOSITE_CHECK",e.PawnsOnBackrank="ERR_PAWNS_ON_BACKRANK",e.Kings="ERR_KINGS",e.Variant="ERR_VARIANT"})(T||(T={}));var L=class extends Error{},Si=(e,t,r,i)=>r[t].intersect(Se(e,i).intersect(r.rooksAndQueens()).union(Ce(e,i).intersect(r.bishopsAndQueens())).union($e(e).intersect(r.knight)).union(pe(e).intersect(r.king)).union(ye(A(t),e).intersect(r.pawn))),fe=class ze{constructor(){}static default(){let t=new ze;return t.castlingRights=h.corners(),t.rook={white:{a:0,h:7},black:{a:56,h:63}},t.path={white:{a:new h(14,0),h:new h(96,0)},black:{a:new h(0,234881024),h:new h(0,1610612736)}},t}static empty(){let t=new ze;return t.castlingRights=h.empty(),t.rook={white:{a:void 0,h:void 0},black:{a:void 0,h:void 0}},t.path={white:{a:h.empty(),h:h.empty()},black:{a:h.empty(),h:h.empty()}},t}clone(){let t=new ze;return t.castlingRights=this.castlingRights,t.rook={white:{a:this.rook.white.a,h:this.rook.white.h},black:{a:this.rook.black.a,h:this.rook.black.h}},t.path={white:{a:this.path.white.a,h:this.path.white.h},black:{a:this.path.black.a,h:this.path.black.h}},t}add(t,r,i,s){let n=ot(t,r),o=at(t,r);this.castlingRights=this.castlingRights.with(s),this.rook[t][r]=s,this.path[t][r]=xe(s,o).with(o).union(xe(i,n).with(n)).without(i).without(s)}static fromSetup(t){let r=ze.empty(),i=t.castlingRights.intersect(t.board.rook);for(let s of Y){let n=h.backrank(s),o=t.board.kingOf(s);if(!b(o)||!n.has(o))continue;let a=i.intersect(t.board[s]).intersect(n),l=a.first();b(l)&&l<o&&r.add(s,"a",o,l);let u=a.last();b(u)&&o<u&&r.add(s,"h",o,u)}return r}discardRook(t){if(this.castlingRights.has(t)){this.castlingRights=this.castlingRights.without(t);for(let r of Y)for(let i of fi)this.rook[r][i]===t&&(this.rook[r][i]=void 0)}}discardColor(t){this.castlingRights=this.castlingRights.diff(h.backrank(t)),this.rook[t].a=void 0,this.rook[t].h=void 0}},ae=class{constructor(e){this.rules=e}reset(){this.board=Ie.default(),this.pockets=void 0,this.turn="white",this.castles=fe.default(),this.epSquare=void 0,this.remainingChecks=void 0,this.halfmoves=0,this.fullmoves=1}setupUnchecked(e){this.board=e.board.clone(),this.board.promoted=h.empty(),this.pockets=void 0,this.turn=e.turn,this.castles=fe.fromSetup(e),this.epSquare=xi(this,e.epSquare),this.remainingChecks=void 0,this.halfmoves=e.halfmoves,this.fullmoves=e.fullmoves}kingAttackers(e,t,r){return Si(e,t,this.board,r)}playCaptureAt(e,t){this.halfmoves=0,t.role==="rook"&&this.castles.discardRook(e),this.pockets&&this.pockets[A(t.color)][t.promoted?"pawn":t.role]++}ctx(){let e=this.isVariantEnd(),t=this.board.kingOf(this.turn);if(!b(t))return{king:t,blockers:h.empty(),checkers:h.empty(),variantEnd:e,mustCapture:!1};let r=Se(t,h.empty()).intersect(this.board.rooksAndQueens()).union(Ce(t,h.empty()).intersect(this.board.bishopsAndQueens())).intersect(this.board[A(this.turn)]),i=h.empty();for(let n of r){let o=xe(t,n).intersect(this.board.occupied);o.moreThanOne()||(i=i.union(o))}let s=this.kingAttackers(t,A(this.turn),this.board.occupied);return{king:t,blockers:i,checkers:s,variantEnd:e,mustCapture:!1}}clone(){var e,t;let r=new this.constructor;return r.board=this.board.clone(),r.pockets=(e=this.pockets)===null||e===void 0?void 0:e.clone(),r.turn=this.turn,r.castles=this.castles.clone(),r.epSquare=this.epSquare,r.remainingChecks=(t=this.remainingChecks)===null||t===void 0?void 0:t.clone(),r.halfmoves=this.halfmoves,r.fullmoves=this.fullmoves,r}validate(){if(this.board.occupied.isEmpty())return g.err(new L(T.Empty));if(this.board.king.size()!==2)return g.err(new L(T.Kings));if(!b(this.board.kingOf(this.turn)))return g.err(new L(T.Kings));let e=this.board.kingOf(A(this.turn));return b(e)?this.kingAttackers(e,this.turn,this.board.occupied).nonEmpty()?g.err(new L(T.OppositeCheck)):h.backranks().intersects(this.board.pawn)?g.err(new L(T.PawnsOnBackrank)):g.ok(void 0):g.err(new L(T.Kings))}dropDests(e){return h.empty()}dests(e,t){if(t=t||this.ctx(),t.variantEnd)return h.empty();let r=this.board.get(e);if(!r||r.color!==this.turn)return h.empty();let i,s;if(r.role==="pawn"){i=ye(this.turn,e).intersect(this.board[A(this.turn)]);let n=this.turn==="white"?8:-8,o=e+n;if(0<=o&&o<64&&!this.board.occupied.has(o)){i=i.with(o);let a=this.turn==="white"?e<16:e>=48,l=o+n;a&&!this.board.occupied.has(l)&&(i=i.with(l))}b(this.epSquare)&&Mi(this,e,t)&&(s=h.fromSquare(this.epSquare))}else r.role==="bishop"?i=Ce(e,this.board.occupied):r.role==="knight"?i=$e(e):r.role==="rook"?i=Se(e,this.board.occupied):r.role==="queen"?i=ft(e,this.board.occupied):i=pe(e);if(i=i.diff(this.board[this.turn]),b(t.king)){if(r.role==="king"){let n=this.board.occupied.without(e);for(let o of i)this.kingAttackers(o,A(this.turn),n).nonEmpty()&&(i=i.without(o));return i.union(Ue(this,"a",t)).union(Ue(this,"h",t))}if(t.checkers.nonEmpty()){let n=t.checkers.singleSquare();if(!b(n))return h.empty();i=i.intersect(xe(n,t.king).with(n))}t.blockers.has(e)&&(i=i.intersect(Yt(e,t.king)))}return s&&(i=i.union(s)),i}isVariantEnd(){return!1}variantOutcome(e){}hasInsufficientMaterial(e){return this.board[e].intersect(this.board.pawn.union(this.board.rooksAndQueens())).nonEmpty()?!1:this.board[e].intersects(this.board.knight)?this.board[e].size()<=2&&this.board[A(e)].diff(this.board.king).diff(this.board.queen).isEmpty():this.board[e].intersects(this.board.bishop)?(!this.board.bishop.intersects(h.darkSquares())||!this.board.bishop.intersects(h.lightSquares()))&&this.board.pawn.isEmpty()&&this.board.knight.isEmpty():!0}toSetup(){var e,t;return{board:this.board.clone(),pockets:(e=this.pockets)===null||e===void 0?void 0:e.clone(),turn:this.turn,castlingRights:this.castles.castlingRights,epSquare:Ei(this),remainingChecks:(t=this.remainingChecks)===null||t===void 0?void 0:t.clone(),halfmoves:Math.min(this.halfmoves,150),fullmoves:Math.min(Math.max(this.fullmoves,1),9999)}}isInsufficientMaterial(){return Y.every(e=>this.hasInsufficientMaterial(e))}hasDests(e){e=e||this.ctx();for(let t of this.board[this.turn])if(this.dests(t,e).nonEmpty())return!0;return this.dropDests(e).nonEmpty()}isLegal(e,t){if(ke(e))return!this.pockets||this.pockets[this.turn][e.role]<=0||e.role==="pawn"&&h.backranks().has(e.to)?!1:this.dropDests(t).has(e.to);{if(e.promotion==="pawn"||e.promotion==="king"&&this.rules!=="antichess"||!!e.promotion!==(this.board.pawn.has(e.from)&&h.backranks().has(e.to)))return!1;let r=this.dests(e.from,t);return r.has(e.to)||r.has(qi(this,e).to)}}isCheck(){let e=this.board.kingOf(this.turn);return b(e)&&this.kingAttackers(e,A(this.turn),this.board.occupied).nonEmpty()}isEnd(e){return(e?e.variantEnd:this.isVariantEnd())?!0:this.isInsufficientMaterial()||!this.hasDests(e)}isCheckmate(e){return e=e||this.ctx(),!e.variantEnd&&e.checkers.nonEmpty()&&!this.hasDests(e)}isStalemate(e){return e=e||this.ctx(),!e.variantEnd&&e.checkers.isEmpty()&&!this.hasDests(e)}outcome(e){return this.variantOutcome(e)||(e=e||this.ctx(),this.isCheckmate(e)?{winner:A(this.turn)}:this.isInsufficientMaterial()||this.isStalemate(e)?{winner:void 0}:void 0)}allDests(e){e=e||this.ctx();let t=new Map;if(e.variantEnd)return t;for(let r of this.board[this.turn])t.set(r,this.dests(r,e));return t}play(e){let t=this.turn,r=this.epSquare,i=Jt(this,e);if(this.epSquare=void 0,this.halfmoves+=1,t==="black"&&(this.fullmoves+=1),this.turn=A(t),ke(e))this.board.set(e.to,{role:e.role,color:t}),this.pockets&&this.pockets[t][e.role]--,e.role==="pawn"&&(this.halfmoves=0);else{let s=this.board.take(e.from);if(!s)return;let n;if(s.role==="pawn"){this.halfmoves=0,e.to===r&&(n=this.board.take(e.to+(t==="white"?-8:8)));let o=e.from-e.to;Math.abs(o)===16&&8<=e.from&&e.from<=55&&(this.epSquare=e.from+e.to>>1),e.promotion&&(s.role=e.promotion,s.promoted=!!this.pockets)}else if(s.role==="rook")this.castles.discardRook(e.from);else if(s.role==="king"){if(i){let o=this.castles.rook[t][i];if(b(o)){let a=this.board.take(o);this.board.set(ot(t,i),s),a&&this.board.set(at(t,i),a)}}this.castles.discardColor(t)}if(!i){let o=this.board.set(e.to,s)||n;o&&this.playCaptureAt(e.to,o)}}this.remainingChecks&&this.isCheck()&&(this.remainingChecks[t]=Math.max(this.remainingChecks[t]-1,0))}},Xt=class extends ae{constructor(){super("chess")}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}},xi=(e,t)=>{if(!b(t))return;let r=e.turn==="white"?5:2,i=e.turn==="white"?8:-8;if(ue(t)!==r||e.board.occupied.has(t+i))return;let s=t-i;if(!(!e.board.pawn.has(s)||!e.board[A(e.turn)].has(s)))return t},Ei=e=>{if(!b(e.epSquare))return;let t=e.ctx(),r=e.board.pieces(e.turn,"pawn").intersect(ye(A(e.turn),e.epSquare));for(let i of r)if(e.dests(i,t).has(e.epSquare))return e.epSquare},Mi=(e,t,r)=>{if(!b(e.epSquare)||!ye(e.turn,t).has(e.epSquare))return!1;if(!b(r.king))return!0;let i=e.turn==="white"?8:-8,s=e.epSquare-i;return e.kingAttackers(r.king,A(e.turn),e.board.occupied.toggle(t).toggle(s).with(e.epSquare)).without(s).isEmpty()},Ue=(e,t,r)=>{if(!b(r.king)||r.checkers.nonEmpty())return h.empty();let i=e.castles.rook[e.turn][t];if(!b(i)||e.castles.path[e.turn][t].intersects(e.board.occupied))return h.empty();let s=ot(e.turn,t),n=xe(r.king,s),o=e.board.occupied.without(r.king);for(let u of n)if(e.kingAttackers(u,A(e.turn),o).nonEmpty())return h.empty();let a=at(e.turn,t),l=e.board.occupied.toggle(r.king).toggle(i).toggle(a);return e.kingAttackers(s,A(e.turn),l).nonEmpty()?h.empty():h.fromSquare(i)},gt=(e,t,r)=>{if(r.variantEnd)return h.empty();let i=e.board.get(t);if(!i||i.color!==e.turn)return h.empty();let s=Qt(i,t,e.board.occupied);if(i.role==="pawn"){let n=e.board[A(e.turn)];b(e.epSquare)&&(n=n.with(e.epSquare)),s=s.intersect(n);let o=e.turn==="white"?8:-8,a=t+o;if(0<=a&&a<64&&!e.board.occupied.has(a)){s=s.with(a);let l=e.turn==="white"?t<16:t>=48,u=a+o;l&&!e.board.occupied.has(u)&&(s=s.with(u))}return s}else s=s.diff(e.board[e.turn]);return t===r.king?s.union(Ue(e,"a",r)).union(Ue(e,"h",r)):s},Jt=(e,t)=>{if(ke(t))return;let r=t.to-t.from;if(!(Math.abs(r)!==2&&!e.board[e.turn].has(t.to))&&e.board.king.has(t.from))return r>0?"h":"a"},qi=(e,t)=>{let r=Jt(e,t);if(!r)return t;let i=e.castles.rook[e.turn][r];return{from:t.from,to:b(i)?i:t.to}},Ai=e=>ke(e)?String.fromCharCode(35+e.to,99+8*5+["queen","rook","bishop","knight","pawn"].indexOf(e.role)):String.fromCharCode(35+e.from,e.promotion?99+8*["queen","rook","bishop","knight","king"].indexOf(e.promotion)+W(e.to):35+e.to),z;(function(e){e.Fen="ERR_FEN",e.Board="ERR_BOARD",e.Pockets="ERR_POCKETS",e.Turn="ERR_TURN",e.Castling="ERR_CASTLING",e.EpSquare="ERR_EP_SQUARE",e.RemainingChecks="ERR_REMAINING_CHECKS",e.Halfmoves="ERR_HALFMOVES",e.Fullmoves="ERR_FULLMOVES"})(z||(z={}));var I=class extends Error{},Oi=(e,t,r)=>{let i=e.indexOf(t);for(;r-- >0&&i!==-1;)i=e.indexOf(t,i+t.length);return i},Me=e=>/^\d{1,4}$/.test(e)?parseInt(e,10):void 0,er=e=>{let t=Ke(e);return t&&{role:t,color:e.toLowerCase()===e?"black":"white"}},vt=e=>{let t=Ie.empty(),r=7,i=0;for(let s=0;s<e.length;s++){let n=e[s];if(n==="/"&&i===8)i=0,r--;else{let o=parseInt(n,10);if(o>0)i+=o;else{if(i>=8||r<0)return g.err(new I(z.Board));let a=i+r*8,l=er(n);if(!l)return g.err(new I(z.Board));e[s+1]==="~"&&(l.promoted=!0,s++),t.set(a,l),i++}}}return r!==0||i!==8?g.err(new I(z.Board)):g.ok(t)},tr=e=>{if(e.length>64)return g.err(new I(z.Pockets));let t=mt.empty();for(let r of e){let i=er(r);if(!i)return g.err(new I(z.Pockets));t[i.color][i.role]++}return g.ok(t)},Pi=(e,t)=>{let r=h.empty();if(t==="-")return g.ok(r);for(let i of t){let s=i.toLowerCase(),n=i===s?"black":"white",o=n==="white"?0:7;if("a"<=s&&s<="h")r=r.with(nt(s.charCodeAt(0)-97,o));else if(s==="k"||s==="q"){let a=e[n].intersect(h.backrank(n)).intersect(e.rook.union(e.king)),l=s==="k"?a.last():a.first();r=r.with(b(l)&&e.rook.has(l)?l:nt(s==="k"?7:0,o))}else return g.err(new I(z.Castling))}return Y.some(i=>h.backrank(i).intersect(r).size()>2)?g.err(new I(z.Castling)):g.ok(r)},rr=e=>{let t=e.split("+");if(t.length===3&&t[0]===""){let r=Me(t[1]),i=Me(t[2]);return!b(r)||r>3||!b(i)||i>3?g.err(new I(z.RemainingChecks)):g.ok(new We(3-r,3-i))}else if(t.length===2){let r=Me(t[0]),i=Me(t[1]);return!b(r)||r>3||!b(i)||i>3?g.err(new I(z.RemainingChecks)):g.ok(new We(r,i))}else return g.err(new I(z.RemainingChecks))},_i=e=>{let t=e.split(/[\s_]+/),r=t.shift(),i,s=g.ok(void 0);if(r.endsWith("]")){let a=r.indexOf("[");if(a===-1)return g.err(new I(z.Fen));i=vt(r.slice(0,a)),s=tr(r.slice(a+1,-1))}else{let a=Oi(r,"/",7);a===-1?i=vt(r):(i=vt(r.slice(0,a)),s=tr(r.slice(a+1)))}let n,o=t.shift();if(!b(o)||o==="w")n="white";else if(o==="b")n="black";else return g.err(new I(z.Turn));return i.chain(a=>{let l=t.shift(),u=b(l)?Pi(a,l):g.ok(h.empty()),f=t.shift(),p;if(b(f)&&f!=="-"&&(p=Oe(f),!b(p)))return g.err(new I(z.EpSquare));let k=t.shift(),w;b(k)&&k.includes("+")&&(w=rr(k),k=t.shift());let c=b(k)?Me(k):0;if(!b(c))return g.err(new I(z.Halfmoves));let d=t.shift(),m=b(d)?Me(d):1;if(!b(m))return g.err(new I(z.Fullmoves));let C=t.shift(),y=g.ok(void 0);if(b(C)){if(b(w))return g.err(new I(z.RemainingChecks));y=rr(C)}else b(w)&&(y=w);return t.length>0?g.err(new I(z.Fen)):s.chain(M=>u.chain(x=>y.map(S=>({board:a,pockets:M,turn:n,castlingRights:x,remainingChecks:S,epSquare:p,halfmoves:c,fullmoves:Math.max(1,m)}))))})},Ri=e=>{let t=de(e.role);return e.color==="white"&&(t=t.toUpperCase()),e.promoted&&(t+="~"),t},Ni=e=>{let t="",r=0;for(let i=7;i>=0;i--)for(let s=0;s<8;s++){let n=s+i*8,o=e.get(n);o?(r>0&&(t+=r,r=0),t+=Ri(o)):r++,s===7&&(r>0&&(t+=r,r=0),i!==0&&(t+="/"))}return t},ir=e=>Z.map(t=>de(t).repeat(e[t])).join(""),Ti=e=>ir(e.white).toUpperCase()+ir(e.black),Bi=(e,t)=>{let r="";for(let i of Y){let s=h.backrank(i),n=e.kingOf(i);b(n)&&!s.has(n)&&(n=void 0);let o=e.pieces(i,"rook").intersect(s);for(let a of t.intersect(s).reversed())if(a===o.first()&&b(n)&&a<n)r+=i==="white"?"Q":"q";else if(a===o.last()&&b(n)&&n<a)r+=i==="white"?"K":"k";else{let l=te[W(a)];r+=i==="white"?l.toUpperCase():l}}return r||"-"},Li=e=>`${e.white}+${e.black}`,sr=(e,t)=>[Ni(e.board)+(e.pockets?`[${Ti(e.pockets)}]`:""),e.turn[0],Bi(e.board,e.castlingRights),b(e.epSquare)?ne(e.epSquare):"-",...e.remainingChecks?[Li(e.remainingChecks)]:[],Math.max(0,Math.min(e.halfmoves,9999)),Math.max(1,Math.min(e.fullmoves,9999))].join(" "),zi=(e,t)=>{let r="";if(ke(t))t.role!=="pawn"&&(r=de(t.role).toUpperCase()),r+="@"+ne(t.to);else{let i=e.board.getRole(t.from);if(!i)return"--";if(i==="king"&&(e.board[e.turn].has(t.to)||Math.abs(t.to-t.from)===2))r=t.to>t.from?"O-O":"O-O-O";else{let s=e.board.occupied.has(t.to)||i==="pawn"&&W(t.from)!==W(t.to);if(i!=="pawn"){r=de(i).toUpperCase();let n;if(i==="king"?n=pe(t.to).intersect(e.board.king):i==="queen"?n=ft(t.to,e.board.occupied).intersect(e.board.queen):i==="rook"?n=Se(t.to,e.board.occupied).intersect(e.board.rook):i==="bishop"?n=Ce(t.to,e.board.occupied).intersect(e.board.bishop):n=$e(t.to).intersect(e.board.knight),n=n.intersect(e.board[e.turn]).without(t.from),n.nonEmpty()){let o=e.ctx();for(let a of n)e.dests(a,o).has(t.to)||(n=n.without(a));if(n.nonEmpty()){let a=!1,l=n.intersects(h.fromRank(ue(t.from)));n.intersects(h.fromFile(W(t.from)))?a=!0:l=!0,l&&(r+=te[W(t.from)]),a&&(r+=Ht[ue(t.from)])}}}else s&&(r=te[W(t.from)]);s&&(r+="x"),r+=ne(t.to),t.promotion&&(r+="="+de(t.promotion).toUpperCase())}}return r},Ki=(e,t)=>{var r;let i=zi(e,t);return e.play(t),!((r=e.outcome())===null||r===void 0)&&r.winner?i+"#":e.isCheck()?i+"+":i},Di=(e,t)=>{let r=e.ctx(),i=t.match(/^([NBRQK])?([a-h])?([1-8])?[-x]?([a-h][1-8])(?:=?([nbrqkNBRQK]))?[+#]?$/);if(!i){let f;if(t==="O-O"||t==="O-O+"||t==="O-O#"?f="h":(t==="O-O-O"||t==="O-O-O+"||t==="O-O-O#")&&(f="a"),f){let w=e.castles.rook[e.turn][f];return!b(r.king)||!b(w)||!e.dests(r.king,r).has(w)?void 0:{from:r.king,to:w}}let p=t.match(/^([pnbrqkPNBRQK])?@([a-h][1-8])[+#]?$/);if(!p)return;let k={role:p[1]?Ke(p[1]):"pawn",to:Oe(p[2])};return e.isLegal(k,r)?k:void 0}let s=i[1]?Ke(i[1]):"pawn",n=Oe(i[4]),o=i[5]?Ke(i[5]):void 0;if(!!o!==(s==="pawn"&&h.backranks().has(n))||o==="king"&&e.rules!=="antichess")return;let a=e.board.pieces(e.turn,s);s==="pawn"&&!i[2]?a=a.intersect(h.fromFile(W(n))):i[2]&&(a=a.intersect(h.fromFile(i[2].charCodeAt(0)-97))),i[3]&&(a=a.intersect(h.fromRank(i[3].charCodeAt(0)-49)));let l=s==="pawn"?h.fromFile(W(n)):h.empty();a=a.intersect(l.union(Qt({color:A(e.turn),role:s},n,e.board.occupied)));let u;for(let f of a)if(e.dests(f,r).has(n)){if(b(u))return;u=f}if(b(u))return{from:u,to:n,promotion:o}},nr=class extends ae{constructor(){super("crazyhouse")}reset(){super.reset(),this.pockets=mt.empty()}setupUnchecked(e){super.setupUnchecked(e),this.board.promoted=e.board.promoted.intersect(e.board.occupied).diff(e.board.king).diff(e.board.pawn),this.pockets=e.pockets?e.pockets.clone():mt.empty()}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}validate(){return super.validate().chain(e=>{var t,r;return!((t=this.pockets)===null||t===void 0)&&t.count("king")?g.err(new L(T.Kings)):(((r=this.pockets)===null||r===void 0?void 0:r.size())||0)+this.board.occupied.size()>64?g.err(new L(T.Variant)):g.ok(void 0)})}hasInsufficientMaterial(e){return this.pockets?this.board.occupied.size()+this.pockets.size()<=3&&this.board.pawn.isEmpty()&&this.board.promoted.isEmpty()&&this.board.rooksAndQueens().isEmpty()&&this.pockets.count("pawn")<=0&&this.pockets.count("rook")<=0&&this.pockets.count("queen")<=0:super.hasInsufficientMaterial(e)}dropDests(e){var t,r;let i=this.board.occupied.complement().intersect(!((t=this.pockets)===null||t===void 0)&&t[this.turn].hasNonPawns()?h.full():!((r=this.pockets)===null||r===void 0)&&r[this.turn].hasPawns()?h.backranks().complement():h.empty());if(e=e||this.ctx(),b(e.king)&&e.checkers.nonEmpty()){let s=e.checkers.singleSquare();return b(s)?i.intersect(xe(s,e.king)):h.empty()}else return i}},or=class extends ae{constructor(){super("atomic")}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}validate(){if(this.board.occupied.isEmpty())return g.err(new L(T.Empty));if(this.board.king.size()>2)return g.err(new L(T.Kings));let e=this.board.kingOf(A(this.turn));return b(e)?this.kingAttackers(e,this.turn,this.board.occupied).nonEmpty()?g.err(new L(T.OppositeCheck)):h.backranks().intersects(this.board.pawn)?g.err(new L(T.PawnsOnBackrank)):g.ok(void 0):g.err(new L(T.Kings))}kingAttackers(e,t,r){let i=this.board.pieces(t,"king");return i.isEmpty()||pe(e).intersects(i)?h.empty():super.kingAttackers(e,t,r)}playCaptureAt(e,t){super.playCaptureAt(e,t),this.board.take(e);for(let r of pe(e).intersect(this.board.occupied).diff(this.board.pawn)){let i=this.board.take(r);(i==null?void 0:i.role)==="rook"&&this.castles.discardRook(r),(i==null?void 0:i.role)==="king"&&this.castles.discardColor(i.color)}}hasInsufficientMaterial(e){if(this.board.pieces(A(e),"king").isEmpty())return!1;if(this.board[e].diff(this.board.king).isEmpty())return!0;if(this.board[A(e)].diff(this.board.king).nonEmpty()){if(this.board.occupied.equals(this.board.bishop.union(this.board.king))){if(!this.board.bishop.intersect(this.board.white).intersects(h.darkSquares()))return!this.board.bishop.intersect(this.board.black).intersects(h.lightSquares());if(!this.board.bishop.intersect(this.board.white).intersects(h.lightSquares()))return!this.board.bishop.intersect(this.board.black).intersects(h.darkSquares())}return!1}return this.board.queen.nonEmpty()||this.board.pawn.nonEmpty()?!1:this.board.knight.union(this.board.bishop).union(this.board.rook).size()===1?!0:this.board.occupied.equals(this.board.knight.union(this.board.king))?this.board.knight.size()<=2:!1}dests(e,t){t=t||this.ctx();let r=h.empty();for(let i of gt(this,e,t)){let s=this.clone();s.play({from:e,to:i});let n=s.board.kingOf(this.turn);b(n)&&(!b(s.board.kingOf(s.turn))||s.kingAttackers(n,s.turn,s.board.occupied).isEmpty())&&(r=r.with(i))}return r}isVariantEnd(){return!!this.variantOutcome()}variantOutcome(e){for(let t of Y)if(this.board.pieces(t,"king").isEmpty())return{winner:A(t)}}},ar=class extends ae{constructor(){super("antichess")}reset(){super.reset(),this.castles=fe.empty()}setupUnchecked(e){super.setupUnchecked(e),this.castles=fe.empty()}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}validate(){return this.board.occupied.isEmpty()?g.err(new L(T.Empty)):h.backranks().intersects(this.board.pawn)?g.err(new L(T.PawnsOnBackrank)):g.ok(void 0)}kingAttackers(e,t,r){return h.empty()}ctx(){let e=super.ctx();if(b(this.epSquare)&&ye(A(this.turn),this.epSquare).intersects(this.board.pieces(this.turn,"pawn")))return e.mustCapture=!0,e;let t=this.board[A(this.turn)];for(let r of this.board[this.turn])if(gt(this,r,e).intersects(t))return e.mustCapture=!0,e;return e}dests(e,t){t=t||this.ctx();let r=gt(this,e,t),i=this.board[A(this.turn)];return r.intersect(t.mustCapture?b(this.epSquare)&&this.board.getRole(e)==="pawn"?i.with(this.epSquare):i:h.full())}hasInsufficientMaterial(e){if(this.board[e].isEmpty())return!1;if(this.board[A(e)].isEmpty())return!0;if(this.board.occupied.equals(this.board.bishop)){let t=this.board[e].intersects(h.lightSquares()),r=this.board[e].intersects(h.darkSquares()),i=this.board[A(e)].isDisjoint(h.lightSquares()),s=this.board[A(e)].isDisjoint(h.darkSquares());return t&&i||r&&s}return this.board.occupied.equals(this.board.knight)&&this.board.occupied.size()===2?this.board.white.intersects(h.lightSquares())!==this.board.black.intersects(h.darkSquares())!=(this.turn===e):!1}isVariantEnd(){return this.board[this.turn].isEmpty()}variantOutcome(e){if(e=e||this.ctx(),e.variantEnd||this.isStalemate(e))return{winner:this.turn}}},lr=class extends ae{constructor(){super("kingofthehill")}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}hasInsufficientMaterial(e){return!1}isVariantEnd(){return this.board.king.intersects(h.center())}variantOutcome(e){for(let t of Y)if(this.board.pieces(t,"king").intersects(h.center()))return{winner:t}}},hr=class extends ae{constructor(){super("3check")}reset(){super.reset(),this.remainingChecks=We.default()}setupUnchecked(e){var t;super.setupUnchecked(e),this.remainingChecks=((t=e.remainingChecks)===null||t===void 0?void 0:t.clone())||We.default()}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}hasInsufficientMaterial(e){return this.board.pieces(e,"king").equals(this.board[e])}isVariantEnd(){return!!this.remainingChecks&&(this.remainingChecks.white<=0||this.remainingChecks.black<=0)}variantOutcome(e){if(this.remainingChecks){for(let t of Y)if(this.remainingChecks[t]<=0)return{winner:t}}}},$i=()=>{let e=Ie.empty();return e.occupied=new h(65535,0),e.promoted=h.empty(),e.white=new h(61680,0),e.black=new h(3855,0),e.pawn=h.empty(),e.knight=new h(6168,0),e.bishop=new h(9252,0),e.rook=new h(16962,0),e.queen=new h(129,0),e.king=new h(33024,0),e},cr=class extends ae{constructor(){super("racingkings")}reset(){this.board=$i(),this.pockets=void 0,this.turn="white",this.castles=fe.empty(),this.epSquare=void 0,this.remainingChecks=void 0,this.halfmoves=0,this.fullmoves=1}setupUnchecked(e){super.setupUnchecked(e),this.castles=fe.empty()}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}validate(){return this.isCheck()||this.board.pawn.nonEmpty()?g.err(new L(T.Variant)):super.validate()}dests(e,t){if(t=t||this.ctx(),e===t.king)return super.dests(e,t);let r=h.empty();for(let i of super.dests(e,t)){let s={from:e,to:i},n=this.clone();n.play(s),n.isCheck()||(r=r.with(i))}return r}hasInsufficientMaterial(e){return!1}isVariantEnd(){let e=h.fromRank(7),t=this.board.king.intersect(e);if(t.isEmpty())return!1;if(this.turn==="white"||t.intersects(this.board.black))return!0;let r=this.board.kingOf("black");if(b(r)){let i=this.board.occupied.without(r);for(let s of pe(r).intersect(e).diff(this.board.black))if(this.kingAttackers(s,"white",i).isEmpty())return!1}return!0}variantOutcome(e){if(e?!e.variantEnd:!this.isVariantEnd())return;let t=h.fromRank(7),r=this.board.pieces("black","king").intersects(t),i=this.board.pieces("white","king").intersects(t);return r&&!i?{winner:"black"}:i&&!r?{winner:"white"}:{winner:void 0}}},Ii=()=>{let e=Ie.empty();return e.occupied=new h(4294967295,4294901862),e.promoted=h.empty(),e.white=new h(4294967295,102),e.black=new h(0,4294901760),e.pawn=new h(4294967295,16711782),e.knight=new h(0,1107296256),e.bishop=new h(0,603979776),e.rook=new h(0,2164260864),e.queen=new h(0,134217728),e.king=new h(0,268435456),e},ur=class extends ae{constructor(){super("horde")}reset(){this.board=Ii(),this.pockets=void 0,this.turn="white",this.castles=fe.default(),this.castles.discardColor("white"),this.epSquare=void 0,this.remainingChecks=void 0,this.halfmoves=0,this.fullmoves=1}static default(){let e=new this;return e.reset(),e}static fromSetup(e){let t=new this;return t.setupUnchecked(e),t.validate().map(r=>t)}clone(){return super.clone()}validate(){if(this.board.occupied.isEmpty())return g.err(new L(T.Empty));if(this.board.king.size()!==1)return g.err(new L(T.Kings));let e=this.board.kingOf(A(this.turn));if(b(e)&&this.kingAttackers(e,this.turn,this.board.occupied).nonEmpty())return g.err(new L(T.OppositeCheck));for(let t of Y){let r=this.board.pieces(t,"king").isEmpty()?h.backrank(A(t)):h.backranks();if(this.board.pieces(t,"pawn").intersects(r))return g.err(new L(T.PawnsOnBackrank))}return g.ok(void 0)}hasInsufficientMaterial(e){if(this.board.pieces(e,"king").nonEmpty())return!1;let t=k=>k==="light"?"dark":"light",r=k=>k==="light"?h.lightSquares():h.darkSquares(),i=k=>{let w=this.board.pieces(k,"bishop");return w.intersects(h.darkSquares())&&w.intersects(h.lightSquares())},s=Ee.fromBoard(this.board,e),n=k=>r(k).intersect(this.board.pieces(e,"bishop")).size(),o=n("light")>=1?"light":"dark",a=s.pawn+s.knight+s.rook+s.queen+Math.min(n("dark"),2)+Math.min(n("light"),2),l=Ee.fromBoard(this.board,A(e)),u=k=>r(k).intersect(this.board.pieces(A(e),"bishop")).size(),f=l.size(),p=k=>f-k;if(a===0)return!0;if(a>=4||(s.pawn>=1||s.queen>=1)&&a>=2||s.rook>=1&&a>=2&&!(a===2&&s.rook===1&&s.bishop===1&&p(u(o))===1))return!1;if(a===1){if(f===1)return!0;if(s.queen===1)return!(l.pawn>=1||l.rook>=1||u("light")>=2||u("dark")>=2);if(s.pawn===1){let k=this.board.pieces(e,"pawn").last(),w=this.clone();w.board.set(k,{color:e,role:"queen"});let c=this.clone();return c.board.set(k,{color:e,role:"knight"}),w.hasInsufficientMaterial(e)&&c.hasInsufficientMaterial(e)}else{if(s.rook===1)return!(l.pawn>=2||l.rook>=1&&l.pawn>=1||l.rook>=1&&l.knight>=1||l.pawn>=1&&l.knight>=1);if(s.bishop===1)return!(u(t(o))>=2||u(t(o))>=1&&l.pawn>=1||l.pawn>=2);if(s.knight===1)return!(f>=4&&(l.knight>=2||l.pawn>=2||l.rook>=1&&l.knight>=1||l.rook>=1&&l.bishop>=1||l.knight>=1&&l.bishop>=1||l.rook>=1&&l.pawn>=1||l.knight>=1&&l.pawn>=1||l.bishop>=1&&l.pawn>=1||i(A(e))&&l.pawn>=1)&&(u("dark")<2||p(u("dark"))>=3)&&(u("light")<2||p(u("light"))>=3))}}else{if(a===2)return f===1?!0:s.knight===2?l.pawn+l.bishop+l.knight<1:i(e)?!(l.pawn>=1||l.bishop>=1||l.knight>=1&&l.rook+l.queen>=1):s.bishop>=1&&s.knight>=1?!(l.pawn>=1||u(t(o))>=1||p(u(o))>=3):!(l.pawn>=1&&u(t(o))>=1||l.pawn>=1&&l.knight>=1||u(t(o))>=1&&l.knight>=1||u(t(o))>=2||l.knight>=2||l.pawn>=2);if(a===3)return s.knight===2&&s.bishop===1||s.knight===3||i(e)?!1:f===1}return!0}isVariantEnd(){return this.board.white.isEmpty()||this.board.black.isEmpty()}variantOutcome(e){if(this.board.white.isEmpty())return{winner:"black"};if(this.board.black.isEmpty())return{winner:"white"}}},Wi=e=>{switch(e){case"chess":return Xt.default();case"antichess":return ar.default();case"atomic":return or.default();case"horde":return ur.default();case"racingkings":return cr.default();case"kingofthehill":return lr.default();case"3check":return hr.default();case"crazyhouse":return nr.default()}},Ui=(e,t)=>{switch(e){case"chess":return Xt.fromSetup(t);case"antichess":return ar.fromSetup(t);case"atomic":return or.fromSetup(t);case"horde":return ur.fromSetup(t);case"racingkings":return cr.fromSetup(t);case"kingofthehill":return lr.fromSetup(t);case"3check":return hr.fromSetup(t);case"crazyhouse":return nr.fromSetup(t)}},Fi=(e=wt)=>({headers:e(),moves:new bt}),bt=class{constructor(){this.children=[]}*mainlineNodes(){let e=this;for(;e.children.length;){let t=e.children[0];yield t,e=t}}*mainline(){for(let e of this.mainlineNodes())yield e.data}end(){let e=this;for(;e.children.length;)e=e.children[0];return e}},dr=class extends bt{constructor(e){super(),this.data=e}},Vi=(e,t,r)=>{let i=new bt,s=[{before:e,after:i,ctx:t}],n;for(;n=s.pop();)for(let o=0;o<n.before.children.length;o++){let a=o<n.before.children.length-1?n.ctx.clone():n.ctx,l=n.before.children[o],u=r(a,l.data,o);if(b(u)){let f=new dr(u);n.after.children.push(f),s.push({before:l,after:f,ctx:a})}}return i},Hi=e=>e?e.winner==="white"?"1-0":e.winner==="black"?"0-1":"1/2-1/2":"*",Gi=e=>e==="1-0"||e==="1–0"||e==="1—0"?{winner:"white"}:e==="0-1"||e==="0–1"||e==="0—1"?{winner:"black"}:e==="1/2-1/2"||e==="1/2–1/2"||e==="1/2—1/2"?{winner:void 0}:void 0,wt=()=>new Map([["Event","?"],["Site","?"],["Date","????.??.??"],["Round","?"],["White","?"],["Black","?"],["Result","*"]]),pr="\uFEFF",kt=e=>/^\s*$/.test(e),yt=e=>e.startsWith("%"),ji=class extends Error{},Qi=class{constructor(e,t=wt,r=1e6){this.emitGame=e,this.initHeaders=t,this.maxBudget=r,this.lineBuf=[],this.resetGame(),this.state=0}resetGame(){this.budget=this.maxBudget,this.found=!1,this.state=1,this.game=Fi(this.initHeaders),this.stack=[{parent:this.game.moves,root:!0}],this.commentBuf=[]}consumeBudget(e){if(this.budget-=e,this.budget<0)throw new ji("ERR_PGN_BUDGET")}parse(e,t){if(!(this.budget<0))try{let r=0;for(;;){let i=e.indexOf(`
2
2
  `,r);if(i===-1)break;let s=i>r&&e[i-1]==="\r"?i-1:i;this.consumeBudget(i-r),this.lineBuf.push(e.slice(r,s)),r=i+1,this.handleLine()}this.consumeBudget(e.length-r),this.lineBuf.push(e.slice(r)),t!=null&&t.stream||(this.handleLine(),this.emit(void 0))}catch(r){this.emit(r)}}handleLine(){let e=!0,t=this.lineBuf.join("");this.lineBuf=[];e:for(;;)switch(this.state){case 0:t.startsWith(pr)&&(t=t.slice(pr.length)),this.state=1;case 1:if(kt(t)||yt(t))return;this.found=!0,this.state=2;case 2:{if(yt(t))return;let r=!0;for(;r;)r=!1,t=t.replace(/^\s*\[([A-Za-z0-9][A-Za-z0-9_+#=:-]*)\s+"((?:[^"\\]|\\"|\\\\)*)"\]/,(i,s,n)=>(this.consumeBudget(200),this.handleHeader(s,n.replace(/\\"/g,'"').replace(/\\\\/g,"\\")),r=!0,e=!1,""));if(kt(t))return;this.state=3}case 3:{if(e){if(yt(t))return;if(kt(t))return this.emit(void 0)}let r=/(?:[NBKRQ]?[a-h]?[1-8]?[-x]?[a-h][1-8](?:=?[nbrqkNBRQK])?|[pnbrqkPNBRQK]?@[a-h][1-8]|[O0o][-–—][O0o](?:[-–—][O0o])?)[+#]?|--|Z0|0000|@@@@|{|;|\$\d{1,4}|[?!]{1,2}|\(|\)|\*|1[-–—]0|0[-–—]1|1\/2[-–—]1\/2/g,i;for(;i=r.exec(t);){let s=this.stack[this.stack.length-1],n=i[0];if(n===";")return;if(n.startsWith("$"))this.handleNag(parseInt(n.slice(1),10));else if(n==="!")this.handleNag(1);else if(n==="?")this.handleNag(2);else if(n==="!!")this.handleNag(3);else if(n==="??")this.handleNag(4);else if(n==="!?")this.handleNag(5);else if(n==="?!")this.handleNag(6);else if(n==="1-0"||n==="1–0"||n==="1—0"||n==="0-1"||n==="0–1"||n==="0—1"||n==="1/2-1/2"||n==="1/2–1/2"||n==="1/2—1/2"||n==="*")this.stack.length===1&&n!=="*"&&this.handleHeader("Result",n);else if(n==="(")this.consumeBudget(100),this.stack.push({parent:s.parent,root:!1});else if(n===")")this.stack.length>1&&this.stack.pop();else if(n==="{"){let o=r.lastIndex,a=t[o]===" "?o+1:o;t=t.slice(a),this.state=4;continue e}else this.consumeBudget(100),n.startsWith("O")||n.startsWith("0")||n.startsWith("o")?n=n.replace(/[0o]/g,"O").replace(/[–—]/g,"-"):(n==="Z0"||n==="0000"||n==="@@@@")&&(n="--"),s.node&&(s.parent=s.node),s.node=new dr({san:n,startingComments:s.startingComments}),s.startingComments=void 0,s.root=!1,s.parent.children.push(s.node)}return}case 4:{let r=t.indexOf("}");if(r===-1){this.commentBuf.push(t);return}else{let i=r>0&&t[r-1]===" "?r-1:r;this.commentBuf.push(t.slice(0,i)),this.handleComment(),t=t.slice(r),this.state=3,e=!1}}}}handleHeader(e,t){this.game.headers.set(e,e==="Result"?Hi(Gi(t)):t)}handleNag(e){var t;this.consumeBudget(50);let r=this.stack[this.stack.length-1];r.node&&((t=r.node.data).nags||(t.nags=[]),r.node.data.nags.push(e))}handleComment(){var e,t;this.consumeBudget(100);let r=this.stack[this.stack.length-1],i=this.commentBuf.join(`
3
- `);this.commentBuf=[],r.node?((e=r.node.data).comments||(e.comments=[]),r.node.data.comments.push(i)):r.root?((t=this.game).comments||(t.comments=[]),this.game.comments.push(i)):(r.startingComments||(r.startingComments=[]),r.startingComments.push(i))}emit(e){if(this.state===4&&this.handleComment(),e)return this.emitGame(this.game,e);this.found&&this.emitGame(this.game,void 0),this.resetGame()}},fr=(e,t=wt)=>{let r=[];return new Qi(i=>r.push(i),t,NaN).parse(e),r},Yi=e=>{switch((e||"chess").toLowerCase()){case"chess":case"chess960":case"chess 960":case"standard":case"from position":case"classical":case"normal":case"fischerandom":case"fischerrandom":case"fischer random":case"wild/0":case"wild/1":case"wild/2":case"wild/3":case"wild/4":case"wild/5":case"wild/6":case"wild/7":case"wild/8":case"wild/8a":return"chess";case"crazyhouse":case"crazy house":case"house":case"zh":return"crazyhouse";case"king of the hill":case"koth":case"kingofthehill":return"kingofthehill";case"three-check":case"three check":case"threecheck":case"three check chess":case"3-check":case"3 check":case"3check":return"3check";case"antichess":case"anti chess":case"anti":return"antichess";case"atomic":case"atom":case"atomic chess":return"atomic";case"horde":case"horde chess":return"horde";case"racing kings":case"racingkings":case"racing":case"race":return"racingkings";default:return}},Zi=e=>{let t=Yi(e.get("Variant"));if(!t)return g.err(new L(T.Variant));let r=e.get("FEN");return r?_i(r).chain(i=>Ui(t,i)):g.ok(Wi(t))};function Xi(e){switch(e){case"G":return"green";case"R":return"red";case"Y":return"yellow";case"B":return"blue";default:return}}var Ji=e=>{let t=Xi(e.slice(0,1)),r=Oe(e.slice(1,3)),i=Oe(e.slice(3,5));if(!(!t||!b(r))){if(e.length===3)return{color:t,from:r,to:r};if(e.length===5&&b(i))return{color:t,from:r,to:i}}},es=e=>{let t,r,i,s=[];return{text:e.replace(/\s?\[%(emt|clk)\s(\d{1,5}):(\d{1,2}):(\d{1,2}(?:\.\d{0,3})?)\]\s?/g,(n,o,a,l,u)=>{let f=parseInt(a,10)*3600+parseInt(l,10)*60+parseFloat(u);return o==="emt"?t=f:o==="clk"&&(r=f)," "}).replace(/\s?\[%(?:csl|cal)\s([RGYB][a-h][1-8](?:[a-h][1-8])?(?:,[RGYB][a-h][1-8](?:[a-h][1-8])?)*)\]\s?/g,(n,o)=>{for(let a of o.split(","))s.push(Ji(a));return" "}).replace(/\s?\[%eval\s(?:#([+-]?\d{1,5})|([+-]?(?:\d{1,5}|\d{0,5}\.\d{1,2})))(?:,(\d{1,5}))?\]\s?/g,(n,o,a,l)=>{let u=l&&parseInt(l,10);return i=o?{mate:parseInt(o,10),depth:u}:{pawns:parseFloat(a),depth:u}," "}).trim(),shapes:s,emt:t,clock:r,evaluation:i}};function ts(e){return t=>e&&e(t)||rs(t)}var rs=e=>is[e],is={flipTheBoard:"Flip the board",analysisBoard:"Analysis board",practiceWithComputer:"Practice with computer",getPgn:"Get PGN",download:"Download",viewOnLichess:"View on Lichess",viewOnSite:"View on site"},ss=["white","black"],Fe=["a","b","c","d","e","f","g","h"],Ve=["1","2","3","4","5","6","7","8"],ns=[...Ve].reverse(),Ct=Array.prototype.concat(...Fe.map(e=>Ve.map(t=>e+t))),j=e=>Ct[8*e[0]+e[1]],B=e=>[e.charCodeAt(0)-97,e.charCodeAt(1)-49],os=e=>{if(e)return e[1]==="@"?[e.slice(2,4)]:[e.slice(0,2),e.slice(2,4)]},mr=Ct.map(B);function as(e){let t,r=()=>(t===void 0&&(t=e()),t);return r.clear=()=>{t=void 0},r}var ls=()=>{let e;return{start(){e=performance.now()},cancel(){e=void 0},stop(){if(!e)return 0;let t=performance.now()-e;return e=void 0,t}}},St=e=>e==="white"?"black":"white",Pe=(e,t)=>{let r=e[0]-t[0],i=e[1]-t[1];return r*r+i*i},xt=(e,t)=>e.role===t.role&&e.color===t.color,_e=e=>(t,r)=>[(r?t[0]:7-t[0])*e.width/8,(r?7-t[1]:t[1])*e.height/8],J=(e,t)=>{e.style.transform=`translate(${t[0]}px,${t[1]}px)`},gr=(e,t,r=1)=>{e.style.transform=`translate(${t[0]}px,${t[1]}px) scale(${r})`},Et=(e,t)=>{e.style.visibility=t?"visible":"hidden"},me=e=>{var t;if(e.clientX||e.clientX===0)return[e.clientX,e.clientY];if(!((t=e.targetTouches)===null||t===void 0)&&t[0])return[e.targetTouches[0].clientX,e.targetTouches[0].clientY]},vr=e=>e.button===2,re=(e,t)=>{let r=document.createElement(e);return t&&(r.className=t),r};function br(e,t,r){let i=B(e);return t||(i[0]=7-i[0],i[1]=7-i[1]),[r.left+r.width*i[0]/8+r.width/16,r.top+r.height*(7-i[1])/8+r.height/16]}var Re=(ee=class{constructor(t){this.path=t,this.size=()=>this.path.length/2,this.head=()=>this.path.slice(0,2),this.tail=()=>new ee(this.path.slice(2)),this.init=()=>new ee(this.path.slice(0,-2)),this.last=()=>this.path.slice(-2),this.empty=()=>this.path=="",this.contains=r=>this.path.startsWith(r.path),this.isChildOf=r=>this.init()===r,this.append=r=>new ee(this.path+r),this.equals=r=>this.path==r.path}},ee.root=new ee(""),ee),hs=class{constructor(e,t,r,i){this.initial=e,this.moves=t,this.players=r,this.metadata=i,this.nodeAt=s=>wr(this.moves,s),this.dataAt=s=>{let n=this.nodeAt(s);return n?us(n)?n.data:this.initial:void 0},this.title=()=>this.players.white.name?[this.players.white.title,this.players.white.name,"vs",this.players.black.title,this.players.black.name].filter(s=>s&&!!s.trim()).join("_").replace(" ","-"):"lichess-pgn-viewer",this.pathAtMainlinePly=s=>{var n;return s==0?Re.root:((n=this.mainline[Math.max(0,Math.min(this.mainline.length-1,s=="last"?9999:s-1))])==null?void 0:n.path)||Re.root},this.hasPlayerName=()=>{var s,n;return!!((s=this.players.white)!=null&&s.name||(n=this.players.black)!=null&&n.name)},this.mainline=Array.from(this.moves.mainline())}},cs=(e,t)=>e.children.find(r=>r.data.path.last()==t),wr=(e,t)=>{if(t.empty())return e;let r=cs(e,t.head());return r?wr(r,t.tail()):void 0},us=e=>"data"in e,ds=e=>"uci"in e,ps=class pi{constructor(t,r,i){this.pos=t,this.path=r,this.clocks=i,this.clone=()=>new pi(this.pos.clone(),this.path,{...this.clocks})}},Mt=e=>{let t=e.map(es),r=i=>i.reduce((s,n)=>typeof n==null?s:n,void 0);return{texts:t.map(i=>i.text).filter(i=>!!i),shapes:t.flatMap(i=>i.shapes),clock:r(t.map(i=>i.clock)),emt:r(t.map(i=>i.emt))}},fs=(e,t=!1)=>{var p,k;let r=fr(e)[0]||fr("*")[0],i=Zi(r.headers).unwrap(),s=sr(i.toSetup()),n=Mt(r.comments||[]),o=new Map(Array.from(r.headers,([w,c])=>[w.toLowerCase(),c])),a=bs(o,t),l={fen:s,turn:i.turn,check:i.isCheck(),pos:i.clone(),comments:n.texts,shapes:n.shapes,clocks:{white:((p=a.timeControl)==null?void 0:p.initial)||n.clock,black:((k=a.timeControl)==null?void 0:k.initial)||n.clock}},u=ms(i,r.moves,a),f=vs(o,a);return new hs(l,u,f,a)},ms=(e,t,r)=>Vi(t,new ps(e,Re.root,{}),(i,s,n)=>{let o=Di(i.pos,s.san);if(!o)return;let a=Ai(o),l=i.path.append(a),u=Ki(i.pos,o);i.path=l;let f=i.pos.toSetup(),p=Mt(s.comments||[]),k=Mt(s.startingComments||[]),w=[...p.shapes,...k.shapes],c=(f.fullmoves-1)*2+(i.pos.turn==="white"?0:1),d=i.clocks=gs(i.clocks,i.pos.turn,p.clock);return c<2&&r.timeControl&&(d={white:r.timeControl.initial,black:r.timeControl.initial,...d}),{path:l,ply:c,move:o,san:u,uci:mi(o),fen:sr(i.pos.toSetup()),turn:i.pos.turn,check:i.pos.isCheck(),comments:p.texts,startingComments:k.texts,nags:s.nags||[],shapes:w,clocks:d,emt:p.emt}}),gs=(e,t,r)=>t=="white"?{...e,black:r}:{...e,white:r};function vs(e,t){let r=(s,n)=>{let o=e.get(`${s}${n}`);return o=="?"||o==""?void 0:o},i=s=>{let n=r(s,"");return{name:n,title:r(s,"title"),rating:parseInt(r(s,"elo")||"")||void 0,isLichessUser:t.isLichess&&!!(n!=null&&n.match(/^[a-z0-9][a-z0-9_-]{0,28}[a-z0-9]$/i))}};return{white:i("white"),black:i("black")}}function bs(e,t){var o;let r=e.get("source")||e.get("site"),i=(o=e.get("timecontrol"))==null?void 0:o.split("+").map(a=>parseInt(a)),s=i&&i[0]?{initial:i[0],increment:i[1]||0}:void 0,n=e.get("orientation");return{externalLink:r&&r.match(/^https?:\/\//)?r:void 0,isLichess:!!(t&&(r!=null&&r.startsWith(t))),timeControl:s,orientation:n==="white"||n==="black"?n:void 0,result:e.get("result")}}var ws=class{constructor(e,t){this.opts=e,this.redraw=t,this.flipped=!1,this.pane="board",this.autoScrollRequested=!1,this.curNode=()=>this.game.nodeAt(this.path)||this.game.moves,this.curData=()=>this.game.dataAt(this.path)||this.game.initial,this.goTo=(r,i=!0)=>{var n,o;let s=r=="first"?Re.root:r=="prev"?this.path.init():r=="next"?(o=(n=this.game.nodeAt(this.path))==null?void 0:n.children[0])==null?void 0:o.data.path:this.game.pathAtMainlinePly("last");this.toPath(s||this.path,i)},this.canGoTo=r=>r=="prev"||r=="first"?!this.path.empty():!!this.curNode().children[0],this.toPath=(r,i=!0)=>{this.path=r,this.pane="board",this.autoScrollRequested=!0,this.redrawGround(),this.redraw(),i&&this.focus()},this.focus=()=>{var r;return(r=this.div)==null?void 0:r.focus()},this.toggleMenu=()=>{this.pane=this.pane=="board"?"menu":"board",this.redraw()},this.togglePgn=()=>{this.pane=this.pane=="pgn"?"board":"pgn",this.redraw()},this.orientation=()=>{let r=this.opts.orientation||"white";return this.flipped?A(r):r},this.flip=()=>{this.flipped=!this.flipped,this.pane="board",this.redrawGround(),this.redraw()},this.cgState=()=>{var s;let r=this.curData(),i=ds(r)?os(r.uci):(s=this.opts.chessground)==null?void 0:s.lastMove;return{fen:r.fen,orientation:this.orientation(),check:r.check,lastMove:i,turnColor:r.turn}},this.analysisUrl=()=>this.game.metadata.isLichess&&this.game.metadata.externalLink||`https://lichess.org/analysis/${this.curData().fen.replace(" ","_")}?color=${this.orientation()}`,this.practiceUrl=()=>`${this.analysisUrl()}#practice`,this.setGround=r=>{this.ground=r,this.redrawGround()},this.redrawGround=()=>this.withGround(r=>{r.set(this.cgState()),r.setShapes(this.curData().shapes.map(i=>({orig:ne(i.from),dest:ne(i.to),brush:i.color})))}),this.withGround=r=>this.ground&&r(this.ground),this.game=fs(e.pgn,e.lichess),e.orientation=e.orientation||this.game.metadata.orientation,this.translate=ts(e.translate),this.path=this.game.pathAtMainlinePly(e.initialPly)}},ge=(e,t)=>Math.abs(e-t),ks=e=>(t,r,i,s)=>ge(t,i)<2&&(e==="white"?s===r+1||r<=1&&s===r+2&&t===i:s===r-1||r>=6&&s===r-2&&t===i),kr=(e,t,r,i)=>{let s=ge(e,r),n=ge(t,i);return s===1&&n===2||s===2&&n===1},yr=(e,t,r,i)=>ge(e,r)===ge(t,i),Cr=(e,t,r,i)=>e===r||t===i,Sr=(e,t,r,i)=>yr(e,t,r,i)||Cr(e,t,r,i),ys=(e,t,r)=>(i,s,n,o)=>ge(i,n)<2&&ge(s,o)<2||r&&s===o&&s===(e==="white"?0:7)&&(i===4&&(n===2&&t.includes(0)||n===6&&t.includes(7))||t.includes(n));function Cs(e,t){let r=t==="white"?"1":"8",i=[];for(let[s,n]of e)s[1]===r&&n.color===t&&n.role==="rook"&&i.push(B(s)[0]);return i}function xr(e,t,r){let i=e.get(t);if(!i)return[];let s=B(t),n=i.role,o=n==="pawn"?ks(i.color):n==="knight"?kr:n==="bishop"?yr:n==="rook"?Cr:n==="queen"?Sr:ys(i.color,Cs(e,i.color),r);return mr.filter(a=>(s[0]!==a[0]||s[1]!==a[1])&&o(s[0],s[1],a[0],a[1])).map(j)}function F(e,...t){e&&setTimeout(()=>e(...t),1)}function Ss(e){e.orientation=St(e.orientation),e.animation.current=e.draggable.current=e.selected=void 0}function xs(e,t){for(let[r,i]of t)i?e.pieces.set(r,i):e.pieces.delete(r)}function Es(e,t){if(e.check=void 0,t===!0&&(t=e.turnColor),t)for(let[r,i]of e.pieces)i.role==="king"&&i.color===t&&(e.check=r)}function Ms(e,t,r,i){he(e),e.premovable.current=[t,r],F(e.premovable.events.set,t,r,i)}function le(e){e.premovable.current&&(e.premovable.current=void 0,F(e.premovable.events.unset))}function qs(e,t,r){le(e),e.predroppable.current={role:t,key:r},F(e.predroppable.events.set,t,r)}function he(e){let t=e.predroppable;t.current&&(t.current=void 0,F(t.events.unset))}function As(e,t,r){if(!e.autoCastle)return!1;let i=e.pieces.get(t);if(!i||i.role!=="king")return!1;let s=B(t),n=B(r);if(s[1]!==0&&s[1]!==7||s[1]!==n[1])return!1;s[0]===4&&!e.pieces.has(r)&&(n[0]===6?r=j([7,n[1]]):n[0]===2&&(r=j([0,n[1]])));let o=e.pieces.get(r);return!o||o.color!==i.color||o.role!=="rook"?!1:(e.pieces.delete(t),e.pieces.delete(r),s[0]<n[0]?(e.pieces.set(j([6,n[1]]),i),e.pieces.set(j([5,n[1]]),o)):(e.pieces.set(j([2,n[1]]),i),e.pieces.set(j([3,n[1]]),o)),!0)}function Er(e,t,r){let i=e.pieces.get(t),s=e.pieces.get(r);if(t===r||!i)return!1;let n=s&&s.color!==i.color?s:void 0;return r===e.selected&&Q(e),F(e.events.move,t,r,n),As(e,t,r)||(e.pieces.set(r,i),e.pieces.delete(t)),e.lastMove=[t,r],e.check=void 0,F(e.events.change),n||!0}function qt(e,t,r,i){if(e.pieces.has(r))if(i)e.pieces.delete(r);else return!1;return F(e.events.dropNewPiece,t,r),e.pieces.set(r,t),e.lastMove=[r],e.check=void 0,F(e.events.change),e.movable.dests=void 0,e.turnColor=St(e.turnColor),!0}function Mr(e,t,r){let i=Er(e,t,r);return i&&(e.movable.dests=void 0,e.turnColor=St(e.turnColor),e.animation.current=void 0),i}function qr(e,t,r){if(Ot(e,t,r)){let i=Mr(e,t,r);if(i){let s=e.hold.stop();Q(e);let n={premove:!1,ctrlKey:e.stats.ctrlKey,holdTime:s};return i!==!0&&(n.captured=i),F(e.movable.events.after,t,r,n),!0}}else if(Ps(e,t,r))return Ms(e,t,r,{ctrlKey:e.stats.ctrlKey}),Q(e),!0;return Q(e),!1}function Ar(e,t,r,i){let s=e.pieces.get(t);s&&(Os(e,t,r)||i)?(e.pieces.delete(t),qt(e,s,r,i),F(e.movable.events.afterNewPiece,s.role,r,{premove:!1,predrop:!1})):s&&_s(e,t,r)?qs(e,s.role,r):(le(e),he(e)),e.pieces.delete(t),Q(e)}function At(e,t,r){if(F(e.events.select,t),e.selected){if(e.selected===t&&!e.draggable.enabled){Q(e),e.hold.cancel();return}else if((e.selectable.enabled||r)&&e.selected!==t&&qr(e,e.selected,t)){e.stats.dragged=!1;return}}(e.selectable.enabled||e.draggable.enabled)&&(Pr(e,t)||Pt(e,t))&&(Or(e,t),e.hold.start())}function Or(e,t){e.selected=t,Pt(e,t)?e.premovable.customDests||(e.premovable.dests=xr(e.pieces,t,e.premovable.castle)):e.premovable.dests=void 0}function Q(e){e.selected=void 0,e.premovable.dests=void 0,e.hold.cancel()}function Pr(e,t){let r=e.pieces.get(t);return!!r&&(e.movable.color==="both"||e.movable.color===r.color&&e.turnColor===r.color)}var Ot=(e,t,r)=>{var i,s;return t!==r&&Pr(e,t)&&(e.movable.free||!!(!((s=(i=e.movable.dests)===null||i===void 0?void 0:i.get(t))===null||s===void 0)&&s.includes(r)))};function Os(e,t,r){let i=e.pieces.get(t);return!!i&&(t===r||!e.pieces.has(r))&&(e.movable.color==="both"||e.movable.color===i.color&&e.turnColor===i.color)}function Pt(e,t){let r=e.pieces.get(t);return!!r&&e.premovable.enabled&&e.movable.color===r.color&&e.turnColor!==r.color}function Ps(e,t,r){var i,s;let n=(s=(i=e.premovable.customDests)===null||i===void 0?void 0:i.get(t))!==null&&s!==void 0?s:xr(e.pieces,t,e.premovable.castle);return t!==r&&Pt(e,t)&&n.includes(r)}function _s(e,t,r){let i=e.pieces.get(t),s=e.pieces.get(r);return!!i&&(!s||s.color!==e.movable.color)&&e.predroppable.enabled&&(i.role!=="pawn"||r[1]!=="1"&&r[1]!=="8")&&e.movable.color===i.color&&e.turnColor!==i.color}function Rs(e,t){let r=e.pieces.get(t);return!!r&&e.draggable.enabled&&(e.movable.color==="both"||e.movable.color===r.color&&(e.turnColor===r.color||e.premovable.enabled))}function Ns(e){let t=e.premovable.current;if(!t)return!1;let r=t[0],i=t[1],s=!1;if(Ot(e,r,i)){let n=Mr(e,r,i);if(n){let o={premove:!0};n!==!0&&(o.captured=n),F(e.movable.events.after,r,i,o),s=!0}}return le(e),s}function Ts(e,t){let r=e.predroppable.current,i=!1;if(!r)return!1;if(t(r)){let s={role:r.role,color:e.movable.color};qt(e,s,r.key)&&(F(e.movable.events.afterNewPiece,r.role,r.key,{premove:!1,predrop:!0}),i=!0)}return he(e),i}function _t(e){le(e),he(e),Q(e)}function _r(e){e.movable.color=e.movable.dests=e.animation.current=void 0,_t(e)}function ve(e,t,r){let i=Math.floor(8*(e[0]-r.left)/r.width);t||(i=7-i);let s=7-Math.floor(8*(e[1]-r.top)/r.height);return t||(s=7-s),i>=0&&i<8&&s>=0&&s<8?j([i,s]):void 0}function Bs(e,t,r,i){let s=B(e),n=mr.filter(l=>Sr(s[0],s[1],l[0],l[1])||kr(s[0],s[1],l[0],l[1])),o=n.map(l=>br(j(l),r,i)).map(l=>Pe(t,l)),[,a]=o.reduce((l,u,f)=>l[0]<u?l:[u,f],[o[0],0]);return j(n[a])}var V=e=>e.orientation==="white",Rr="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",Ls={p:"pawn",r:"rook",n:"knight",b:"bishop",q:"queen",k:"king"},zs={pawn:"p",rook:"r",knight:"n",bishop:"b",queen:"q",king:"k"};function Nr(e){e==="start"&&(e=Rr);let t=new Map,r=7,i=0;for(let s of e)switch(s){case" ":case"[":return t;case"/":if(--r,r<0)return t;i=0;break;case"~":{let n=t.get(j([i-1,r]));n&&(n.promoted=!0);break}default:{let n=s.charCodeAt(0);if(n<57)i+=n-48;else{let o=s.toLowerCase();t.set(j([i,r]),{role:Ls[o],color:s===o?"black":"white"}),++i}}}return t}function Ks(e){return ns.map(t=>Fe.map(r=>{let i=e.get(r+t);if(i){let s=zs[i.role];return i.color==="white"&&(s=s.toUpperCase()),i.promoted&&(s+="~"),s}else return"1"}).join("")).join("/").replace(/1{2,}/g,t=>t.length.toString())}function Tr(e,t){t.animation&&(Rt(e.animation,t.animation),(e.animation.duration||0)<70&&(e.animation.enabled=!1))}function Br(e,t){var r,i,s;if(!((r=t.movable)===null||r===void 0)&&r.dests&&(e.movable.dests=void 0),!((i=t.drawable)===null||i===void 0)&&i.autoShapes&&(e.drawable.autoShapes=[]),Rt(e,t),t.fen&&(e.pieces=Nr(t.fen),e.drawable.shapes=((s=t.drawable)===null||s===void 0?void 0:s.shapes)||[]),"check"in t&&Es(e,t.check||!1),"lastMove"in t&&!t.lastMove?e.lastMove=void 0:t.lastMove&&(e.lastMove=t.lastMove),e.selected&&Or(e,e.selected),Tr(e,t),!e.movable.rookCastle&&e.movable.dests){let n=e.movable.color==="white"?"1":"8",o="e"+n,a=e.movable.dests.get(o),l=e.pieces.get(o);if(!a||!l||l.role!=="king")return;e.movable.dests.set(o,a.filter(u=>!(u==="a"+n&&a.includes("c"+n))&&!(u==="h"+n&&a.includes("g"+n))))}}function Rt(e,t){for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&(Object.prototype.hasOwnProperty.call(e,r)&&Lr(e[r])&&Lr(t[r])?Rt(e[r],t[r]):e[r]=t[r])}function Lr(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}var be=(e,t)=>t.animation.enabled?Is(e,t):ce(e,t);function ce(e,t){let r=e(t);return t.dom.redraw(),r}var Nt=(e,t)=>({key:e,pos:B(e),piece:t}),Ds=(e,t)=>t.sort((r,i)=>Pe(e.pos,r.pos)-Pe(e.pos,i.pos))[0];function $s(e,t){let r=new Map,i=[],s=new Map,n=[],o=[],a=new Map,l,u,f;for(let[p,k]of e)a.set(p,Nt(p,k));for(let p of Ct)l=t.pieces.get(p),u=a.get(p),l?u?xt(l,u.piece)||(n.push(u),o.push(Nt(p,l))):o.push(Nt(p,l)):u&&n.push(u);for(let p of o)u=Ds(p,n.filter(k=>xt(p.piece,k.piece))),u&&(f=[u.pos[0]-p.pos[0],u.pos[1]-p.pos[1]],r.set(p.key,f.concat(f)),i.push(u.key));for(let p of n)i.includes(p.key)||s.set(p.key,p.piece);return{anims:r,fadings:s}}function zr(e,t){let r=e.animation.current;if(r===void 0){e.dom.destroyed||e.dom.redrawNow();return}let i=1-(t-r.start)*r.frequency;if(i<=0)e.animation.current=void 0,e.dom.redrawNow();else{let s=Ws(i);for(let n of r.plan.anims.values())n[2]=n[0]*s,n[3]=n[1]*s;e.dom.redrawNow(!0),requestAnimationFrame((n=performance.now())=>zr(e,n))}}function Is(e,t){let r=new Map(t.pieces),i=e(t),s=$s(r,t);if(s.anims.size||s.fadings.size){let n=t.animation.current&&t.animation.current.start;t.animation.current={start:performance.now(),frequency:1/t.animation.duration,plan:s},n||zr(t,performance.now())}else t.dom.redraw();return i}var Ws=e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,Us=["green","red","blue","yellow"];function Fs(e,t){if(t.touches&&t.touches.length>1)return;t.stopPropagation(),t.preventDefault(),t.ctrlKey?Q(e):_t(e);let r=me(t),i=ve(r,V(e),e.dom.bounds());i&&(e.drawable.current={orig:i,pos:r,brush:js(t),snapToValidMove:e.drawable.defaultSnapToValidMove},Kr(e))}function Kr(e){requestAnimationFrame(()=>{let t=e.drawable.current;if(t){let r=ve(t.pos,V(e),e.dom.bounds());r||(t.snapToValidMove=!1);let i=t.snapToValidMove?Bs(t.orig,t.pos,V(e),e.dom.bounds()):r;i!==t.mouseSq&&(t.mouseSq=i,t.dest=i!==t.orig?i:void 0,e.dom.redrawNow()),Kr(e)}})}function Vs(e,t){e.drawable.current&&(e.drawable.current.pos=me(t))}function Hs(e){let t=e.drawable.current;t&&(t.mouseSq&&Qs(e.drawable,t),Dr(e))}function Dr(e){e.drawable.current&&(e.drawable.current=void 0,e.dom.redraw())}function Gs(e){e.drawable.shapes.length&&(e.drawable.shapes=[],e.dom.redraw(),$r(e.drawable))}function js(e){var t;let r=(e.shiftKey||e.ctrlKey)&&vr(e),i=e.altKey||e.metaKey||((t=e.getModifierState)===null||t===void 0?void 0:t.call(e,"AltGraph"));return Us[(r?1:0)+(i?2:0)]}function Qs(e,t){let r=s=>s.orig===t.orig&&s.dest===t.dest,i=e.shapes.find(r);i&&(e.shapes=e.shapes.filter(s=>!r(s))),(!i||i.brush!==t.brush)&&e.shapes.push({orig:t.orig,dest:t.dest,brush:t.brush}),$r(e)}function $r(e){e.onChange&&e.onChange(e.shapes)}function Ys(e,t){if(!(e.trustAllEvents||t.isTrusted)||t.buttons!==void 0&&t.buttons>1||t.touches&&t.touches.length>1)return;let r=e.dom.bounds(),i=me(t),s=ve(i,V(e),r);if(!s)return;let n=e.pieces.get(s),o=e.selected;if(!o&&e.drawable.enabled&&(e.drawable.eraseOnClick||!n||n.color!==e.turnColor)&&Gs(e),t.cancelable!==!1&&(!t.touches||e.blockTouchScroll||n||o||Zs(e,i)))t.preventDefault();else if(t.touches)return;let a=!!e.premovable.current,l=!!e.predroppable.current;e.stats.ctrlKey=t.ctrlKey,e.selected&&Ot(e,e.selected,s)?be(p=>At(p,s),e):At(e,s);let u=e.selected===s,f=Wr(e,s);if(n&&f&&u&&Rs(e,s)){e.draggable.current={orig:s,piece:n,origPos:i,pos:i,started:e.draggable.autoDistance&&e.stats.dragged,element:f,previouslySelected:o,originTarget:t.target,keyHasChanged:!1},f.cgDragging=!0,f.classList.add("dragging");let p=e.dom.elements.ghost;p&&(p.className=`ghost ${n.color} ${n.role}`,J(p,_e(r)(B(s),V(e))),Et(p,!0)),Tt(e)}else a&&le(e),l&&he(e);e.dom.redraw()}function Zs(e,t){let r=V(e),i=e.dom.bounds(),s=Math.pow(i.width/8,2);for(let n of e.pieces.keys()){let o=br(n,r,i);if(Pe(o,t)<=s)return!0}return!1}function Xs(e,t,r,i){let s="a0";e.pieces.set(s,t),e.dom.redraw();let n=me(r);e.draggable.current={orig:s,piece:t,origPos:n,pos:n,started:!0,element:()=>Wr(e,s),originTarget:r.target,newPiece:!0,force:!!i,keyHasChanged:!1},Tt(e)}function Tt(e){requestAnimationFrame(()=>{var t;let r=e.draggable.current;if(!r)return;!((t=e.animation.current)===null||t===void 0)&&t.plan.anims.has(r.orig)&&(e.animation.current=void 0);let i=e.pieces.get(r.orig);if(!i||!xt(i,r.piece))He(e);else if(!r.started&&Pe(r.pos,r.origPos)>=Math.pow(e.draggable.distance,2)&&(r.started=!0),r.started){if(typeof r.element=="function"){let n=r.element();if(!n)return;n.cgDragging=!0,n.classList.add("dragging"),r.element=n}let s=e.dom.bounds();J(r.element,[r.pos[0]-s.left-s.width/16,r.pos[1]-s.top-s.height/16]),r.keyHasChanged||(r.keyHasChanged=r.orig!==ve(r.pos,V(e),s))}Tt(e)})}function Js(e,t){e.draggable.current&&(!t.touches||t.touches.length<2)&&(e.draggable.current.pos=me(t))}function en(e,t){let r=e.draggable.current;if(!r)return;if(t.type==="touchend"&&t.cancelable!==!1&&t.preventDefault(),t.type==="touchend"&&r.originTarget!==t.target&&!r.newPiece){e.draggable.current=void 0;return}le(e),he(e);let i=me(t)||r.pos,s=ve(i,V(e),e.dom.bounds());s&&r.started&&r.orig!==s?r.newPiece?Ar(e,r.orig,s,r.force):(e.stats.ctrlKey=t.ctrlKey,qr(e,r.orig,s)&&(e.stats.dragged=!0)):r.newPiece?e.pieces.delete(r.orig):e.draggable.deleteOnDropOff&&!s&&(e.pieces.delete(r.orig),F(e.events.change)),(r.orig===r.previouslySelected||r.keyHasChanged)&&(r.orig===s||!s)?Q(e):e.selectable.enabled||Q(e),Ir(e),e.draggable.current=void 0,e.dom.redraw()}function He(e){let t=e.draggable.current;t&&(t.newPiece&&e.pieces.delete(t.orig),e.draggable.current=void 0,Q(e),Ir(e),e.dom.redraw())}function Ir(e){let t=e.dom.elements;t.ghost&&Et(t.ghost,!1)}function Wr(e,t){let r=e.dom.elements.board.firstChild;for(;r;){if(r.cgKey===t&&r.tagName==="PIECE")return r;r=r.nextSibling}}function tn(e,t){e.exploding={stage:1,keys:t},e.dom.redraw(),setTimeout(()=>{Ur(e,2),setTimeout(()=>Ur(e,void 0),120)},120)}function Ur(e,t){e.exploding&&(t?e.exploding.stage=t:e.exploding=void 0,e.dom.redraw())}function rn(e,t){function r(){Ss(e),t()}return{set(i){i.orientation&&i.orientation!==e.orientation&&r(),Tr(e,i),(i.fen?be:ce)(s=>Br(s,i),e)},state:e,getFen:()=>Ks(e.pieces),toggleOrientation:r,setPieces(i){be(s=>xs(s,i),e)},selectSquare(i,s){i?be(n=>At(n,i,s),e):e.selected&&(Q(e),e.dom.redraw())},move(i,s){be(n=>Er(n,i,s),e)},newPiece(i,s){be(n=>qt(n,i,s),e)},playPremove(){if(e.premovable.current){if(be(Ns,e))return!0;e.dom.redraw()}return!1},playPredrop(i){if(e.predroppable.current){let s=Ts(e,i);return e.dom.redraw(),s}return!1},cancelPremove(){ce(le,e)},cancelPredrop(){ce(he,e)},cancelMove(){ce(i=>{_t(i),He(i)},e)},stop(){ce(i=>{_r(i),He(i)},e)},explode(i){tn(e,i)},setAutoShapes(i){ce(s=>s.drawable.autoShapes=i,e)},setShapes(i){ce(s=>s.drawable.shapes=i,e)},getKeyAtDomPos(i){return ve(i,V(e),e.dom.bounds())},redrawAll:t,dragNewPiece(i,s,n){Xs(e,i,s,n)},destroy(){_r(e),e.dom.unbind&&e.dom.unbind(),e.dom.destroyed=!0}}}function sn(){return{pieces:Nr(Rr),orientation:"white",turnColor:"white",coordinates:!0,coordinatesOnSquares:!1,ranksPosition:"right",autoCastle:!0,viewOnly:!1,disableContextMenu:!1,addPieceZIndex:!1,blockTouchScroll:!1,pieceKey:!1,trustAllEvents:!1,highlight:{lastMove:!0,check:!0},animation:{enabled:!0,duration:200},movable:{free:!0,color:"both",showDests:!0,events:{},rookCastle:!0},premovable:{enabled:!0,showDests:!0,castle:!0,events:{}},predroppable:{enabled:!1,events:{}},draggable:{enabled:!0,distance:3,autoDistance:!0,showGhost:!0,deleteOnDropOff:!1},dropmode:{active:!1},selectable:{enabled:!0},stats:{dragged:!("ontouchstart"in window)},events:{},drawable:{enabled:!0,visible:!0,defaultSnapToValidMove:!0,eraseOnClick:!0,shapes:[],autoShapes:[],brushes:{green:{key:"g",color:"#15781B",opacity:1,lineWidth:10},red:{key:"r",color:"#882020",opacity:1,lineWidth:10},blue:{key:"b",color:"#003088",opacity:1,lineWidth:10},yellow:{key:"y",color:"#e68f00",opacity:1,lineWidth:10},paleBlue:{key:"pb",color:"#003088",opacity:.4,lineWidth:15},paleGreen:{key:"pg",color:"#15781B",opacity:.4,lineWidth:15},paleRed:{key:"pr",color:"#882020",opacity:.4,lineWidth:15},paleGrey:{key:"pgr",color:"#4a4a4a",opacity:.35,lineWidth:15},purple:{key:"purple",color:"#68217a",opacity:.65,lineWidth:10},pink:{key:"pink",color:"#ee2080",opacity:.5,lineWidth:10},white:{key:"white",color:"white",opacity:1,lineWidth:10}},prevSvgHash:""},hold:ls()}}var Fr={hilitePrimary:{key:"hilitePrimary",color:"#3291ff",opacity:1,lineWidth:1},hiliteWhite:{key:"hiliteWhite",color:"#ffffff",opacity:1,lineWidth:1}};function nn(){let e=K("defs"),t=U(K("filter"),{id:"cg-filter-blur"});return t.appendChild(U(K("feGaussianBlur"),{stdDeviation:"0.019"})),e.appendChild(t),e}function on(e,t,r){var i;let s=e.drawable,n=s.current,o=n&&n.mouseSq?n:void 0,a=new Map,l=e.dom.bounds(),u=s.autoShapes.filter(w=>!w.piece);for(let w of s.shapes.concat(u).concat(o?[o]:[])){if(!w.dest)continue;let c=(i=a.get(w.dest))!==null&&i!==void 0?i:new Set,d=Qe(je(B(w.orig),e.orientation),l),m=Qe(je(B(w.dest),e.orientation),l);c.add(Lt(d,m)),a.set(w.dest,c)}let f=s.shapes.concat(u).map(w=>({shape:w,current:!1,hash:Vr(w,Bt(w.dest,a),!1,l)}));o&&f.push({shape:o,current:!0,hash:Vr(o,Bt(o.dest,a),!0,l)});let p=f.map(w=>w.hash).join(";");if(p===e.drawable.prevSvgHash)return;e.drawable.prevSvgHash=p;let k=t.querySelector("defs");an(s,f,k),ln(f,t.querySelector("g"),r.querySelector("g"),w=>un(e,w,s.brushes,a,l))}function an(e,t,r){var i;let s=new Map,n;for(let l of t.filter(u=>u.shape.dest&&u.shape.brush))n=Gr(e.brushes[l.shape.brush],l.shape.modifiers),!((i=l.shape.modifiers)===null||i===void 0)&&i.hilite&&s.set(Ge(n).key,Ge(n)),s.set(n.key,n);let o=new Set,a=r.firstElementChild;for(;a;)o.add(a.getAttribute("cgKey")),a=a.nextElementSibling;for(let[l,u]of s.entries())o.has(l)||r.appendChild(fn(u))}function ln(e,t,r,i){let s=new Map;for(let n of e)s.set(n.hash,!1);for(let n of[t,r]){let o=[],a=n.firstElementChild,l;for(;a;)l=a.getAttribute("cgHash"),s.has(l)?s.set(l,!0):o.push(a),a=a.nextElementSibling;for(let u of o)n.removeChild(u)}for(let n of e.filter(o=>!s.get(o.hash)))for(let o of i(n))o.isCustom?r.appendChild(o.el):t.appendChild(o.el)}function Vr({orig:e,dest:t,brush:r,piece:i,modifiers:s,customSvg:n,label:o},a,l,u){var f,p;return[u.width,u.height,l,e,t,r,a&&"-",i&&hn(i),s&&cn(s),n&&`custom-${Hr(n.html)},${(p=(f=n.center)===null||f===void 0?void 0:f[0])!==null&&p!==void 0?p:"o"}`,o&&`label-${Hr(o.text)}`].filter(k=>k).join(",")}function hn(e){return[e.color,e.role,e.scale].filter(t=>t).join(",")}function cn(e){return[e.lineWidth,e.hilite&&"*"].filter(t=>t).join(",")}function Hr(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r)>>>0;return t.toString()}function un(e,{shape:t,current:r,hash:i},s,n,o){var a,l;let u=Qe(je(B(t.orig),e.orientation),o),f=t.dest?Qe(je(B(t.dest),e.orientation),o):u,p=t.brush&&Gr(s[t.brush],t.modifiers),k=n.get(t.dest),w=[];if(p){let c=U(K("g"),{cgHash:i});w.push({el:c}),u[0]!==f[0]||u[1]!==f[1]?c.appendChild(pn(t,p,u,f,r,Bt(t.dest,n))):c.appendChild(dn(s[t.brush],u,r,o))}if(t.label){let c=t.label;(a=c.fill)!==null&&a!==void 0||(c.fill=t.brush&&s[t.brush].color);let d=t.brush?void 0:"tr";w.push({el:mn(c,i,u,f,k,d),isCustom:!0})}if(t.customSvg){let c=(l=t.customSvg.center)!==null&&l!==void 0?l:"orig",[d,m]=c==="label"?Qr(u,f,k).map(y=>y-.5):c==="dest"?f:u,C=U(K("g"),{transform:`translate(${d},${m})`,cgHash:i});C.innerHTML=`<svg width="1" height="1" viewBox="0 0 100 100">${t.customSvg.html}</svg>`,w.push({el:C,isCustom:!0})}return w}function dn(e,t,r,i){let s=gn(),n=(i.width+i.height)/(4*Math.max(i.width,i.height));return U(K("circle"),{stroke:e.color,"stroke-width":s[r?0:1],fill:"none",opacity:jr(e,r),cx:t[0],cy:t[1],r:n-s[1]/2})}function Ge(e){return["#ffffff","#fff","white"].includes(e.color)?Fr.hilitePrimary:Fr.hiliteWhite}function pn(e,t,r,i,s,n){var o;function a(f){var p;let k=bn(n&&!s),w=i[0]-r[0],c=i[1]-r[1],d=Math.atan2(c,w),m=Math.cos(d)*k,C=Math.sin(d)*k;return U(K("line"),{stroke:f?Ge(t).color:t.color,"stroke-width":vn(t,s)+(f?.04:0),"stroke-linecap":"round","marker-end":`url(#arrowhead-${f?Ge(t).key:t.key})`,opacity:!((p=e.modifiers)===null||p===void 0)&&p.hilite?1:jr(t,s),x1:r[0],y1:r[1],x2:i[0]-m,y2:i[1]-C})}if(!(!((o=e.modifiers)===null||o===void 0)&&o.hilite))return a(!1);let l=K("g"),u=U(K("g"),{filter:"url(#cg-filter-blur)"});return u.appendChild(wn(r,i)),u.appendChild(a(!0)),l.appendChild(u),l.appendChild(a(!1)),l}function fn(e){let t=U(K("marker"),{id:"arrowhead-"+e.key,orient:"auto",overflow:"visible",markerWidth:4,markerHeight:4,refX:e.key.startsWith("hilite")?1.86:2.05,refY:2});return t.appendChild(U(K("path"),{d:"M0,0 V4 L3,2 Z",fill:e.color})),t.setAttribute("cgKey",e.key),t}function mn(e,t,r,i,s,n){var o;let a=.4*.75**e.text.length,l=Qr(r,i,s),u=n==="tr"?.4:0,f=U(K("g"),{transform:`translate(${l[0]+u},${l[1]-u})`,cgHash:t});f.appendChild(U(K("circle"),{r:.4/2,"fill-opacity":n?1:.8,"stroke-opacity":n?1:.7,"stroke-width":.03,fill:(o=e.fill)!==null&&o!==void 0?o:"#666",stroke:"white"}));let p=U(K("text"),{"font-size":a,"font-family":"Noto Sans","text-anchor":"middle",fill:"white",y:.13*.75**e.text.length});return p.innerHTML=e.text,f.appendChild(p),f}function je(e,t){return t==="white"?e:[7-e[0],7-e[1]]}function Bt(e,t){return(e&&t.has(e)&&t.get(e).size>1)===!0}function K(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function U(e,t){for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.setAttribute(r,t[r]);return e}function Gr(e,t){return t?{color:e.color,opacity:Math.round(e.opacity*10)/10,lineWidth:Math.round(t.lineWidth||e.lineWidth),key:[e.key,t.lineWidth].filter(r=>r).join("")}:e}function gn(){return[3/64,4/64]}function vn(e,t){return(e.lineWidth||10)*(t?.85:1)/64}function jr(e,t){return(e.opacity||1)*(t?.9:1)}function bn(e){return(e?20:10)/64}function Qe(e,t){let r=Math.min(1,t.width/t.height),i=Math.min(1,t.height/t.width);return[(e[0]-3.5)*r,(3.5-e[1])*i]}function wn(e,t){let r={from:[Math.floor(Math.min(e[0],t[0])),Math.floor(Math.min(e[1],t[1]))],to:[Math.ceil(Math.max(e[0],t[0])),Math.ceil(Math.max(e[1],t[1]))]};return U(K("rect"),{x:r.from[0],y:r.from[1],width:r.to[0]-r.from[0],height:r.to[1]-r.from[1],fill:"none",stroke:"none"})}function Lt(e,t,r=!0){let i=Math.atan2(t[1]-e[1],t[0]-e[0])+Math.PI;return r?(Math.round(i*8/Math.PI)+16)%16:i}function kn(e,t){return Math.sqrt([e[0]-t[0],e[1]-t[1]].reduce((r,i)=>r+i*i,0))}function Qr(e,t,r){let i=kn(e,t),s=Lt(e,t,!1);if(r&&(i-=33/64,r.size>1)){i-=10/64;let n=Lt(e,t);(r.has((n+1)%16)||r.has((n+15)%16))&&n&1&&(i-=.4)}return[e[0]-Math.cos(s)*i,e[1]-Math.sin(s)*i].map(n=>n+.5)}function yn(e,t){e.innerHTML="",e.classList.add("cg-wrap");for(let l of ss)e.classList.toggle("orientation-"+l,t.orientation===l);e.classList.toggle("manipulable",!t.viewOnly);let r=re("cg-container");e.appendChild(r);let i=re("cg-board");r.appendChild(i);let s,n,o;if(t.drawable.visible&&(s=U(K("svg"),{class:"cg-shapes",viewBox:"-4 -4 8 8",preserveAspectRatio:"xMidYMid slice"}),s.appendChild(nn()),s.appendChild(K("g")),n=U(K("svg"),{class:"cg-custom-svgs",viewBox:"-3.5 -3.5 8 8",preserveAspectRatio:"xMidYMid slice"}),n.appendChild(K("g")),o=re("cg-auto-pieces"),r.appendChild(s),r.appendChild(n),r.appendChild(o)),t.coordinates){let l=t.orientation==="black"?" black":"",u=t.ranksPosition==="left"?" left":"";if(t.coordinatesOnSquares){let f=t.orientation==="white"?p=>p+1:p=>8-p;Fe.forEach((p,k)=>r.appendChild(zt(Ve.map(w=>p+w),"squares rank"+f(k)+l+u)))}else r.appendChild(zt(Ve,"ranks"+l+u)),r.appendChild(zt(Fe,"files"+l))}let a;return t.draggable.enabled&&t.draggable.showGhost&&(a=re("piece","ghost"),Et(a,!1),r.appendChild(a)),{board:i,container:r,wrap:e,ghost:a,svg:s,customSvg:n,autoPieces:o}}function zt(e,t){let r=re("coords",t),i;for(let s of e)i=re("coord"),i.textContent=s,r.appendChild(i);return r}function Cn(e,t){if(!e.dropmode.active)return;le(e),he(e);let r=e.dropmode.piece;if(r){e.pieces.set("a0",r);let i=me(t),s=i&&ve(i,V(e),e.dom.bounds());s&&Ar(e,"a0",s)}e.dom.redraw()}function Sn(e,t){let r=e.dom.elements.board;if("ResizeObserver"in window&&new ResizeObserver(t).observe(e.dom.elements.wrap),(e.disableContextMenu||e.drawable.enabled)&&r.addEventListener("contextmenu",s=>s.preventDefault()),e.viewOnly)return;let i=En(e);r.addEventListener("touchstart",i,{passive:!1}),r.addEventListener("mousedown",i,{passive:!1})}function xn(e,t){let r=[];if("ResizeObserver"in window||r.push(Ne(document.body,"chessground.resize",t)),!e.viewOnly){let i=Yr(e,Js,Vs),s=Yr(e,en,Hs);for(let o of["touchmove","mousemove"])r.push(Ne(document,o,i));for(let o of["touchend","mouseup"])r.push(Ne(document,o,s));let n=()=>e.dom.bounds.clear();r.push(Ne(document,"scroll",n,{capture:!0,passive:!0})),r.push(Ne(window,"resize",n,{passive:!0}))}return()=>r.forEach(i=>i())}function Ne(e,t,r,i){return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}var En=e=>t=>{e.draggable.current?He(e):e.drawable.current?Dr(e):t.shiftKey||vr(t)?e.drawable.enabled&&Fs(e,t):e.viewOnly||(e.dropmode.active?Cn(e,t):Ys(e,t))},Yr=(e,t,r)=>i=>{e.drawable.current?e.drawable.enabled&&r(e,i):e.viewOnly||t(e,i)};function Mn(e){let t=V(e),r=_e(e.dom.bounds()),i=e.dom.elements.board,s=e.pieces,n=e.animation.current,o=n?n.plan.anims:new Map,a=n?n.plan.fadings:new Map,l=e.draggable.current,u=An(e),f=new Set,p=new Set,k=new Map,w=new Map,c,d,m,C,y,M,x,S,E,P;for(d=i.firstChild;d;){if(c=d.cgKey,Xr(d))if(m=s.get(c),y=o.get(c),M=a.get(c),C=d.cgPiece,d.cgDragging&&(!l||l.orig!==c)&&(d.classList.remove("dragging"),J(d,r(B(c),t)),d.cgDragging=!1),!M&&d.cgFading&&(d.cgFading=!1,d.classList.remove("fading")),m){if(y&&d.cgAnimating&&C===Te(m)){let v=B(c);v[0]+=y[2],v[1]+=y[3],d.classList.add("anim"),J(d,r(v,t))}else d.cgAnimating&&(d.cgAnimating=!1,d.classList.remove("anim"),J(d,r(B(c),t)),e.addPieceZIndex&&(d.style.zIndex=Kt(B(c),t)));C===Te(m)&&(!M||!d.cgFading)?f.add(c):M&&C===Te(M)?(d.classList.add("fading"),d.cgFading=!0):Dt(k,C,d)}else Dt(k,C,d);else if(Jr(d)){let v=d.className;u.get(c)===v?p.add(c):Dt(w,v,d)}d=d.nextSibling}for(let[v,_]of u)if(!p.has(v)){E=w.get(_),P=E&&E.pop();let N=r(B(v),t);if(P)P.cgKey=v,J(P,N);else{let R=re("square",_);R.cgKey=v,J(R,N),i.insertBefore(R,i.firstChild)}}for(let[v,_]of s)if(y=o.get(v),!f.has(v))if(x=k.get(Te(_)),S=x&&x.pop(),S){S.cgKey=v,S.cgFading&&(S.classList.remove("fading"),S.cgFading=!1);let N=B(v);e.addPieceZIndex&&(S.style.zIndex=Kt(N,t)),y&&(S.cgAnimating=!0,S.classList.add("anim"),N[0]+=y[2],N[1]+=y[3]),J(S,r(N,t))}else{let N=Te(_),R=re("piece",N),D=B(v);R.cgPiece=N,R.cgKey=v,y&&(R.cgAnimating=!0,D[0]+=y[2],D[1]+=y[3]),J(R,r(D,t)),e.addPieceZIndex&&(R.style.zIndex=Kt(D,t)),i.appendChild(R)}for(let v of k.values())ei(e,v);for(let v of w.values())ei(e,v)}function qn(e){let t=V(e),r=_e(e.dom.bounds()),i=e.dom.elements.board.firstChild;for(;i;)(Xr(i)&&!i.cgAnimating||Jr(i))&&J(i,r(B(i.cgKey),t)),i=i.nextSibling}function Zr(e){var t,r;let i=e.dom.elements.wrap.getBoundingClientRect(),s=e.dom.elements.container,n=i.height/i.width,o=Math.floor(i.width*window.devicePixelRatio/8)*8/window.devicePixelRatio,a=o*n;s.style.width=o+"px",s.style.height=a+"px",e.dom.bounds.clear(),(t=e.addDimensionsCssVarsTo)===null||t===void 0||t.style.setProperty("---cg-width",o+"px"),(r=e.addDimensionsCssVarsTo)===null||r===void 0||r.style.setProperty("---cg-height",a+"px")}var Xr=e=>e.tagName==="PIECE",Jr=e=>e.tagName==="SQUARE";function ei(e,t){for(let r of t)e.dom.elements.board.removeChild(r)}function Kt(e,t){let r=e[1];return`${t?10-r:3+r}`}var Te=e=>`${e.color} ${e.role}`;function An(e){var t,r,i;let s=new Map;if(e.lastMove&&e.highlight.lastMove)for(let a of e.lastMove)ie(s,a,"last-move");if(e.check&&e.highlight.check&&ie(s,e.check,"check"),e.selected&&(ie(s,e.selected,"selected"),e.movable.showDests)){let a=(t=e.movable.dests)===null||t===void 0?void 0:t.get(e.selected);if(a)for(let u of a)ie(s,u,"move-dest"+(e.pieces.has(u)?" oc":""));let l=(i=(r=e.premovable.customDests)===null||r===void 0?void 0:r.get(e.selected))!==null&&i!==void 0?i:e.premovable.dests;if(l)for(let u of l)ie(s,u,"premove-dest"+(e.pieces.has(u)?" oc":""))}let n=e.premovable.current;if(n)for(let a of n)ie(s,a,"current-premove");else e.predroppable.current&&ie(s,e.predroppable.current.key,"current-premove");let o=e.exploding;if(o)for(let a of o.keys)ie(s,a,"exploding"+o.stage);return e.highlight.custom&&e.highlight.custom.forEach((a,l)=>{ie(s,l,a)}),s}function ie(e,t,r){let i=e.get(t);i?e.set(t,`${i} ${r}`):e.set(t,r)}function Dt(e,t,r){let i=e.get(t);i?i.push(r):e.set(t,[r])}function On(e,t,r){let i=new Map,s=[];for(let a of e)i.set(a.hash,!1);let n=t.firstElementChild,o;for(;n;)o=n.getAttribute("cgHash"),i.has(o)?i.set(o,!0):s.push(n),n=n.nextElementSibling;for(let a of s)t.removeChild(a);for(let a of e)i.get(a.hash)||t.appendChild(r(a))}function Pn(e,t){let r=e.drawable.autoShapes.filter(i=>i.piece).map(i=>({shape:i,hash:Nn(i),current:!1}));On(r,t,i=>Rn(e,i,e.dom.bounds()))}function _n(e){var t;let r=V(e),i=_e(e.dom.bounds()),s=(t=e.dom.elements.autoPieces)===null||t===void 0?void 0:t.firstChild;for(;s;)gr(s,i(B(s.cgKey),r),s.cgScale),s=s.nextSibling}function Rn(e,{shape:t,hash:r},i){var s,n,o;let a=t.orig,l=(s=t.piece)===null||s===void 0?void 0:s.role,u=(n=t.piece)===null||n===void 0?void 0:n.color,f=(o=t.piece)===null||o===void 0?void 0:o.scale,p=re("piece",`${l} ${u}`);return p.setAttribute("cgHash",r),p.cgKey=a,p.cgScale=f,gr(p,_e(i)(B(a),V(e)),f),p}var Nn=e=>{var t,r,i;return[e.orig,(t=e.piece)===null||t===void 0?void 0:t.role,(r=e.piece)===null||r===void 0?void 0:r.color,(i=e.piece)===null||i===void 0?void 0:i.scale].join(",")};function Tn(e,t){let r=sn();Br(r,t||{});function i(){let s="dom"in r?r.dom.unbind:void 0,n=yn(e,r),o=as(()=>n.board.getBoundingClientRect()),a=f=>{Mn(u),n.autoPieces&&Pn(u,n.autoPieces),!f&&n.svg&&on(u,n.svg,n.customSvg)},l=()=>{Zr(u),qn(u),n.autoPieces&&_n(u)},u=r;return u.dom={elements:n,bounds:o,redraw:Bn(a),redrawNow:a,unbind:s},u.drawable.prevSvgHash="",Zr(u),a(!1),Sn(u,l),s||(u.dom.unbind=xn(u,l)),u.events.insert&&u.events.insert(n),u}return rn(i(),i)}function Bn(e){let t=!1;return()=>{t||(t=!0,requestAnimationFrame(()=>{e(),t=!1}))}}function Ln(e,t){return document.createElement(e,t)}function zn(e,t,r){return document.createElementNS(e,t,r)}function Kn(){return we(document.createDocumentFragment())}function Dn(e){return document.createTextNode(e)}function $n(e){return document.createComment(e)}function In(e,t,r){if(se(e)){let i=e;for(;i&&se(i);)i=we(i).parent;e=i??e}se(t)&&(t=we(t,e)),r&&se(r)&&(r=we(r).firstChildNode),e.insertBefore(t,r)}function Wn(e,t){e.removeChild(t)}function Un(e,t){se(t)&&(t=we(t,e)),e.appendChild(t)}function ti(e){if(se(e)){for(;e&&se(e);)e=we(e).parent;return e??null}return e.parentNode}function Fn(e){var t;if(se(e)){let r=we(e),i=ti(r);if(i&&r.lastChildNode){let s=Array.from(i.childNodes),n=s.indexOf(r.lastChildNode);return(t=s[n+1])!==null&&t!==void 0?t:null}return null}return e.nextSibling}function Vn(e){return e.tagName}function Hn(e,t){e.textContent=t}function Gn(e){return e.textContent}function jn(e){return e.nodeType===1}function Qn(e){return e.nodeType===3}function Yn(e){return e.nodeType===8}function se(e){return e.nodeType===11}function we(e,t){var r,i,s;let n=e;return(r=n.parent)!==null&&r!==void 0||(n.parent=t??null),(i=n.firstChildNode)!==null&&i!==void 0||(n.firstChildNode=e.firstChild),(s=n.lastChildNode)!==null&&s!==void 0||(n.lastChildNode=e.lastChild),n}var Zn={createElement:Ln,createElementNS:zn,createTextNode:Dn,createDocumentFragment:Kn,createComment:$n,insertBefore:In,removeChild:Wn,appendChild:Un,parentNode:ti,nextSibling:Fn,tagName:Vn,setTextContent:Hn,getTextContent:Gn,isElement:jn,isText:Qn,isComment:Yn,isDocumentFragment:se};function Be(e,t,r,i,s){let n=t===void 0?void 0:t.key;return{sel:e,data:t,children:r,text:i,elm:s,key:n}}var Ye=Array.isArray;function Ze(e){return typeof e=="string"||typeof e=="number"||e instanceof String||e instanceof Number}function Xe(e){return e===void 0}function H(e){return e!==void 0}var $t=Be("",{},[],void 0,void 0);function Le(e,t){var r,i;let s=e.key===t.key,n=((r=e.data)===null||r===void 0?void 0:r.is)===((i=t.data)===null||i===void 0?void 0:i.is),o=e.sel===t.sel,a=!e.sel&&e.sel===t.sel?typeof e.text==typeof t.text:!0;return o&&s&&n&&a}function Xn(){throw new Error("The document fragment is not supported on this platform.")}function Jn(e,t){return e.isElement(t)}function eo(e,t){return e.isDocumentFragment(t)}function to(e,t,r){var i;let s={};for(let n=t;n<=r;++n){let o=(i=e[n])===null||i===void 0?void 0:i.key;o!==void 0&&(s[o]=n)}return s}var ro=["create","update","remove","destroy","pre","post"];function io(e,t,r){let i={create:[],update:[],remove:[],destroy:[],pre:[],post:[]},s=Zn;for(let c of ro)for(let d of e){let m=d[c];m!==void 0&&i[c].push(m)}function n(c){let d=c.id?"#"+c.id:"",m=c.getAttribute("class"),C=m?"."+m.split(" ").join("."):"";return Be(s.tagName(c).toLowerCase()+d+C,{},[],void 0,c)}function o(c){return Be(void 0,{},[],void 0,c)}function a(c,d){return function(){if(--d===0){let m=s.parentNode(c);m!==null&&s.removeChild(m,c)}}}function l(c,d){var m,C,y,M;let x,S=c.data;if(S!==void 0){let v=(m=S.hook)===null||m===void 0?void 0:m.init;H(v)&&(v(c),S=c.data)}let E=c.children,P=c.sel;if(P==="!")Xe(c.text)&&(c.text=""),c.elm=s.createComment(c.text);else if(P==="")c.elm=s.createTextNode(c.text);else if(P!==void 0){let v=P.indexOf("#"),_=P.indexOf(".",v),N=v>0?v:P.length,R=_>0?_:P.length,D=v!==-1||_!==-1?P.slice(0,Math.min(N,R)):P,X=c.elm=H(S)&&H(x=S.ns)?s.createElementNS(x,D,S):s.createElement(D,S);for(N<R&&X.setAttribute("id",P.slice(N+1,R)),_>0&&X.setAttribute("class",P.slice(R+1).replace(/\./g," ")),x=0;x<i.create.length;++x)i.create[x]($t,c);if(Ze(c.text)&&(!Ye(E)||E.length===0)&&s.appendChild(X,s.createTextNode(c.text)),Ye(E))for(x=0;x<E.length;++x){let di=E[x];di!=null&&s.appendChild(X,l(di,d))}let it=c.data.hook;H(it)&&((C=it.create)===null||C===void 0||C.call(it,$t,c),it.insert&&d.push(c))}else if(!((y=r==null?void 0:r.experimental)===null||y===void 0)&&y.fragments&&c.children){for(c.elm=((M=s.createDocumentFragment)!==null&&M!==void 0?M:Xn)(),x=0;x<i.create.length;++x)i.create[x]($t,c);for(x=0;x<c.children.length;++x){let v=c.children[x];v!=null&&s.appendChild(c.elm,l(v,d))}}else c.elm=s.createTextNode(c.text);return c.elm}function u(c,d,m,C,y,M){for(;C<=y;++C){let x=m[C];x!=null&&s.insertBefore(c,l(x,M),d)}}function f(c){var d,m;let C=c.data;if(C!==void 0){(m=(d=C==null?void 0:C.hook)===null||d===void 0?void 0:d.destroy)===null||m===void 0||m.call(d,c);for(let y=0;y<i.destroy.length;++y)i.destroy[y](c);if(c.children!==void 0)for(let y=0;y<c.children.length;++y){let M=c.children[y];M!=null&&typeof M!="string"&&f(M)}}}function p(c,d,m,C){for(var y,M;m<=C;++m){let x,S,E=d[m];if(E!=null)if(H(E.sel)){f(E),x=i.remove.length+1,S=a(E.elm,x);for(let v=0;v<i.remove.length;++v)i.remove[v](E,S);let P=(M=(y=E==null?void 0:E.data)===null||y===void 0?void 0:y.hook)===null||M===void 0?void 0:M.remove;H(P)?P(E,S):S()}else E.children?(f(E),p(c,E.children,0,E.children.length-1)):s.removeChild(c,E.elm)}}function k(c,d,m,C){let y=0,M=0,x=d.length-1,S=d[0],E=d[x],P=m.length-1,v=m[0],_=m[P],N,R,D,X;for(;y<=x&&M<=P;)S==null?S=d[++y]:E==null?E=d[--x]:v==null?v=m[++M]:_==null?_=m[--P]:Le(S,v)?(w(S,v,C),S=d[++y],v=m[++M]):Le(E,_)?(w(E,_,C),E=d[--x],_=m[--P]):Le(S,_)?(w(S,_,C),s.insertBefore(c,S.elm,s.nextSibling(E.elm)),S=d[++y],_=m[--P]):Le(E,v)?(w(E,v,C),s.insertBefore(c,E.elm,S.elm),E=d[--x],v=m[++M]):(N===void 0&&(N=to(d,y,x)),R=N[v.key],Xe(R)?(s.insertBefore(c,l(v,C),S.elm),v=m[++M]):Xe(N[_.key])?(s.insertBefore(c,l(_,C),s.nextSibling(E.elm)),_=m[--P]):(D=d[R],D.sel!==v.sel?s.insertBefore(c,l(v,C),S.elm):(w(D,v,C),d[R]=void 0,s.insertBefore(c,D.elm,S.elm)),v=m[++M]));M<=P&&(X=m[P+1]==null?null:m[P+1].elm,u(c,X,m,M,P,C)),y<=x&&p(c,d,y,x)}function w(c,d,m){var C,y,M,x,S,E,P,v;let _=(C=d.data)===null||C===void 0?void 0:C.hook;(y=_==null?void 0:_.prepatch)===null||y===void 0||y.call(_,c,d);let N=d.elm=c.elm;if(c===d)return;if(d.data!==void 0||H(d.text)&&d.text!==c.text){(M=d.data)!==null&&M!==void 0||(d.data={}),(x=c.data)!==null&&x!==void 0||(c.data={});for(let X=0;X<i.update.length;++X)i.update[X](c,d);(P=(E=(S=d.data)===null||S===void 0?void 0:S.hook)===null||E===void 0?void 0:E.update)===null||P===void 0||P.call(E,c,d)}let R=c.children,D=d.children;Xe(d.text)?H(R)&&H(D)?R!==D&&k(N,R,D,m):H(D)?(H(c.text)&&s.setTextContent(N,""),u(N,null,D,0,D.length-1,m)):H(R)?p(N,R,0,R.length-1):H(c.text)&&s.setTextContent(N,""):c.text!==d.text&&(H(R)&&p(N,R,0,R.length-1),s.setTextContent(N,d.text)),(v=_==null?void 0:_.postpatch)===null||v===void 0||v.call(_,c,d)}return function(c,d){let m,C,y,M=[];for(m=0;m<i.pre.length;++m)i.pre[m]();for(Jn(s,c)?c=n(c):eo(s,c)&&(c=o(c)),Le(c,d)?w(c,d,M):(C=c.elm,y=s.parentNode(C),l(d,M),y!==null&&(s.insertBefore(y,d.elm,s.nextSibling(C)),p(y,[c],0,0))),m=0;m<M.length;++m)M[m].data.hook.insert(M[m]);for(m=0;m<i.post.length;++m)i.post[m]();return d}}function ri(e,t,r){if(e.ns="http://www.w3.org/2000/svg",r!=="foreignObject"&&t!==void 0)for(let i=0;i<t.length;++i){let s=t[i];if(typeof s=="string")continue;let n=s.data;n!==void 0&&ri(n,s.children,s.sel)}}function O(e,t,r){let i={},s,n,o;if(r!==void 0?(t!==null&&(i=t),Ye(r)?s=r:Ze(r)?n=r.toString():r&&r.sel&&(s=[r])):t!=null&&(Ye(t)?s=t:Ze(t)?n=t.toString():t&&t.sel?s=[t]:i=t),s!==void 0)for(o=0;o<s.length;++o)Ze(s[o])&&(s[o]=Be(void 0,void 0,void 0,s[o],void 0));return e.startsWith("svg")&&(e.length===3||e[3]==="."||e[3]==="#")&&ri(i,s,e),Be(e,i,s,n,void 0)}var so="http://www.w3.org/1999/xlink",no="http://www.w3.org/2000/xmlns/",oo="http://www.w3.org/XML/1998/namespace";function ii(e,t){let r,i=t.elm,s=e.data.attrs,n=t.data.attrs;if(!(!s&&!n)&&s!==n){s=s||{},n=n||{};for(r in n){let o=n[r];s[r]!==o&&(o===!0?i.setAttribute(r,""):o===!1?i.removeAttribute(r):r.charCodeAt(0)!==120?i.setAttribute(r,o):r.charCodeAt(3)===58?i.setAttributeNS(oo,r,o):r.charCodeAt(5)===58?r.charCodeAt(1)===109?i.setAttributeNS(no,r,o):i.setAttributeNS(so,r,o):i.setAttribute(r,o))}for(r in s)r in n||i.removeAttribute(r)}}var ao={create:ii,update:ii};function si(e,t){let r,i,s=t.elm,n=e.data.class,o=t.data.class;if(!(!n&&!o)&&n!==o){n=n||{},o=o||{};for(i in n)n[i]&&!Object.prototype.hasOwnProperty.call(o,i)&&s.classList.remove(i);for(i in o)r=o[i],r!==n[i]&&s.classList[r?"add":"remove"](i)}}var lo={create:si,update:si};function ho(e,t,r){for(let i of["touchstart","mousedown"])e.addEventListener(i,s=>{t(s),s.preventDefault()},{passive:!1})}var It=(e,t,r,i=!0)=>Je(s=>s.addEventListener(e,n=>{let o=t(n);return o===!1&&n.preventDefault(),o},{passive:i}));function Je(e){return{insert:t=>e(t.elm)}}function co(e){let t=0;return r=>{t+=r.deltaY*(r.deltaMode?40:1),Math.abs(t)>=4?(e(r,!0),t=0):e(r,!1)}}function uo(e,t){let r=()=>{e(),i=Math.max(100,i-i/15),s=setTimeout(r,i)},i=350,s=setTimeout(r,500);e();let n=t.type=="touchstart"?"touchend":"mouseup";document.addEventListener(n,()=>clearTimeout(s),{once:!0})}var po=e=>e.altKey||e.ctrlKey||e.shiftKey||e.metaKey||document.activeElement instanceof HTMLInputElement||document.activeElement instanceof HTMLTextAreaElement,fo=e=>t=>{po(t)||(t.key=="ArrowLeft"?e.goTo("prev"):t.key=="ArrowRight"?e.goTo("next"):t.key=="f"&&e.flip())},mo=e=>{var t,r;return O("div.lpv__menu.lpv__pane",[O("button.lpv__menu__entry.lpv__menu__flip.lpv__fbt",{hook:It("click",e.flip)},e.translate("flipTheBoard")),(t=e.opts.menu.analysisBoard)!=null&&t.enabled?O("a.lpv__menu__entry.lpv__menu__analysis.lpv__fbt",{attrs:{href:e.analysisUrl(),target:"_blank"}},e.translate("analysisBoard")):void 0,(r=e.opts.menu.practiceWithComputer)!=null&&r.enabled?O("a.lpv__menu__entry.lpv__menu__practice.lpv__fbt",{attrs:{href:e.practiceUrl(),target:"_blank"}},e.translate("practiceWithComputer")):void 0,e.opts.menu.getPgn.enabled?O("button.lpv__menu__entry.lpv__menu__pgn.lpv__fbt",{hook:It("click",e.togglePgn)},e.translate("getPgn")):void 0,go(e)])},go=e=>{let t=e.game.metadata.externalLink;return t&&O("a.lpv__menu__entry.lpv__fbt",{attrs:{href:t,target:"_blank"}},e.translate(e.game.metadata.isLichess?"viewOnLichess":"viewOnSite"))},vo=e=>O("div.lpv__controls",[e.pane=="board"?void 0:et(e,"first","step-backward"),et(e,"prev","left-open"),O("button.lpv__fbt.lpv__controls__menu.lpv__icon",{class:{active:e.pane!="board","lpv__icon-ellipsis-vert":e.pane=="board"},hook:It("click",e.toggleMenu)},e.pane=="board"?void 0:"X"),et(e,"next","right-open"),e.pane=="board"?void 0:et(e,"last","step-forward")]),et=(e,t,r)=>O(`button.lpv__controls__goto.lpv__controls__goto--${t}.lpv__fbt.lpv__icon.lpv__icon-${r}`,{class:{disabled:e.pane=="board"&&!e.canGoTo(t)},hook:Je(i=>ho(i,s=>uo(()=>e.goTo(t),s)))}),bo=e=>{let t=wo[e];return t?O("nag",{attrs:{title:t.name}},t.symbol):void 0},wo={1:{symbol:"!",name:"Good move"},2:{symbol:"?",name:"Mistake"},3:{symbol:"!!",name:"Brilliant move"},4:{symbol:"??",name:"Blunder"},5:{symbol:"!?",name:"Interesting move"},6:{symbol:"?!",name:"Dubious move"},7:{symbol:"□",name:"Only move"},22:{symbol:"⨀",name:"Zugzwang"},10:{symbol:"=",name:"Equal position"},13:{symbol:"∞",name:"Unclear position"},14:{symbol:"⩲",name:"White is slightly better"},15:{symbol:"⩱",name:"Black is slightly better"},16:{symbol:"±",name:"White is better"},17:{symbol:"∓",name:"Black is better"},18:{symbol:"+−",name:"White is winning"},19:{symbol:"-+",name:"Black is winning"},146:{symbol:"N",name:"Novelty"},32:{symbol:"↑↑",name:"Development"},36:{symbol:"↑",name:"Initiative"},40:{symbol:"→",name:"Attack"},132:{symbol:"⇆",name:"Counterplay"},138:{symbol:"⊕",name:"Time trouble"},44:{symbol:"=∞",name:"With compensation"},140:{symbol:"∆",name:"With the idea"}},ko=e=>O("div.lpv__side",[O("div.lpv__moves",{hook:{insert:t=>{let r=t.elm;e.path.empty()||oi(e,r),r.addEventListener("mousedown",i=>{let s=i.target.getAttribute("p");s&&e.toPath(new Re(s))},{passive:!0})},postpatch:(t,r)=>{e.autoScrollRequested&&(oi(e,r.elm),e.autoScrollRequested=!1)}}},[...e.game.initial.comments.map(tt),...xo(e),...yo(e)])]),yo=e=>{let t=e.game.metadata.result;return t&&t!="*"?[O("comment.result",e.game.metadata.result)]:[]},Wt=()=>O("move.empty","..."),Ut=e=>O("index",`${e}.`),tt=e=>O("comment",e),Co=()=>O("paren.open","("),So=()=>O("paren.close",")"),rt=e=>Math.floor((e.ply-1)/2)+1,xo=e=>{let t=Mo(e),r=[],i,s=e.game.moves.children.slice(1);for(e.game.initial.pos.turn=="black"&&e.game.mainline[0]&&r.push(Ut(e.game.initial.pos.fullmoves),Wt());i=(i||e.game.moves).children[0];){let n=i.data,o=n.ply%2==1;o&&r.push(Ut(rt(n))),r.push(t(n));let a=o&&(s.length||n.comments.length)&&i.children.length;a&&r.push(Wt()),n.comments.forEach(l=>r.push(tt(l))),s.forEach(l=>r.push(Eo(t,l))),a&&r.push(Ut(rt(n)),Wt()),s=i.children.slice(1)}return r},Eo=(e,t)=>O("variation",[...t.data.startingComments.map(tt),...ni(e,t)]),ni=(e,t)=>{let r=[],i=[];t.data.ply%2==0&&r.push(O("index",[rt(t.data),"..."]));do{let s=t.data;s.ply%2==1&&r.push(O("index",[rt(s),"."])),r.push(e(s)),s.comments.forEach(n=>r.push(tt(n))),i.forEach(n=>{r=[...r,Co(),...ni(e,n),So()]}),i=t.children.slice(1),t=t.children[0]}while(t);return r},Mo=e=>t=>O("move",{class:{current:e.path.equals(t.path),ancestor:e.path.contains(t.path),good:t.nags.includes(1),mistake:t.nags.includes(2),brilliant:t.nags.includes(3),blunder:t.nags.includes(4),interesting:t.nags.includes(5),inaccuracy:t.nags.includes(6)},attrs:{p:t.path.path}},[t.san,...t.nags.map(bo)]),oi=(e,t)=>{let r=t.querySelector(".current");if(!r){t.scrollTop=e.path.empty()?0:99999;return}t.scrollTop=r.offsetTop-t.offsetHeight/2+r.offsetHeight};function ai(e,t){let r=t=="bottom"?e.orientation():A(e.orientation()),i=e.game.players[r],s=[i.title?O("span.lpv__player__title",i.title):void 0,O("span.lpv__player__name",i.name),i.rating?O("span.lpv__player__rating",["(",i.rating,")"]):void 0];return O(`div.lpv__player.lpv__player--${t}`,[i.isLichessUser?O("a.lpv__player__person.ulpt.user-link",{attrs:{href:`${e.opts.lichess}/@/${i.name}`}},s):O("span.lpv__player__person",s),e.opts.showClocks?qo(e,r):void 0])}var qo=(e,t)=>{let r=e.curData(),i=r.clocks&&r.clocks[t];return typeof i==null?void 0:O("div.lpv__player__clock",{class:{active:t==r.turn}},Ao(i))},Ao=e=>{if(!e&&e!==0)return["-"];let t=new Date(e*1e3),r=":",i=li(t.getUTCMinutes())+r+li(t.getUTCSeconds());return e>=3600?[Math.floor(e/3600)+r+i]:[i]},li=e=>(e<10?"0":"")+e;function hi(e){let t=e.opts,r=`lpv.lpv--moves-${t.showMoves}.lpv--controls-${t.showControls}${t.classes?"."+t.classes.replace(" ","."):""}`,i=t.showPlayers=="auto"?e.game.hasPlayerName():t.showPlayers;return O(`div.${r}`,{class:{"lpv--menu":e.pane!="board","lpv--players":i},attrs:{tabindex:0},hook:Je(s=>{e.setGround(Tn(s.querySelector(".cg-wrap"),_o(e,s))),t.keyboardToMove&&s.addEventListener("keydown",fo(e))})},[i?ai(e,"top"):void 0,Oo(e),i?ai(e,"bottom"):void 0,t.showControls?vo(e):void 0,t.showMoves?ko(e):void 0,e.pane=="menu"?mo(e):e.pane=="pgn"?Po(e):void 0])}var Oo=e=>O("div.lpv__board",{hook:Je(t=>{t.addEventListener("click",e.focus),e.opts.scrollToMove&&!("ontouchstart"in window)&&t.addEventListener("wheel",co((r,i)=>{r.preventDefault(),r.deltaY>0&&i?e.goTo("next",!1):r.deltaY<0&&i&&e.goTo("prev",!1)}))})},O("div.cg-wrap")),Po=e=>{let t=new Blob([e.opts.pgn],{type:"text/plain"});return O("div.lpv__pgn.lpv__pane",[O("a.lpv__pgn__download.lpv__fbt",{attrs:{href:window.URL.createObjectURL(t),download:e.opts.menu.getPgn.fileName||`${e.game.title()}.pgn`}},e.translate("download")),O("textarea.lpv__pgn__text",e.opts.pgn)])},_o=(e,t)=>({viewOnly:!e.opts.drawArrows,addDimensionsCssVarsTo:t,drawable:{enabled:e.opts.drawArrows,visible:!0},disableContextMenu:e.opts.drawArrows,...e.opts.chessground||{},movable:{free:!1},draggable:{enabled:!1},selectable:{enabled:!1},...e.cgState()}),Ro={pgn:"*",fen:void 0,showPlayers:"auto",showClocks:!0,showMoves:"auto",showControls:!0,scrollToMove:!0,keyboardToMove:!0,orientation:void 0,initialPly:0,chessground:{},drawArrows:!0,menu:{getPgn:{enabled:!0,fileName:void 0},practiceWithComputer:{enabled:!0},analysisBoard:{enabled:!0}},lichess:"https://lichess.org",classes:void 0};function No(e,t){let r={...Ro};return ci(r,t),r.fen&&(r.pgn=`[FEN "${r.fen}"]
3
+ `);this.commentBuf=[],r.node?((e=r.node.data).comments||(e.comments=[]),r.node.data.comments.push(i)):r.root?((t=this.game).comments||(t.comments=[]),this.game.comments.push(i)):(r.startingComments||(r.startingComments=[]),r.startingComments.push(i))}emit(e){if(this.state===4&&this.handleComment(),e)return this.emitGame(this.game,e);this.found&&this.emitGame(this.game,void 0),this.resetGame()}},fr=(e,t=wt)=>{let r=[];return new Qi(i=>r.push(i),t,NaN).parse(e),r},Yi=e=>{switch((e||"chess").toLowerCase()){case"chess":case"chess960":case"chess 960":case"standard":case"from position":case"classical":case"normal":case"fischerandom":case"fischerrandom":case"fischer random":case"wild/0":case"wild/1":case"wild/2":case"wild/3":case"wild/4":case"wild/5":case"wild/6":case"wild/7":case"wild/8":case"wild/8a":return"chess";case"crazyhouse":case"crazy house":case"house":case"zh":return"crazyhouse";case"king of the hill":case"koth":case"kingofthehill":return"kingofthehill";case"three-check":case"three check":case"threecheck":case"three check chess":case"3-check":case"3 check":case"3check":return"3check";case"antichess":case"anti chess":case"anti":return"antichess";case"atomic":case"atom":case"atomic chess":return"atomic";case"horde":case"horde chess":return"horde";case"racing kings":case"racingkings":case"racing":case"race":return"racingkings";default:return}},Zi=e=>{let t=Yi(e.get("Variant"));if(!t)return g.err(new L(T.Variant));let r=e.get("FEN");return r?_i(r).chain(i=>Ui(t,i)):g.ok(Wi(t))};function Xi(e){switch(e){case"G":return"green";case"R":return"red";case"Y":return"yellow";case"B":return"blue";default:return}}var Ji=e=>{let t=Xi(e.slice(0,1)),r=Oe(e.slice(1,3)),i=Oe(e.slice(3,5));if(!(!t||!b(r))){if(e.length===3)return{color:t,from:r,to:r};if(e.length===5&&b(i))return{color:t,from:r,to:i}}},es=e=>{let t,r,i,s=[];return{text:e.replace(/\s?\[%(emt|clk)\s(\d{1,5}):(\d{1,2}):(\d{1,2}(?:\.\d{0,3})?)\]\s?/g,(n,o,a,l,u)=>{let f=parseInt(a,10)*3600+parseInt(l,10)*60+parseFloat(u);return o==="emt"?t=f:o==="clk"&&(r=f)," "}).replace(/\s?\[%(?:csl|cal)\s([RGYB][a-h][1-8](?:[a-h][1-8])?(?:,[RGYB][a-h][1-8](?:[a-h][1-8])?)*)\]\s?/g,(n,o)=>{for(let a of o.split(","))s.push(Ji(a));return" "}).replace(/\s?\[%eval\s(?:#([+-]?\d{1,5})|([+-]?(?:\d{1,5}|\d{0,5}\.\d{1,2})))(?:,(\d{1,5}))?\]\s?/g,(n,o,a,l)=>{let u=l&&parseInt(l,10);return i=o?{mate:parseInt(o,10),depth:u}:{pawns:parseFloat(a),depth:u}," "}).trim(),shapes:s,emt:t,clock:r,evaluation:i}};function ts(e){return t=>e&&e(t)||rs(t)}var rs=e=>is[e],is={flipTheBoard:"Flip the board",analysisBoard:"Analysis board",practiceWithComputer:"Practice with computer",getPgn:"Get PGN",download:"Download",viewOnLichess:"View on Lichess",viewOnSite:"View on site"},ss=["white","black"],Fe=["a","b","c","d","e","f","g","h"],Ve=["1","2","3","4","5","6","7","8"],ns=[...Ve].reverse(),Ct=Array.prototype.concat(...Fe.map(e=>Ve.map(t=>e+t))),j=e=>Ct[8*e[0]+e[1]],B=e=>[e.charCodeAt(0)-97,e.charCodeAt(1)-49],os=e=>{if(e)return e[1]==="@"?[e.slice(2,4)]:[e.slice(0,2),e.slice(2,4)]},mr=Ct.map(B);function as(e){let t,r=()=>(t===void 0&&(t=e()),t);return r.clear=()=>{t=void 0},r}var ls=()=>{let e;return{start(){e=performance.now()},cancel(){e=void 0},stop(){if(!e)return 0;let t=performance.now()-e;return e=void 0,t}}},St=e=>e==="white"?"black":"white",Pe=(e,t)=>{let r=e[0]-t[0],i=e[1]-t[1];return r*r+i*i},xt=(e,t)=>e.role===t.role&&e.color===t.color,_e=e=>(t,r)=>[(r?t[0]:7-t[0])*e.width/8,(r?7-t[1]:t[1])*e.height/8],J=(e,t)=>{e.style.transform=`translate(${t[0]}px,${t[1]}px)`},gr=(e,t,r=1)=>{e.style.transform=`translate(${t[0]}px,${t[1]}px) scale(${r})`},Et=(e,t)=>{e.style.visibility=t?"visible":"hidden"},me=e=>{var t;if(e.clientX||e.clientX===0)return[e.clientX,e.clientY];if(!((t=e.targetTouches)===null||t===void 0)&&t[0])return[e.targetTouches[0].clientX,e.targetTouches[0].clientY]},vr=e=>e.button===2,re=(e,t)=>{let r=document.createElement(e);return t&&(r.className=t),r};function br(e,t,r){let i=B(e);return t||(i[0]=7-i[0],i[1]=7-i[1]),[r.left+r.width*i[0]/8+r.width/16,r.top+r.height*(7-i[1])/8+r.height/16]}var Re=(ee=class{constructor(t){this.path=t,this.size=()=>this.path.length/2,this.head=()=>this.path.slice(0,2),this.tail=()=>new ee(this.path.slice(2)),this.init=()=>new ee(this.path.slice(0,-2)),this.last=()=>this.path.slice(-2),this.empty=()=>this.path=="",this.contains=r=>this.path.startsWith(r.path),this.isChildOf=r=>this.init()===r,this.append=r=>new ee(this.path+r),this.equals=r=>this.path==r.path}},ee.root=new ee(""),ee),hs=class{constructor(e,t,r,i){this.initial=e,this.moves=t,this.players=r,this.metadata=i,this.nodeAt=s=>wr(this.moves,s),this.dataAt=s=>{let n=this.nodeAt(s);return n?us(n)?n.data:this.initial:void 0},this.title=()=>this.players.white.name?[this.players.white.title,this.players.white.name,"vs",this.players.black.title,this.players.black.name].filter(s=>s&&!!s.trim()).join("_").replace(" ","-"):"lichess-pgn-viewer",this.pathAtMainlinePly=s=>{var n;return s==0?Re.root:((n=this.mainline[Math.max(0,Math.min(this.mainline.length-1,s=="last"?9999:s-1))])==null?void 0:n.path)||Re.root},this.hasPlayerName=()=>{var s,n;return!!((s=this.players.white)!=null&&s.name||(n=this.players.black)!=null&&n.name)},this.mainline=Array.from(this.moves.mainline())}},cs=(e,t)=>e.children.find(r=>r.data.path.last()==t),wr=(e,t)=>{if(t.empty())return e;let r=cs(e,t.head());return r?wr(r,t.tail()):void 0},us=e=>"data"in e,ds=e=>"uci"in e,ps=class pi{constructor(t,r,i){this.pos=t,this.path=r,this.clocks=i,this.clone=()=>new pi(this.pos.clone(),this.path,{...this.clocks})}},Mt=e=>{let t=e.map(es),r=i=>i.reduce((s,n)=>typeof n==null?s:n,void 0);return{texts:t.map(i=>i.text).filter(i=>!!i),shapes:t.flatMap(i=>i.shapes),clock:r(t.map(i=>i.clock)),emt:r(t.map(i=>i.emt))}},fs=(e,t=!1)=>{var p,k;let r=fr(e)[0]||fr("*")[0],i=Zi(r.headers).unwrap(),s=sr(i.toSetup()),n=Mt(r.comments||[]),o=new Map(Array.from(r.headers,([w,c])=>[w.toLowerCase(),c])),a=bs(o,t),l={fen:s,turn:i.turn,check:i.isCheck(),pos:i.clone(),comments:n.texts,shapes:n.shapes,clocks:{white:((p=a.timeControl)==null?void 0:p.initial)||n.clock,black:((k=a.timeControl)==null?void 0:k.initial)||n.clock}},u=ms(i,r.moves,a),f=vs(o,a);return new hs(l,u,f,a)},ms=(e,t,r)=>Vi(t,new ps(e,Re.root,{}),(i,s,n)=>{let o=Di(i.pos,s.san);if(!o)return;let a=Ai(o),l=i.path.append(a),u=Ki(i.pos,o);i.path=l;let f=i.pos.toSetup(),p=Mt(s.comments||[]),k=Mt(s.startingComments||[]),w=[...p.shapes,...k.shapes],c=(f.fullmoves-1)*2+(i.pos.turn==="white"?0:1),d=i.clocks=gs(i.clocks,i.pos.turn,p.clock);return c<2&&r.timeControl&&(d={white:r.timeControl.initial,black:r.timeControl.initial,...d}),{path:l,ply:c,move:o,san:u,uci:mi(o),fen:sr(i.pos.toSetup()),turn:i.pos.turn,check:i.pos.isCheck(),comments:p.texts,startingComments:k.texts,nags:s.nags||[],shapes:w,clocks:d,emt:p.emt}}),gs=(e,t,r)=>t=="white"?{...e,black:r}:{...e,white:r};function vs(e,t){let r=(s,n)=>{let o=e.get(`${s}${n}`);return o=="?"||o==""?void 0:o},i=s=>{let n=r(s,"");return{name:n,title:r(s,"title"),rating:parseInt(r(s,"elo")||"")||void 0,isLichessUser:t.isLichess&&!!(n!=null&&n.match(/^[a-z0-9][a-z0-9_-]{0,28}[a-z0-9]$/i))}};return{white:i("white"),black:i("black")}}function bs(e,t){var o;let r=e.get("chapterurl")||e.get("gameurl")||e.get("source")||e.get("site"),i=(o=e.get("timecontrol"))==null?void 0:o.split("+").map(a=>parseInt(a)),s=i&&i[0]?{initial:i[0],increment:i[1]||0}:void 0,n=e.get("orientation");return{externalLink:r&&r.match(/^https?:\/\//)?r:void 0,isLichess:!!(t&&(r!=null&&r.startsWith(t))),timeControl:s,orientation:n==="white"||n==="black"?n:void 0,result:e.get("result")}}var ws=class{constructor(e,t){this.opts=e,this.redraw=t,this.flipped=!1,this.pane="board",this.autoScrollRequested=!1,this.curNode=()=>this.game.nodeAt(this.path)||this.game.moves,this.curData=()=>this.game.dataAt(this.path)||this.game.initial,this.goTo=(r,i=!0)=>{var n,o;let s=r=="first"?Re.root:r=="prev"?this.path.init():r=="next"?(o=(n=this.game.nodeAt(this.path))==null?void 0:n.children[0])==null?void 0:o.data.path:this.game.pathAtMainlinePly("last");this.toPath(s||this.path,i)},this.canGoTo=r=>r=="prev"||r=="first"?!this.path.empty():!!this.curNode().children[0],this.toPath=(r,i=!0)=>{this.path=r,this.pane="board",this.autoScrollRequested=!0,this.redrawGround(),this.redraw(),i&&this.focus()},this.focus=()=>{var r;return(r=this.div)==null?void 0:r.focus()},this.toggleMenu=()=>{this.pane=this.pane=="board"?"menu":"board",this.redraw()},this.togglePgn=()=>{this.pane=this.pane=="pgn"?"board":"pgn",this.redraw()},this.orientation=()=>{let r=this.opts.orientation||"white";return this.flipped?A(r):r},this.flip=()=>{this.flipped=!this.flipped,this.pane="board",this.redrawGround(),this.redraw()},this.cgState=()=>{var s;let r=this.curData(),i=ds(r)?os(r.uci):(s=this.opts.chessground)==null?void 0:s.lastMove;return{fen:r.fen,orientation:this.orientation(),check:r.check,lastMove:i,turnColor:r.turn}},this.analysisUrl=()=>this.game.metadata.isLichess&&this.game.metadata.externalLink||`https://lichess.org/analysis/${this.curData().fen.replace(" ","_")}?color=${this.orientation()}`,this.practiceUrl=()=>`${this.analysisUrl()}#practice`,this.setGround=r=>{this.ground=r,this.redrawGround()},this.redrawGround=()=>this.withGround(r=>{r.set(this.cgState()),r.setShapes(this.curData().shapes.map(i=>({orig:ne(i.from),dest:ne(i.to),brush:i.color})))}),this.withGround=r=>this.ground&&r(this.ground),this.game=fs(e.pgn,e.lichess),e.orientation=e.orientation||this.game.metadata.orientation,this.translate=ts(e.translate),this.path=this.game.pathAtMainlinePly(e.initialPly)}},ge=(e,t)=>Math.abs(e-t),ks=e=>(t,r,i,s)=>ge(t,i)<2&&(e==="white"?s===r+1||r<=1&&s===r+2&&t===i:s===r-1||r>=6&&s===r-2&&t===i),kr=(e,t,r,i)=>{let s=ge(e,r),n=ge(t,i);return s===1&&n===2||s===2&&n===1},yr=(e,t,r,i)=>ge(e,r)===ge(t,i),Cr=(e,t,r,i)=>e===r||t===i,Sr=(e,t,r,i)=>yr(e,t,r,i)||Cr(e,t,r,i),ys=(e,t,r)=>(i,s,n,o)=>ge(i,n)<2&&ge(s,o)<2||r&&s===o&&s===(e==="white"?0:7)&&(i===4&&(n===2&&t.includes(0)||n===6&&t.includes(7))||t.includes(n));function Cs(e,t){let r=t==="white"?"1":"8",i=[];for(let[s,n]of e)s[1]===r&&n.color===t&&n.role==="rook"&&i.push(B(s)[0]);return i}function xr(e,t,r){let i=e.get(t);if(!i)return[];let s=B(t),n=i.role,o=n==="pawn"?ks(i.color):n==="knight"?kr:n==="bishop"?yr:n==="rook"?Cr:n==="queen"?Sr:ys(i.color,Cs(e,i.color),r);return mr.filter(a=>(s[0]!==a[0]||s[1]!==a[1])&&o(s[0],s[1],a[0],a[1])).map(j)}function F(e,...t){e&&setTimeout(()=>e(...t),1)}function Ss(e){e.orientation=St(e.orientation),e.animation.current=e.draggable.current=e.selected=void 0}function xs(e,t){for(let[r,i]of t)i?e.pieces.set(r,i):e.pieces.delete(r)}function Es(e,t){if(e.check=void 0,t===!0&&(t=e.turnColor),t)for(let[r,i]of e.pieces)i.role==="king"&&i.color===t&&(e.check=r)}function Ms(e,t,r,i){he(e),e.premovable.current=[t,r],F(e.premovable.events.set,t,r,i)}function le(e){e.premovable.current&&(e.premovable.current=void 0,F(e.premovable.events.unset))}function qs(e,t,r){le(e),e.predroppable.current={role:t,key:r},F(e.predroppable.events.set,t,r)}function he(e){let t=e.predroppable;t.current&&(t.current=void 0,F(t.events.unset))}function As(e,t,r){if(!e.autoCastle)return!1;let i=e.pieces.get(t);if(!i||i.role!=="king")return!1;let s=B(t),n=B(r);if(s[1]!==0&&s[1]!==7||s[1]!==n[1])return!1;s[0]===4&&!e.pieces.has(r)&&(n[0]===6?r=j([7,n[1]]):n[0]===2&&(r=j([0,n[1]])));let o=e.pieces.get(r);return!o||o.color!==i.color||o.role!=="rook"?!1:(e.pieces.delete(t),e.pieces.delete(r),s[0]<n[0]?(e.pieces.set(j([6,n[1]]),i),e.pieces.set(j([5,n[1]]),o)):(e.pieces.set(j([2,n[1]]),i),e.pieces.set(j([3,n[1]]),o)),!0)}function Er(e,t,r){let i=e.pieces.get(t),s=e.pieces.get(r);if(t===r||!i)return!1;let n=s&&s.color!==i.color?s:void 0;return r===e.selected&&Q(e),F(e.events.move,t,r,n),As(e,t,r)||(e.pieces.set(r,i),e.pieces.delete(t)),e.lastMove=[t,r],e.check=void 0,F(e.events.change),n||!0}function qt(e,t,r,i){if(e.pieces.has(r))if(i)e.pieces.delete(r);else return!1;return F(e.events.dropNewPiece,t,r),e.pieces.set(r,t),e.lastMove=[r],e.check=void 0,F(e.events.change),e.movable.dests=void 0,e.turnColor=St(e.turnColor),!0}function Mr(e,t,r){let i=Er(e,t,r);return i&&(e.movable.dests=void 0,e.turnColor=St(e.turnColor),e.animation.current=void 0),i}function qr(e,t,r){if(Ot(e,t,r)){let i=Mr(e,t,r);if(i){let s=e.hold.stop();Q(e);let n={premove:!1,ctrlKey:e.stats.ctrlKey,holdTime:s};return i!==!0&&(n.captured=i),F(e.movable.events.after,t,r,n),!0}}else if(Ps(e,t,r))return Ms(e,t,r,{ctrlKey:e.stats.ctrlKey}),Q(e),!0;return Q(e),!1}function Ar(e,t,r,i){let s=e.pieces.get(t);s&&(Os(e,t,r)||i)?(e.pieces.delete(t),qt(e,s,r,i),F(e.movable.events.afterNewPiece,s.role,r,{premove:!1,predrop:!1})):s&&_s(e,t,r)?qs(e,s.role,r):(le(e),he(e)),e.pieces.delete(t),Q(e)}function At(e,t,r){if(F(e.events.select,t),e.selected){if(e.selected===t&&!e.draggable.enabled){Q(e),e.hold.cancel();return}else if((e.selectable.enabled||r)&&e.selected!==t&&qr(e,e.selected,t)){e.stats.dragged=!1;return}}(e.selectable.enabled||e.draggable.enabled)&&(Pr(e,t)||Pt(e,t))&&(Or(e,t),e.hold.start())}function Or(e,t){e.selected=t,Pt(e,t)?e.premovable.customDests||(e.premovable.dests=xr(e.pieces,t,e.premovable.castle)):e.premovable.dests=void 0}function Q(e){e.selected=void 0,e.premovable.dests=void 0,e.hold.cancel()}function Pr(e,t){let r=e.pieces.get(t);return!!r&&(e.movable.color==="both"||e.movable.color===r.color&&e.turnColor===r.color)}var Ot=(e,t,r)=>{var i,s;return t!==r&&Pr(e,t)&&(e.movable.free||!!(!((s=(i=e.movable.dests)===null||i===void 0?void 0:i.get(t))===null||s===void 0)&&s.includes(r)))};function Os(e,t,r){let i=e.pieces.get(t);return!!i&&(t===r||!e.pieces.has(r))&&(e.movable.color==="both"||e.movable.color===i.color&&e.turnColor===i.color)}function Pt(e,t){let r=e.pieces.get(t);return!!r&&e.premovable.enabled&&e.movable.color===r.color&&e.turnColor!==r.color}function Ps(e,t,r){var i,s;let n=(s=(i=e.premovable.customDests)===null||i===void 0?void 0:i.get(t))!==null&&s!==void 0?s:xr(e.pieces,t,e.premovable.castle);return t!==r&&Pt(e,t)&&n.includes(r)}function _s(e,t,r){let i=e.pieces.get(t),s=e.pieces.get(r);return!!i&&(!s||s.color!==e.movable.color)&&e.predroppable.enabled&&(i.role!=="pawn"||r[1]!=="1"&&r[1]!=="8")&&e.movable.color===i.color&&e.turnColor!==i.color}function Rs(e,t){let r=e.pieces.get(t);return!!r&&e.draggable.enabled&&(e.movable.color==="both"||e.movable.color===r.color&&(e.turnColor===r.color||e.premovable.enabled))}function Ns(e){let t=e.premovable.current;if(!t)return!1;let r=t[0],i=t[1],s=!1;if(Ot(e,r,i)){let n=Mr(e,r,i);if(n){let o={premove:!0};n!==!0&&(o.captured=n),F(e.movable.events.after,r,i,o),s=!0}}return le(e),s}function Ts(e,t){let r=e.predroppable.current,i=!1;if(!r)return!1;if(t(r)){let s={role:r.role,color:e.movable.color};qt(e,s,r.key)&&(F(e.movable.events.afterNewPiece,r.role,r.key,{premove:!1,predrop:!0}),i=!0)}return he(e),i}function _t(e){le(e),he(e),Q(e)}function _r(e){e.movable.color=e.movable.dests=e.animation.current=void 0,_t(e)}function ve(e,t,r){let i=Math.floor(8*(e[0]-r.left)/r.width);t||(i=7-i);let s=7-Math.floor(8*(e[1]-r.top)/r.height);return t||(s=7-s),i>=0&&i<8&&s>=0&&s<8?j([i,s]):void 0}function Bs(e,t,r,i){let s=B(e),n=mr.filter(l=>Sr(s[0],s[1],l[0],l[1])||kr(s[0],s[1],l[0],l[1])),o=n.map(l=>br(j(l),r,i)).map(l=>Pe(t,l)),[,a]=o.reduce((l,u,f)=>l[0]<u?l:[u,f],[o[0],0]);return j(n[a])}var V=e=>e.orientation==="white",Rr="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",Ls={p:"pawn",r:"rook",n:"knight",b:"bishop",q:"queen",k:"king"},zs={pawn:"p",rook:"r",knight:"n",bishop:"b",queen:"q",king:"k"};function Nr(e){e==="start"&&(e=Rr);let t=new Map,r=7,i=0;for(let s of e)switch(s){case" ":case"[":return t;case"/":if(--r,r<0)return t;i=0;break;case"~":{let n=t.get(j([i-1,r]));n&&(n.promoted=!0);break}default:{let n=s.charCodeAt(0);if(n<57)i+=n-48;else{let o=s.toLowerCase();t.set(j([i,r]),{role:Ls[o],color:s===o?"black":"white"}),++i}}}return t}function Ks(e){return ns.map(t=>Fe.map(r=>{let i=e.get(r+t);if(i){let s=zs[i.role];return i.color==="white"&&(s=s.toUpperCase()),i.promoted&&(s+="~"),s}else return"1"}).join("")).join("/").replace(/1{2,}/g,t=>t.length.toString())}function Tr(e,t){t.animation&&(Rt(e.animation,t.animation),(e.animation.duration||0)<70&&(e.animation.enabled=!1))}function Br(e,t){var r,i,s;if(!((r=t.movable)===null||r===void 0)&&r.dests&&(e.movable.dests=void 0),!((i=t.drawable)===null||i===void 0)&&i.autoShapes&&(e.drawable.autoShapes=[]),Rt(e,t),t.fen&&(e.pieces=Nr(t.fen),e.drawable.shapes=((s=t.drawable)===null||s===void 0?void 0:s.shapes)||[]),"check"in t&&Es(e,t.check||!1),"lastMove"in t&&!t.lastMove?e.lastMove=void 0:t.lastMove&&(e.lastMove=t.lastMove),e.selected&&Or(e,e.selected),Tr(e,t),!e.movable.rookCastle&&e.movable.dests){let n=e.movable.color==="white"?"1":"8",o="e"+n,a=e.movable.dests.get(o),l=e.pieces.get(o);if(!a||!l||l.role!=="king")return;e.movable.dests.set(o,a.filter(u=>!(u==="a"+n&&a.includes("c"+n))&&!(u==="h"+n&&a.includes("g"+n))))}}function Rt(e,t){for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&(Object.prototype.hasOwnProperty.call(e,r)&&Lr(e[r])&&Lr(t[r])?Rt(e[r],t[r]):e[r]=t[r])}function Lr(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}var be=(e,t)=>t.animation.enabled?Is(e,t):ce(e,t);function ce(e,t){let r=e(t);return t.dom.redraw(),r}var Nt=(e,t)=>({key:e,pos:B(e),piece:t}),Ds=(e,t)=>t.sort((r,i)=>Pe(e.pos,r.pos)-Pe(e.pos,i.pos))[0];function $s(e,t){let r=new Map,i=[],s=new Map,n=[],o=[],a=new Map,l,u,f;for(let[p,k]of e)a.set(p,Nt(p,k));for(let p of Ct)l=t.pieces.get(p),u=a.get(p),l?u?xt(l,u.piece)||(n.push(u),o.push(Nt(p,l))):o.push(Nt(p,l)):u&&n.push(u);for(let p of o)u=Ds(p,n.filter(k=>xt(p.piece,k.piece))),u&&(f=[u.pos[0]-p.pos[0],u.pos[1]-p.pos[1]],r.set(p.key,f.concat(f)),i.push(u.key));for(let p of n)i.includes(p.key)||s.set(p.key,p.piece);return{anims:r,fadings:s}}function zr(e,t){let r=e.animation.current;if(r===void 0){e.dom.destroyed||e.dom.redrawNow();return}let i=1-(t-r.start)*r.frequency;if(i<=0)e.animation.current=void 0,e.dom.redrawNow();else{let s=Ws(i);for(let n of r.plan.anims.values())n[2]=n[0]*s,n[3]=n[1]*s;e.dom.redrawNow(!0),requestAnimationFrame((n=performance.now())=>zr(e,n))}}function Is(e,t){let r=new Map(t.pieces),i=e(t),s=$s(r,t);if(s.anims.size||s.fadings.size){let n=t.animation.current&&t.animation.current.start;t.animation.current={start:performance.now(),frequency:1/t.animation.duration,plan:s},n||zr(t,performance.now())}else t.dom.redraw();return i}var Ws=e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,Us=["green","red","blue","yellow"];function Fs(e,t){if(t.touches&&t.touches.length>1)return;t.stopPropagation(),t.preventDefault(),t.ctrlKey?Q(e):_t(e);let r=me(t),i=ve(r,V(e),e.dom.bounds());i&&(e.drawable.current={orig:i,pos:r,brush:js(t),snapToValidMove:e.drawable.defaultSnapToValidMove},Kr(e))}function Kr(e){requestAnimationFrame(()=>{let t=e.drawable.current;if(t){let r=ve(t.pos,V(e),e.dom.bounds());r||(t.snapToValidMove=!1);let i=t.snapToValidMove?Bs(t.orig,t.pos,V(e),e.dom.bounds()):r;i!==t.mouseSq&&(t.mouseSq=i,t.dest=i!==t.orig?i:void 0,e.dom.redrawNow()),Kr(e)}})}function Vs(e,t){e.drawable.current&&(e.drawable.current.pos=me(t))}function Hs(e){let t=e.drawable.current;t&&(t.mouseSq&&Qs(e.drawable,t),Dr(e))}function Dr(e){e.drawable.current&&(e.drawable.current=void 0,e.dom.redraw())}function Gs(e){e.drawable.shapes.length&&(e.drawable.shapes=[],e.dom.redraw(),$r(e.drawable))}function js(e){var t;let r=(e.shiftKey||e.ctrlKey)&&vr(e),i=e.altKey||e.metaKey||((t=e.getModifierState)===null||t===void 0?void 0:t.call(e,"AltGraph"));return Us[(r?1:0)+(i?2:0)]}function Qs(e,t){let r=s=>s.orig===t.orig&&s.dest===t.dest,i=e.shapes.find(r);i&&(e.shapes=e.shapes.filter(s=>!r(s))),(!i||i.brush!==t.brush)&&e.shapes.push({orig:t.orig,dest:t.dest,brush:t.brush}),$r(e)}function $r(e){e.onChange&&e.onChange(e.shapes)}function Ys(e,t){if(!(e.trustAllEvents||t.isTrusted)||t.buttons!==void 0&&t.buttons>1||t.touches&&t.touches.length>1)return;let r=e.dom.bounds(),i=me(t),s=ve(i,V(e),r);if(!s)return;let n=e.pieces.get(s),o=e.selected;if(!o&&e.drawable.enabled&&(e.drawable.eraseOnClick||!n||n.color!==e.turnColor)&&Gs(e),t.cancelable!==!1&&(!t.touches||e.blockTouchScroll||n||o||Zs(e,i)))t.preventDefault();else if(t.touches)return;let a=!!e.premovable.current,l=!!e.predroppable.current;e.stats.ctrlKey=t.ctrlKey,e.selected&&Ot(e,e.selected,s)?be(p=>At(p,s),e):At(e,s);let u=e.selected===s,f=Wr(e,s);if(n&&f&&u&&Rs(e,s)){e.draggable.current={orig:s,piece:n,origPos:i,pos:i,started:e.draggable.autoDistance&&e.stats.dragged,element:f,previouslySelected:o,originTarget:t.target,keyHasChanged:!1},f.cgDragging=!0,f.classList.add("dragging");let p=e.dom.elements.ghost;p&&(p.className=`ghost ${n.color} ${n.role}`,J(p,_e(r)(B(s),V(e))),Et(p,!0)),Tt(e)}else a&&le(e),l&&he(e);e.dom.redraw()}function Zs(e,t){let r=V(e),i=e.dom.bounds(),s=Math.pow(i.width/8,2);for(let n of e.pieces.keys()){let o=br(n,r,i);if(Pe(o,t)<=s)return!0}return!1}function Xs(e,t,r,i){let s="a0";e.pieces.set(s,t),e.dom.redraw();let n=me(r);e.draggable.current={orig:s,piece:t,origPos:n,pos:n,started:!0,element:()=>Wr(e,s),originTarget:r.target,newPiece:!0,force:!!i,keyHasChanged:!1},Tt(e)}function Tt(e){requestAnimationFrame(()=>{var t;let r=e.draggable.current;if(!r)return;!((t=e.animation.current)===null||t===void 0)&&t.plan.anims.has(r.orig)&&(e.animation.current=void 0);let i=e.pieces.get(r.orig);if(!i||!xt(i,r.piece))He(e);else if(!r.started&&Pe(r.pos,r.origPos)>=Math.pow(e.draggable.distance,2)&&(r.started=!0),r.started){if(typeof r.element=="function"){let n=r.element();if(!n)return;n.cgDragging=!0,n.classList.add("dragging"),r.element=n}let s=e.dom.bounds();J(r.element,[r.pos[0]-s.left-s.width/16,r.pos[1]-s.top-s.height/16]),r.keyHasChanged||(r.keyHasChanged=r.orig!==ve(r.pos,V(e),s))}Tt(e)})}function Js(e,t){e.draggable.current&&(!t.touches||t.touches.length<2)&&(e.draggable.current.pos=me(t))}function en(e,t){let r=e.draggable.current;if(!r)return;if(t.type==="touchend"&&t.cancelable!==!1&&t.preventDefault(),t.type==="touchend"&&r.originTarget!==t.target&&!r.newPiece){e.draggable.current=void 0;return}le(e),he(e);let i=me(t)||r.pos,s=ve(i,V(e),e.dom.bounds());s&&r.started&&r.orig!==s?r.newPiece?Ar(e,r.orig,s,r.force):(e.stats.ctrlKey=t.ctrlKey,qr(e,r.orig,s)&&(e.stats.dragged=!0)):r.newPiece?e.pieces.delete(r.orig):e.draggable.deleteOnDropOff&&!s&&(e.pieces.delete(r.orig),F(e.events.change)),(r.orig===r.previouslySelected||r.keyHasChanged)&&(r.orig===s||!s)?Q(e):e.selectable.enabled||Q(e),Ir(e),e.draggable.current=void 0,e.dom.redraw()}function He(e){let t=e.draggable.current;t&&(t.newPiece&&e.pieces.delete(t.orig),e.draggable.current=void 0,Q(e),Ir(e),e.dom.redraw())}function Ir(e){let t=e.dom.elements;t.ghost&&Et(t.ghost,!1)}function Wr(e,t){let r=e.dom.elements.board.firstChild;for(;r;){if(r.cgKey===t&&r.tagName==="PIECE")return r;r=r.nextSibling}}function tn(e,t){e.exploding={stage:1,keys:t},e.dom.redraw(),setTimeout(()=>{Ur(e,2),setTimeout(()=>Ur(e,void 0),120)},120)}function Ur(e,t){e.exploding&&(t?e.exploding.stage=t:e.exploding=void 0,e.dom.redraw())}function rn(e,t){function r(){Ss(e),t()}return{set(i){i.orientation&&i.orientation!==e.orientation&&r(),Tr(e,i),(i.fen?be:ce)(s=>Br(s,i),e)},state:e,getFen:()=>Ks(e.pieces),toggleOrientation:r,setPieces(i){be(s=>xs(s,i),e)},selectSquare(i,s){i?be(n=>At(n,i,s),e):e.selected&&(Q(e),e.dom.redraw())},move(i,s){be(n=>Er(n,i,s),e)},newPiece(i,s){be(n=>qt(n,i,s),e)},playPremove(){if(e.premovable.current){if(be(Ns,e))return!0;e.dom.redraw()}return!1},playPredrop(i){if(e.predroppable.current){let s=Ts(e,i);return e.dom.redraw(),s}return!1},cancelPremove(){ce(le,e)},cancelPredrop(){ce(he,e)},cancelMove(){ce(i=>{_t(i),He(i)},e)},stop(){ce(i=>{_r(i),He(i)},e)},explode(i){tn(e,i)},setAutoShapes(i){ce(s=>s.drawable.autoShapes=i,e)},setShapes(i){ce(s=>s.drawable.shapes=i,e)},getKeyAtDomPos(i){return ve(i,V(e),e.dom.bounds())},redrawAll:t,dragNewPiece(i,s,n){Xs(e,i,s,n)},destroy(){_r(e),e.dom.unbind&&e.dom.unbind(),e.dom.destroyed=!0}}}function sn(){return{pieces:Nr(Rr),orientation:"white",turnColor:"white",coordinates:!0,coordinatesOnSquares:!1,ranksPosition:"right",autoCastle:!0,viewOnly:!1,disableContextMenu:!1,addPieceZIndex:!1,blockTouchScroll:!1,pieceKey:!1,trustAllEvents:!1,highlight:{lastMove:!0,check:!0},animation:{enabled:!0,duration:200},movable:{free:!0,color:"both",showDests:!0,events:{},rookCastle:!0},premovable:{enabled:!0,showDests:!0,castle:!0,events:{}},predroppable:{enabled:!1,events:{}},draggable:{enabled:!0,distance:3,autoDistance:!0,showGhost:!0,deleteOnDropOff:!1},dropmode:{active:!1},selectable:{enabled:!0},stats:{dragged:!("ontouchstart"in window)},events:{},drawable:{enabled:!0,visible:!0,defaultSnapToValidMove:!0,eraseOnClick:!0,shapes:[],autoShapes:[],brushes:{green:{key:"g",color:"#15781B",opacity:1,lineWidth:10},red:{key:"r",color:"#882020",opacity:1,lineWidth:10},blue:{key:"b",color:"#003088",opacity:1,lineWidth:10},yellow:{key:"y",color:"#e68f00",opacity:1,lineWidth:10},paleBlue:{key:"pb",color:"#003088",opacity:.4,lineWidth:15},paleGreen:{key:"pg",color:"#15781B",opacity:.4,lineWidth:15},paleRed:{key:"pr",color:"#882020",opacity:.4,lineWidth:15},paleGrey:{key:"pgr",color:"#4a4a4a",opacity:.35,lineWidth:15},purple:{key:"purple",color:"#68217a",opacity:.65,lineWidth:10},pink:{key:"pink",color:"#ee2080",opacity:.5,lineWidth:10},white:{key:"white",color:"white",opacity:1,lineWidth:10}},prevSvgHash:""},hold:ls()}}var Fr={hilitePrimary:{key:"hilitePrimary",color:"#3291ff",opacity:1,lineWidth:1},hiliteWhite:{key:"hiliteWhite",color:"#ffffff",opacity:1,lineWidth:1}};function nn(){let e=K("defs"),t=U(K("filter"),{id:"cg-filter-blur"});return t.appendChild(U(K("feGaussianBlur"),{stdDeviation:"0.019"})),e.appendChild(t),e}function on(e,t,r){var i;let s=e.drawable,n=s.current,o=n&&n.mouseSq?n:void 0,a=new Map,l=e.dom.bounds(),u=s.autoShapes.filter(w=>!w.piece);for(let w of s.shapes.concat(u).concat(o?[o]:[])){if(!w.dest)continue;let c=(i=a.get(w.dest))!==null&&i!==void 0?i:new Set,d=Qe(je(B(w.orig),e.orientation),l),m=Qe(je(B(w.dest),e.orientation),l);c.add(Lt(d,m)),a.set(w.dest,c)}let f=s.shapes.concat(u).map(w=>({shape:w,current:!1,hash:Vr(w,Bt(w.dest,a),!1,l)}));o&&f.push({shape:o,current:!0,hash:Vr(o,Bt(o.dest,a),!0,l)});let p=f.map(w=>w.hash).join(";");if(p===e.drawable.prevSvgHash)return;e.drawable.prevSvgHash=p;let k=t.querySelector("defs");an(s,f,k),ln(f,t.querySelector("g"),r.querySelector("g"),w=>un(e,w,s.brushes,a,l))}function an(e,t,r){var i;let s=new Map,n;for(let l of t.filter(u=>u.shape.dest&&u.shape.brush))n=Gr(e.brushes[l.shape.brush],l.shape.modifiers),!((i=l.shape.modifiers)===null||i===void 0)&&i.hilite&&s.set(Ge(n).key,Ge(n)),s.set(n.key,n);let o=new Set,a=r.firstElementChild;for(;a;)o.add(a.getAttribute("cgKey")),a=a.nextElementSibling;for(let[l,u]of s.entries())o.has(l)||r.appendChild(fn(u))}function ln(e,t,r,i){let s=new Map;for(let n of e)s.set(n.hash,!1);for(let n of[t,r]){let o=[],a=n.firstElementChild,l;for(;a;)l=a.getAttribute("cgHash"),s.has(l)?s.set(l,!0):o.push(a),a=a.nextElementSibling;for(let u of o)n.removeChild(u)}for(let n of e.filter(o=>!s.get(o.hash)))for(let o of i(n))o.isCustom?r.appendChild(o.el):t.appendChild(o.el)}function Vr({orig:e,dest:t,brush:r,piece:i,modifiers:s,customSvg:n,label:o},a,l,u){var f,p;return[u.width,u.height,l,e,t,r,a&&"-",i&&hn(i),s&&cn(s),n&&`custom-${Hr(n.html)},${(p=(f=n.center)===null||f===void 0?void 0:f[0])!==null&&p!==void 0?p:"o"}`,o&&`label-${Hr(o.text)}`].filter(k=>k).join(",")}function hn(e){return[e.color,e.role,e.scale].filter(t=>t).join(",")}function cn(e){return[e.lineWidth,e.hilite&&"*"].filter(t=>t).join(",")}function Hr(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r)>>>0;return t.toString()}function un(e,{shape:t,current:r,hash:i},s,n,o){var a,l;let u=Qe(je(B(t.orig),e.orientation),o),f=t.dest?Qe(je(B(t.dest),e.orientation),o):u,p=t.brush&&Gr(s[t.brush],t.modifiers),k=n.get(t.dest),w=[];if(p){let c=U(K("g"),{cgHash:i});w.push({el:c}),u[0]!==f[0]||u[1]!==f[1]?c.appendChild(pn(t,p,u,f,r,Bt(t.dest,n))):c.appendChild(dn(s[t.brush],u,r,o))}if(t.label){let c=t.label;(a=c.fill)!==null&&a!==void 0||(c.fill=t.brush&&s[t.brush].color);let d=t.brush?void 0:"tr";w.push({el:mn(c,i,u,f,k,d),isCustom:!0})}if(t.customSvg){let c=(l=t.customSvg.center)!==null&&l!==void 0?l:"orig",[d,m]=c==="label"?Qr(u,f,k).map(y=>y-.5):c==="dest"?f:u,C=U(K("g"),{transform:`translate(${d},${m})`,cgHash:i});C.innerHTML=`<svg width="1" height="1" viewBox="0 0 100 100">${t.customSvg.html}</svg>`,w.push({el:C,isCustom:!0})}return w}function dn(e,t,r,i){let s=gn(),n=(i.width+i.height)/(4*Math.max(i.width,i.height));return U(K("circle"),{stroke:e.color,"stroke-width":s[r?0:1],fill:"none",opacity:jr(e,r),cx:t[0],cy:t[1],r:n-s[1]/2})}function Ge(e){return["#ffffff","#fff","white"].includes(e.color)?Fr.hilitePrimary:Fr.hiliteWhite}function pn(e,t,r,i,s,n){var o;function a(f){var p;let k=bn(n&&!s),w=i[0]-r[0],c=i[1]-r[1],d=Math.atan2(c,w),m=Math.cos(d)*k,C=Math.sin(d)*k;return U(K("line"),{stroke:f?Ge(t).color:t.color,"stroke-width":vn(t,s)+(f?.04:0),"stroke-linecap":"round","marker-end":`url(#arrowhead-${f?Ge(t).key:t.key})`,opacity:!((p=e.modifiers)===null||p===void 0)&&p.hilite?1:jr(t,s),x1:r[0],y1:r[1],x2:i[0]-m,y2:i[1]-C})}if(!(!((o=e.modifiers)===null||o===void 0)&&o.hilite))return a(!1);let l=K("g"),u=U(K("g"),{filter:"url(#cg-filter-blur)"});return u.appendChild(wn(r,i)),u.appendChild(a(!0)),l.appendChild(u),l.appendChild(a(!1)),l}function fn(e){let t=U(K("marker"),{id:"arrowhead-"+e.key,orient:"auto",overflow:"visible",markerWidth:4,markerHeight:4,refX:e.key.startsWith("hilite")?1.86:2.05,refY:2});return t.appendChild(U(K("path"),{d:"M0,0 V4 L3,2 Z",fill:e.color})),t.setAttribute("cgKey",e.key),t}function mn(e,t,r,i,s,n){var o;let a=.4*.75**e.text.length,l=Qr(r,i,s),u=n==="tr"?.4:0,f=U(K("g"),{transform:`translate(${l[0]+u},${l[1]-u})`,cgHash:t});f.appendChild(U(K("circle"),{r:.4/2,"fill-opacity":n?1:.8,"stroke-opacity":n?1:.7,"stroke-width":.03,fill:(o=e.fill)!==null&&o!==void 0?o:"#666",stroke:"white"}));let p=U(K("text"),{"font-size":a,"font-family":"Noto Sans","text-anchor":"middle",fill:"white",y:.13*.75**e.text.length});return p.innerHTML=e.text,f.appendChild(p),f}function je(e,t){return t==="white"?e:[7-e[0],7-e[1]]}function Bt(e,t){return(e&&t.has(e)&&t.get(e).size>1)===!0}function K(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function U(e,t){for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.setAttribute(r,t[r]);return e}function Gr(e,t){return t?{color:e.color,opacity:Math.round(e.opacity*10)/10,lineWidth:Math.round(t.lineWidth||e.lineWidth),key:[e.key,t.lineWidth].filter(r=>r).join("")}:e}function gn(){return[3/64,4/64]}function vn(e,t){return(e.lineWidth||10)*(t?.85:1)/64}function jr(e,t){return(e.opacity||1)*(t?.9:1)}function bn(e){return(e?20:10)/64}function Qe(e,t){let r=Math.min(1,t.width/t.height),i=Math.min(1,t.height/t.width);return[(e[0]-3.5)*r,(3.5-e[1])*i]}function wn(e,t){let r={from:[Math.floor(Math.min(e[0],t[0])),Math.floor(Math.min(e[1],t[1]))],to:[Math.ceil(Math.max(e[0],t[0])),Math.ceil(Math.max(e[1],t[1]))]};return U(K("rect"),{x:r.from[0],y:r.from[1],width:r.to[0]-r.from[0],height:r.to[1]-r.from[1],fill:"none",stroke:"none"})}function Lt(e,t,r=!0){let i=Math.atan2(t[1]-e[1],t[0]-e[0])+Math.PI;return r?(Math.round(i*8/Math.PI)+16)%16:i}function kn(e,t){return Math.sqrt([e[0]-t[0],e[1]-t[1]].reduce((r,i)=>r+i*i,0))}function Qr(e,t,r){let i=kn(e,t),s=Lt(e,t,!1);if(r&&(i-=33/64,r.size>1)){i-=10/64;let n=Lt(e,t);(r.has((n+1)%16)||r.has((n+15)%16))&&n&1&&(i-=.4)}return[e[0]-Math.cos(s)*i,e[1]-Math.sin(s)*i].map(n=>n+.5)}function yn(e,t){e.innerHTML="",e.classList.add("cg-wrap");for(let l of ss)e.classList.toggle("orientation-"+l,t.orientation===l);e.classList.toggle("manipulable",!t.viewOnly);let r=re("cg-container");e.appendChild(r);let i=re("cg-board");r.appendChild(i);let s,n,o;if(t.drawable.visible&&(s=U(K("svg"),{class:"cg-shapes",viewBox:"-4 -4 8 8",preserveAspectRatio:"xMidYMid slice"}),s.appendChild(nn()),s.appendChild(K("g")),n=U(K("svg"),{class:"cg-custom-svgs",viewBox:"-3.5 -3.5 8 8",preserveAspectRatio:"xMidYMid slice"}),n.appendChild(K("g")),o=re("cg-auto-pieces"),r.appendChild(s),r.appendChild(n),r.appendChild(o)),t.coordinates){let l=t.orientation==="black"?" black":"",u=t.ranksPosition==="left"?" left":"";if(t.coordinatesOnSquares){let f=t.orientation==="white"?p=>p+1:p=>8-p;Fe.forEach((p,k)=>r.appendChild(zt(Ve.map(w=>p+w),"squares rank"+f(k)+l+u)))}else r.appendChild(zt(Ve,"ranks"+l+u)),r.appendChild(zt(Fe,"files"+l))}let a;return t.draggable.enabled&&t.draggable.showGhost&&(a=re("piece","ghost"),Et(a,!1),r.appendChild(a)),{board:i,container:r,wrap:e,ghost:a,svg:s,customSvg:n,autoPieces:o}}function zt(e,t){let r=re("coords",t),i;for(let s of e)i=re("coord"),i.textContent=s,r.appendChild(i);return r}function Cn(e,t){if(!e.dropmode.active)return;le(e),he(e);let r=e.dropmode.piece;if(r){e.pieces.set("a0",r);let i=me(t),s=i&&ve(i,V(e),e.dom.bounds());s&&Ar(e,"a0",s)}e.dom.redraw()}function Sn(e,t){let r=e.dom.elements.board;if("ResizeObserver"in window&&new ResizeObserver(t).observe(e.dom.elements.wrap),(e.disableContextMenu||e.drawable.enabled)&&r.addEventListener("contextmenu",s=>s.preventDefault()),e.viewOnly)return;let i=En(e);r.addEventListener("touchstart",i,{passive:!1}),r.addEventListener("mousedown",i,{passive:!1})}function xn(e,t){let r=[];if("ResizeObserver"in window||r.push(Ne(document.body,"chessground.resize",t)),!e.viewOnly){let i=Yr(e,Js,Vs),s=Yr(e,en,Hs);for(let o of["touchmove","mousemove"])r.push(Ne(document,o,i));for(let o of["touchend","mouseup"])r.push(Ne(document,o,s));let n=()=>e.dom.bounds.clear();r.push(Ne(document,"scroll",n,{capture:!0,passive:!0})),r.push(Ne(window,"resize",n,{passive:!0}))}return()=>r.forEach(i=>i())}function Ne(e,t,r,i){return e.addEventListener(t,r,i),()=>e.removeEventListener(t,r,i)}var En=e=>t=>{e.draggable.current?He(e):e.drawable.current?Dr(e):t.shiftKey||vr(t)?e.drawable.enabled&&Fs(e,t):e.viewOnly||(e.dropmode.active?Cn(e,t):Ys(e,t))},Yr=(e,t,r)=>i=>{e.drawable.current?e.drawable.enabled&&r(e,i):e.viewOnly||t(e,i)};function Mn(e){let t=V(e),r=_e(e.dom.bounds()),i=e.dom.elements.board,s=e.pieces,n=e.animation.current,o=n?n.plan.anims:new Map,a=n?n.plan.fadings:new Map,l=e.draggable.current,u=An(e),f=new Set,p=new Set,k=new Map,w=new Map,c,d,m,C,y,M,x,S,E,P;for(d=i.firstChild;d;){if(c=d.cgKey,Xr(d))if(m=s.get(c),y=o.get(c),M=a.get(c),C=d.cgPiece,d.cgDragging&&(!l||l.orig!==c)&&(d.classList.remove("dragging"),J(d,r(B(c),t)),d.cgDragging=!1),!M&&d.cgFading&&(d.cgFading=!1,d.classList.remove("fading")),m){if(y&&d.cgAnimating&&C===Te(m)){let v=B(c);v[0]+=y[2],v[1]+=y[3],d.classList.add("anim"),J(d,r(v,t))}else d.cgAnimating&&(d.cgAnimating=!1,d.classList.remove("anim"),J(d,r(B(c),t)),e.addPieceZIndex&&(d.style.zIndex=Kt(B(c),t)));C===Te(m)&&(!M||!d.cgFading)?f.add(c):M&&C===Te(M)?(d.classList.add("fading"),d.cgFading=!0):Dt(k,C,d)}else Dt(k,C,d);else if(Jr(d)){let v=d.className;u.get(c)===v?p.add(c):Dt(w,v,d)}d=d.nextSibling}for(let[v,_]of u)if(!p.has(v)){E=w.get(_),P=E&&E.pop();let N=r(B(v),t);if(P)P.cgKey=v,J(P,N);else{let R=re("square",_);R.cgKey=v,J(R,N),i.insertBefore(R,i.firstChild)}}for(let[v,_]of s)if(y=o.get(v),!f.has(v))if(x=k.get(Te(_)),S=x&&x.pop(),S){S.cgKey=v,S.cgFading&&(S.classList.remove("fading"),S.cgFading=!1);let N=B(v);e.addPieceZIndex&&(S.style.zIndex=Kt(N,t)),y&&(S.cgAnimating=!0,S.classList.add("anim"),N[0]+=y[2],N[1]+=y[3]),J(S,r(N,t))}else{let N=Te(_),R=re("piece",N),D=B(v);R.cgPiece=N,R.cgKey=v,y&&(R.cgAnimating=!0,D[0]+=y[2],D[1]+=y[3]),J(R,r(D,t)),e.addPieceZIndex&&(R.style.zIndex=Kt(D,t)),i.appendChild(R)}for(let v of k.values())ei(e,v);for(let v of w.values())ei(e,v)}function qn(e){let t=V(e),r=_e(e.dom.bounds()),i=e.dom.elements.board.firstChild;for(;i;)(Xr(i)&&!i.cgAnimating||Jr(i))&&J(i,r(B(i.cgKey),t)),i=i.nextSibling}function Zr(e){var t,r;let i=e.dom.elements.wrap.getBoundingClientRect(),s=e.dom.elements.container,n=i.height/i.width,o=Math.floor(i.width*window.devicePixelRatio/8)*8/window.devicePixelRatio,a=o*n;s.style.width=o+"px",s.style.height=a+"px",e.dom.bounds.clear(),(t=e.addDimensionsCssVarsTo)===null||t===void 0||t.style.setProperty("---cg-width",o+"px"),(r=e.addDimensionsCssVarsTo)===null||r===void 0||r.style.setProperty("---cg-height",a+"px")}var Xr=e=>e.tagName==="PIECE",Jr=e=>e.tagName==="SQUARE";function ei(e,t){for(let r of t)e.dom.elements.board.removeChild(r)}function Kt(e,t){let r=e[1];return`${t?10-r:3+r}`}var Te=e=>`${e.color} ${e.role}`;function An(e){var t,r,i;let s=new Map;if(e.lastMove&&e.highlight.lastMove)for(let a of e.lastMove)ie(s,a,"last-move");if(e.check&&e.highlight.check&&ie(s,e.check,"check"),e.selected&&(ie(s,e.selected,"selected"),e.movable.showDests)){let a=(t=e.movable.dests)===null||t===void 0?void 0:t.get(e.selected);if(a)for(let u of a)ie(s,u,"move-dest"+(e.pieces.has(u)?" oc":""));let l=(i=(r=e.premovable.customDests)===null||r===void 0?void 0:r.get(e.selected))!==null&&i!==void 0?i:e.premovable.dests;if(l)for(let u of l)ie(s,u,"premove-dest"+(e.pieces.has(u)?" oc":""))}let n=e.premovable.current;if(n)for(let a of n)ie(s,a,"current-premove");else e.predroppable.current&&ie(s,e.predroppable.current.key,"current-premove");let o=e.exploding;if(o)for(let a of o.keys)ie(s,a,"exploding"+o.stage);return e.highlight.custom&&e.highlight.custom.forEach((a,l)=>{ie(s,l,a)}),s}function ie(e,t,r){let i=e.get(t);i?e.set(t,`${i} ${r}`):e.set(t,r)}function Dt(e,t,r){let i=e.get(t);i?i.push(r):e.set(t,[r])}function On(e,t,r){let i=new Map,s=[];for(let a of e)i.set(a.hash,!1);let n=t.firstElementChild,o;for(;n;)o=n.getAttribute("cgHash"),i.has(o)?i.set(o,!0):s.push(n),n=n.nextElementSibling;for(let a of s)t.removeChild(a);for(let a of e)i.get(a.hash)||t.appendChild(r(a))}function Pn(e,t){let r=e.drawable.autoShapes.filter(i=>i.piece).map(i=>({shape:i,hash:Nn(i),current:!1}));On(r,t,i=>Rn(e,i,e.dom.bounds()))}function _n(e){var t;let r=V(e),i=_e(e.dom.bounds()),s=(t=e.dom.elements.autoPieces)===null||t===void 0?void 0:t.firstChild;for(;s;)gr(s,i(B(s.cgKey),r),s.cgScale),s=s.nextSibling}function Rn(e,{shape:t,hash:r},i){var s,n,o;let a=t.orig,l=(s=t.piece)===null||s===void 0?void 0:s.role,u=(n=t.piece)===null||n===void 0?void 0:n.color,f=(o=t.piece)===null||o===void 0?void 0:o.scale,p=re("piece",`${l} ${u}`);return p.setAttribute("cgHash",r),p.cgKey=a,p.cgScale=f,gr(p,_e(i)(B(a),V(e)),f),p}var Nn=e=>{var t,r,i;return[e.orig,(t=e.piece)===null||t===void 0?void 0:t.role,(r=e.piece)===null||r===void 0?void 0:r.color,(i=e.piece)===null||i===void 0?void 0:i.scale].join(",")};function Tn(e,t){let r=sn();Br(r,t||{});function i(){let s="dom"in r?r.dom.unbind:void 0,n=yn(e,r),o=as(()=>n.board.getBoundingClientRect()),a=f=>{Mn(u),n.autoPieces&&Pn(u,n.autoPieces),!f&&n.svg&&on(u,n.svg,n.customSvg)},l=()=>{Zr(u),qn(u),n.autoPieces&&_n(u)},u=r;return u.dom={elements:n,bounds:o,redraw:Bn(a),redrawNow:a,unbind:s},u.drawable.prevSvgHash="",Zr(u),a(!1),Sn(u,l),s||(u.dom.unbind=xn(u,l)),u.events.insert&&u.events.insert(n),u}return rn(i(),i)}function Bn(e){let t=!1;return()=>{t||(t=!0,requestAnimationFrame(()=>{e(),t=!1}))}}function Ln(e,t){return document.createElement(e,t)}function zn(e,t,r){return document.createElementNS(e,t,r)}function Kn(){return we(document.createDocumentFragment())}function Dn(e){return document.createTextNode(e)}function $n(e){return document.createComment(e)}function In(e,t,r){if(se(e)){let i=e;for(;i&&se(i);)i=we(i).parent;e=i??e}se(t)&&(t=we(t,e)),r&&se(r)&&(r=we(r).firstChildNode),e.insertBefore(t,r)}function Wn(e,t){e.removeChild(t)}function Un(e,t){se(t)&&(t=we(t,e)),e.appendChild(t)}function ti(e){if(se(e)){for(;e&&se(e);)e=we(e).parent;return e??null}return e.parentNode}function Fn(e){var t;if(se(e)){let r=we(e),i=ti(r);if(i&&r.lastChildNode){let s=Array.from(i.childNodes),n=s.indexOf(r.lastChildNode);return(t=s[n+1])!==null&&t!==void 0?t:null}return null}return e.nextSibling}function Vn(e){return e.tagName}function Hn(e,t){e.textContent=t}function Gn(e){return e.textContent}function jn(e){return e.nodeType===1}function Qn(e){return e.nodeType===3}function Yn(e){return e.nodeType===8}function se(e){return e.nodeType===11}function we(e,t){var r,i,s;let n=e;return(r=n.parent)!==null&&r!==void 0||(n.parent=t??null),(i=n.firstChildNode)!==null&&i!==void 0||(n.firstChildNode=e.firstChild),(s=n.lastChildNode)!==null&&s!==void 0||(n.lastChildNode=e.lastChild),n}var Zn={createElement:Ln,createElementNS:zn,createTextNode:Dn,createDocumentFragment:Kn,createComment:$n,insertBefore:In,removeChild:Wn,appendChild:Un,parentNode:ti,nextSibling:Fn,tagName:Vn,setTextContent:Hn,getTextContent:Gn,isElement:jn,isText:Qn,isComment:Yn,isDocumentFragment:se};function Be(e,t,r,i,s){let n=t===void 0?void 0:t.key;return{sel:e,data:t,children:r,text:i,elm:s,key:n}}var Ye=Array.isArray;function Ze(e){return typeof e=="string"||typeof e=="number"||e instanceof String||e instanceof Number}function Xe(e){return e===void 0}function H(e){return e!==void 0}var $t=Be("",{},[],void 0,void 0);function Le(e,t){var r,i;let s=e.key===t.key,n=((r=e.data)===null||r===void 0?void 0:r.is)===((i=t.data)===null||i===void 0?void 0:i.is),o=e.sel===t.sel,a=!e.sel&&e.sel===t.sel?typeof e.text==typeof t.text:!0;return o&&s&&n&&a}function Xn(){throw new Error("The document fragment is not supported on this platform.")}function Jn(e,t){return e.isElement(t)}function eo(e,t){return e.isDocumentFragment(t)}function to(e,t,r){var i;let s={};for(let n=t;n<=r;++n){let o=(i=e[n])===null||i===void 0?void 0:i.key;o!==void 0&&(s[o]=n)}return s}var ro=["create","update","remove","destroy","pre","post"];function io(e,t,r){let i={create:[],update:[],remove:[],destroy:[],pre:[],post:[]},s=Zn;for(let c of ro)for(let d of e){let m=d[c];m!==void 0&&i[c].push(m)}function n(c){let d=c.id?"#"+c.id:"",m=c.getAttribute("class"),C=m?"."+m.split(" ").join("."):"";return Be(s.tagName(c).toLowerCase()+d+C,{},[],void 0,c)}function o(c){return Be(void 0,{},[],void 0,c)}function a(c,d){return function(){if(--d===0){let m=s.parentNode(c);m!==null&&s.removeChild(m,c)}}}function l(c,d){var m,C,y,M;let x,S=c.data;if(S!==void 0){let v=(m=S.hook)===null||m===void 0?void 0:m.init;H(v)&&(v(c),S=c.data)}let E=c.children,P=c.sel;if(P==="!")Xe(c.text)&&(c.text=""),c.elm=s.createComment(c.text);else if(P==="")c.elm=s.createTextNode(c.text);else if(P!==void 0){let v=P.indexOf("#"),_=P.indexOf(".",v),N=v>0?v:P.length,R=_>0?_:P.length,D=v!==-1||_!==-1?P.slice(0,Math.min(N,R)):P,X=c.elm=H(S)&&H(x=S.ns)?s.createElementNS(x,D,S):s.createElement(D,S);for(N<R&&X.setAttribute("id",P.slice(N+1,R)),_>0&&X.setAttribute("class",P.slice(R+1).replace(/\./g," ")),x=0;x<i.create.length;++x)i.create[x]($t,c);if(Ze(c.text)&&(!Ye(E)||E.length===0)&&s.appendChild(X,s.createTextNode(c.text)),Ye(E))for(x=0;x<E.length;++x){let di=E[x];di!=null&&s.appendChild(X,l(di,d))}let it=c.data.hook;H(it)&&((C=it.create)===null||C===void 0||C.call(it,$t,c),it.insert&&d.push(c))}else if(!((y=r==null?void 0:r.experimental)===null||y===void 0)&&y.fragments&&c.children){for(c.elm=((M=s.createDocumentFragment)!==null&&M!==void 0?M:Xn)(),x=0;x<i.create.length;++x)i.create[x]($t,c);for(x=0;x<c.children.length;++x){let v=c.children[x];v!=null&&s.appendChild(c.elm,l(v,d))}}else c.elm=s.createTextNode(c.text);return c.elm}function u(c,d,m,C,y,M){for(;C<=y;++C){let x=m[C];x!=null&&s.insertBefore(c,l(x,M),d)}}function f(c){var d,m;let C=c.data;if(C!==void 0){(m=(d=C==null?void 0:C.hook)===null||d===void 0?void 0:d.destroy)===null||m===void 0||m.call(d,c);for(let y=0;y<i.destroy.length;++y)i.destroy[y](c);if(c.children!==void 0)for(let y=0;y<c.children.length;++y){let M=c.children[y];M!=null&&typeof M!="string"&&f(M)}}}function p(c,d,m,C){for(var y,M;m<=C;++m){let x,S,E=d[m];if(E!=null)if(H(E.sel)){f(E),x=i.remove.length+1,S=a(E.elm,x);for(let v=0;v<i.remove.length;++v)i.remove[v](E,S);let P=(M=(y=E==null?void 0:E.data)===null||y===void 0?void 0:y.hook)===null||M===void 0?void 0:M.remove;H(P)?P(E,S):S()}else E.children?(f(E),p(c,E.children,0,E.children.length-1)):s.removeChild(c,E.elm)}}function k(c,d,m,C){let y=0,M=0,x=d.length-1,S=d[0],E=d[x],P=m.length-1,v=m[0],_=m[P],N,R,D,X;for(;y<=x&&M<=P;)S==null?S=d[++y]:E==null?E=d[--x]:v==null?v=m[++M]:_==null?_=m[--P]:Le(S,v)?(w(S,v,C),S=d[++y],v=m[++M]):Le(E,_)?(w(E,_,C),E=d[--x],_=m[--P]):Le(S,_)?(w(S,_,C),s.insertBefore(c,S.elm,s.nextSibling(E.elm)),S=d[++y],_=m[--P]):Le(E,v)?(w(E,v,C),s.insertBefore(c,E.elm,S.elm),E=d[--x],v=m[++M]):(N===void 0&&(N=to(d,y,x)),R=N[v.key],Xe(R)?(s.insertBefore(c,l(v,C),S.elm),v=m[++M]):Xe(N[_.key])?(s.insertBefore(c,l(_,C),s.nextSibling(E.elm)),_=m[--P]):(D=d[R],D.sel!==v.sel?s.insertBefore(c,l(v,C),S.elm):(w(D,v,C),d[R]=void 0,s.insertBefore(c,D.elm,S.elm)),v=m[++M]));M<=P&&(X=m[P+1]==null?null:m[P+1].elm,u(c,X,m,M,P,C)),y<=x&&p(c,d,y,x)}function w(c,d,m){var C,y,M,x,S,E,P,v;let _=(C=d.data)===null||C===void 0?void 0:C.hook;(y=_==null?void 0:_.prepatch)===null||y===void 0||y.call(_,c,d);let N=d.elm=c.elm;if(c===d)return;if(d.data!==void 0||H(d.text)&&d.text!==c.text){(M=d.data)!==null&&M!==void 0||(d.data={}),(x=c.data)!==null&&x!==void 0||(c.data={});for(let X=0;X<i.update.length;++X)i.update[X](c,d);(P=(E=(S=d.data)===null||S===void 0?void 0:S.hook)===null||E===void 0?void 0:E.update)===null||P===void 0||P.call(E,c,d)}let R=c.children,D=d.children;Xe(d.text)?H(R)&&H(D)?R!==D&&k(N,R,D,m):H(D)?(H(c.text)&&s.setTextContent(N,""),u(N,null,D,0,D.length-1,m)):H(R)?p(N,R,0,R.length-1):H(c.text)&&s.setTextContent(N,""):c.text!==d.text&&(H(R)&&p(N,R,0,R.length-1),s.setTextContent(N,d.text)),(v=_==null?void 0:_.postpatch)===null||v===void 0||v.call(_,c,d)}return function(c,d){let m,C,y,M=[];for(m=0;m<i.pre.length;++m)i.pre[m]();for(Jn(s,c)?c=n(c):eo(s,c)&&(c=o(c)),Le(c,d)?w(c,d,M):(C=c.elm,y=s.parentNode(C),l(d,M),y!==null&&(s.insertBefore(y,d.elm,s.nextSibling(C)),p(y,[c],0,0))),m=0;m<M.length;++m)M[m].data.hook.insert(M[m]);for(m=0;m<i.post.length;++m)i.post[m]();return d}}function ri(e,t,r){if(e.ns="http://www.w3.org/2000/svg",r!=="foreignObject"&&t!==void 0)for(let i=0;i<t.length;++i){let s=t[i];if(typeof s=="string")continue;let n=s.data;n!==void 0&&ri(n,s.children,s.sel)}}function O(e,t,r){let i={},s,n,o;if(r!==void 0?(t!==null&&(i=t),Ye(r)?s=r:Ze(r)?n=r.toString():r&&r.sel&&(s=[r])):t!=null&&(Ye(t)?s=t:Ze(t)?n=t.toString():t&&t.sel?s=[t]:i=t),s!==void 0)for(o=0;o<s.length;++o)Ze(s[o])&&(s[o]=Be(void 0,void 0,void 0,s[o],void 0));return e.startsWith("svg")&&(e.length===3||e[3]==="."||e[3]==="#")&&ri(i,s,e),Be(e,i,s,n,void 0)}var so="http://www.w3.org/1999/xlink",no="http://www.w3.org/2000/xmlns/",oo="http://www.w3.org/XML/1998/namespace";function ii(e,t){let r,i=t.elm,s=e.data.attrs,n=t.data.attrs;if(!(!s&&!n)&&s!==n){s=s||{},n=n||{};for(r in n){let o=n[r];s[r]!==o&&(o===!0?i.setAttribute(r,""):o===!1?i.removeAttribute(r):r.charCodeAt(0)!==120?i.setAttribute(r,o):r.charCodeAt(3)===58?i.setAttributeNS(oo,r,o):r.charCodeAt(5)===58?r.charCodeAt(1)===109?i.setAttributeNS(no,r,o):i.setAttributeNS(so,r,o):i.setAttribute(r,o))}for(r in s)r in n||i.removeAttribute(r)}}var ao={create:ii,update:ii};function si(e,t){let r,i,s=t.elm,n=e.data.class,o=t.data.class;if(!(!n&&!o)&&n!==o){n=n||{},o=o||{};for(i in n)n[i]&&!Object.prototype.hasOwnProperty.call(o,i)&&s.classList.remove(i);for(i in o)r=o[i],r!==n[i]&&s.classList[r?"add":"remove"](i)}}var lo={create:si,update:si};function ho(e,t,r){for(let i of["touchstart","mousedown"])e.addEventListener(i,s=>{t(s),s.preventDefault()},{passive:!1})}var It=(e,t,r,i=!0)=>Je(s=>s.addEventListener(e,n=>{let o=t(n);return o===!1&&n.preventDefault(),o},{passive:i}));function Je(e){return{insert:t=>e(t.elm)}}function co(e){let t=0;return r=>{t+=r.deltaY*(r.deltaMode?40:1),Math.abs(t)>=4?(e(r,!0),t=0):e(r,!1)}}function uo(e,t){let r=()=>{e(),i=Math.max(100,i-i/15),s=setTimeout(r,i)},i=350,s=setTimeout(r,500);e();let n=t.type=="touchstart"?"touchend":"mouseup";document.addEventListener(n,()=>clearTimeout(s),{once:!0})}var po=e=>e.altKey||e.ctrlKey||e.shiftKey||e.metaKey||document.activeElement instanceof HTMLInputElement||document.activeElement instanceof HTMLTextAreaElement,fo=e=>t=>{po(t)||(t.key=="ArrowLeft"?e.goTo("prev"):t.key=="ArrowRight"?e.goTo("next"):t.key=="f"&&e.flip())},mo=e=>{var t,r;return O("div.lpv__menu.lpv__pane",[O("button.lpv__menu__entry.lpv__menu__flip.lpv__fbt",{hook:It("click",e.flip)},e.translate("flipTheBoard")),(t=e.opts.menu.analysisBoard)!=null&&t.enabled?O("a.lpv__menu__entry.lpv__menu__analysis.lpv__fbt",{attrs:{href:e.analysisUrl(),target:"_blank"}},e.translate("analysisBoard")):void 0,(r=e.opts.menu.practiceWithComputer)!=null&&r.enabled?O("a.lpv__menu__entry.lpv__menu__practice.lpv__fbt",{attrs:{href:e.practiceUrl(),target:"_blank"}},e.translate("practiceWithComputer")):void 0,e.opts.menu.getPgn.enabled?O("button.lpv__menu__entry.lpv__menu__pgn.lpv__fbt",{hook:It("click",e.togglePgn)},e.translate("getPgn")):void 0,go(e)])},go=e=>{let t=e.game.metadata.externalLink;return t&&O("a.lpv__menu__entry.lpv__fbt",{attrs:{href:t,target:"_blank"}},e.translate(e.game.metadata.isLichess?"viewOnLichess":"viewOnSite"))},vo=e=>O("div.lpv__controls",[e.pane=="board"?void 0:et(e,"first","step-backward"),et(e,"prev","left-open"),O("button.lpv__fbt.lpv__controls__menu.lpv__icon",{class:{active:e.pane!="board","lpv__icon-ellipsis-vert":e.pane=="board"},hook:It("click",e.toggleMenu)},e.pane=="board"?void 0:"X"),et(e,"next","right-open"),e.pane=="board"?void 0:et(e,"last","step-forward")]),et=(e,t,r)=>O(`button.lpv__controls__goto.lpv__controls__goto--${t}.lpv__fbt.lpv__icon.lpv__icon-${r}`,{class:{disabled:e.pane=="board"&&!e.canGoTo(t)},hook:Je(i=>ho(i,s=>uo(()=>e.goTo(t),s)))}),bo=e=>{let t=wo[e];return t?O("nag",{attrs:{title:t.name}},t.symbol):void 0},wo={1:{symbol:"!",name:"Good move"},2:{symbol:"?",name:"Mistake"},3:{symbol:"!!",name:"Brilliant move"},4:{symbol:"??",name:"Blunder"},5:{symbol:"!?",name:"Interesting move"},6:{symbol:"?!",name:"Dubious move"},7:{symbol:"□",name:"Only move"},22:{symbol:"⨀",name:"Zugzwang"},10:{symbol:"=",name:"Equal position"},13:{symbol:"∞",name:"Unclear position"},14:{symbol:"⩲",name:"White is slightly better"},15:{symbol:"⩱",name:"Black is slightly better"},16:{symbol:"±",name:"White is better"},17:{symbol:"∓",name:"Black is better"},18:{symbol:"+−",name:"White is winning"},19:{symbol:"-+",name:"Black is winning"},146:{symbol:"N",name:"Novelty"},32:{symbol:"↑↑",name:"Development"},36:{symbol:"↑",name:"Initiative"},40:{symbol:"→",name:"Attack"},132:{symbol:"⇆",name:"Counterplay"},138:{symbol:"⊕",name:"Time trouble"},44:{symbol:"=∞",name:"With compensation"},140:{symbol:"∆",name:"With the idea"}},ko=e=>O("div.lpv__side",[O("div.lpv__moves",{hook:{insert:t=>{let r=t.elm;e.path.empty()||oi(e,r),r.addEventListener("mousedown",i=>{let s=i.target.getAttribute("p");s&&e.toPath(new Re(s))},{passive:!0})},postpatch:(t,r)=>{e.autoScrollRequested&&(oi(e,r.elm),e.autoScrollRequested=!1)}}},[...e.game.initial.comments.map(tt),...xo(e),...yo(e)])]),yo=e=>{let t=e.game.metadata.result;return t&&t!="*"?[O("comment.result",e.game.metadata.result)]:[]},Wt=()=>O("move.empty","..."),Ut=e=>O("index",`${e}.`),tt=e=>O("comment",e),Co=()=>O("paren.open","("),So=()=>O("paren.close",")"),rt=e=>Math.floor((e.ply-1)/2)+1,xo=e=>{let t=Mo(e),r=[],i,s=e.game.moves.children.slice(1);for(e.game.initial.pos.turn=="black"&&e.game.mainline[0]&&r.push(Ut(e.game.initial.pos.fullmoves),Wt());i=(i||e.game.moves).children[0];){let n=i.data,o=n.ply%2==1;o&&r.push(Ut(rt(n))),r.push(t(n));let a=o&&(s.length||n.comments.length)&&i.children.length;a&&r.push(Wt()),n.comments.forEach(l=>r.push(tt(l))),s.forEach(l=>r.push(Eo(t,l))),a&&r.push(Ut(rt(n)),Wt()),s=i.children.slice(1)}return r},Eo=(e,t)=>O("variation",[...t.data.startingComments.map(tt),...ni(e,t)]),ni=(e,t)=>{let r=[],i=[];t.data.ply%2==0&&r.push(O("index",[rt(t.data),"..."]));do{let s=t.data;s.ply%2==1&&r.push(O("index",[rt(s),"."])),r.push(e(s)),s.comments.forEach(n=>r.push(tt(n))),i.forEach(n=>{r=[...r,Co(),...ni(e,n),So()]}),i=t.children.slice(1),t=t.children[0]}while(t);return r},Mo=e=>t=>O("move",{class:{current:e.path.equals(t.path),ancestor:e.path.contains(t.path),good:t.nags.includes(1),mistake:t.nags.includes(2),brilliant:t.nags.includes(3),blunder:t.nags.includes(4),interesting:t.nags.includes(5),inaccuracy:t.nags.includes(6)},attrs:{p:t.path.path}},[t.san,...t.nags.map(bo)]),oi=(e,t)=>{let r=t.querySelector(".current");if(!r){t.scrollTop=e.path.empty()?0:99999;return}t.scrollTop=r.offsetTop-t.offsetHeight/2+r.offsetHeight};function ai(e,t){let r=t=="bottom"?e.orientation():A(e.orientation()),i=e.game.players[r],s=[i.title?O("span.lpv__player__title",i.title):void 0,O("span.lpv__player__name",i.name),i.rating?O("span.lpv__player__rating",["(",i.rating,")"]):void 0];return O(`div.lpv__player.lpv__player--${t}`,[i.isLichessUser?O("a.lpv__player__person.ulpt.user-link",{attrs:{href:`${e.opts.lichess}/@/${i.name}`}},s):O("span.lpv__player__person",s),e.opts.showClocks?qo(e,r):void 0])}var qo=(e,t)=>{let r=e.curData(),i=r.clocks&&r.clocks[t];return typeof i==null?void 0:O("div.lpv__player__clock",{class:{active:t==r.turn}},Ao(i))},Ao=e=>{if(!e&&e!==0)return["-"];let t=new Date(e*1e3),r=":",i=li(t.getUTCMinutes())+r+li(t.getUTCSeconds());return e>=3600?[Math.floor(e/3600)+r+i]:[i]},li=e=>(e<10?"0":"")+e;function hi(e){let t=e.opts,r=`lpv.lpv--moves-${t.showMoves}.lpv--controls-${t.showControls}${t.classes?"."+t.classes.replace(" ","."):""}`,i=t.showPlayers=="auto"?e.game.hasPlayerName():t.showPlayers;return O(`div.${r}`,{class:{"lpv--menu":e.pane!="board","lpv--players":i},attrs:{tabindex:0},hook:Je(s=>{e.setGround(Tn(s.querySelector(".cg-wrap"),_o(e,s))),t.keyboardToMove&&s.addEventListener("keydown",fo(e))})},[i?ai(e,"top"):void 0,Oo(e),i?ai(e,"bottom"):void 0,t.showControls?vo(e):void 0,t.showMoves?ko(e):void 0,e.pane=="menu"?mo(e):e.pane=="pgn"?Po(e):void 0])}var Oo=e=>O("div.lpv__board",{hook:Je(t=>{t.addEventListener("click",e.focus),e.opts.scrollToMove&&!("ontouchstart"in window)&&t.addEventListener("wheel",co((r,i)=>{r.preventDefault(),r.deltaY>0&&i?e.goTo("next",!1):r.deltaY<0&&i&&e.goTo("prev",!1)}))})},O("div.cg-wrap")),Po=e=>{let t=new Blob([e.opts.pgn],{type:"text/plain"});return O("div.lpv__pgn.lpv__pane",[O("a.lpv__pgn__download.lpv__fbt",{attrs:{href:window.URL.createObjectURL(t),download:e.opts.menu.getPgn.fileName||`${e.game.title()}.pgn`}},e.translate("download")),O("textarea.lpv__pgn__text",e.opts.pgn)])},_o=(e,t)=>({viewOnly:!e.opts.drawArrows,addDimensionsCssVarsTo:t,drawable:{enabled:e.opts.drawArrows,visible:!0},disableContextMenu:e.opts.drawArrows,...e.opts.chessground||{},movable:{free:!1},draggable:{enabled:!1},selectable:{enabled:!1},...e.cgState()}),Ro={pgn:"*",fen:void 0,showPlayers:"auto",showClocks:!0,showMoves:"auto",showControls:!0,scrollToMove:!0,keyboardToMove:!0,orientation:void 0,initialPly:0,chessground:{},drawArrows:!0,menu:{getPgn:{enabled:!0,fileName:void 0},practiceWithComputer:{enabled:!0},analysisBoard:{enabled:!0}},lichess:"https://lichess.org",classes:void 0};function No(e,t){let r={...Ro};return ci(r,t),r.fen&&(r.pgn=`[FEN "${r.fen}"]
4
4
  ${r.pgn}`),r.classes||(r.classes=e.className),r}function ci(e,t){for(let r in t)typeof t[r]<"u"&&(ui(e[r])&&ui(t[r])?ci(e[r],t[r]):e[r]=t[r])}function ui(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function To(e,t){let r=io([lo,ao]),i=No(e,t),s=new ws(i,a),n=hi(s);e.innerHTML="";let o=r(e,n);s.div=o.elm;function a(){o=r(o,hi(s))}return s}class Bo{constructor(t){Ft(this,"config");Ft(this,"viewer");this.config={...t}}mount(t){return this.viewer=To(t,this.config),this.viewer.div}get api(){return this.viewer}}const Lo=$.defineComponent({__name:"PgnViewer",props:{config:{}},emits:["ready"],setup(e,{emit:t}){const r=e,i=t,s=$.ref(null),n=new Bo({...r.config}),o=()=>n.mount(s.value),a=()=>i("ready",n.api);return $.onMounted(()=>{o(),a()}),(l,u)=>($.openBlock(),$.createElementBlock("div",{ref_key:"div",ref:s},null,512))}});G.PgnViewer=Lo,Object.defineProperty(G,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vue-pgn-viewer",
3
- "version": "0.3.1",
4
- "description": "Vue 3 wrapper around official Lichess PGN viewer",
3
+ "version": "0.3.3",
4
+ "description": "Vue 3 adapter for the official Lichess PGN viewer",
5
5
  "keywords": [
6
6
  "vue",
7
7
  "pgn-viewer",
@@ -42,8 +42,10 @@
42
42
  "build": "vue-tsc -b && vite build -c lib.config.ts",
43
43
  "build-demo": "vue-tsc -b && vite build -c demo.config.ts",
44
44
  "dev": "vite -c lib.config.ts",
45
- "flow": "./.flow",
45
+ "flow": "flow",
46
46
  "format": "prettier . --write",
47
+ "lint": "eslint",
48
+ "prepare": "husky",
47
49
  "preview": "vite preview -c demo.config.ts",
48
50
  "test": "vitest -c lib.config.ts"
49
51
  },
@@ -53,12 +55,18 @@
53
55
  "vue": "^3.5.13"
54
56
  },
55
57
  "devDependencies": {
58
+ "@changesets/cli": "^2.29.3",
59
+ "@dragunovartem99/flow": "^0.1.1",
56
60
  "@dragunovartem99/prettier-config": "^1.2.0",
61
+ "@eslint/js": "^9.25.1",
57
62
  "@types/node": "^22.12.0",
58
63
  "@vitejs/plugin-vue": "^5.2.1",
59
64
  "@vue/tsconfig": "^0.7.0",
65
+ "eslint": "^9.25.1",
66
+ "husky": "^9.1.7",
60
67
  "jsdom": "^26.0.0",
61
- "typescript": "~5.6.2",
68
+ "typescript": "~5.8.0",
69
+ "typescript-eslint": "^8.31.1",
62
70
  "vite": "^6.0.5",
63
71
  "vite-plugin-dts": "^4.5.0",
64
72
  "vitest": "^3.0.5",
package/dist/vite.svg DELETED
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>