Repository navigation
Expand file tree
/
Copy pathstat.html
More file actions
282 lines (263 loc) · 144 KB
/
Copy pathstat.html
File metadata and controls
282 lines (263 loc) · 144 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
<!doctype html><html><head><title>Chapbook: Tracking Endgame Stats</title><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><script type="module" crossorigin>
var Wn=Object.defineProperty;var Zn=(n,e,t)=>e in n?Wn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var U=(n,e,t)=>(Zn(n,typeof e!="symbol"?e+"":e,t),t),St=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var pe=(n,e,t)=>(St(n,e,"read from private field"),t?t.call(n):e.get(n)),Et=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},_t=(n,e,t,r)=>(St(n,e,"write to private field"),r?r.call(n,t):e.set(n,t),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function t(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=t(i);fetch(i.href,s)}})();const Gn={"config.logger.show.parse":!1,"config.logger.show.render":!1,"config.logger.show.sound":!1,"config.logger.show.state":!1,"config.logger.show.story":!1,"config.logger.show.style":!1};function Jt(n){return n+": "}const Me={inserts:!0};function Jn(n){Me[n]=!1}function Xn(n){Me[n]=!0}function Xt(n,e){Me[n]&&(console.log(Jt(n)+e),window.dispatchEvent(new CustomEvent("log-info",{detail:{message:e,source:n}})))}function Qt(n,e){Me[n]&&(console.warn(Jt(n)+e),window.dispatchEvent(new CustomEvent("log-warning",{detail:{message:e,source:n}})))}function F(n){return{log(e){Xt(n,e)},warn(e){Qt(n,e)}}}function Qn(){window.addEventListener("state-change",n=>{const e=/^config\.logger\.show\.(.+)$/.exec(n.detail.name);e&&e[1]&&(n.detail.value?Xn(e[1]):Jn(e[1]))})}var Kn=typeof global=="object"&&global&&global.Object===Object&&global;const Yn=Kn;var er=typeof self=="object"&&self&&self.Object===Object&&self,tr=Yn||er||Function("return this")();const it=tr;var nr=it.Symbol;const le=nr;var Kt=Object.prototype,rr=Kt.hasOwnProperty,ir=Kt.toString,ge=le?le.toStringTag:void 0;function sr(n){var e=rr.call(n,ge),t=n[ge];try{n[ge]=void 0;var r=!0}catch{}var i=ir.call(n);return r&&(e?n[ge]=t:delete n[ge]),i}var or=Object.prototype,ar=or.toString;function lr(n){return ar.call(n)}var cr="[object Null]",ur="[object Undefined]",Tt=le?le.toStringTag:void 0;function Yt(n){return n==null?n===void 0?ur:cr:Tt&&Tt in Object(n)?sr(n):lr(n)}function dr(n){return n!=null&&typeof n=="object"}var fr="[object Symbol]";function st(n){return typeof n=="symbol"||dr(n)&&Yt(n)==fr}function hr(n,e){for(var t=-1,r=n==null?0:n.length,i=Array(r);++t<r;)i[t]=e(n[t],t,n);return i}var pr=Array.isArray;const ot=pr;var gr=1/0,Ct=le?le.prototype:void 0,At=Ct?Ct.toString:void 0;function en(n){if(typeof n=="string")return n;if(ot(n))return hr(n,en)+"";if(st(n))return At?At.call(n):"";var e=n+"";return e=="0"&&1/n==-gr?"-0":e}function Pe(n){var e=typeof n;return n!=null&&(e=="object"||e=="function")}var mr="[object AsyncFunction]",br="[object Function]",yr="[object GeneratorFunction]",wr="[object Proxy]";function kr(n){if(!Pe(n))return!1;var e=Yt(n);return e==br||e==yr||e==mr||e==wr}var xr=it["__core-js_shared__"];const Fe=xr;var Lt=function(){var n=/[^.]+$/.exec(Fe&&Fe.keys&&Fe.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}();function vr(n){return!!Lt&&Lt in n}var $r=Function.prototype,Sr=$r.toString;function Er(n){if(n!=null){try{return Sr.call(n)}catch{}try{return n+""}catch{}}return""}var _r=/[\\^$.*+?()[\]{}|]/g,Tr=/^\[object .+?Constructor\]$/,Cr=Function.prototype,Ar=Object.prototype,Lr=Cr.toString,zr=Ar.hasOwnProperty,Pr=RegExp("^"+Lr.call(zr).replace(_r,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Or(n){if(!Pe(n)||vr(n))return!1;var e=kr(n)?Pr:Tr;return e.test(Er(n))}function Ir(n,e){return n==null?void 0:n[e]}function at(n,e){var t=Ir(n,e);return Or(t)?t:void 0}var Nr=function(){try{var n=at(Object,"defineProperty");return n({},"",{}),n}catch{}}();const zt=Nr;var Rr=9007199254740991,Mr=/^(?:0|[1-9]\d*)$/;function Dr(n,e){var t=typeof n;return e=e??Rr,!!e&&(t=="number"||t!="symbol"&&Mr.test(n))&&n>-1&&n%1==0&&n<e}function jr(n,e,t){e=="__proto__"&&zt?zt(n,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):n[e]=t}function tn(n,e){return n===e||n!==n&&e!==e}var qr=Object.prototype,Hr=qr.hasOwnProperty;function Fr(n,e,t){var r=n[e];(!(Hr.call(n,e)&&tn(r,t))||t===void 0&&!(e in n))&&jr(n,e,t)}var Br=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ur=/^\w*$/;function Vr(n,e){if(ot(n))return!1;var t=typeof n;return t=="number"||t=="symbol"||t=="boolean"||n==null||st(n)?!0:Ur.test(n)||!Br.test(n)||e!=null&&n in Object(e)}var Wr=at(Object,"create");const we=Wr;function Zr(){this.__data__=we?we(null):{},this.size=0}function Gr(n){var e=this.has(n)&&delete this.__data__[n];return this.size-=e?1:0,e}var Jr="__lodash_hash_undefined__",Xr=Object.prototype,Qr=Xr.hasOwnProperty;function Kr(n){var e=this.__data__;if(we){var t=e[n];return t===Jr?void 0:t}return Qr.call(e,n)?e[n]:void 0}var Yr=Object.prototype,ei=Yr.hasOwnProperty;function ti(n){var e=this.__data__;return we?e[n]!==void 0:ei.call(e,n)}var ni="__lodash_hash_undefined__";function ri(n,e){var t=this.__data__;return this.size+=this.has(n)?0:1,t[n]=we&&e===void 0?ni:e,this}function ee(n){var e=-1,t=n==null?0:n.length;for(this.clear();++e<t;){var r=n[e];this.set(r[0],r[1])}}ee.prototype.clear=Zr;ee.prototype.delete=Gr;ee.prototype.get=Kr;ee.prototype.has=ti;ee.prototype.set=ri;function ii(){this.__data__=[],this.size=0}function De(n,e){for(var t=n.length;t--;)if(tn(n[t][0],e))return t;return-1}var si=Array.prototype,oi=si.splice;function ai(n){var e=this.__data__,t=De(e,n);if(t<0)return!1;var r=e.length-1;return t==r?e.pop():oi.call(e,t,1),--this.size,!0}function li(n){var e=this.__data__,t=De(e,n);return t<0?void 0:e[t][1]}function ci(n){return De(this.__data__,n)>-1}function ui(n,e){var t=this.__data__,r=De(t,n);return r<0?(++this.size,t.push([n,e])):t[r][1]=e,this}function de(n){var e=-1,t=n==null?0:n.length;for(this.clear();++e<t;){var r=n[e];this.set(r[0],r[1])}}de.prototype.clear=ii;de.prototype.delete=ai;de.prototype.get=li;de.prototype.has=ci;de.prototype.set=ui;var di=at(it,"Map");const fi=di;function hi(){this.size=0,this.__data__={hash:new ee,map:new(fi||de),string:new ee}}function pi(n){var e=typeof n;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?n!=="__proto__":n===null}function je(n,e){var t=n.__data__;return pi(e)?t[typeof e=="string"?"string":"hash"]:t.map}function gi(n){var e=je(this,n).delete(n);return this.size-=e?1:0,e}function mi(n){return je(this,n).get(n)}function bi(n){return je(this,n).has(n)}function yi(n,e){var t=je(this,n),r=t.size;return t.set(n,e),this.size+=t.size==r?0:1,this}function re(n){var e=-1,t=n==null?0:n.length;for(this.clear();++e<t;){var r=n[e];this.set(r[0],r[1])}}re.prototype.clear=hi;re.prototype.delete=gi;re.prototype.get=mi;re.prototype.has=bi;re.prototype.set=yi;var wi="Expected a function";function lt(n,e){if(typeof n!="function"||e!=null&&typeof e!="function")throw new TypeError(wi);var t=function(){var r=arguments,i=e?e.apply(this,r):r[0],s=t.cache;if(s.has(i))return s.get(i);var a=n.apply(this,r);return t.cache=s.set(i,a)||s,a};return t.cache=new(lt.Cache||re),t}lt.Cache=re;var ki=500;function xi(n){var e=lt(n,function(r){return t.size===ki&&t.clear(),r}),t=e.cache;return e}var vi=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$i=/\\(\\)?/g,Si=xi(function(n){var e=[];return n.charCodeAt(0)===46&&e.push(""),n.replace(vi,function(t,r,i,s){e.push(i?s.replace($i,"$1"):r||t)}),e});const Ei=Si;function ct(n){return n==null?"":en(n)}function ut(n,e){return ot(n)?n:Vr(n,e)?[n]:Ei(ct(n))}var _i=1/0;function dt(n){if(typeof n=="string"||st(n))return n;var e=n+"";return e=="0"&&1/n==-_i?"-0":e}function nn(n,e){e=ut(e,n);for(var t=0,r=e.length;n!=null&&t<r;)n=n[dt(e[t++])];return t&&t==r?n:void 0}function Be(n,e,t){var r=n==null?void 0:nn(n,e);return r===void 0?t:r}function Ti(n,e,t){var r=-1,i=n.length;e<0&&(e=-e>i?0:i+e),t=t>i?i:t,t<0&&(t+=i),i=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(i);++r<i;)s[r]=n[r+e];return s}function rn(n){return function(e){return n==null?void 0:n[e]}}function Ci(n){var e=n==null?0:n.length;return e?n[e-1]:void 0}var Ai={"&":"&","<":"<",">":">",'"':""","'":"'"},Li=rn(Ai);const zi=Li;var sn=/[&<>"']/g,Pi=RegExp(sn.source);function H(n){return n=ct(n),n&&Pi.test(n)?n.replace(sn,zi):n}function Oi(n,e){return e.length<2?n:nn(n,Ti(e,0,-1))}function Ii(n,e){return e=ut(e,n),n=Oi(n,e),n==null||delete n[dt(Ci(e))]}function Ni(n,e,t,r){if(!Pe(n))return n;e=ut(e,n);for(var i=-1,s=e.length,a=s-1,l=n;l!=null&&++i<s;){var o=dt(e[i]),u=t;if(o==="__proto__"||o==="constructor"||o==="prototype")return n;if(i!=a){var c=l[o];u=r?r(c,o,l):void 0,u===void 0&&(u=Pe(c)?c:Dr(e[i+1])?[]:{})}Fr(l,o,u),l=l[o]}return n}function ft(n,e,t){return n==null?n:Ni(n,e,t)}var Ri={"&":"&","<":"<",">":">",""":'"',"'":"'"},Mi=rn(Ri);const Di=Mi;var on=/&(?:amp|lt|gt|quot|#39);/g,ji=RegExp(on.source);function qi(n){return n=ct(n),n&&ji.test(n)?n.replace(on,Di):n}function Hi(n,e){return n==null?!0:Ii(n,e)}const an=F("story"),P={customScripts:[],customStyles:[],passages:[]};function ln(n){for(const r of["name","creator","ifid","options"])P[r]=n.getAttribute(r)??void 0;const e=parseInt(n.getAttribute("startnode")??"");isNaN(e)||(P.startNode=e),P.creatorVersion=n.getAttribute("creator-version")??void 0;const t=r=>[...r].map(i=>i.textContent??"");P.customScripts=t(n.querySelectorAll('[type="text/twine-javascript"]')),P.customStyles=t(n.querySelectorAll('[type="text/twine-css"]')),P.passages=[...n.querySelectorAll("tw-passagedata")].map(r=>{const i=parseInt(r.getAttribute("pid")??""),s=r.getAttribute("tags");return{id:isNaN(i)?void 0:i,name:r.getAttribute("name")??void 0,source:r.textContent??"",tags:s?s.split(" "):[]}})}function cn(){const n=pt();if(!n||!n.name)throw new Error("There is no starting passage for this story, or it has no name.");ie({trail:[n.name],"config.testing":typeof P.options=="string"&&P.options.indexOf("debug")!==-1||!1}),P.name&&(document.title=P.name)}function un(){an.log(`Running custom scripts (${P.customScripts.length})`);for(const n of P.customScripts)new Function(n).apply(window)}function dn(){an.log(`Adding custom styles (${P.customStyles.length})`);for(const n of P.customStyles){const e=document.createElement("style");e.innerHTML=n,document.head.appendChild(e)}}function fn(){return P.ifid}function ht(){return P.name}function Fi(){return P.passages}function pt(){return P.passages.find(n=>n.id===P.startNode)}function Se(n){return P.passages.find(e=>e.name===n)}function Bi(n){return P.passages.find(e=>e.id===n)}function hn(n){let e=[],t=!1;return async(...r)=>{t||(t=!0,Promise.resolve().then(()=>{try{n(e),e=[],t=!1}catch(i){window.setTimeout(()=>{throw i})}})),e.push(r)}}function ke(n,e,t=[]){const r=document.createElement(n);if(e)for(const i of Object.keys(e))e[i]!==void 0&&r.setAttribute(i,e[i]);for(const i of t)typeof i=="string"||typeof i=="number"?r.appendChild(document.createTextNode(i.toString())):r.appendChild(i);return r}function R(...n){return ke(...n).outerHTML}function Je(n){return Array.isArray(n)?n.every(Je):n===null?!0:typeof n=="object"?Object.getPrototypeOf(n)!==Object.prototype?!1:Object.values(n).every(Je):typeof n=="number"?isFinite(n)&&!isNaN(n):["boolean","string","undefined"].includes(typeof n)}const{log:Q,warn:Ui}=F("state");let te;const gt={},pn={},ce={};function mt(n,e){if(n[e])return;Object.defineProperty(n,e,{get(){return p(e)},set(r){$(e,r)},configurable:!0});const t=e.split(".");t.length>1&&(t.pop(),mt(n,t.join(".")))}function Vi(n,e){if(n[e])return;const t=e.split("."),r=t[t.length-1];for(let i=0;i<t.length-1;i++)n[t[i]]=n[t[i]]||{},n=n[t[i]];Object.defineProperty(n,r,{get(){return p(e)},set(){throw new Error("Chapbook lookup variables may only be read.")},configurable:!0})}function Wi(n,e){Hi(n,e)}function gn(){const n=fn(),e=ht();if(e===void 0)throw new Error("Cannot set up state: the story has no name");te=`chapbook-${e}-${n}`,qe("config.state.autosave",!0)}function bt(){function n(e,t){Object.keys(e).forEach(r=>{const i=t===""?r:`${t}.${r}`;if(typeof e[r]=="object"&&!Array.isArray(e[r]))n(e[r],i);else{const s=e[r];delete e[r],Wi(window,t),window.dispatchEvent(new CustomEvent("state-change",{detail:{name:i,value:p(i),previous:s}}))}})}n(ce,""),window.dispatchEvent(new CustomEvent("state-reset")),p("config.state.autosave")&&yt()}function $(n,e){const t=p(n);Je(e)||Ui(`Setting ${n} to ${JSON.stringify(e)} can't be saved permanently. This will work in the current session, but will not persist between sessions.`),ft(ce,n,e),mt(window,n),e!==t&&window.dispatchEvent(new CustomEvent("state-change",{detail:{previous:t,name:n,value:e}})),p("config.state.autosave")&&yt()}function qe(n,e){const t=p(n);Q(`Defaulting "${n}" to ${JSON.stringify(e)}`),ft(gt,n,e),mt(window,n),t==null&&window.dispatchEvent(new CustomEvent("state-change",{detail:{previous:t,name:n,value:e}}))}function ie(n){for(const e in n)qe(e,n[e])}function _(n,e){const t=p(n);Q(`Adding lookup variable ${n}`),ft(pn,n,e),Vi(window,n),t==null&&window.dispatchEvent(new CustomEvent("state-change",{detail:{previous:t,name:n,value:p(n)}}))}function p(n){const e=Be(pn,n);if(typeof e=="function")return e(p,$);const t=Be(ce,n),r=Be(gt,n);if(t==null)return r;if(typeof t=="object"&&t!==null&&!Array.isArray(t)&&typeof r=="object"&&r!==null&&!Array.isArray(r)){const i={},s=[...Object.keys(r),...Object.keys(t)];for(const a of s)Object.defineProperty(i,a,{get(){return p(n+"."+a)},set(l){$(n+"."+a,l)},configurable:!0,enumerable:!0});return i}return t}function xe(){return{...ce}}function Ee(n){bt();for(const e in n)$(e,n[e])}function mn(){try{return window.localStorage.setItem("chapbook-test","a"),window.localStorage.removeItem("chapbook-test"),!0}catch{return!1}}function yt(){Q("Saving to local storage: "+JSON.stringify(xe())),window.localStorage.setItem(te,JSON.stringify(xe())),Q("Save complete")}function bn(){return mn()&&window.localStorage.getItem(te)!==null}function yn(){Q("Restoring variables from local storage");const n=window.localStorage.getItem(te);if(!n)throw new Error(`No value is set in local storage at "${te}"`);Ee(JSON.parse(n)),Q("Restore complete")}function wn(n){n||Q("Purging variables from local storage");const e=window.localStorage.getItem(te);if(!e)throw new Error(`No value is set in local storage at "${te}"`);Ee(JSON.parse(e)),n||Q("Purge complete")}function ve(n){function e(t,r,i=[]){return Object.keys(t).reduce((s,a)=>{if(typeof t[a]=="object"&&t[a]&&!Array.isArray(t[a]))e(t[a],r?`${r}.${a}`:a,s);else{const l=r?`${r}.${a}`:a;s.includes(l)||s.push(l)}return s},i)}return n?e(gt,void 0,e(ce)).sort():e(ce).sort()}const Zi=Object.freeze(Object.defineProperty({__proto__:null,canRestoreFromStorage:bn,canSaveToStorage:mn,get:p,initState:gn,purgeFromStorage:wn,reset:bt,restoreFromObject:Ee,restoreFromStorage:yn,saveToObject:xe,saveToStorage:yt,set:$,setDefault:qe,setDefaults:ie,setLookup:_,varNames:ve},Symbol.toStringTag,{value:"Module"})),Gi=Object.freeze(Object.defineProperty({__proto__:null,addCustomStyles:dn,ifid:fn,initStory:cn,loadFromData:ln,name:ht,passageNamed:Se,passageWithId:Bi,passages:Fi,runCustomScripts:un,startPassage:pt},Symbol.toStringTag,{value:"Module"})),{log:kn}=F("actions");function xn(n){kn(`Going to passage "${n}"`);const e=Se(n);if(!e)throw new Error(`There is no passage with the name "${n}"`);document.activeElement instanceof HTMLElement&&document.activeElement.blur();const t=p("trail");if(!Array.isArray(t))throw new Error(`The trail variable has been set to a ${typeof t}, not an array.`);$("trail",[...t,e.name])}function vn(){kn("Restarting"),bt(),window.location.reload()}let X=[],Oe=!0;function Ji(){Oe&&(X=[],window.dispatchEvent(new CustomEvent("backstage-state-recorder-update")))}function Xi({detail:n}){if(!Oe)return;X.length===p("config.backstage.trail.maxLength")&&X.shift();const{name:e,value:t}=n;X.push({change:{name:e,value:t},state:xe()}),window.dispatchEvent(new CustomEvent("backstage-state-recorder-update"))}function Qi(){return[...X]}function Ki(n){if(!X[n])throw new Error(`There is no history at index ${n} to rewind to.`);Oe=!1,Ee(X[n].state),X.length=n+1,Oe=!0,window.dispatchEvent(new CustomEvent("backstage-state-recorder-update"))}function Yi(){qe("config.backstage.trail.maxLength",100),window.addEventListener("state-change",Xi),window.addEventListener("state-reset",Ji)}let V=[];function es(n){V.push({name:n,state:xe()}),$n(),window.dispatchEvent(new CustomEvent("backstage-state-snapshots-update"))}function ts(n){const e=V.find(t=>t.name===n);if(!e)throw new Error(`There is no snapshot named "${n}".`);Ee(e.state)}function ns(n){V=V.filter(({name:e})=>n!==e),$n(),window.dispatchEvent(new CustomEvent("backstage-state-snapshots-update"))}function rs(){try{V=JSON.parse(window.localStorage.getItem(`chapbookbackstage-snapshots-${p("config.state.saveKey")}`)),Array.isArray(V)||(V=[])}catch{V=[]}}function $n(){window.localStorage.setItem(`chapbookbackstage-snapshots-${p("config.state.saveKey")}`,JSON.stringify(V))}function Pt(){return V.map(({name:n})=>n)}function is(){rs()}function wt(n){for(const e in n)window.customElements.get(e)||window.customElements.define(e,n[e])}class z extends HTMLElement{defaultHtml(e){this.innerHTML.trim()===""&&(this.innerHTML=e)}delegate(e,t,r){this.addEventListener(e,i=>{if(!i.target)return;const s=i.target.closest(t);s&&r(i,s)})}query(e){const t=this.querySelector(e);if(!t)throw new Error(`Couldn't find element matching "${e}"`);return t}queryAll(e){return[...this.querySelectorAll(e)]}}class Sn extends z{constructor(){super(),this.addEventListener("click",e=>{e.target.closest("[data-toggle-collapsed]")&&(this.hasAttribute("collapsed")?this.removeAttribute("collapsed"):this.setAttribute("collapsed",""))})}connectedCallback(){this.innerHTML=`
<button data-toggle-collapsed></button>
<div class="content">
<backstage-tabs aria-label="Backstage">
<backstage-tab
aria-controls="backstage-state-tab-panel"
id="backstage-state-tab"
>
State
</backstage-tab>
<backstage-tab
aria-controls="backstage-history-tab-panel"
id="backstage-history-tab"
>
History
</backstage-tab>
<backstage-tab
aria-controls="backstage-style-tab-panel"
id="backstage-style-tab"
>
Style
</backstage-tab>
<backstage-tab
aria-controls="backstage-notes-tab-panel"
id="backstage-notes-tab"
>
Notes
</backstage-tab>
</backstage-tabs>
<backstage-tab-panel
aria-labelledby="backstage-state-tab"
id="backstage-state-tab-panel"
>
<backstage-state-variables></backstage-state-variables>
<backstage-state-snapshots></backstage-state-snapshots>
</backstage-tab-panel>
<backstage-tab-panel
aria-labelledby="backstage-history-tab"
id="backstage-history-tab-panel"
>
<backstage-history-table></backstage-history-table>
</backstage-tab-panel>
<backstage-tab-panel
aria-labelledby="backstage-style-tab"
id="backstage-style-tab-panel"
>
<backstage-style-theme></backstage-style-theme>
<backstage-style-config></backstage-style-config>
<backstage-style-group title="Page" prefix="page"></backstage-style-group>
<backstage-style-group title="Header"></backstage-style-group>
<backstage-style-group title="Footer"></backstage-style-group>
</backstage-tab-panel>
<backstage-tab-panel
aria-labelledby="backstage-notes-tab"
id="backstage-notes-tab-panel"
>
<backstage-notes></backstage-notes>
</backstage-tab-panel>
</div>`,this.update()}attributeChangedCallback(){this.update()}update(){const e=this.querySelectorAll("[data-toggle-collapsed]");if(this.hasAttribute("collapsed")){for(const t of e)t.innerHTML="←",t.setAttribute("aria-label","Show Backstage");document.body.classList.remove("backstage-visible")}else{for(const t of e)t.innerHTML="→",t.setAttribute("aria-label","Hide Backstage");document.body.classList.add("backstage-visible")}}}U(Sn,"observedAttributes",["collapsed"]);function ss(n){const e=[];let t=[],r;return n.forEach(({change:i},s)=>{if(i.name==="trail"){const a=i.value;e.push({historyIndex:s-1,passage:r,varChanges:t}),t=[],r=a[a.length-1]}else t.push({name:i.name,value:i.value})}),e.push({historyIndex:n.length-1,passage:r,varChanges:t}),e}class os extends z{constructor(){super();U(this,"root",document.createElement("div"));this.delegate("click","button[data-rewind]",(t,r)=>{const i=parseInt(r.dataset.rewind??"");isNaN(i)||Ki(i)})}connectedCallback(){window.addEventListener("backstage-state-recorder-update",this),this.update()}disconnectedCallback(){window.removeEventListener("backstage-state-recorder-update",this)}handleEvent(){this.update()}update(){this.innerHTML=ss(Qi()).reduce((t,{historyIndex:r,passage:i,varChanges:s})=>{t+=`
<button
data-rewind="${r}"
aria-label="Rewind to ${i?H(i):"Startup"}">↪
${i?H(i):"<em>Startup</em>"}</button><table><thead><tr><th>Variable</th><th>Value</th></thead><tbody>`;for(const a of s)t+=`
<tr>
<td>${H(a.name)}</td><td>${H(JSON.stringify(a.value))}</td>
</tr>`;return t+"</tbody></table>"},"")}}let N={};function as(){N={},kt()}function ls(){const n=Object.keys(N).reduce((t,r)=>t+`<li class="note"><span class="passage">${H(r)}</span><pre>${H(N[r])}</pre></li>`,"");let e=p("story.name");return typeof e!="string"&&(e="Story"),`<h1>Notes for “${H(e)}”</h1><ul data-cb-backstage-notes data-cb-version="${p("engine.version")}">${n}</ul>`}function cs(n){return N[n]}function us(n){const e=document.createElement("div"),t={...N};let r=0;e.innerHTML=n;for(const i of e.querySelectorAll("ul[data-cb-backstage-notes] li")){const s=i.querySelector("span.passage"),a=i.querySelector("pre");s!=null&&s.textContent&&(a!=null&&a.textContent)&&(t[s.textContent]?t[s.textContent]=`${t[s.textContent]??""}
${a.textContent}`:t[s.textContent]=a.textContent,r++)}return N=t,kt(),r}function ds(){const n=window.localStorage.getItem(`chapbookbackstage-passage-notes-${p("config.state.saveKey")}`);try{n&&(N=JSON.parse(n),(typeof N!="object"||Array.isArray(N))&&(N={}))}catch{N={}}}function kt(){window.localStorage.setItem(`chapbookbackstage-passage-notes-${p("config.state.saveKey")}`,JSON.stringify(N))}function fs(n,e){N[n]=e,kt()}function hs(){ds()}function Ot(){const n=p("trail");if(Array.isArray(n))return n[n.length-1]}class ps extends z{constructor(){super(),this.delegate("change",'input[type="file"]',e=>{var r;const t=(r=e.target.files)==null?void 0:r[0];if(t){const i=new FileReader;i.onload=s=>{const a=us(s.target.result);window.alert(`${a} note(s) were imported.`)},i.readAsText(t)}}),this.delegate("change","textarea",e=>{const t=Ot();t&&fs(t,e.target.value)}),this.delegate("click","[data-export]",()=>{const e=ls(),t=document.createElement("a");p("story.name"),t.setAttribute("download",`${p("story.name")} Notes - ${new Date().toDateString()} ${new Date().toTimeString()}.html`),t.setAttribute("href","data:text/html;base64,"+window.btoa(e)),document.body.appendChild(t),t.click(),document.body.removeChild(t)}),this.delegate("click","[data-import]",()=>{this.query('input[type="file"]').click()}),this.delegate("click","[data-reset]",()=>{window.confirm("Are you sure? This will delete all text entered in the Notes panel of Backstage, and cannot be undone.")&&as()})}connectedCallback(){this.defaultHtml(`
<label for="backstage-notes-textarea"></label>
<textarea id="backstage-notes-textarea"></textarea>
<div class="actions">
<button data-export>Export All Notes</button>
<button data-import>Import Notes</button>
<button data-reset>Delete All Notes</button>
</div>
<input type="file" hidden />
`),window.addEventListener("state-change",this),this.update()}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent(e){e.detail.name==="trail"&&this.update()}update(){const e=Ot();e&&(this.query("#backstage-notes-textarea").value=cs(e)??"",this.query('label[for="backstage-notes-textarea"]').textContent=`Notes on "${e}"`)}}class gs extends z{constructor(){super(),this.delegate("click","[data-add-snapshot]",()=>{const e=window.prompt("Enter a name for this snapshot:");e&&(Pt().includes(e)?window.alert("A snapshot already exists with this name."):es(e))}),this.delegate("click","[data-remove]",({target:e})=>{const t=e.dataset.remove;t&&window.confirm(`Are you sure you want to delete the snapshot "${t}"? This cannot be undone.`)&&ns(t)}),this.delegate("click","[data-restore]",({target:e})=>{ts(e.dataset.restore)})}connectedCallback(){this.defaultHtml(`
<details open>
<summary>Snapshots</summary>
<div class="snapshots"></div>
<button data-add-snapshot>Add Snapshot</button>
</details>
`),window.addEventListener("backstage-state-snapshots-update",this),this.update()}disconnectedCallback(){window.removeEventListener("backstage-state-snapshots-update",this)}handleEvent(){this.update()}update(){const e=this.querySelector(".snapshots");e&&(e.innerHTML=Pt().map(t=>{const r=H(t);return`
<div class="snapshot-button">
<button data-restore="${r}" aria-label="Restore '${r}' snapshot">
${r}
</button>
<button data-remove="${r}" aria-label="Remove '${r}' snapshot">
×
</button>
</div class="snapshot-button">
`}).join(""))}}const ms=["config.random.privateState"];class bs extends z{constructor(){super();U(this,"showDefaults",!1);this.delegate("change",'input[type="checkbox"]',t=>{this.showDefaults=t.target.checked,this.update()})}connectedCallback(){this.defaultHtml(`
<details open>
<summary>Variables</summary>
<label>
<input type="checkbox" />
Show Defaults
</label>
<div class="variables"></div>
</details>
`),this.update(),window.addEventListener("state-change",this)}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent(){this.update()}update(){this.query(".variables").innerHTML=ve(this.showDefaults).filter(t=>!ms.some(r=>t.startsWith(r))).map(t=>`<div><label><span>${H(t)}</span><backstage-variable-input name="${H(t)}"></backstage-variable-input></label></div>`).join("")}}const ys=["config.style.page.theme.override"];class ws extends z{connectedCallback(){this.defaultHtml(`
<details open>
<summary>Config</summary>
<label for="cb-backstage-style-config">
Enter this code into your first passage’s variables section to
permanently use this style:
</label>
<textarea
readonly
id="cb-backstage-style-config"
></textarea>
</details>
`),window.addEventListener("state-change",this),this.update()}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent(){this.update()}update(){this.query("textarea").value=ve(!1).reduce((e,t)=>!/^config.style/.test(t)||ys.includes(t)||p(t)===void 0?e:e+`${t}: ${JSON.stringify(p(t))}
`,"").trim()}}const ks=[{name:"Font",suffix:"font"},{name:"Color",suffix:"color"},{name:"Link Font",suffix:"link.font"},{name:"Link Color",suffix:"link.color"},{name:"Link Line Color",suffix:"link.lineColor"},{name:"Active Link Font",suffix:"link.active.font"},{name:"Active Link Color",suffix:"link.active.color"},{name:"Active Link Line Color",suffix:"link.active.lineColor"}];class En extends z{connectedCallback(){const e=this.getAttribute("prefix"),t=this.getAttribute("title");this.defaultHtml(`
<details open>
<summary>${t}</summary>
${ks.map(({name:r,suffix:i})=>`
<label data-prefix="%.${i}">
${r}
<backstage-variable-input name="${e}.${i}" string />
</label>
`).join("")}
</details>
`),window.addEventListener("state-change",this),window.addEventListener("system-theme-change",this),this.updateInputs()}updateInputs(){var i;const e=this.getAttribute("prefix")??"",t=p("browser.darkTheme");let r="config.style.";t&&(r+="dark.");for(const s of this.queryAll("backstage-variable-input")){const a=(i=s.closest("[data-prefix]"))==null?void 0:i.dataset.prefix;if(a&&(s.setAttribute("name",r+a.replace("%",e)),s.removeAttribute("placeholder"),t)){const l=p(`config.style.${a.replace("%",e)}`);typeof l=="string"&&s.setAttribute("placeholder",l)}}}attributeChangedCallback(e,t,r){if(this.innerHTML!=="")switch(e){case"title":this.query("summary").innerText=r;break;case"prefix":this.updateInputs();break}}handleEvent(e){(e.type==="system-theme-change"||e.detail.name==="config.style.page.theme.override")&&this.updateInputs()}}U(En,"observedAttributes",["prefix","title"]);class xs extends z{connectedCallback(){this.defaultHtml(`
<details open>
<summary>Theme</summary>
<p>The <strong data-theme-name></strong> theme is active. <button>Switch Theme</button></p>
<p>
<label><input type="checkbox"> Theme switching</label>
</p>
</details>
`),this.update(),this.query("button").addEventListener("click",()=>this.switchTheme()),this.query("input").addEventListener("change",()=>this.toggleThemeSwitching()),window.addEventListener("system-theme-change",this),window.addEventListener("state-change",this),this.update()}disconnectedCallback(){window.removeEventListener("system-theme-change",this)}handleEvent(e){(e.type==="system-theme-change"||["config.style.page.theme.override","config.style.page.theme.enableSwitching"].includes(e.detail.name))&&this.update()}switchTheme(){$("config.style.page.theme.override",p("browser.darkTheme")?"light":"dark")}toggleThemeSwitching(){$("config.style.page.theme.enableSwitching",!p("config.style.page.theme.enableSwitching")),this.update()}update(){const e=!!p("config.style.page.theme.enableSwitching");this.query("input").checked=e,this.query("button").disabled=!e,this.query("[data-theme-name]").innerHTML=p("browser.darkTheme")?"dark":"light"}}class vs extends z{constructor(){super(),this.addEventListener("click",()=>{var e;this.textContent&&((e=this.closest("backstage-tabs"))==null||e.selectTab(this.textContent))})}connectedCallback(){this.setAttribute("role","tab")}}class $s extends z{connectedCallback(){this.setAttribute("role","tabpanel")}}class Ss extends z{connectedCallback(){this.setAttribute("role","tablist"),window.setTimeout(()=>this.selectTab(0))}selectTab(e){[...this.children].filter(t=>t.getAttribute("role")==="tab").forEach((t,r)=>{var a,l;const i=t.getAttribute("aria-controls"),s=typeof e=="number"?r==e:t.textContent===e;t.setAttribute("aria-selected",s.toString()),i&&(s?(a=document.getElementById(i))==null||a.removeAttribute("hidden"):(l=document.getElementById(i))==null||l.setAttribute("hidden",""))})}}class _n extends z{constructor(){super(),this.addEventListener("input",e=>{const t=this.getAttribute("name");if(!t||!e.target)return;const r=e.target.value;try{this.hasAttribute("string")?$(t,r):$(t,JSON.parse(r))}catch{}})}attributeChangedCallback(){const e=this.getAttribute("name");if(!e)return;const t=p(e);let r=JSON.stringify(t);this.hasAttribute("string")&&(t==null?r="":r=t.toString()),this.innerHTML=`<input type="text" placeholder="${this.getAttribute("placeholder")??""}" value="${H(r)}" />`}}U(_n,"observedAttributes",["name","placeholder","string"]);function Es(){wt({"backstage-history-table":os,"backstage-notes":ps,"backstage-sidebar":Sn,"backstage-state-snapshots":gs,"backstage-state-variables":bs,"backstage-style-config":ws,"backstage-style-group":En,"backstage-style-theme":xs,"backstage-tab":vs,"backstage-tab-panel":$s,"backstage-tabs":Ss,"backstage-variable-input":_n})}function _s(){hs(),Yi(),is(),Es(),document.body.appendChild(document.createElement("backstage-sidebar"))}class Ts extends z{constructor(){super(),this.delegate("click","[data-back]",()=>{const e=p("trail");this.classList.remove("active"),Array.isArray(e)?$("trail",e.slice(0,e.length-1)):window.alert("Sorry, going back was not successful. Please try hard restarting.")}),this.delegate("click","[data-refresh]",()=>{var t;const e=p("trail");this.classList.remove("active"),Array.isArray(e)?$("trail",[...e]):$("trail",[(t=pt())==null?void 0:t.name])}),this.delegate("click","[data-hard-restart]",()=>{wn(!0),window.location.reload()})}connectedCallback(){window.addEventListener("error",this),window.addEventListener("unhandledrejection",this)}disconnectedCallback(){window.removeEventListener("error",this),window.removeEventListener("unhandledrejection",this)}handleEvent(e){const t=`
Please report this to https://github.com/markedjs/marked.`,r=e.type==="unhandledrejection"?e.reason:e.error;try{let i="";r!=null&&r.stack?i=`${r.message}
Stack trace:
${r.stack}`:i=`${r.message}
[No stack trace available]`,i=i.replace(t,"");const s=p("trail");this.classList.add("active"),this.innerHTML=`
<p>
An unexpected error has occurred.
</p>
<pre>${p("config.testing")?i:""}</pre>
<ul>
<li>
<inline-button class="link" ${Array.isArray(s)&&s.length>1?"data-back":"data-refresh"}>Go back</inline-button> to the previous passage.
</li>
<li>
<inline-button class="link" data-hard-restart>Hard restart</inline-button>, clearing all progress and beginning from the start.
</li>
</ul>
`}catch(i){console.error(i)}}}const{log:Te}=F("display");class Cs extends z{connectedCallback(){window.addEventListener("state-change",this),this.defaultHtml("<div data-google></div><div data-typekit></div>")}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent({detail:e}){if(["config","config.style","config.style.fonts"].includes(e.name)){const i=p("config.style.fonts");if(!i)return;for(const s in i){const a=i[s].name,l=i[s].url;typeof a=="string"&&typeof l=="string"&&this.loadUrlFont(s,l,a)}return}const r=e.name.match(/^config\.style\.fonts\.([^.]+)/i);if(r){const i=r[1],s=p(`config.style.fonts.${i}.name`),a=p(`config.style.fonts.${i}.url`);typeof a=="string"&&typeof s=="string"&&(Te(`Adding font from URL (${s})`),this.loadUrlFont(i,a,s));return}e.name==="config.style.googleFont"&&typeof e.value=="string"?this.loadGoogleFont(e.value):e.name==="config.style.typekitFont"&&typeof e.value=="string"&&this.loadTypekitFont(e.value)}loadGoogleFont(e){Te("Adding Google font"),this.query("[data-google]").innerHTML=e}loadTypekitFont(e){Te("Adding Typekit font"),this.query("[data-typekit]").innerHTML=e}loadUrlFont(e,t,r){Te("Adding font from URL");const i=t.match(/\.(.+)$/);if(!i||!i[1])return;const s=i[1],a=this.querySelector(`[data-url-${e}]`)??document.createElement("style");a.setAttribute(`data-url-${e}`,""),a.innerHTML=`@font-face { font-family: "${r}"; src: url("${t}") format("${s}"); }`,a.parentNode||this.appendChild(a)}}class As extends HTMLElement{constructor(){super(),this.addEventListener("body-content-change",this)}handleEvent({target:e}){if(!e)return;const t=[...e.querySelectorAll("[skippable-delay]")].map(l=>{const o={delay:0,el:l};try{o.delay=parseInt(l.getAttribute("skippable-delay")??"0")}catch{}return o}).filter(({delay:l})=>!!l).sort((l,o)=>l.delay-o.delay);if(t.length===0)return;let r=Date.now(),i;const s=()=>{var u;const l=Date.now()-r,o=(u=t.find(({delay:c})=>c>l))==null?void 0:u.delay;if(!o){this.dispatchEvent(new CustomEvent("page-skip-indicator-hide"));return}for(const c of t)c.delay<=0||(c.delay<=o?(c.delay=0,c.el.setAttribute("skippable-delay","0")):(c.delay-=o,c.el.setAttribute("skippable-delay",c.delay.toString())));r=Date.now(),window.clearTimeout(i),a()},a=()=>{i&&window.clearTimeout(i),i=window.setTimeout(()=>{window.removeEventListener("click",s),window.removeEventListener("keyup",s),this.dispatchEvent(new CustomEvent("page-skip-indicator-hide"))},t[t.length-1].delay)};window.addEventListener("click",s),window.addEventListener("keyup",s),a(),this.dispatchEvent(new CustomEvent("page-skip-indicator-show"))}}class Ls extends z{connectedCallback(){var e,t;(e=this.closest("page-skip"))==null||e.addEventListener("page-skip-indicator-hide",this),(t=this.closest("page-skip"))==null||t.addEventListener("page-skip-indicator-show",this)}disconnectedCallback(){var e,t;(e=this.closest("page-skip"))==null||e.removeEventListener("page-skip-indicator-hide",this),(t=this.closest("page-skip"))==null||t.removeEventListener("page-skip-indicator-show",this)}handleEvent(e){switch(e.type){case"page-skip-indicator-hide":this.removeAttribute("active");break;case"page-skip-indicator-show":this.setAttribute("active","");break}}}var se=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function zs(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function r(){if(this instanceof r){var i=[null];i.push.apply(i,arguments);var s=Function.bind.apply(e,i);return new s}return e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(r){var i=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return n[r]}})}),t}var Ie=Os;const Ps={hoursPerDay:24,daysPerWeek:7,weeksPerMonth:4,monthsPerYear:12,daysPerYear:365.25},It={ms:["ms","milli","millisecond","milliseconds"],s:["s","sec","secs","second","seconds"],m:["m","min","mins","minute","minutes"],h:["h","hr","hrs","hour","hours"],d:["d","day","days"],w:["w","week","weeks"],mth:["mon","mth","mths","month","months"],y:["y","yr","yrs","year","years"]};function Os(n,e,t){t=Object.assign({},Ps,t||{});let r=0,i=Is(t),s=n.toLowerCase().replace(/[^.\w+-]+/g,"").match(/[-+]?[0-9.]+[a-z]+/g);if(s===null)throw new Error(`The string [${n}] could not be parsed by timestring`);return s.forEach(a=>{let l=a.match(/[0-9.]+/g)[0],o=a.match(/[a-z]+/g)[0];r+=Ns(l,o,i)}),e?Rs(r,e,i):r}function Is(n){let e={ms:.001,s:1,m:60,h:3600};return e.d=n.hoursPerDay*e.h,e.w=n.daysPerWeek*e.d,e.mth=n.daysPerYear/n.monthsPerYear*e.d,e.y=n.daysPerYear*e.d,e}function Tn(n){for(let e of Object.keys(It))if(It[e].indexOf(n)>-1)return e;throw new Error(`The unit [${n}] is not supported by timestring`)}function Ns(n,e,t){return n*t[Tn(e)]}function Rs(n,e,t){return n/t[Tn(e)]}class Ms extends z{connectedCallback(){window.addEventListener("display-change",this)}disconnectedCallback(){window.removeEventListener("display-change",this)}async startTransition(e,t={}){const r=p("config.body.transition.name"),i=p("config.body.transition.duration"),s=typeof i=="string"?Ie(i,"s"):0;document.startViewTransition&&typeof r=="string"&&["crossfade","fadeInOut"].includes(r)&&s>0?r==="crossfade"?(document.documentElement.style.setProperty("--page-transition-duration",`${s}s`),document.startViewTransition(async()=>{await e(),t.preserveWindowScroll||window.scrollTo(0,0)})):(document.documentElement.style.setProperty("--page-transition-duration",`${s/2}s`),await document.startViewTransition(async()=>{this.style.visibility="hidden"}).finished,document.startViewTransition(async()=>{this.style.visibility="visible",await e(),t.preserveWindowScroll||window.scrollTo(0,0)})):(await e(),t.preserveWindowScroll||window.scrollTo(0,0))}handleEvent({detail:e}){this.startTransition(()=>{const t=this.querySelector("article");t&&(t.innerHTML=`<div>${e.body}</div>`,t.dispatchEvent(new CustomEvent("body-content-change",{bubbles:!0})));const r=["left","center","right"];for(const i of["footer","header"]){const s=this.querySelector(i);s&&(r.some(a=>e[i][a].trim()!=="")?s.removeAttribute("hidden"):s.setAttribute("hidden",""),s.innerHTML=["left","center","right"].reduce((a,l)=>a+`<div class="${l}">${e[i][l]}</div>`,""))}})}}const Nt=["gray","red","pink","grape","violet","indigo","blue","cyan","teal","green","lime","yellow","orange"].map(n=>`oc-${n}`),Ds=["gray","rose","raspberry","red","orange","cinnamon","amber","yellow","lime","chartreuse","green","emerald","aquamarine","teal","cyan","powder","sky","cerulean","azure","blue","indigo","violet","purple","magenta","pink"];function Rt(n){if(typeof n!="string")throw new Error("Only strings can be parsed as color values.");if(Nt.includes(n))return`var(--${n}-9)`;const e=/^(oc-\w+)-\d$/.exec(n);if(e&&Nt.includes(e[1]))return`var(--${n})`;const t=/^(\w+)-([1-6])$/.exec(n);return t&&Ds.includes(t[1])?`var(--color-${n})`:n}function me(n){const e={backgroundColor:"inherit",color:"inherit"};if(n===void 0)return e;if(typeof n!="string")throw new Error("Only strings can be parsed as colors.");const t=n.split(/ on /i);return e.color=Rt(t[0].trim().toLowerCase()),e.color===""&&(e.color="inherit"),t.length===2&&(e.backgroundColor=Rt(t[1].trim().toLowerCase())),e}function js(n,{scaling:e}){const t={fontFamily:"inherit",fontSize:"inherit",fontStyle:"inherit",fontVariant:"inherit",fontWeight:"inherit",textDecoration:"inherit",textTransform:"inherit"};if(n===void 0)return t;if(typeof n!="string")throw new Error("Only strings can be parsed as fonts.");function r(c,d){c.fontFamily=d.split("/").map(f=>{let h=f;return["monospace","sans-serif","serif"].includes(h)||(h[0]!=='"'&&(h='"'+h),h[h.length-1]!=='"'&&(h=h+'"')),h}).join(",")}function i(c){c.fontWeight="bold"}function s(c){c.fontStyle="italic"}function a(c){c.fontStyle="none",c.fontWeight="normal",c.textDecoration="none",c.textTransform="none"}function l(c){c.fontVariant="small-caps",c.textTransform="lowercase"}function o(c){c.textDecoration="underline"}const u=/\b\d+(?:\.\d+)?(ch|cm|ex|in|mm|pc|pt|px|r?em|vh|vmax|vmin|vw|%)?/i.exec(n);if(u){t.fontSize=u[0],/^\d+$/.test(u[0])&&(t.fontSize=`${u[0]}px`),e&&(t.fontSize=`calc(${t.fontSize} + max(${e.addAtDoubleWidth} * (100vw - ${e.baseViewportWidth}px) / ${e.baseViewportWidth}, 0px))`,e.maximumSize&&(t.fontSize=`min(${t.fontSize}, ${e.maximumSize})`)),u.index!==0&&r(t,n.substring(0,u.index).trim());const c=n.substring(u.index);/\bregular\b/i.test(c)?a(t):(/\bbold\b/.test(c)&&i(t),/\bitalics?\b/.test(c)&&s(t),/\bunderlined?/.test(c)&&o(t),/\bsmall caps?\b/.test(c)&&l(t))}else{let c,d=n;for(;c=/(bold|italics?|regular|small caps|underlined?)$/.exec(d);){switch(c[0]){case"bold":i(t);break;case"italic":case"italics":s(t);break;case"regular":a(t);break;case"small caps":l(t);break;case"underline":case"underlined":o(t);break}d=d.substring(0,c.index).trim()}d.trim()!==""&&r(t,d)}return t}const qs={"config.style.dark.backdrop":"hsl(0, 0%, 10%)","config.style.dark.page.footer.border":"thin-line","config.style.dark.page.footer.borderColor":"white","config.style.dark.page.footer.link.active.color":"raspberry-3 on raspberry-6","config.style.dark.page.fork.divider.color":"gray-5","config.style.dark.page.color":"white on gray-6","config.style.dark.page.header.border":"thin-line","config.style.dark.page.header.borderColor":"white","config.style.dark.page.header.link.active.color":"raspberry-3 on raspberry-6","config.style.dark.page.link.color":"white","config.style.dark.page.link.lineColor":"raspberry-4","config.style.dark.page.link.active.color":"raspberry-3 on raspberry-6","config.style.backdrop":"gray-1","config.style.fontScaling.enabled":!0,"config.style.fontScaling.baseViewportWidth":1e3,"config.style.fontScaling.addAtDoubleWidth":6,"config.style.page.style.border":"shadow","config.style.page.style.borderColor":"gray-2","config.style.page.font":"Iowan Old Style/Constantia/Georgia/serif 18","config.style.page.color":"gray-6 on white","config.style.page.fork.divider.color":"gray-2","config.style.page.fork.divider.style":"dashed","config.style.page.fork.divider.size":1,"config.style.page.link.color":"gray-6","config.style.page.link.lineColor":"raspberry-4","config.style.page.link.font":"underline","config.style.page.link.active.color":"raspberry-4 on raspberry-1","config.style.page.verticalAlign":"center","config.style.page.header.border":"thin-line","config.style.page.header.borderColor":"gray-6","config.style.page.header.font":"16","config.style.page.header.link.font":"small caps underlined","config.style.page.header.link.lineColor":"raspberry-4","config.style.page.header.link.active.color":"raspberry-4 on raspberry-1","config.style.page.header.link.active.font":"small caps underlined","config.style.page.header.link.active.lineColor":"raspberry-4","config.style.page.footer.border":"thin-line","config.style.page.footer.borderColor":"gray-6","config.style.page.footer.font":"16","config.style.page.footer.link.font":"small caps underlined","config.style.page.footer.link.lineColor":"raspberry-4","config.style.page.footer.link.active.color":"raspberry-4 on raspberry-1","config.style.page.footer.link.active.font":"small caps underlined","config.style.page.footer.link.active.lineColor":"raspberry-4","config.style.page.theme.override":void 0,"config.style.page.theme.enableSwitching":!0};function Hs(){ie(qs)}class Fs extends z{connectedCallback(){window.addEventListener("state-change",this)}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent(e){const{name:t,value:r}=e.detail;if(t==="config"||t==="config.style"){for(const i of ve())if(i.startsWith("config.style.")){const s=p(i);typeof s=="string"&&this.handleStateChange(i,s)}}else t.startsWith("config.style.")&&this.handleStateChange(t,r)}handleStateChange(e,t){const r=`--${e.replace(/^config\.style\./,"").replace(/\./g,"-")}`;if(typeof t=="string"&&r.endsWith("-color")){this.updateColor(r.replace(/-color$/,""),t);return}if(typeof t=="string"&&r.endsWith("-lineColor")){this.updateLineColor(r.replace(/-lineColor$/,""),t);return}if(typeof t=="string"&&r.endsWith("-font")){this.updateFont(r.replace(/-font$/,""),t);return}switch(r){case"--backdrop":case"--dark-backdrop":{const{color:i}=me(t);this.style.setProperty(`${r}-color`,i);break}case"--fontScaling-enabled":case"--fontScaling-baseViewportWidth":case"--fontScaling-addAtDoubleWidth":case"--fontScaling-maximumSize":this.recalculateFontSizes();break;case"--page-fork-divider-size":case"--dark-page-fork-divider-size":(typeof t=="string"||typeof t=="number")&&this.style.setProperty(r,`${t}px`);break;case"--page-fork-divider-style":case"--dark-page-fork-divider-style":typeof t=="string"&&this.style.setProperty(r,t);break;case"--page-verticalAlign":case"--dark-page-verticalAlign":{if(typeof t!="string")break;const i=r.replace(/-verticalAlign$/,"");switch(t){case"top":this.style.setProperty(`${i}-current-passage-justify-content`,"flex-start");break;case"center":this.style.setProperty(`${i}-current-passage-justify-content`,"center");break;case"bottom":this.style.setProperty(`${i}-current-passage-justify-content`,"flex-end");break}break}case"--page-footer-border":case"--page-footer-borderColor":case"--page-header-border":case"--page-header-borderColor":case"--dark-page-footer-border":case"--dark-page-footer-borderColor":case"--dark-page-header-border":case"--dark-page-header-borderColor":case"--page-style-border":case"--dark-page-style-border":case"--page-style-borderColor":case"--dark-page-style-borderColor":{const i=r.replace(/-style-[^-]*?$/,"").replace(/-border(Color)?$/,""),s=e.replace(/\.[^.]*?$/,""),a=p(`${s}.border`),l=p(`${s}.borderColor`);switch(a){case"none":this.style.setProperty(`${i}-border`,"none"),this.style.setProperty(`${i}-box-shadow`,"none");break;case"shadow":this.style.setProperty(`${i}-border`,"none"),this.style.setProperty(`${i}-box-shadow`,"inset 0 0 2px 2px hsla(0, 0%, 100%, 0.05), 0 0 0 1px hsla(0, 0%, 0%, 0.05), 0 2px 2px hsla(0, 0%, 0%, 0.05), 0 4px 4px hsla(0, 0%, 0%, 0.05), 0 8px 8px hsla(0, 0%, 0%, 0.05), 0 16px 16px hsla(0, 0%, 0%, 0.05)");break;case"thick-line":this.style.setProperty(`${i}-border`,`4px solid ${me(l).color}`),this.style.setProperty(`${i}-box-shadow`,"none");break;case"thin-line":this.style.setProperty(`${i}-border`,`1px solid ${me(l).color}`),this.style.setProperty(`${i}-box-shadow`,"none");break}}}}recalculateFontSizes(){for(const e of ve(!0)){const t=/^config\.style\.(.*)\.font$/.exec(e);if(t){const r=p(e);typeof r=="string"&&this.updateFont(`--${t[1].replace(/\./g,"-")}`,r)}}}updateColor(e,t){const{backgroundColor:r,color:i}=me(t);this.style.setProperty(`${e}-background-color`,r),this.style.setProperty(`${e}-color`,i)}updateFont(e,t){const r=p("config.style.fontScaling.enabled"),i={};if(r){const a=p("config.style.fontScaling.baseViewportWidth"),l=p("config.style.fontScaling.addAtDoubleWidth"),o=p("config.style.fontScaling.maximumSize");typeof a=="number"&&typeof l=="number"&&(i.scaling={baseViewportWidth:a,addAtDoubleWidth:l},typeof o=="string"&&(i.scaling.maximumSize=o))}const s=js(t,i);this.style.setProperty(`${e}-font-family`,s.fontFamily),this.style.setProperty(`${e}-font-size`,s.fontSize),this.style.setProperty(`${e}-font-style`,s.fontStyle),this.style.setProperty(`${e}-font-variant`,s.fontVariant),this.style.setProperty(`${e}-font-weight`,s.fontWeight),this.style.setProperty(`${e}-text-decoration`,s.textDecoration),this.style.setProperty(`${e}-text-transform`,s.textTransform)}updateLineColor(e,t){const{color:r}=me(t);this.style.setProperty(`${e}-text-decoration-color`,r)}}class Bs extends z{connectedCallback(){window.addEventListener("state-change",this),window.addEventListener("system-theme-change",this),Promise.resolve().then(()=>this.update())}disconnectedCallback(){window.removeEventListener("state-change",this),window.removeEventListener("system-theme-change",this)}update(){p("browser.darkTheme")?this.enable():this.disable()}disable(){this.style.cssText=""}enable(){const e=this.closest("state-css-variables");if(e){this.style.cssText="";for(let t=0;t<e.style.length;t++){const r=/^--dark-(.*)/.exec(e.style.item(t));r!=null&&r[1]&&this.style.setProperty(`--${r[1]}`,`var(--dark-${r[1]})`)}}}handleEvent(e){if(e.type==="system-theme-change")this.update();else{const{name:t}=e.detail;(["config","config.style","config.style.page.theme.enableSwitching","config.style.page.theme.override"].includes(t)||t.startsWith("config.style.dark"))&&this.update()}}}var J;class Us extends z{constructor(){super();U(this,"warnings");Et(this,J,void 0);this.warnings=[]}connectedCallback(){window.addEventListener("state-change",this),this.spyOnWarnings(),this.update()}disconnectedCallback(){window.removeEventListener("state-change",this),this.unspyOnWarnings()}handleEvent(t){t.type==="state-change"&&t.detail.name==="trail"&&(this.warnings=[],this.update())}spyOnWarnings(){_t(this,J,console.warn),console.warn=(...t)=>{this.warnings.push(...t),this.update(),pe(this,J).apply(pe(this,J),t)}}unspyOnWarnings(){pe(this,J)&&(console.warn=pe(this,J))}update(){this.isConnected&&(this.warnings.length>0&&p("config.testing")?(this.removeAttribute("hidden"),this.innerHTML=`<ul>${this.warnings.map(t=>`<li>Warning: ${t}</li>`).join("")}</ul>`):this.setAttribute("hidden",""))}}J=new WeakMap;function Vs(){wt({"error-handler":Ts,"external-fonts":Cs,"page-skip":As,"page-skip-indicator":Ls,"page-transition":Ms,"state-css-variables":Fs,"state-dark-theme-css-overrides":Bs,"warning-list":Us})}class fe extends z{constructor(){super(),this.addEventListener("keydown",e=>{(e.key===" "||e.key==="Enter")&&(e.preventDefault(),this.dispatchEvent(new MouseEvent("click",{bubbles:!0})))})}connectedCallback(){this.setAttribute("tabindex","0"),this.hasAttribute("role")||this.setAttribute("role","button")}}const{warn:Mt}=F("inserts");class Ws extends fe{constructor(){super(),this.addEventListener("click",()=>{const e=this.getAttribute("choices");if(e){let t;try{t=JSON.parse(e)}catch{Mt(`The choices attribute, "${e}" couldn't be parsed.`);return}if(!Array.isArray(t)){Mt("The choices attribute of this cycling link doesn't deserialize to an array.");return}let r=t.map(a=>typeof a=="string"?a:a.toString()).indexOf((this.textContent??"").trim())+1;r===t.length&&(r=0);const i=this.closest("page-transition");if(!i)throw new Error("Couldn't find suitable parent element to do a cycle link transition on.");i.startTransition(()=>{this.textContent=t[r].toString()});const s=this.getAttribute("set");s&&$(s,t[r])}})}}function Zs(n){let e=!0;for(const t of n.querySelectorAll("input, select"))e=e&&t.reportValidity();return e}class Gs extends fe{constructor(){super(),this.addEventListener("click",()=>{const e=this.getAttribute("to"),t=this.closest("article, footer, header");t&&!Zs(t)||e&&(this.dispatchEvent(new CustomEvent("passage-navigate",{bubbles:!0})),xn(e))})}connectedCallback(){super.connectedCallback(),this.setAttribute("role","link")}}class Js extends fe{constructor(){super(),this.addEventListener("click",vn)}}const Xs={match:/^(no )?ambient\s+sound/i,render(n,{volume:e}){const t=p("sound.ambient");if(t)for(const i in t)i!==n&&t[i].playing&&$(`sound.ambient.${i}.playing`,!1);if(!n)return;const r=p(`sound.ambient.${n}.description`)??"";return e&&$(`sound.ambient.${n}.volume`,e),$(`sound.ambient.${n}.playing`,!0),`<audio>${r}</audio>`}};function xt(n,e){return/^\w+:\/\/\/?\w/i.test(n)?R("a",{class:"link",href:n},[e??n]):R("passage-link",{class:"link",to:n},[e??n])}function Qs(n){return n.replace(/\[\[(.*?)\]\]/g,(e,t)=>{let r=t;const i=t.indexOf("|");if(i!==-1)r=t.substring(0,i),t=t.substring(i+1);else{const s=t.indexOf("->");if(s!==-1)r=t.substring(0,s),t=t.substring(s+2);else{const a=t.indexOf("<-");a!==-1&&(r=t.substring(a+2),t=t.substring(0,a))}}return r===""||t===""?e:xt(t,r??t)})}const Ks={match:/^back\s+link/i,render(n,e){const t=p("trail");if(!(!Array.isArray(t)||t.length===0))return xt(t.length>1?t[t.length-2]:t[0],e.label??"Back")}},Ys={match:/^cycling\s+link(\s+for)?/i,render(n,{choices:e}){let t="";if(n){const r=p(n);r===void 0?($(n,e[0]),t=e[0].toString()):t=r.toString()}else t=e[0].toString();return R("cycling-link",{class:"link",set:n??void 0,choices:JSON.stringify(e)},[t])}},eo={match:/^dropdown menu(\s+for)?/i,render(n,e){let t;return n&&(t=p(n),t===void 0&&($(n,e.choices[0]),t=e.choices[0])),R("variable-binding",{name:n??void 0},[ke("select",{},e.choices.map(r=>{const i=r.toString(),s={"data-json-value":JSON.stringify(r)};return n&&t===r&&(s.selected=""),ke("option",s,[i])}))])}},to={match:/^embed\s+flickr(\s+image)?/i,render(n,e){var t;if(n)return R("img",{...e,src:(t=/img src="(.+?)"/.exec(n))==null?void 0:t[1]})}},no={match:/^embed\s+image/i,render(n,e){return R("img",{...e,src:n??""})}},ro={match:/^embed\s+passage(\s+named)?/i,render(n){if(!n)return"";const e=Se(n);return e?$e(e.source):""}},io={match:/^embed\s+unsplash(\s+image)?/i,render(n,e){if(n)return R("img",{...e,src:`https://source.unsplash.com/${n.replace(/.*\//,"")}/${e.width}x${e.height}`})}},so={match:/^embed\s+youtube(\s+video)?/i,render(n,e){if(!n)return;let t=`https://www.youtube-nocookie.com/embed/${n.replace(/.*\?v=/,"")}?modestbranding=1&rel=0&controls=${e.controls?1:0}&`;return e.autoplay&&(t+="autoplay=1&"),e.loop&&(t+="loop=1&"),R("div",{style:"position: relative; height: 0; padding-bottom: 56.25%; margin-bottom: 1em"},[ke("iframe",{src:t,frameBorder:"0",style:"position: absolute; top: 0; left: 0; width: 100%; height: 100%"})])}},oo={match:/^link\s+to/i,render(n,{label:e}){if(n)return xt(n,e)}},ao={match:/^restart\s+link/i,render(n,{label:e}){return R("restart-link",{class:"link"},[e??"Restart"])}},lo={match:/^reveal\s+link/i,render(n,e){if(n){if(e.text)return R("reveal-link",{class:"link",text:e.text},[n]);if(e.passage)return R("reveal-link",{class:"link",passage:e.passage},[n])}}},co={match:/^sound\s+effect/i,render(n,{volume:e}){const t=p(`sound.effect.${n}.description`)??"";return e&&$(`sound.effect.${n}.volume`,e),$(`sound.effect.${n}.playing`,!0),`<audio>${t}</audio>`}},uo={match:/^text\s+input(\s+for)?/i,render(n,e){return R("variable-binding",{name:n??void 0},[ke("input",{type:"text",value:n?(p(n)??"").toString():"",required:e.required!==!1?"":void 0})])}},fo={match:/^theme\s+switcher$/i,render(n,{darkLabel:e,lightLabel:t,prefix:r,suffix:i}){return R("theme-switcher",{prefix:r,suffix:i,class:"link","dark-label":e,"light-label":t},[])}},Cn=[Xs,Ks,Ys,eo,to,no,ro,io,so,oo,ao,lo,co,uo,fo];let ue=[...Cn];function An(){return ue}function ho(n){ue=[...ue,n]}function po(n){ue=ue.filter(e=>e!==n)}function go(){ue=[...Cn]}const mo=Object.freeze(Object.defineProperty({__proto__:null,add:ho,all:An,remove:po,reset:go},Symbol.toStringTag,{value:"Module"}));function Ln(n,e,t={}){const r=`<${e}`+Object.keys(t).reduce((s,a)=>`${s} ${a}="${t[a]}"`,"")+">";let i=r+n.replace(/[\r\n]{2,}/g,`</${e}>$&${r}`)+`</${e}>`;return i=i.replace(/(<span.*?>)\s*(#+)/gi,"$2 $1"),i}const bo={match:/^after\s/i,process(n,{invocation:e}){const t=Ie(e.replace(/^after\s/i,""),"ms");n.text=Ln(n.text,"skippable-animation",{"skippable-delay":t.toString(),class:"fade-in"})}},yo={match:/^align\s+(left|right|center)/i,process(n,{invocation:e}){const t=e.replace(/^align\s+/i,"");n.text=Ln(n.text,"span",{style:`display: block; text-align: ${t}`})}},wo={match:/^append$/i,process(n){n.startsNewParagraph=!1}},ko={match:/^if(always|never)?\s|else$|unless\s/i,processRaw(n,{invocation:e,state:t}){const r=e.replace(/\s.*/,"").toLowerCase(),i=()=>new Function("return "+e.replace(/.*?\s/,"")).apply(window);switch(r){case"if":t.conditionEval=i();break;case"ifalways":t.conditionEval=!0;break;case"ifnever":t.conditionEval=!1;break;case"unless":t.conditionEval=!i();break;case"else":if(t.conditionEval===void 0)throw new Error("There was no matching if modifier for an else modifier.");t.conditionEval=!t.conditionEval;break}t.conditionEval||(n.text="")}},xo={match:/^continued?|cont('d)?$/i,process(){}},vo={match:/^css$/i,processRaw(n){n.text=`<style>${n.text}</style>`}},$o={match:/^javascript$/i,processRaw(n){try{const e=new Function(`
function write() { write.__out += write.__join.call(arguments, ''); }
write.__out = '';
write.__join = Array.prototype.join;
${qi(n.text)};
return write.__out;
`);n.text=e.apply(window)}catch(e){if(p("config.testing")){const t=e;let r="unknown error";t.stack?r=t.stack:r=t.message+`
[No stack trace available]`,n.text=`<div class="error">An error occurred evaluating:<pre>${n.text}</pre><p><pre>${r}</pre></p></div>`}else throw e}}},So={match:/^(note(\s+to\s+myself)?|n\.?b\.?|todo|fixme)$/i,process(n){n.text=""}},zn=[bo,yo,wo,ko,xo,vo,$o,So];let ne=[...zn];function Pn(){return ne}function Eo(n){ne=[...ne,n]}function _o(n){ne=ne.filter(e=>e!==n)}function To(){ne=[...zn]}const Co=Object.freeze(Object.defineProperty({__proto__:null,add:Eo,all:Pn,get modifiers(){return ne},remove:_o,reset:To},Symbol.toStringTag,{value:"Module"})),{log:be,warn:Ao}=F("parse"),Lo={varsSep:/^--$/m,modifierPattern:/^\[([^[].+[^\]])\]$/gm};function zo(n,e=Lo){const t={vars:[],blocks:[]},r=n.split(e.varsSep,2);let i,s;r.length===2?(be("Detected vars section"),[i,s]=r,i.split(/\r?\n/).forEach(c=>{if(c.trim()==="")return;const d=c.indexOf(":");if(d!==-1){const f=c.substring(0,d).trim(),h=c.substring(d+1).trim(),m={name:f,value:new Function(`return (${h})`)},v=f.match(/\(.+\)/);if(v){if(!v.index)throw new Error(`A condition was found in "${f}", but no index was present in the regular expression match.`);m.condition=new Function(`return !!(${v[0]})`),m.name=m.name.substring(0,v.index).trim(),be(`Setting variable "${m.name}" to "${h}" with condition (${v[0]})`)}else be(`Setting variable "${f}" to "${h}" without condition`);t.vars.push(m)}else Ao(`The line "${c}" in the vars section is missing a colon. It was ignored.`)})):(be("No vars section detected"),s=r[0]);function a(c,d){const f=d.trim();f!==""&&(be(`Creating '${c}' block with content: "${f}"`),t.blocks.push({type:c,content:f}))}const l=new RegExp(e.modifierPattern);let o=0,u=l.exec(s);for(;u;){a("text",s.substring(o,u.index));const c=u[1];let d="";for(let f=0;f<c.length;f++)switch(c[f]){case'"':for(d+='"',f=f+1;f<c.length&&(d+=c[f],!(c[f]==='"'&&c[f-1]!=="\\"));f++);break;case";":a("modifier",d),d="";break;default:d+=c[f]}a("modifier",d),o=l.lastIndex,u=l.exec(s)}return a("text",s.substring(o)),t}function On(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}let oe=On();function Po(n){oe=n}const In=/[&<>"']/,Oo=new RegExp(In.source,"g"),Nn=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Io=new RegExp(Nn.source,"g"),No={"&":"&","<":"<",">":">",'"':""","'":"'"},Dt=n=>No[n];function I(n,e){if(e){if(In.test(n))return n.replace(Oo,Dt)}else if(Nn.test(n))return n.replace(Io,Dt);return n}const Ro=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Rn(n){return n.replace(Ro,(e,t)=>(t=t.toLowerCase(),t==="colon"?":":t.charAt(0)==="#"?t.charAt(1)==="x"?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const Mo=/(^|[^\[])\^/g;function E(n,e){n=typeof n=="string"?n:n.source,e=e||"";const t={replace:(r,i)=>(i=i.source||i,i=i.replace(Mo,"$1"),n=n.replace(r,i),t),getRegex:()=>new RegExp(n,e)};return t}const Do=/[^\w:]/g,jo=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function jt(n,e,t){if(n){let r;try{r=decodeURIComponent(Rn(t)).replace(Do,"").toLowerCase()}catch{return null}if(r.indexOf("javascript:")===0||r.indexOf("vbscript:")===0||r.indexOf("data:")===0)return null}e&&!jo.test(t)&&(t=Bo(e,t));try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}const Ce={},qo=/^[^:]+:\/*[^/]*$/,Ho=/^([^:]+:)[\s\S]*$/,Fo=/^([^:]+:\/*[^/]*)[\s\S]*$/;function Bo(n,e){Ce[" "+n]||(qo.test(n)?Ce[" "+n]=n+"/":Ce[" "+n]=ze(n,"/",!0)),n=Ce[" "+n];const t=n.indexOf(":")===-1;return e.substring(0,2)==="//"?t?e:n.replace(Ho,"$1")+e:e.charAt(0)==="/"?t?e:n.replace(Fo,"$1")+e:n+e}const Ne={exec:function(){}};function qt(n,e){const t=n.replace(/\|/g,(s,a,l)=>{let o=!1,u=a;for(;--u>=0&&l[u]==="\\";)o=!o;return o?"|":" |"}),r=t.split(/ \|/);let i=0;if(r[0].trim()||r.shift(),r.length>0&&!r[r.length-1].trim()&&r.pop(),r.length>e)r.splice(e);else for(;r.length<e;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function ze(n,e,t){const r=n.length;if(r===0)return"";let i=0;for(;i<r;){const s=n.charAt(r-i-1);if(s===e&&!t)i++;else if(s!==e&&t)i++;else break}return n.slice(0,r-i)}function Uo(n,e){if(n.indexOf(e[1])===-1)return-1;const t=n.length;let r=0,i=0;for(;i<t;i++)if(n[i]==="\\")i++;else if(n[i]===e[0])r++;else if(n[i]===e[1]&&(r--,r<0))return i;return-1}function Vo(n){n&&n.sanitize&&!n.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}function Ht(n,e){if(e<1)return"";let t="";for(;e>1;)e&1&&(t+=n),e>>=1,n+=n;return t+n}function Ft(n,e,t,r){const i=e.href,s=e.title?I(e.title):null,a=n[1].replace(/\\([\[\]])/g,"$1");if(n[0].charAt(0)!=="!"){r.state.inLink=!0;const l={type:"link",raw:t,href:i,title:s,text:a,tokens:r.inlineTokens(a)};return r.state.inLink=!1,l}return{type:"image",raw:t,href:i,title:s,text:I(a)}}function Wo(n,e){const t=n.match(/^(\s+)(?:```)/);if(t===null)return e;const r=t[1];return e.split(`
`).map(i=>{const s=i.match(/^\s+/);if(s===null)return i;const[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`
`)}class vt{constructor(e){this.options=e||oe}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const r=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?r:ze(r,`
`)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const r=t[0],i=Wo(r,t[3]||"");return{type:"code",raw:r,lang:t[2]?t[2].trim().replace(this.rules.inline._escapes,"$1"):t[2],text:i}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let r=t[2].trim();if(/#$/.test(r)){const i=ze(r,"#");(this.options.pedantic||!i||/ $/.test(i))&&(r=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const r=t[0].replace(/^ *>[ \t]?/gm,""),i=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(r);return this.lexer.state.top=i,{type:"blockquote",raw:t[0],tokens:s,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let r,i,s,a,l,o,u,c,d,f,h,m,v=t[1].trim();const O=v.length>1,x={type:"list",raw:"",ordered:O,start:O?+v.slice(0,-1):"",loose:!1,items:[]};v=O?`\\d{1,9}\\${v.slice(-1)}`:`\\${v}`,this.options.pedantic&&(v=O?v:"[*+-]");const A=new RegExp(`^( {0,3}${v})((?:[ ][^\\n]*)?(?:\\n|$))`);for(;e&&(m=!1,!(!(t=A.exec(e))||this.rules.block.hr.test(e)));){if(r=t[0],e=e.substring(r.length),c=t[2].split(`
`,1)[0].replace(/^\t+/,w=>" ".repeat(3*w.length)),d=e.split(`
`,1)[0],this.options.pedantic?(a=2,h=c.trimLeft()):(a=t[2].search(/[^ ]/),a=a>4?1:a,h=c.slice(a),a+=t[1].length),o=!1,!c&&/^ *$/.test(d)&&(r+=d+`
`,e=e.substring(d.length+1),m=!0),!m){const w=new RegExp(`^ {0,${Math.min(3,a-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),k=new RegExp(`^ {0,${Math.min(3,a-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),T=new RegExp(`^ {0,${Math.min(3,a-1)}}(?:\`\`\`|~~~)`),C=new RegExp(`^ {0,${Math.min(3,a-1)}}#`);for(;e&&(f=e.split(`
`,1)[0],d=f,this.options.pedantic&&(d=d.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!(T.test(d)||C.test(d)||w.test(d)||k.test(e)));){if(d.search(/[^ ]/)>=a||!d.trim())h+=`
`+d.slice(a);else{if(o||c.search(/[^ ]/)>=4||T.test(c)||C.test(c)||k.test(c))break;h+=`
`+d}!o&&!d.trim()&&(o=!0),r+=f+`
`,e=e.substring(f.length+1),c=d.slice(a)}}x.loose||(u?x.loose=!0:/\n *\n *$/.test(r)&&(u=!0)),this.options.gfm&&(i=/^\[[ xX]\] /.exec(h),i&&(s=i[0]!=="[ ] ",h=h.replace(/^\[[ xX]\] +/,""))),x.items.push({type:"list_item",raw:r,task:!!i,checked:s,loose:!1,text:h}),x.raw+=r}x.items[x.items.length-1].raw=r.trimRight(),x.items[x.items.length-1].text=h.trimRight(),x.raw=x.raw.trimRight();const M=x.items.length;for(l=0;l<M;l++)if(this.lexer.state.top=!1,x.items[l].tokens=this.lexer.blockTokens(x.items[l].text,[]),!x.loose){const w=x.items[l].tokens.filter(T=>T.type==="space"),k=w.length>0&&w.some(T=>/\n.*\n/.test(T.raw));x.loose=k}if(x.loose)for(l=0;l<M;l++)x.items[l].loose=!0;return x}}html(e){const t=this.rules.block.html.exec(e);if(t){const r={type:"html",raw:t[0],pre:!this.options.sanitizer&&(t[1]==="pre"||t[1]==="script"||t[1]==="style"),text:t[0]};if(this.options.sanitize){const i=this.options.sanitizer?this.options.sanitizer(t[0]):I(t[0]);r.type="paragraph",r.text=i,r.tokens=this.lexer.inline(i)}return r}}def(e){const t=this.rules.block.def.exec(e);if(t){const r=t[1].toLowerCase().replace(/\s+/g," "),i=t[2]?t[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline._escapes,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline._escapes,"$1"):t[3];return{type:"def",tag:r,raw:t[0],href:i,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(t){const r={type:"table",header:qt(t[1]).map(i=>({text:i})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split(`
`):[]};if(r.header.length===r.align.length){r.raw=t[0];let i=r.align.length,s,a,l,o;for(s=0;s<i;s++)/^ *-+: *$/.test(r.align[s])?r.align[s]="right":/^ *:-+: *$/.test(r.align[s])?r.align[s]="center":/^ *:-+ *$/.test(r.align[s])?r.align[s]="left":r.align[s]=null;for(i=r.rows.length,s=0;s<i;s++)r.rows[s]=qt(r.rows[s],r.header.length).map(u=>({text:u}));for(i=r.header.length,a=0;a<i;a++)r.header[a].tokens=this.lexer.inline(r.header[a].text);for(i=r.rows.length,a=0;a<i;a++)for(o=r.rows[a],l=0;l<o.length;l++)o[l].tokens=this.lexer.inline(o[l].text);return r}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const r=t[1].charAt(t[1].length-1)===`
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:r,tokens:this.lexer.inline(r)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:I(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^<a /i.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):I(t[0]):t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const r=t[2].trim();if(!this.options.pedantic&&/^</.test(r)){if(!/>$/.test(r))return;const a=ze(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{const a=Uo(t[2],"()");if(a>-1){const o=(t[0].indexOf("!")===0?5:4)+t[1].length+a;t[2]=t[2].substring(0,a),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let i=t[2],s="";if(this.options.pedantic){const a=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);a&&(i=a[1],s=a[3])}else s=t[3]?t[3].slice(1,-1):"";return i=i.trim(),/^</.test(i)&&(this.options.pedantic&&!/>$/.test(r)?i=i.slice(1):i=i.slice(1,-1)),Ft(t,{href:i&&i.replace(this.rules.inline._escapes,"$1"),title:s&&s.replace(this.rules.inline._escapes,"$1")},t[0],this.lexer)}}reflink(e,t){let r;if((r=this.rules.inline.reflink.exec(e))||(r=this.rules.inline.nolink.exec(e))){let i=(r[2]||r[1]).replace(/\s+/g," ");if(i=t[i.toLowerCase()],!i){const s=r[0].charAt(0);return{type:"text",raw:s,text:s}}return Ft(r,i,r[0],this.lexer)}}emStrong(e,t,r=""){let i=this.rules.inline.emStrong.lDelim.exec(e);if(!i||i[3]&&r.match(/[\p{L}\p{N}]/u))return;const s=i[1]||i[2]||"";if(!s||s&&(r===""||this.rules.inline.punctuation.exec(r))){const a=i[0].length-1;let l,o,u=a,c=0;const d=i[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+a);(i=d.exec(t))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(o=l.length,i[3]||i[4]){u+=o;continue}else if((i[5]||i[6])&&a%3&&!((a+o)%3)){c+=o;continue}if(u-=o,u>0)continue;o=Math.min(o,o+u+c);const f=e.slice(0,a+i.index+(i[0].length-l.length)+o);if(Math.min(a,o)%2){const m=f.slice(1,-1);return{type:"em",raw:f,text:m,tokens:this.lexer.inlineTokens(m)}}const h=f.slice(2,-2);return{type:"strong",raw:f,text:h,tokens:this.lexer.inlineTokens(h)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let r=t[2].replace(/\n/g," ");const i=/[^ ]/.test(r),s=/^ /.test(r)&&/ $/.test(r);return i&&s&&(r=r.substring(1,r.length-1)),r=I(r,!0),{type:"codespan",raw:t[0],text:r}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e,t){const r=this.rules.inline.autolink.exec(e);if(r){let i,s;return r[2]==="@"?(i=I(this.options.mangle?t(r[1]):r[1]),s="mailto:"+i):(i=I(r[1]),s=i),{type:"link",raw:r[0],text:i,href:s,tokens:[{type:"text",raw:i,text:i}]}}}url(e,t){let r;if(r=this.rules.inline.url.exec(e)){let i,s;if(r[2]==="@")i=I(this.options.mangle?t(r[0]):r[0]),s="mailto:"+i;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])[0];while(a!==r[0]);i=I(r[0]),r[1]==="www."?s="http://"+r[0]:s=r[0]}return{type:"link",raw:r[0],text:i,href:s,tokens:[{type:"text",raw:i,text:i}]}}}inlineText(e,t){const r=this.rules.inline.text.exec(e);if(r){let i;return this.lexer.state.inRawBlock?i=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):I(r[0]):r[0]:i=I(this.options.smartypants?t(r[0]):r[0]),{type:"text",raw:r[0],text:i}}}}const y={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:Ne,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};y._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/;y._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;y.def=E(y.def).replace("label",y._label).replace("title",y._title).getRegex();y.bullet=/(?:[*+-]|\d{1,9}[.)])/;y.listItemStart=E(/^( *)(bull) */).replace("bull",y.bullet).getRegex();y.list=E(y.list).replace(/bull/g,y.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+y.def.source+")").getRegex();y._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";y._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/;y.html=E(y.html,"i").replace("comment",y._comment).replace("tag",y._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();y.paragraph=E(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex();y.blockquote=E(y.blockquote).replace("paragraph",y.paragraph).getRegex();y.normal={...y};y.gfm={...y.normal,table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"};y.gfm.table=E(y.gfm.table).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex();y.gfm.paragraph=E(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",y.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex();y.pedantic={...y.normal,html:E(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",y._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ne,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:E(y.normal._paragraph).replace("hr",y.hr).replace("heading",` *#{1,6} *[^
]`).replace("lheading",y.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const g={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Ne,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Ne,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/};g._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~";g.punctuation=E(g.punctuation).replace(/punctuation/g,g._punctuation).getRegex();g.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;g.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g;g._comment=E(y._comment).replace("(?:-->|$)","-->").getRegex();g.emStrong.lDelim=E(g.emStrong.lDelim).replace(/punct/g,g._punctuation).getRegex();g.emStrong.rDelimAst=E(g.emStrong.rDelimAst,"g").replace(/punct/g,g._punctuation).getRegex();g.emStrong.rDelimUnd=E(g.emStrong.rDelimUnd,"g").replace(/punct/g,g._punctuation).getRegex();g._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;g._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;g._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;g.autolink=E(g.autolink).replace("scheme",g._scheme).replace("email",g._email).getRegex();g._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;g.tag=E(g.tag).replace("comment",g._comment).replace("attribute",g._attribute).getRegex();g._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;g._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;g._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;g.link=E(g.link).replace("label",g._label).replace("href",g._href).replace("title",g._title).getRegex();g.reflink=E(g.reflink).replace("label",g._label).replace("ref",y._label).getRegex();g.nolink=E(g.nolink).replace("ref",y._label).getRegex();g.reflinkSearch=E(g.reflinkSearch,"g").replace("reflink",g.reflink).replace("nolink",g.nolink).getRegex();g.normal={...g};g.pedantic={...g.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:E(/^!?\[(label)\]\((.*?)\)/).replace("label",g._label).getRegex(),reflink:E(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",g._label).getRegex()};g.gfm={...g.normal,escape:E(g.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/};g.gfm.url=E(g.gfm.url,"i").replace("email",g.gfm._extended_email).getRegex();g.breaks={...g.gfm,br:E(g.br).replace("{2,}","*").getRegex(),text:E(g.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()};function Zo(n){return n.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function Bt(n){let e="",t,r;const i=n.length;for(t=0;t<i;t++)r=n.charCodeAt(t),Math.random()>.5&&(r="x"+r.toString(16)),e+="&#"+r+";";return e}class K{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||oe,this.options.tokenizer=this.options.tokenizer||new vt,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const t={block:y.normal,inline:g.normal};this.options.pedantic?(t.block=y.pedantic,t.inline=g.pedantic):this.options.gfm&&(t.block=y.gfm,this.options.breaks?t.inline=g.breaks:t.inline=g.gfm),this.tokenizer.rules=t}static get rules(){return{block:y,inline:g}}static lex(e,t){return new K(t).lex(e)}static lexInline(e,t){return new K(t).inlineTokens(e)}lex(e){e=e.replace(/\r\n|\r/g,`
`),this.blockTokens(e,this.tokens);let t;for(;t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens}blockTokens(e,t=[]){this.options.pedantic?e=e.replace(/\t/g," ").replace(/^ +$/gm,""):e=e.replace(/^( *)(\t+)/gm,(l,o,u)=>o+" ".repeat(u.length));let r,i,s,a;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(r=l.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))){if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length),r.raw.length===1&&t.length>0?t[t.length-1].raw+=`
`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length),i=t[t.length-1],i&&(i.type==="paragraph"||i.type==="text")?(i.raw+=`
`+r.raw,i.text+=`
`+r.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length),i=t[t.length-1],i&&(i.type==="paragraph"||i.type==="text")?(i.raw+=`
`+r.raw,i.text+=`
`+r.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(s=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0;const o=e.slice(1);let u;this.options.extensions.startBlock.forEach(function(c){u=c.call({lexer:this},o),typeof u=="number"&&u>=0&&(l=Math.min(l,u))}),l<1/0&&l>=0&&(s=e.substring(0,l+1))}if(this.state.top&&(r=this.tokenizer.paragraph(s))){i=t[t.length-1],a&&i.type==="paragraph"?(i.raw+=`
`+r.raw,i.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(r),a=s.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length),i=t[t.length-1],i&&i.type==="text"?(i.raw+=`
`+r.raw,i.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(r);continue}if(e){const l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let r,i,s,a=e,l,o,u;if(this.tokens.links){const c=Object.keys(this.tokens.links);if(c.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)c.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,l.index)+"["+Ht("a",l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,l.index)+"["+Ht("a",l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.escapedEmSt.exec(a))!=null;)a=a.slice(0,l.index+l[0].length-2)+"++"+a.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;e;)if(o||(u=""),o=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(c=>(r=c.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))){if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),i=t[t.length-1],i&&r.type==="text"&&i.type==="text"?(i.raw+=r.raw,i.text+=r.text):t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length),i=t[t.length-1],i&&r.type==="text"&&i.type==="text"?(i.raw+=r.raw,i.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,a,u)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e,Bt)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e,Bt))){e=e.substring(r.raw.length),t.push(r);continue}if(s=e,this.options.extensions&&this.options.extensions.startInline){let c=1/0;const d=e.slice(1);let f;this.options.extensions.startInline.forEach(function(h){f=h.call({lexer:this},d),typeof f=="number"&&f>=0&&(c=Math.min(c,f))}),c<1/0&&c>=0&&(s=e.substring(0,c+1))}if(r=this.tokenizer.inlineText(s,Zo)){e=e.substring(r.raw.length),r.raw.slice(-1)!=="_"&&(u=r.raw.slice(-1)),o=!0,i=t[t.length-1],i&&i.type==="text"?(i.raw+=r.raw,i.text+=r.text):t.push(r);continue}if(e){const c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return t}}class He{constructor(e){this.options=e||oe}code(e,t,r){const i=(t||"").match(/\S*/)[0];if(this.options.highlight){const s=this.options.highlight(e,i);s!=null&&s!==e&&(r=!0,e=s)}return e=e.replace(/\n$/,"")+`
`,i?'<pre><code class="'+this.options.langPrefix+I(i)+'">'+(r?e:I(e,!0))+`</code></pre>
`:"<pre><code>"+(r?e:I(e,!0))+`</code></pre>
`}blockquote(e){return`<blockquote>
${e}</blockquote>
`}html(e){return e}heading(e,t,r,i){if(this.options.headerIds){const s=this.options.headerPrefix+i.slug(r);return`<h${t} id="${s}">${e}</h${t}>
`}return`<h${t}>${e}</h${t}>
`}hr(){return this.options.xhtml?`<hr/>
`:`<hr>
`}list(e,t,r){const i=t?"ol":"ul",s=t&&r!==1?' start="'+r+'"':"";return"<"+i+s+`>
`+e+"</"+i+`>
`}listitem(e){return`<li>${e}</li>
`}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return`<p>${e}</p>
`}table(e,t){return t&&(t=`<tbody>${t}</tbody>`),`<table>
<thead>
`+e+`</thead>
`+t+`</table>
`}tablerow(e){return`<tr>
${e}</tr>
`}tablecell(e,t){const r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`</${r}>
`}strong(e){return`<strong>${e}</strong>`}em(e){return`<em>${e}</em>`}codespan(e){return`<code>${e}</code>`}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return`<del>${e}</del>`}link(e,t,r){if(e=jt(this.options.sanitize,this.options.baseUrl,e),e===null)return r;let i='<a href="'+e+'"';return t&&(i+=' title="'+t+'"'),i+=">"+r+"</a>",i}image(e,t,r){if(e=jt(this.options.sanitize,this.options.baseUrl,e),e===null)return r;let i=`<img src="${e}" alt="${r}"`;return t&&(i+=` title="${t}"`),i+=this.options.xhtml?"/>":">",i}text(e){return e}}class Mn{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,r){return""+r}image(e,t,r){return""+r}br(){return""}}class Dn{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/ig,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let r=e,i=0;if(this.seen.hasOwnProperty(r)){i=this.seen[e];do i++,r=e+"-"+i;while(this.seen.hasOwnProperty(r))}return t||(this.seen[e]=i,this.seen[r]=0),r}slug(e,t={}){const r=this.serialize(e);return this.getNextSafeSlug(r,t.dryrun)}}class Y{constructor(e){this.options=e||oe,this.options.renderer=this.options.renderer||new He,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Mn,this.slugger=new Dn}static parse(e,t){return new Y(t).parse(e)}static parseInline(e,t){return new Y(t).parseInline(e)}parse(e,t=!0){let r="",i,s,a,l,o,u,c,d,f,h,m,v,O,x,A,M,w,k,T;const C=e.length;for(i=0;i<C;i++){if(h=e[i],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[h.type]&&(T=this.options.extensions.renderers[h.type].call({parser:this},h),T!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(h.type))){r+=T||"";continue}switch(h.type){case"space":continue;case"hr":{r+=this.renderer.hr();continue}case"heading":{r+=this.renderer.heading(this.parseInline(h.tokens),h.depth,Rn(this.parseInline(h.tokens,this.textRenderer)),this.slugger);continue}case"code":{r+=this.renderer.code(h.text,h.lang,h.escaped);continue}case"table":{for(d="",c="",l=h.header.length,s=0;s<l;s++)c+=this.renderer.tablecell(this.parseInline(h.header[s].tokens),{header:!0,align:h.align[s]});for(d+=this.renderer.tablerow(c),f="",l=h.rows.length,s=0;s<l;s++){for(u=h.rows[s],c="",o=u.length,a=0;a<o;a++)c+=this.renderer.tablecell(this.parseInline(u[a].tokens),{header:!1,align:h.align[a]});f+=this.renderer.tablerow(c)}r+=this.renderer.table(d,f);continue}case"blockquote":{f=this.parse(h.tokens),r+=this.renderer.blockquote(f);continue}case"list":{for(m=h.ordered,v=h.start,O=h.loose,l=h.items.length,f="",s=0;s<l;s++)A=h.items[s],M=A.checked,w=A.task,x="",A.task&&(k=this.renderer.checkbox(M),O?A.tokens.length>0&&A.tokens[0].type==="paragraph"?(A.tokens[0].text=k+" "+A.tokens[0].text,A.tokens[0].tokens&&A.tokens[0].tokens.length>0&&A.tokens[0].tokens[0].type==="text"&&(A.tokens[0].tokens[0].text=k+" "+A.tokens[0].tokens[0].text)):A.tokens.unshift({type:"text",text:k}):x+=k),x+=this.parse(A.tokens,O),f+=this.renderer.listitem(x,w,M);r+=this.renderer.list(f,m,v);continue}case"html":{r+=this.renderer.html(h.text);continue}case"paragraph":{r+=this.renderer.paragraph(this.parseInline(h.tokens));continue}case"text":{for(f=h.tokens?this.parseInline(h.tokens):h.text;i+1<C&&e[i+1].type==="text";)h=e[++i],f+=`
`+(h.tokens?this.parseInline(h.tokens):h.text);r+=t?this.renderer.paragraph(f):f;continue}default:{const L='Token with "'+h.type+'" type was not found.';if(this.options.silent){console.error(L);return}else throw new Error(L)}}}return r}parseInline(e,t){t=t||this.renderer;let r="",i,s,a;const l=e.length;for(i=0;i<l;i++){if(s=e[i],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]&&(a=this.options.extensions.renderers[s.type].call({parser:this},s),a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type))){r+=a||"";continue}switch(s.type){case"escape":{r+=t.text(s.text);break}case"html":{r+=t.html(s.text);break}case"link":{r+=t.link(s.href,s.title,this.parseInline(s.tokens,t));break}case"image":{r+=t.image(s.href,s.title,s.text);break}case"strong":{r+=t.strong(this.parseInline(s.tokens,t));break}case"em":{r+=t.em(this.parseInline(s.tokens,t));break}case"codespan":{r+=t.codespan(s.text);break}case"br":{r+=t.br();break}case"del":{r+=t.del(this.parseInline(s.tokens,t));break}case"text":{r+=t.text(s.text);break}default:{const o='Token with "'+s.type+'" type was not found.';if(this.options.silent){console.error(o);return}else throw new Error(o)}}}return r}}class Re{constructor(e){this.options=e||oe}preprocess(e){return e}postprocess(e){return e}}U(Re,"passThroughHooks",new Set(["preprocess","postprocess"]));function Go(n,e,t){return r=>{if(r.message+=`
Please report this to https://github.com/markedjs/marked.`,n){const i="<p>An error occurred:</p><pre>"+I(r.message+"",!0)+"</pre>";if(e)return Promise.resolve(i);if(t){t(null,i);return}return i}if(e)return Promise.reject(r);if(t){t(r);return}throw r}}function jn(n,e){return(t,r,i)=>{typeof r=="function"&&(i=r,r=null);const s={...r};r={...b.defaults,...s};const a=Go(r.silent,r.async,i);if(typeof t>"u"||t===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(Vo(r),r.hooks&&(r.hooks.options=r),i){const l=r.highlight;let o;try{r.hooks&&(t=r.hooks.preprocess(t)),o=n(t,r)}catch(d){return a(d)}const u=function(d){let f;if(!d)try{r.walkTokens&&b.walkTokens(o,r.walkTokens),f=e(o,r),r.hooks&&(f=r.hooks.postprocess(f))}catch(h){d=h}return r.highlight=l,d?a(d):i(null,f)};if(!l||l.length<3||(delete r.highlight,!o.length))return u();let c=0;b.walkTokens(o,function(d){d.type==="code"&&(c++,setTimeout(()=>{l(d.text,d.lang,function(f,h){if(f)return u(f);h!=null&&h!==d.text&&(d.text=h,d.escaped=!0),c--,c===0&&u()})},0))}),c===0&&u();return}if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(t):t).then(l=>n(l,r)).then(l=>r.walkTokens?Promise.all(b.walkTokens(l,r.walkTokens)).then(()=>l):l).then(l=>e(l,r)).then(l=>r.hooks?r.hooks.postprocess(l):l).catch(a);try{r.hooks&&(t=r.hooks.preprocess(t));const l=n(t,r);r.walkTokens&&b.walkTokens(l,r.walkTokens);let o=e(l,r);return r.hooks&&(o=r.hooks.postprocess(o)),o}catch(l){return a(l)}}}function b(n,e,t){return jn(K.lex,Y.parse)(n,e,t)}b.options=b.setOptions=function(n){return b.defaults={...b.defaults,...n},Po(b.defaults),b};b.getDefaults=On;b.defaults=oe;b.use=function(...n){const e=b.defaults.extensions||{renderers:{},childTokens:{}};n.forEach(t=>{const r={...t};if(r.async=b.defaults.async||r.async||!1,t.extensions&&(t.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if(i.renderer){const s=e.renderers[i.name];s?e.renderers[i.name]=function(...a){let l=i.renderer.apply(this,a);return l===!1&&(l=s.apply(this,a)),l}:e.renderers[i.name]=i.renderer}if(i.tokenizer){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");e[i.level]?e[i.level].unshift(i.tokenizer):e[i.level]=[i.tokenizer],i.start&&(i.level==="block"?e.startBlock?e.startBlock.push(i.start):e.startBlock=[i.start]:i.level==="inline"&&(e.startInline?e.startInline.push(i.start):e.startInline=[i.start]))}i.childTokens&&(e.childTokens[i.name]=i.childTokens)}),r.extensions=e),t.renderer){const i=b.defaults.renderer||new He;for(const s in t.renderer){const a=i[s];i[s]=(...l)=>{let o=t.renderer[s].apply(i,l);return o===!1&&(o=a.apply(i,l)),o}}r.renderer=i}if(t.tokenizer){const i=b.defaults.tokenizer||new vt;for(const s in t.tokenizer){const a=i[s];i[s]=(...l)=>{let o=t.tokenizer[s].apply(i,l);return o===!1&&(o=a.apply(i,l)),o}}r.tokenizer=i}if(t.hooks){const i=b.defaults.hooks||new Re;for(const s in t.hooks){const a=i[s];Re.passThroughHooks.has(s)?i[s]=l=>{if(b.defaults.async)return Promise.resolve(t.hooks[s].call(i,l)).then(u=>a.call(i,u));const o=t.hooks[s].call(i,l);return a.call(i,o)}:i[s]=(...l)=>{let o=t.hooks[s].apply(i,l);return o===!1&&(o=a.apply(i,l)),o}}r.hooks=i}if(t.walkTokens){const i=b.defaults.walkTokens;r.walkTokens=function(s){let a=[];return a.push(t.walkTokens.call(this,s)),i&&(a=a.concat(i.call(this,s))),a}}b.setOptions(r)})};b.walkTokens=function(n,e){let t=[];for(const r of n)switch(t=t.concat(e.call(b,r)),r.type){case"table":{for(const i of r.header)t=t.concat(b.walkTokens(i.tokens,e));for(const i of r.rows)for(const s of i)t=t.concat(b.walkTokens(s.tokens,e));break}case"list":{t=t.concat(b.walkTokens(r.items,e));break}default:b.defaults.extensions&&b.defaults.extensions.childTokens&&b.defaults.extensions.childTokens[r.type]?b.defaults.extensions.childTokens[r.type].forEach(function(i){t=t.concat(b.walkTokens(r[i],e))}):r.tokens&&(t=t.concat(b.walkTokens(r.tokens,e)))}return t};b.parseInline=jn(K.lexInline,Y.parseInline);b.Parser=Y;b.parser=Y.parse;b.Renderer=He;b.TextRenderer=Mn;b.Lexer=K;b.lexer=K.lex;b.Tokenizer=vt;b.Slugger=Dn;b.Hooks=Re;b.parse=b;b.options;b.setOptions;b.use;b.walkTokens;b.parseInline;Y.parse;K.lex;const $t=new He;$t.blockquote=n=>`<div class="fork">${n}</div>`;$t.del=n=>`<span class="small-caps">${n}</span>`;function Jo(n,e){var r,i;const t=n.substring(1,n.length-1).trim();if(/\s/.test(t)){const s=(r=t.match(/^[^:,]+/))==null?void 0:r[0];if(!s)return n;const a=e.find(l=>l.match.test(s));if(a){const l=t.replace(s,"");if(l[0]===":"){const o=new Function(`return {"${s}" ${l}}`)(),u=o[s];return delete o[s],a.render(u,o,t)}else if(l[0]===","){const o=new Function(`return {${l.substring(1)}}`)();return a.render(null,o,t)}else if(l==="")return a.render(null,{},t)}}else{const s=/(.+)\[(.+)\]$/.exec(t);let a;if(s?a=(i=p(s[1]))==null?void 0:i[s[2]]:a=p(t),a!==void 0)return a}return n}function Xo(n,e){let t="",r=0,i=n.indexOf("{");if(i===-1)return n;let s=!1,a;for(let l=i+1;l<n.length;l++)switch(n[l]){case"{":s||(i=l);break;case'"':case"'":l>0&&n[l-1]!=="\\"&&(s?s&&a===n[l]&&(s=!1):(s=!0,a=n[l]));break;case"}":if(!s){const o=n.substring(i,l+1);let u="";try{u=Jo(o,e)}catch(c){console.warn(`An error occurred while rendering "${o}": ${c.message}`),u=o}u===void 0&&(u=""),t+=n.substring(r,i)+u,r=l+1,i=n.indexOf("{",r),l=i,i===-1&&(l=n.length)}break}return t+n.substring(r)}const{log:Z}=F("render"),Qo={renderer:$t,smartypants:!0};function Ko(n,e,t,r=!1){if(!n.vars)throw new Error("The renderer was given an object with no vars property.");if(!n.blocks)throw new Error("The renderer was given an object with no blocks property.");let i="";if(!r){Z(`Setting vars (${n.vars.length})`);for(const o of n.vars)o.condition?o.condition()?(Z(`Setting var "${o.name}" (condition is currently true)`),$(o.name,o.value())):Z(`Not setting var "${o.name}" (condition is currently false)`):(Z(`Setting var "${o.name}"`),$(o.name,o.value()))}let s=[];const a=new Map;for(const o of n.blocks)switch(o.type){case"text":{const u={text:o.content,startsNewParagraph:!0},c=s.filter(f=>!!f.modifier.processRaw);Z(`Running ${c.length} modifiers on raw source block`);for(const{invocation:f,modifier:h}of c){const m=a.get(h);if(!m)throw new Error("State for a modifier was unknown, but should have had a value.");if(!h.processRaw)throw new Error("A modifier was added to the raw modifiers list, but it has no processRaw function.");h.processRaw(u,{state:m,invocation:f})}u.text=Xo(Qs(u.text),e);const d=s.filter(f=>!!f.modifier.process);Z(`Running ${d.length} modifiers on source block`);for(const{invocation:f,modifier:h}of d){const m=a.get(h);if(!m)throw new Error("State for a modifier was unknown, but should have had a value.");if(!h.process)throw new Error("A modifier was added to the processed modifiers list, but it has no process function.");h.process(u,{state:m,invocation:f})}Z(`Output after modifiers: ${JSON.stringify(u)}`),u.text.trim()!==""&&(i!==""&&(i+=u.startsNewParagraph?`
`:" "),i+=u.text),s=[];break}case"modifier":{const u=t.filter(c=>c.match.test(o.content));if(u.length===1){const c=u[0];Z(`Activated modifier matching [${o.content}]`),a.has(c)||a.set(c,{}),s.push({modifier:c,invocation:o.content})}else u.length===0?i+=`
[${o.content}]
`:(console.warn(`More than one modifier matched "[${o.content}]".`),i+=`
[${o.content}]
`);break}default:throw new Error(`Don't know how to render a block with type "${o.type}".`)}const l=/^((>|-|(\*\s)).*$)\n{2,}\2/gm;for(;l.test(i);)i=i.replace(l,`$1
$2`);return b.setOptions(Qo),Z(`Final Markdown:
${i}`),b(i)}function $e(n,e=!1){return Ko(zo(n),An(),Pn(),e)}class Yo extends fe{constructor(){super(),this.addEventListener("click",()=>{let e=this.getAttribute("text");const t=this.getAttribute("passage");if(t){const r=Se(t);r&&(e=r.source)}if(e){const r=document.createElement("div");r.innerHTML=$e(e).trim();const i=this.closest("page-transition");if(!i)throw new Error("Couldn't find suitable parent element to do a reveal link transition on.");i.startTransition(()=>{var a,l;const s=r.children.length;if(s>0&&this.parentNode){const o=document.createElement("span");if(o.innerHTML=((a=r.firstElementChild)==null?void 0:a.innerHTML)??"",this.parentNode.insertBefore(o,this),(l=r.firstElementChild)==null||l.remove(),s>1&&this.parentNode.parentNode&&r.lastChild){const u=r.lastChild;for(;r.lastChild;)this.parentNode.parentNode.insertBefore(r.lastChild,this.parentNode.nextSibling);for(;this.nextSibling;)u.insertBefore(this.nextSibling,null)}}this.remove()})}})}}class qn extends z{attributeChangedCallback(){const e=this.getAttribute("skippable-delay");if(!e)return;const t=parseInt(e);if(isFinite(t))if(t===0){this.style.animationDelay="";const r=this.className;this.className="",this.offsetWidth,this.className=r}else this.style.animationDelay=`${t}ms`}}U(qn,"observedAttributes",["skippable-delay"]);class Hn extends fe{constructor(){super(),this.addEventListener("click",this),window.addEventListener("state-change",this)}connectedCallback(){super.connectedCallback(),this.updateLabel(),this.updateVisibility()}disconnectedCallback(){window.removeEventListener("state-change",this)}handleEvent(e){if(e.type==="click")$("config.style.page.theme.override",p("browser.darkTheme")?"light":"dark"),this.updateLabel();else{const{detail:t}=e;t.name==="config.style.page.theme.enableSwitching"&&this.updateVisibility()}}updateLabel(){const e=p("browser.darkTheme")?"dark":"light";this.innerHTML=this.getAttribute(`${e}-label`)??"Switch Theme"}updateVisibility(){p("config.style.page.theme.enableSwitching")?this.removeAttribute("hidden"):this.setAttribute("hidden","")}attributeChangedCallback(){this.updateLabel()}}U(Hn,"observedAttributes",["dark-label","light-label"]);class ea extends z{constructor(){super(),this.delegate("change","input, select",e=>{const t=this.getAttribute("name"),r=e.target;if(t)switch(r.nodeName){case"INPUT":$(t,r.value);break;case"SELECT":{const i=r.querySelectorAll("option")[r.selectedIndex];$(t,i.dataset.jsonValue?JSON.parse(i.dataset.jsonValue):i.value)}}})}}function ta(){wt({"cycling-link":Ws,"inline-button":fe,"passage-link":Gs,"restart-link":Js,"reveal-link":Yo,"skippable-animation":qn,"theme-switcher":Hn,"variable-binding":ea})}function Fn(){ta()}const na=Object.freeze(Object.defineProperty({__proto__:null,initTemplate:Fn,inserts:mo,modifiers:Co,render:$e},Symbol.toStringTag,{value:"Module"})),ra=hn(n=>{if(n.some(e=>e[0])){const e=p("trail");if(!Array.isArray(e))throw new Error("The trail variable has been set to a non-array value.");if(typeof e[e.length-1]!="string")throw new Error("The last value in the trail variable is not a string.");const r=Se(e[e.length-1]);if(!r)throw new Error(`There is no passage named "${e[e.length-1]}".`);const i=$e(r.source),s={footer:{center:"",left:"",right:""},header:{center:"",left:"",right:""}};for(const a in s)for(const l in s[a])s[a][l]=$e(p(`config.${a}.${l}`).toString());window.dispatchEvent(new CustomEvent("display-change",{detail:{body:i,...s}}))}});let Ue;function ia(){window.addEventListener("state-change",({detail:n})=>{ra(n.name==="trail")}),Ue=window.matchMedia("(prefers-color-scheme: dark)"),Ue.addEventListener("change",()=>{window.dispatchEvent(new CustomEvent("system-theme-change",{detail:{theme:Ue.matches?"dark":"light"}}))})}const sa={"config.body.transition.name":"crossfade","config.body.transition.duration":"300ms","config.header.left":"","config.header.center":"","config.header.right":"","config.footer.left":"_{story.name}_","config.footer.center":"","config.footer.right":"{theme switcher} {restart link}"};function oa(){ie(sa),Vs(),ia()}const{warn:Ae}=F("extensibility");function Ut(n){return n.split(".").map(window.parseInt)}function aa(){window.engine={extend(n,e){const t=p("engine.version");if(typeof t!="string")throw new Error(`engine.version has been set to a ${typeof t}, not a string.`);const r=Ut(n),i=Ut(t);if(i[0]<r[0]){Ae(`The current engine version (${t}) has a lower major version than requested (${n}); skipping`);return}i[0]>r[0]?Ae(`The current engine version (${t}) has a higher major version than requested (${n}); running code but you may encounter problems`):(i[1]<r[1]&&Ae(`The current engine version (${t}) has a lower minor version than requested (${n}); running code but you may encounter problems`),i[1]===r[1]&&i[2]<r[2]&&Ae(`The current engine version (${t}) has a lower patch version than requested (${n}); running code but you may encounter problems`)),e()},log:Xt,state:Zi,story:Gi,template:na,warn:Qt}}function la(n,e,t,r){return(n/=r/2)<1?t/2*n*n+e:-t/2*(--n*(n-2)-1)+e}function Bn(n,e,t){const r=n.volume,i=e-r;let s,a=0;return n.volume===e?Promise.resolve():new Promise(l=>window.requestAnimationFrame(o=>{function u(c){a+=c-s,n.volume=la(a,r,i,t),a<t?(s=c,window.requestAnimationFrame(u)):l()}s=o,window.requestAnimationFrame(u)}))}const{log:Xe}=F("sound"),S={};function Ve(n,e,t){S[n]?(S[n].setAttribute("src",e),t?S[n].setAttribute("preload","auto"):S[n].removeAttribute("preload"),Xe(`Updated <audio> element in sound bank for "${n}" to use ${e}`)):(S[n]=document.createElement("audio"),S[n].setAttribute("src",e),t&&S[n].setAttribute("preload","auto"),Xe(`Added new <audio> element to sound bank for "${n}" for ${e}`))}async function Le(n,e=!1,t=0){if(!S[n])throw new Error(`There is no sound loaded named ${n}.`);return Xe(`Playing sound "${n}" (looping: ${e})`),t>0&&(S[n].volume=0,Bn(S[n],1,t)),e?(S[n].loop=!0,S[n].play()):(S[n].loop=!1,new Promise((r,i)=>{try{S[n].addEventListener("ended",function s(){S[n].removeEventListener("ended",s),r()}),S[n].play().catch(s=>i(s))}catch(s){i(s)}}))}function Vt(n,e=0){if(!S[n])throw new Error(`There is no sound loaded named ${n}.`);if(e<=0)S[n].pause(),S[n].currentTime=0;else{const t=S[n].volume;Bn(S[n],0,e).then(()=>{S[n].pause(),S[n].volume=t,S[n].currentTime=0})}}function Wt(n,e){if(!S[n])throw new Error(`There is no sound loaded named ${n}.`);S[n].muted=e}function We(n,e){if(!S[n])throw new Error(`There is no sound loaded named ${n}.`);if(e<0||e>1)throw new Error("A sound volume must be between 0 and 1.");S[n].volume=e}const{warn:Zt}=F("sound");function ca(){ie({"sound.mute":!1,"sound.volume":1,"sound.transitionDuration":"1s"}),window.addEventListener("state-change",({detail:n})=>{const{name:e,value:t}=n,r=["sound","sound.ambient"].includes(e),i=["sound","sound.effect"].includes(e);if(r){const a=p("sound.ambient");if(typeof a=="object"&&a){const l=a;for(const o in l)typeof l[o].url=="string"&&Ve(o,l[o].url,!1),typeof l[o].volume=="number"&&We(o,l[o].volume),"muted"in l[o]&&Wt(o,!!l[o].muted),l[o].playing===!0&&Le(o,!0).catch(u=>Zt(`Could not resume playing ambient sound "${o}" (${u.message})`))}}if(i){const a=p("sound.effect");if(typeof a=="object"&&a){const l=a;for(const o in l)typeof l[o].url=="string"&&Ve(o,l[o].url,!0),typeof l[o].volume=="number"&&We(o,l[o].volume),"muted"in l[o]&&Wt(o,!!l[o].muted),l[o].playing&&Le(o,!1).then(()=>$(`sound.effect.${o}.playing`,!1)).catch(u=>Zt(`Could not resume playing sound effect "${o}" (${u.message}`))}}if(r||i)return;const s=/^sound\.(ambient|effect)\.(.+?)\.(.+)$/i.exec(e);if(s)switch(s[3].toLowerCase()){case"playing":{let a="0s";typeof p(`${s[2]}.transitionDuration`)=="string"&&(a=p(`${s[2]}.transitionDuration`)),typeof p("sound.transitionDuration")=="string"&&(a=p("sound.transitionDuration")),t?s[1]==="ambient"?Le(s[2],!0,Ie(a,"ms")):Le(s[2],!1).then(()=>$(e,!1)):s[1]==="ambient"?Vt(s[2],Ie(a,"ms")):Vt(s[2]);break}case"url":Ve(s[2],t,s[1]==="effect");break;case"volume":We(s[2],t);break}})}function ua(){_("browser.darkSystemTheme",()=>!!(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches)),_("browser.darkTheme",()=>{if(!p("config.style.page.theme.enableSwitching"))return!1;switch(p("config.style.page.theme.override")){case"dark":return!0;case"light":return!1;default:return p("browser.darkSystemTheme")}}),_("browser.height",()=>window.innerHeight),_("browser.online",()=>window.navigator.onLine),_("browser.width",()=>window.innerWidth)}const da="2.3.0";function fa(){_("engine.version",()=>da)}function ha(){_("now.datestamp",()=>new Date().toLocaleDateString(navigator.language)),_("now.second",()=>new Date().getSeconds()),_("now.minute",()=>new Date().getMinutes()),_("now.hour",()=>new Date().getHours()),_("now.day",()=>new Date().getDate()),_("now.weekday",()=>new Date().getDay()+1),_("now.weekdayName",()=>new Date().toLocaleString(navigator.language,{weekday:"long"})),_("now.month",()=>new Date().getMonth()+1),_("now.monthName",()=>new Date().toLocaleString(navigator.language,{month:"long"})),_("now.year",()=>new Date().getFullYear()),_("now.timestamp",()=>new Date().toLocaleString(navigator.language,{hour:"numeric",minute:"numeric",second:"numeric"}))}const{warn:Ze}=F("lookups");let Gt;function pa(){_("passage.from",()=>{const n=p("trail");if(!Array.isArray(n)){Ze(`The trail variable has been set to a ${typeof n}, not an array.`);return}if(n.length>1)return n[n.length-2]}),window.addEventListener("passage-navigate",n=>{n.target&&(Gt=n.target.innerText)}),_("passage.fromText",()=>Gt),_("passage.name",()=>{const n=p("trail");if(!Array.isArray(n)){Ze(`The trail variable has been set to a ${typeof n}, not an array.`);return}return n[n.length-1]}),_("passage.visits",()=>{const n=p("trail"),e=p("passage.name");return Array.isArray(n)?n.reduce((t,r)=>r===e?t+1:t,0):(Ze(`The trail variable has been set to a ${typeof n}, not an array.`),0)})}var Qe={},ga={get exports(){return Qe},set exports(n){Qe=n}};(function(n){(function(e,t,r){function i(o){var u=this,c=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=c(" "),u.s1=c(" "),u.s2=c(" "),u.s0-=c(o),u.s0<0&&(u.s0+=1),u.s1-=c(o),u.s1<0&&(u.s1+=1),u.s2-=c(o),u.s2<0&&(u.s2+=1),c=null}function s(o,u){return u.c=o.c,u.s0=o.s0,u.s1=o.s1,u.s2=o.s2,u}function a(o,u){var c=new i(o),d=u&&u.state,f=c.next;return f.int32=function(){return c.next()*4294967296|0},f.double=function(){return f()+(f()*2097152|0)*11102230246251565e-32},f.quick=f,d&&(typeof d=="object"&&s(d,c),f.state=function(){return s(c,{})}),f}function l(){var o=4022871197,u=function(c){c=String(c);for(var d=0;d<c.length;d++){o+=c.charCodeAt(d);var f=.02519603282416938*o;o=f>>>0,f-=o,f*=o,o=f>>>0,f-=o,o+=f*4294967296}return(o>>>0)*23283064365386963e-26};return u}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.alea=a})(se,n,!1)})(ga);var Ke={},ma={get exports(){return Ke},set exports(n){Ke=n}};(function(n){(function(e,t,r){function i(l){var o=this,u="";o.x=0,o.y=0,o.z=0,o.w=0,o.next=function(){var d=o.x^o.x<<11;return o.x=o.y,o.y=o.z,o.z=o.w,o.w^=o.w>>>19^d^d>>>8},l===(l|0)?o.x=l:u+=l;for(var c=0;c<u.length+64;c++)o.x^=u.charCodeAt(c)|0,o.next()}function s(l,o){return o.x=l.x,o.y=l.y,o.z=l.z,o.w=l.w,o}function a(l,o){var u=new i(l),c=o&&o.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var f=u.next()>>>11,h=(u.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,c&&(typeof c=="object"&&s(c,u),d.state=function(){return s(u,{})}),d}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.xor128=a})(se,n,!1)})(ma);var Ye={},ba={get exports(){return Ye},set exports(n){Ye=n}};(function(n){(function(e,t,r){function i(l){var o=this,u="";o.next=function(){var d=o.x^o.x>>>2;return o.x=o.y,o.y=o.z,o.z=o.w,o.w=o.v,(o.d=o.d+362437|0)+(o.v=o.v^o.v<<4^(d^d<<1))|0},o.x=0,o.y=0,o.z=0,o.w=0,o.v=0,l===(l|0)?o.x=l:u+=l;for(var c=0;c<u.length+64;c++)o.x^=u.charCodeAt(c)|0,c==u.length&&(o.d=o.x<<10^o.x>>>4),o.next()}function s(l,o){return o.x=l.x,o.y=l.y,o.z=l.z,o.w=l.w,o.v=l.v,o.d=l.d,o}function a(l,o){var u=new i(l),c=o&&o.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var f=u.next()>>>11,h=(u.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,c&&(typeof c=="object"&&s(c,u),d.state=function(){return s(u,{})}),d}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.xorwow=a})(se,n,!1)})(ba);var et={},ya={get exports(){return et},set exports(n){et=n}};(function(n){(function(e,t,r){function i(l){var o=this;o.next=function(){var c=o.x,d=o.i,f,h;return f=c[d],f^=f>>>7,h=f^f<<24,f=c[d+1&7],h^=f^f>>>10,f=c[d+3&7],h^=f^f>>>3,f=c[d+4&7],h^=f^f<<7,f=c[d+7&7],f=f^f<<13,h^=f^f<<9,c[d]=h,o.i=d+1&7,h};function u(c,d){var f,h=[];if(d===(d|0))h[0]=d;else for(d=""+d,f=0;f<d.length;++f)h[f&7]=h[f&7]<<15^d.charCodeAt(f)+h[f+1&7]<<13;for(;h.length<8;)h.push(0);for(f=0;f<8&&h[f]===0;++f);for(f==8?h[7]=-1:h[f],c.x=h,c.i=0,f=256;f>0;--f)c.next()}u(o,l)}function s(l,o){return o.x=l.x.slice(),o.i=l.i,o}function a(l,o){l==null&&(l=+new Date);var u=new i(l),c=o&&o.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var f=u.next()>>>11,h=(u.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,c&&(c.x&&s(c,u),d.state=function(){return s(u,{})}),d}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.xorshift7=a})(se,n,!1)})(ya);var tt={},wa={get exports(){return tt},set exports(n){tt=n}};(function(n){(function(e,t,r){function i(l){var o=this;o.next=function(){var c=o.w,d=o.X,f=o.i,h,m;return o.w=c=c+1640531527|0,m=d[f+34&127],h=d[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,m=d[f]=m^h,o.i=f,m+(c^c>>>16)|0};function u(c,d){var f,h,m,v,O,x=[],A=128;for(d===(d|0)?(h=d,d=null):(d=d+"\0",h=0,A=Math.max(A,d.length)),m=0,v=-32;v<A;++v)d&&(h^=d.charCodeAt((v+32)%d.length)),v===0&&(O=h),h^=h<<10,h^=h>>>15,h^=h<<4,h^=h>>>13,v>=0&&(O=O+1640531527|0,f=x[v&127]^=h+O,m=f==0?m+1:0);for(m>=128&&(x[(d&&d.length||0)&127]=-1),m=127,v=4*128;v>0;--v)h=x[m+34&127],f=x[m=m+1&127],h^=h<<13,f^=f<<17,h^=h>>>15,f^=f>>>12,x[m]=h^f;c.w=O,c.X=x,c.i=m}u(o,l)}function s(l,o){return o.i=l.i,o.w=l.w,o.X=l.X.slice(),o}function a(l,o){l==null&&(l=+new Date);var u=new i(l),c=o&&o.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var f=u.next()>>>11,h=(u.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,c&&(c.X&&s(c,u),d.state=function(){return s(u,{})}),d}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.xor4096=a})(se,n,!1)})(wa);var nt={},ka={get exports(){return nt},set exports(n){nt=n}};(function(n){(function(e,t,r){function i(l){var o=this,u="";o.next=function(){var d=o.b,f=o.c,h=o.d,m=o.a;return d=d<<25^d>>>7^f,f=f-h|0,h=h<<24^h>>>8^m,m=m-d|0,o.b=d=d<<20^d>>>12^f,o.c=f=f-h|0,o.d=h<<16^f>>>16^m,o.a=m-d|0},o.a=0,o.b=0,o.c=-1640531527,o.d=1367130551,l===Math.floor(l)?(o.a=l/4294967296|0,o.b=l|0):u+=l;for(var c=0;c<u.length+20;c++)o.b^=u.charCodeAt(c)|0,o.next()}function s(l,o){return o.a=l.a,o.b=l.b,o.c=l.c,o.d=l.d,o}function a(l,o){var u=new i(l),c=o&&o.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var f=u.next()>>>11,h=(u.next()>>>0)/4294967296,m=(f+h)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,c&&(typeof c=="object"&&s(c,u),d.state=function(){return s(u,{})}),d}t&&t.exports?t.exports=a:r&&r.amd?r(function(){return a}):this.tychei=a})(se,n,!1)})(ka);var rt={},xa={get exports(){return rt},set exports(n){rt=n}};const va={},$a=Object.freeze(Object.defineProperty({__proto__:null,default:va},Symbol.toStringTag,{value:"Module"})),Sa=zs($a);(function(n){(function(e,t,r){var i=256,s=6,a=52,l="random",o=r.pow(i,s),u=r.pow(2,a),c=u*2,d=i-1,f;function h(w,k,T){var C=[];k=k==!0?{entropy:!0}:k||{};var L=x(O(k.entropy?[w,M(t)]:w??A(),3),C),D=new m(C),q=function(){for(var j=D.g(s),W=o,B=0;j<u;)j=(j+B)*i,W*=i,B=D.g(1);for(;j>=c;)j/=2,W/=2,B>>>=1;return(j+B)/W};return q.int32=function(){return D.g(4)|0},q.quick=function(){return D.g(4)/4294967296},q.double=q,x(M(D.S),t),(k.pass||T||function(j,W,B,G){return G&&(G.S&&v(G,D),j.state=function(){return v(D,{})}),B?(r[l]=j,W):j})(q,L,"global"in k?k.global:this==r,k.state)}function m(w){var k,T=w.length,C=this,L=0,D=C.i=C.j=0,q=C.S=[];for(T||(w=[T++]);L<i;)q[L]=L++;for(L=0;L<i;L++)q[L]=q[D=d&D+w[L%T]+(k=q[L])],q[D]=k;(C.g=function(j){for(var W,B=0,G=C.i,_e=C.j,he=C.S;j--;)W=he[G=d&G+1],B=B*i+he[d&(he[G]=he[_e=d&_e+W])+(he[_e]=W)];return C.i=G,C.j=_e,B})(i)}function v(w,k){return k.i=w.i,k.j=w.j,k.S=w.S.slice(),k}function O(w,k){var T=[],C=typeof w,L;if(k&&C=="object")for(L in w)try{T.push(O(w[L],k-1))}catch{}return T.length?T:C=="string"?w:w+"\0"}function x(w,k){for(var T=w+"",C,L=0;L<T.length;)k[d&L]=d&(C^=k[d&L]*19)+T.charCodeAt(L++);return M(k)}function A(){try{var w;return f&&(w=f.randomBytes)?w=w(i):(w=new Uint8Array(i),(e.crypto||e.msCrypto).getRandomValues(w)),M(w)}catch{var k=e.navigator,T=k&&k.plugins;return[+new Date,e,T,e.screen,M(t)]}}function M(w){return String.fromCharCode.apply(0,w)}if(x(r.random(),t),n.exports){n.exports=h;try{f=Sa}catch{}}else r["seed"+l]=h})(typeof self<"u"?self:se,[],Math)})(xa);var Ea=Qe,_a=Ke,Ta=Ye,Ca=et,Aa=tt,La=nt,ae=rt;ae.alea=Ea;ae.xor128=_a;ae.xorwow=Ta;ae.xorshift7=Ca;ae.xor4096=Aa;ae.tychei=La;var Un=ae;const Vn=Date.now().toString();let ye=Un(Vn,{state:!0});const Ge=hn(()=>{$("config.random.privateState",ye.state())});function za(){ie({"config.random.privateState":null,"config.random.seed":Vn}),window.addEventListener("state-change",({detail:n})=>{n.name==="config.random.seed"&&(ye=Un(n.value,{state:!0}))}),_("random.coinFlip",()=>{const n=ye();return Ge(),n>.5}),_("random.fraction",()=>{const n=ye();return Ge(),n});for(const n of[4,5,6,8,10,12,20,25,50,100,1e3])_(`random.d${n}`,()=>{const e=1+Math.round(ye()*(n-1));return Ge(),e})}function Pa(){_("story.name",ht)}function Oa(){ua(),fa(),ha(),pa(),za(),Pa()}function Ia(){const n=document.querySelectorAll("tw-storydata");if(n.length===0){console.warn("No <tw-storydata> element was found in HTML.");return}n.length>1&&console.warn("Multiple <tw-storydata> elements were found in HTML. Using the first."),ln(n[0]),aa(),gn(),Object.assign(window,{go:xn,restart:vn}),Qn(),ie(Gn),oa(),Hs(),Fn(),Oa(),ca(),cn(),p("config.testing")?_s():bn()&&yn(),dn(),un()}Ia();
</script><style>
:root{--font-monospace: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace;--font-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif}*{box-sizing:border-box}body{margin:0;padding:0}code{font-family:var(--font-monospace)}img{max-width:100%;height:auto}input[type=text],select{padding:.25em}noscript{align-items:center;background:black;color:#fff;display:flex;height:100vh;font-family:var(--font-system);justify-content:center;width:100vw}pre{font-family:var(--font-monospace);white-space:pre-wrap}tw-storydata{display:none}body.backstage-visible #backdrop{max-width:67vw}backstage-sidebar{--backstage-grid: 10px;background:var(--color-gray-2);border-left:1px solid var(--color-gray-3);bottom:0;color:var(--color-gray-5);display:block;font-family:var(--font-system);font-size:13px;position:fixed;top:0;right:0;width:33vw}backstage-sidebar .content{overflow:auto;padding:var(--backstage-grid);height:100%;width:100%}backstage-sidebar[collapsed]{width:0}backstage-sidebar button[data-toggle-collapsed]{background:var(--color-gray-2);border-bottom:1px solid var(--color-gray-3);border-left:1px solid var(--color-gray-3);border-right:none;border-top:1px solid var(--color-gray-3);border-radius:60px 0 0 60px;color:var(--color-gray-5);font-size:20px;height:60px;min-width:30px;padding:0;position:absolute;top:50%;left:-30px;transform:translateY(-50%);width:30px}backstage-sidebar button[data-toggle-collapsed]:hover{background:var(--color-gray-1);cursor:pointer}backstage-sidebar button{background:var(--color-gray-1);border:1px solid var(--color-gray-3);border-radius:var(--backstage-grid);color:var(--color-gray-5);cursor:pointer;font-size:100%;min-width:40px;padding:calc(var(--backstage-grid) / 2)}backstage-sidebar button:disabled{color:var(--color-gray-3);cursor:not-allowed}backstage-sidebar button:not(:disabled):hover{background:white}backstage-sidebar details summary{cursor:pointer;font-size:110%;font-variant:small-caps;padding:calc(var(--backstage-grid) / 2) 0;text-transform:lowercase}backstage-sidebar input,backstage-sidebar textarea{background:var(--color-gray-1);border:1px solid var(--color-gray-3);color:var(--color-gray-5);font:100% var(--font-system);padding:calc(var(--backstage-grid) / 2)}backstage-sidebar table{max-width:100%;width:100%}backstage-history-table button{display:block;width:100%}backstage-history-table table{border-collapse:collapse;margin:var(--backstage-grid) 0;table-layout:fixed}backstage-history-table thead{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px}backstage-history-table tr:not(:last-child){border-bottom:1px solid var(--oc-gray-8)}backstage-history-table td{text-overflow:ellipsis;overflow-wrap:break-word;padding:calc(var(--backstage-grid) / 2);vertical-align:top}backstage-history-table td:first-child{border-right:1px solid var(--oc-gray-8);width:45%}backstage-notes label{display:block;margin-top:var(--backstage-grid)}backstage-notes textarea{height:10em;margin:var(--backstage-grid) 0;width:100%}backstage-notes .actions{display:flex;gap:var(--backstage-grid)}backstage-notes .actions button{flex-grow:1}backstage-state-snapshots button[data-add-snapshot]{width:100%}backstage-state-snapshots .snapshot-button{display:flex;margin-bottom:var(--backstage-grid)}backstage-state-snapshots .snapshot-button [data-restore]{flex-grow:1;border-right-color:var(--oc-gray-4);border-bottom-right-radius:0;border-top-right-radius:0}backstage-state-snapshots .snapshot-button [data-remove]{border-left:none;border-bottom-left-radius:0;border-top-left-radius:0}backstage-state-variables .variables{display:flex;flex-direction:column;gap:calc(var(--backstage-grid) / 2);margin:calc(var(--backstage-grid)) 0}backstage-state-variables .variables label{align-items:center;display:grid;gap:var(--backstage-grid);grid-template-columns:15em 1fr}backstage-style-config textarea{height:10em;margin:var(--backstage-grid) 0;width:100%}backstage-style-group label{display:grid;gap:.25em;margin-bottom:.5em}backstage-style-theme p{margin:0 0 .5em}backstage-tab{border-left:1px solid var(--color-gray-3);cursor:pointer;flex-grow:1;padding:calc(var(--backstage-grid) / 2);text-align:center}backstage-tab:hover{background:white}backstage-tab:first-child{border-left:none;border-bottom-left-radius:var(--backstage-grid);border-top-left-radius:var(--backstage-grid)}backstage-tab:last-child{border-bottom-right-radius:var(--backstage-grid);border-top-right-radius:var(--backstage-grid)}backstage-tab[aria-selected=true]{background-color:#fff;cursor:default;font-weight:700}backstage-tab-panel{display:block;padding:calc(var(--backstage-grid) / 2) 0}backstage-tab-panel[hidden]{display:none}backstage-tabs{background:var(--color-gray-1);border:1px solid var(--color-gray-3);border-radius:var(--backstage-grid);display:flex}backstage-variable-input input{display:inline-block;width:100%}#backdrop{align-items:center;background-color:var(--backdrop-color);display:flex;justify-content:center;min-height:100vh}#page>header,#page>footer{display:flex;justify-content:space-between}#page>header[hidden],#page>footer[hidden]{border:none}#page>header .center,#page>footer .center{text-align:center}#page>header .right,#page>footer .right{text-align:right}#page>footer{background-color:var(--page-footer-background-color);border-top:var(--page-footer-border);color:var(--page-footer-color);font-family:var(--page-footer-font-family);font-size:var(--page-footer-font-size);font-style:var(--page-footer-font-style);font-variant:var(--page-footer-font-variant);font-weight:var(--page-footer-font-weight);text-decoration:var(--page-footer-text-decoration);text-decoration-color:var(--page-footer-text-decoration-color);text-transform:var(--page-footer-text-transform)}#page>footer .link{background-color:var(--page-footer-link-background-color);color:var(--page-footer-link-color);font-family:var(--page-footer-link-font-family);font-size:var(--page-footer-link-font-size);font-style:var(--page-footer-link-font-style);font-variant:var(--page-footer-link-font-variant);font-weight:var(--page-footer-link-font-weight);text-decoration:var(--page-footer-link-text-decoration);text-decoration-color:var(--page-footer-link-text-decoration-color);text-transform:var(--page-footer-link-text-transform)}#page>footer .link:hover{background-color:var(--page-footer-link-active-background-color);color:var(--page-footer-link-active-color);font-family:var(--page-footer-link-active-font-family);font-size:var(--page-footer-link-active-font-size);font-style:var(--page-footer-link-active-font-style);font-variant:var(--page-footer-link-active-font-variant);font-weight:var(--page-footer-link-active-font-weight);text-decoration:var(--page-footer-link-active-text-decoration);text-decoration-color:var( --page-footer-link-active-text-decoration-color );text-transform:var(--page-footer-link-active-text-transform)}#page>header{background-color:var(--page-header-background-color);border-bottom:var(--page-header-border);color:var(--page-header-color);font-family:var(--page-header-font-family);font-size:var(--page-header-font-size);font-style:var(--page-header-font-style);font-variant:var(--page-header-font-variant);font-weight:var(--page-header-font-weight);text-decoration:var(--page-header-text-decoration);text-decoration-color:var(--page-header-text-decoration-color);text-transform:var(--page-header-text-transform)}#page>header .link{background-color:var(--page-header-link-background-color);color:var(--page-header-link-color);font-family:var(--page-header-link-font-family);font-size:var(--page-header-link-font-size);font-style:var(--page-header-link-font-style);font-variant:var(--page-header-link-font-variant);font-weight:var(--page-header-link-font-weight);text-decoration:var(--page-header-link-text-decoration);text-decoration-color:var(--page-header-link-text-decoration-color);text-transform:var(--page-header-link-text-transform)}#page>header .link:hover{background-color:var(--page-header-link-active-background-color);color:var(--page-header-link-active-color);font-family:var(--page-header-link-active-font-family);font-size:var(--page-header-link-active-font-size);font-style:var(--page-header-link-active-font-style);font-variant:var(--page-header-link-active-font-variant);font-weight:var(--page-header-link-active-font-weight);text-decoration:var(--page-header-link-active-text-decoration);text-decoration-color:var( --page-header-link-active-text-decoration-color );text-transform:var(--page-header-link-active-text-transform)}#page{background-color:var(--page-background-color);border:var(--page-border);border-radius:3px;box-shadow:var(--page-box-shadow);color:var(--page-color);display:grid;font-family:var(--page-font-family);font-size:var(--page-font-size);font-style:var(--page-font-style);font-variant:var(--page-font-variant);font-weight:var(--page-font-weight);grid-template-areas:"header" "body" "footer";grid-template-rows:min-content 1fr min-content;line-height:150%;margin:1em;max-width:calc(100vw - 2em);min-height:calc(100vh - 2em);padding:2em 4em;position:relative;text-decoration:var(--page-text-decoration);text-transform:var(--page-text-transform);width:40em}#page hr{border:none}#page hr:after{content:"* \a0* \a0*";display:block;text-align:center}#page page-skip-indicator{position:absolute;bottom:0;right:0}#page .fork p{display:flex;flex-direction:column;width:100%}#page .fork p .link{display:block;flex-grow:1;text-align:center;padding:.5em}#page .fork p .link+.link{border-top:var(--page-fork-divider-size) var(--page-fork-divider-style) var(--page-fork-divider-color)}#page .link{background-color:var(--page-link-background-color);color:var(--page-link-color);cursor:pointer;font-family:var(--page-link-font-family);font-size:var(--page-link-font-size);font-style:var(--page-link-font-style);font-variant:var(--page-link-font-variant);font-weight:var(--page-link-font-weight);text-decoration:var(--page-link-text-decoration);text-decoration-color:var(--page-link-text-decoration-color);text-transform:var(--page-link-text-transform)}#page .link:hover{background-color:var(--page-link-active-background-color);color:var(--page-link-active-color);font-family:var(--page-link-font-family);font-size:var(--page-link-font-size);font-style:var(--page-link-font-style);font-variant:var(--page-link-font-variant);font-weight:var(--page-link-font-weight);text-decoration:var(--page-link-text-decoration);text-decoration-color:var(--page-link-text-decoration-color);text-transform:var(--page-link-text-transform)}#page .small-caps{font-variant:small-caps;text-transform:lowercase}#page>footer{grid-area:footer}#page>header{grid-area:header}#page>article{display:flex;flex-direction:column;flex-grow:1;grid-area:body;justify-content:var(--page-current-passage-justify-content)}#page>error-handler{grid-area:body;position:relative;z-index:2}@media screen and (max-width: 768px){#page{margin:0;width:100vw;max-width:100vw;min-height:100vh;padding:1em}}.fade-in{opacity:0;animation:fade-in 1s ease-out forwards}.fade-out{animation:fade-in 1s ease-out reverse forwards}@keyframes fade-in{0%{opacity:0}to{opacity:1}}error-handler{display:none}error-handler.active{background:var(--color-red-1);color:var(--color-red-5);display:block;font-family:var(--font-system);font-size:max(90%,16px);padding:.5em;border-left:4px solid var(--color-red-2);position:relative;margin:1em 0;overflow:auto}error-handler pre{font-size:90%}error-handler a{color:var(--color-red-4)}error-handler button{appearance:none;background:none;border:none;color:var(--color-red-4);cursor:pointer;padding:0}external-fonts{display:none}page-skip{display:block}page-skip-indicator{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3e%09%3crect width='38' height='72' x='31' y='14' fill='%23fff' rx='4' /%3e%09%3ccircle cx='50' cy='50' r='28' fill='%23fff' /%3e%09%3crect%09%09width='30'%09%09height='64'%09%09x='35'%09%09y='18'%09%09fill='%23fff'%09%09stroke='%23000'%09%09stroke-width='2'%09%09rx='4'%09/%3e%09%3ccircle%09%09cx='50'%09%09cy='50'%09%09r='20'%09%09fill='%23fff'%09%09stroke='%23000'%09%09stroke-width='2'%09/%3e%09%3cpath%09%09stroke='%23000'%09%09stroke-linecap='round'%09%09stroke-width='2'%09%09d='M50 50V37'%09%3e%09%09%3canimateTransform%09%09%09attributeName='transform'%09%09%09begin='0s'%09%09%09dur='20s'%09%09%09from='0 50 50'%09%09%09repeatCount='indefinite'%09%09%09to='360 50 50'%09%09%09type='rotate'%09%09/%3e%09%3c/path%3e%09%3cpath%09%09stroke='%23000'%09%09stroke-linecap='round'%09%09stroke-width='2'%09%09d='M50 50h-8'%09%3e%09%09%3canimateTransform%09%09%09attributeName='transform'%09%09%09begin='0s'%09%09%09dur='120s'%09%09%09from='0 50 50'%09%09%09repeatCount='indefinite'%09%09%09to='360 50 50'%09%09%09type='rotate'%09%09/%3e%09%3c/path%3e%3c/svg%3e");background-size:contain;display:block;height:50px;opacity:0;pointer-events:none;transition:opacity .3s;width:50px}page-skip-indicator[active]{opacity:1}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--page-transition-duration)}page-transition{display:block}:root{--oc-white: #ffffff;--oc-white-rgb: 255, 255, 255;--oc-black: #000000;--oc-black-rgb: 0, 0, 0;--oc-gray-0: #f8f9fa;--oc-gray-0-rgb: 248, 249, 250;--oc-gray-1: #f1f3f5;--oc-gray-1-rgb: 241, 243, 245;--oc-gray-2: #e9ecef;--oc-gray-2-rgb: 233, 236, 239;--oc-gray-3: #dee2e6;--oc-gray-3-rgb: 222, 226, 230;--oc-gray-4: #ced4da;--oc-gray-4-rgb: 206, 212, 218;--oc-gray-5: #adb5bd;--oc-gray-5-rgb: 173, 181, 189;--oc-gray-6: #868e96;--oc-gray-6-rgb: 134, 142, 150;--oc-gray-7: #495057;--oc-gray-7-rgb: 73, 80, 87;--oc-gray-8: #343a40;--oc-gray-8-rgb: 52, 58, 64;--oc-gray-9: #212529;--oc-gray-9-rgb: 33, 37, 41;--oc-red-0: #fff5f5;--oc-red-0-rgb: 255, 245, 245;--oc-red-1: #ffe3e3;--oc-red-1-rgb: 255, 227, 227;--oc-red-2: #ffc9c9;--oc-red-2-rgb: 255, 201, 201;--oc-red-3: #ffa8a8;--oc-red-3-rgb: 255, 168, 168;--oc-red-4: #ff8787;--oc-red-4-rgb: 255, 135, 135;--oc-red-5: #ff6b6b;--oc-red-5-rgb: 255, 107, 107;--oc-red-6: #fa5252;--oc-red-6-rgb: 250, 82, 82;--oc-red-7: #f03e3e;--oc-red-7-rgb: 240, 62, 62;--oc-red-8: #e03131;--oc-red-8-rgb: 224, 49, 49;--oc-red-9: #c92a2a;--oc-red-9-rgb: 201, 42, 42;--oc-pink-0: #fff0f6;--oc-pink-0-rgb: 255, 240, 246;--oc-pink-1: #ffdeeb;--oc-pink-1-rgb: 255, 222, 235;--oc-pink-2: #fcc2d7;--oc-pink-2-rgb: 252, 194, 215;--oc-pink-3: #faa2c1;--oc-pink-3-rgb: 250, 162, 193;--oc-pink-4: #f783ac;--oc-pink-4-rgb: 247, 131, 172;--oc-pink-5: #f06595;--oc-pink-5-rgb: 240, 101, 149;--oc-pink-6: #e64980;--oc-pink-6-rgb: 230, 73, 128;--oc-pink-7: #d6336c;--oc-pink-7-rgb: 214, 51, 108;--oc-pink-8: #c2255c;--oc-pink-8-rgb: 194, 37, 92;--oc-pink-9: #a61e4d;--oc-pink-9-rgb: 166, 30, 77;--oc-grape-0: #f8f0fc;--oc-grape-0-rgb: 248, 240, 252;--oc-grape-1: #f3d9fa;--oc-grape-1-rgb: 243, 217, 250;--oc-grape-2: #eebefa;--oc-grape-2-rgb: 238, 190, 250;--oc-grape-3: #e599f7;--oc-grape-3-rgb: 229, 153, 247;--oc-grape-4: #da77f2;--oc-grape-4-rgb: 218, 119, 242;--oc-grape-5: #cc5de8;--oc-grape-5-rgb: 204, 93, 232;--oc-grape-6: #be4bdb;--oc-grape-6-rgb: 190, 75, 219;--oc-grape-7: #ae3ec9;--oc-grape-7-rgb: 174, 62, 201;--oc-grape-8: #9c36b5;--oc-grape-8-rgb: 156, 54, 181;--oc-grape-9: #862e9c;--oc-grape-9-rgb: 134, 46, 156;--oc-violet-0: #f3f0ff;--oc-violet-0-rgb: 243, 240, 255;--oc-violet-1: #e5dbff;--oc-violet-1-rgb: 229, 219, 255;--oc-violet-2: #d0bfff;--oc-violet-2-rgb: 208, 191, 255;--oc-violet-3: #b197fc;--oc-violet-3-rgb: 177, 151, 252;--oc-violet-4: #9775fa;--oc-violet-4-rgb: 151, 117, 250;--oc-violet-5: #845ef7;--oc-violet-5-rgb: 132, 94, 247;--oc-violet-6: #7950f2;--oc-violet-6-rgb: 121, 80, 242;--oc-violet-7: #7048e8;--oc-violet-7-rgb: 112, 72, 232;--oc-violet-8: #6741d9;--oc-violet-8-rgb: 103, 65, 217;--oc-violet-9: #5f3dc4;--oc-violet-9-rgb: 95, 61, 196;--oc-indigo-0: #edf2ff;--oc-indigo-0-rgb: 237, 242, 255;--oc-indigo-1: #dbe4ff;--oc-indigo-1-rgb: 219, 228, 255;--oc-indigo-2: #bac8ff;--oc-indigo-2-rgb: 186, 200, 255;--oc-indigo-3: #91a7ff;--oc-indigo-3-rgb: 145, 167, 255;--oc-indigo-4: #748ffc;--oc-indigo-4-rgb: 116, 143, 252;--oc-indigo-5: #5c7cfa;--oc-indigo-5-rgb: 92, 124, 250;--oc-indigo-6: #4c6ef5;--oc-indigo-6-rgb: 76, 110, 245;--oc-indigo-7: #4263eb;--oc-indigo-7-rgb: 66, 99, 235;--oc-indigo-8: #3b5bdb;--oc-indigo-8-rgb: 59, 91, 219;--oc-indigo-9: #364fc7;--oc-indigo-9-rgb: 54, 79, 199;--oc-blue-0: #e7f5ff;--oc-blue-0-rgb: 231, 245, 255;--oc-blue-1: #d0ebff;--oc-blue-1-rgb: 208, 235, 255;--oc-blue-2: #a5d8ff;--oc-blue-2-rgb: 165, 216, 255;--oc-blue-3: #74c0fc;--oc-blue-3-rgb: 116, 192, 252;--oc-blue-4: #4dabf7;--oc-blue-4-rgb: 77, 171, 247;--oc-blue-5: #339af0;--oc-blue-5-rgb: 51, 154, 240;--oc-blue-6: #228be6;--oc-blue-6-rgb: 34, 139, 230;--oc-blue-7: #1c7ed6;--oc-blue-7-rgb: 28, 126, 214;--oc-blue-8: #1971c2;--oc-blue-8-rgb: 25, 113, 194;--oc-blue-9: #1864ab;--oc-blue-9-rgb: 24, 100, 171;--oc-cyan-0: #e3fafc;--oc-cyan-0-rgb: 227, 250, 252;--oc-cyan-1: #c5f6fa;--oc-cyan-1-rgb: 197, 246, 250;--oc-cyan-2: #99e9f2;--oc-cyan-2-rgb: 153, 233, 242;--oc-cyan-3: #66d9e8;--oc-cyan-3-rgb: 102, 217, 232;--oc-cyan-4: #3bc9db;--oc-cyan-4-rgb: 59, 201, 219;--oc-cyan-5: #22b8cf;--oc-cyan-5-rgb: 34, 184, 207;--oc-cyan-6: #15aabf;--oc-cyan-6-rgb: 21, 170, 191;--oc-cyan-7: #1098ad;--oc-cyan-7-rgb: 16, 152, 173;--oc-cyan-8: #0c8599;--oc-cyan-8-rgb: 12, 133, 153;--oc-cyan-9: #0b7285;--oc-cyan-9-rgb: 11, 114, 133;--oc-teal-0: #e6fcf5;--oc-teal-0-rgb: 230, 252, 245;--oc-teal-1: #c3fae8;--oc-teal-1-rgb: 195, 250, 232;--oc-teal-2: #96f2d7;--oc-teal-2-rgb: 150, 242, 215;--oc-teal-3: #63e6be;--oc-teal-3-rgb: 99, 230, 190;--oc-teal-4: #38d9a9;--oc-teal-4-rgb: 56, 217, 169;--oc-teal-5: #20c997;--oc-teal-5-rgb: 32, 201, 151;--oc-teal-6: #12b886;--oc-teal-6-rgb: 18, 184, 134;--oc-teal-7: #0ca678;--oc-teal-7-rgb: 12, 166, 120;--oc-teal-8: #099268;--oc-teal-8-rgb: 9, 146, 104;--oc-teal-9: #087f5b;--oc-teal-9-rgb: 8, 127, 91;--oc-green-0: #ebfbee;--oc-green-0-rgb: 235, 251, 238;--oc-green-1: #d3f9d8;--oc-green-1-rgb: 211, 249, 216;--oc-green-2: #b2f2bb;--oc-green-2-rgb: 178, 242, 187;--oc-green-3: #8ce99a;--oc-green-3-rgb: 140, 233, 154;--oc-green-4: #69db7c;--oc-green-4-rgb: 105, 219, 124;--oc-green-5: #51cf66;--oc-green-5-rgb: 81, 207, 102;--oc-green-6: #40c057;--oc-green-6-rgb: 64, 192, 87;--oc-green-7: #37b24d;--oc-green-7-rgb: 55, 178, 77;--oc-green-8: #2f9e44;--oc-green-8-rgb: 47, 158, 68;--oc-green-9: #2b8a3e;--oc-green-9-rgb: 43, 138, 62;--oc-lime-0: #f4fce3;--oc-lime-0-rgb: 244, 252, 227;--oc-lime-1: #e9fac8;--oc-lime-1-rgb: 233, 250, 200;--oc-lime-2: #d8f5a2;--oc-lime-2-rgb: 216, 245, 162;--oc-lime-3: #c0eb75;--oc-lime-3-rgb: 192, 235, 117;--oc-lime-4: #a9e34b;--oc-lime-4-rgb: 169, 227, 75;--oc-lime-5: #94d82d;--oc-lime-5-rgb: 148, 216, 45;--oc-lime-6: #82c91e;--oc-lime-6-rgb: 130, 201, 30;--oc-lime-7: #74b816;--oc-lime-7-rgb: 116, 184, 22;--oc-lime-8: #66a80f;--oc-lime-8-rgb: 102, 168, 15;--oc-lime-9: #5c940d;--oc-lime-9-rgb: 92, 148, 13;--oc-yellow-0: #fff9db;--oc-yellow-0-rgb: 255, 249, 219;--oc-yellow-1: #fff3bf;--oc-yellow-1-rgb: 255, 243, 191;--oc-yellow-2: #ffec99;--oc-yellow-2-rgb: 255, 236, 153;--oc-yellow-3: #ffe066;--oc-yellow-3-rgb: 255, 224, 102;--oc-yellow-4: #ffd43b;--oc-yellow-4-rgb: 255, 212, 59;--oc-yellow-5: #fcc419;--oc-yellow-5-rgb: 252, 196, 25;--oc-yellow-6: #fab005;--oc-yellow-6-rgb: 250, 176, 5;--oc-yellow-7: #f59f00;--oc-yellow-7-rgb: 245, 159, 0;--oc-yellow-8: #f08c00;--oc-yellow-8-rgb: 240, 140, 0;--oc-yellow-9: #e67700;--oc-yellow-9-rgb: 230, 119, 0;--oc-orange-0: #fff4e6;--oc-orange-0-rgb: 255, 244, 230;--oc-orange-1: #ffe8cc;--oc-orange-1-rgb: 255, 232, 204;--oc-orange-2: #ffd8a8;--oc-orange-2-rgb: 255, 216, 168;--oc-orange-3: #ffc078;--oc-orange-3-rgb: 255, 192, 120;--oc-orange-4: #ffa94d;--oc-orange-4-rgb: 255, 169, 77;--oc-orange-5: #ff922b;--oc-orange-5-rgb: 255, 146, 43;--oc-orange-6: #fd7e14;--oc-orange-6-rgb: 253, 126, 20;--oc-orange-7: #f76707;--oc-orange-7-rgb: 247, 103, 7;--oc-orange-8: #e8590c;--oc-orange-8-rgb: 232, 89, 12;--oc-orange-9: #d9480f;--oc-orange-9-rgb: 217, 72, 15}/*! reasonable colors v0.4.0 | MIT License | https://github.com/matthewhowell/reasonable-colors */:root{--color-gray-1: #f6f6f6;--color-gray-2: #e2e2e2;--color-gray-3: #8b8b8b;--color-gray-4: #6f6f6f;--color-gray-5: #3e3e3e;--color-gray-6: #222222;--color-rose-1: #fff7f9;--color-rose-2: #ffdce5;--color-rose-3: #ff3b8d;--color-rose-4: #db0072;--color-rose-5: #800040;--color-rose-6: #4c0023;--color-raspberry-1: #fff8f8;--color-raspberry-2: #ffdddf;--color-raspberry-3: #ff426c;--color-raspberry-4: #de0051;--color-raspberry-5: #82002c;--color-raspberry-6: #510018;--color-red-1: #fff8f6;--color-red-2: #ffddd8;--color-red-3: #ff4647;--color-red-4: #e0002b;--color-red-5: #830014;--color-red-6: #530003;--color-orange-1: #fff8f5;--color-orange-2: #ffded1;--color-orange-3: #fd4d00;--color-orange-4: #cd3c00;--color-orange-5: #752100;--color-orange-6: #401600;--color-cinnamon-1: #fff8f3;--color-cinnamon-2: #ffdfc6;--color-cinnamon-3: #d57300;--color-cinnamon-4: #ac5c00;--color-cinnamon-5: #633300;--color-cinnamon-6: #371d00;--color-amber-1: #fff8ef;--color-amber-2: #ffe0b2;--color-amber-3: #b98300;--color-amber-4: #926700;--color-amber-5: #523800;--color-amber-6: #302100;--color-yellow-1: #fff9e5;--color-yellow-2: #ffe53e;--color-yellow-3: #9c8b00;--color-yellow-4: #7d6f00;--color-yellow-5: #463d00;--color-yellow-6: #292300;--color-lime-1: #f7ffac;--color-lime-2: #d5f200;--color-lime-3: #819300;--color-lime-4: #677600;--color-lime-5: #394100;--color-lime-6: #222600;--color-chartreuse-1: #e5ffc3;--color-chartreuse-2: #98fb00;--color-chartreuse-3: #5c9b00;--color-chartreuse-4: #497c00;--color-chartreuse-5: #264500;--color-chartreuse-6: #182600;--color-green-1: #e0ffd9;--color-green-2: #72ff6c;--color-green-3: #00a21f;--color-green-4: #008217;--color-green-5: #004908;--color-green-6: #062800;--color-emerald-1: #dcffe6;--color-emerald-2: #5dffa2;--color-emerald-3: #00a05a;--color-emerald-4: #008147;--color-emerald-5: #004825;--color-emerald-6: #002812;--color-aquamarine-1: #daffef;--color-aquamarine-2: #42ffc6;--color-aquamarine-3: #009f78;--color-aquamarine-4: #007f5f;--color-aquamarine-5: #004734;--color-aquamarine-6: #00281b;--color-teal-1: #d7fff7;--color-teal-2: #00ffe4;--color-teal-3: #009e8c;--color-teal-4: #007c6e;--color-teal-5: #00443c;--color-teal-6: #002722;--color-cyan-1: #c4fffe;--color-cyan-2: #00fafb;--color-cyan-3: #00999a;--color-cyan-4: #007a7b;--color-cyan-5: #004344;--color-cyan-6: #002525;--color-powder-1: #dafaff;--color-powder-2: #8df0ff;--color-powder-3: #0098a9;--color-powder-4: #007987;--color-powder-5: #004048;--color-powder-6: #002227;--color-sky-1: #e3f7ff;--color-sky-2: #aee9ff;--color-sky-3: #0094b4;--color-sky-4: #007590;--color-sky-5: #00404f;--color-sky-6: #001f28;--color-cerulean-1: #e8f6ff;--color-cerulean-2: #b9e3ff;--color-cerulean-3: #0092c5;--color-cerulean-4: #00749d;--color-cerulean-5: #003c54;--color-cerulean-6: #001d2a;--color-azure-1: #e8f2ff;--color-azure-2: #c6e0ff;--color-azure-3: #008fdb;--color-azure-4: #0071af;--color-azure-5: #003b5e;--color-azure-6: #001c30;--color-blue-1: #f0f4ff;--color-blue-2: #d4e0ff;--color-blue-3: #0089fc;--color-blue-4: #006dca;--color-blue-5: #00386d;--color-blue-6: #001a39;--color-indigo-1: #f3f3ff;--color-indigo-2: #deddff;--color-indigo-3: #657eff;--color-indigo-4: #0061fc;--color-indigo-5: #00328a;--color-indigo-6: #001649;--color-violet-1: #f7f1ff;--color-violet-2: #e8daff;--color-violet-3: #9b70ff;--color-violet-4: #794aff;--color-violet-5: #2d0fbf;--color-violet-6: #0b0074;--color-purple-1: #fdf4ff;--color-purple-2: #f7d9ff;--color-purple-3: #d150ff;--color-purple-4: #b01fe3;--color-purple-5: #660087;--color-purple-6: #3a004f;--color-magenta-1: #fff3fc;--color-magenta-2: #ffd7f6;--color-magenta-3: #f911e0;--color-magenta-4: #ca00b6;--color-magenta-5: #740068;--color-magenta-6: #44003c;--color-pink-1: #fff7fb;--color-pink-2: #ffdcec;--color-pink-3: #ff2fb2;--color-pink-4: #d2008f;--color-pink-5: #790051;--color-pink-6: #4b0030}warning-list{background:var(--color-yellow-1);border-left:4px solid var(--color-yellow-2);color:var(--color-yellow-4);display:block;font-family:var(--font-system);padding:.5em}warning-list[hidden]{display:none}warning-list ul{list-style-type:none;margin:0;padding-left:0}inline-button{cursor:pointer}
</style></head><body><state-css-variables><state-dark-theme-css-overrides><div id="backdrop"><page-skip><page-transition><div id="page" aria-live="polite"><header hidden></header><article></article><warning-list></warning-list><footer hidden></footer><error-handler></error-handler><page-skip-indicator></page-skip-indicator></div></page-transition></page-skip></div></state-dark-theme-css-overrides></state-css-variables><external-fonts></external-fonts><noscript>This requires JavaScript.</noscript></body><!-- UUID://04ADD788-392A-49B0-8536-7A7ADAEA4D66// --><tw-storydata name="Chapbook: Tracking Endgame Stats" startnode="1" creator="Tweego" creator-version="2.1.1" ifid="04ADD788-392A-49B0-8536-7A7ADAEA4D66" zoom="1" format="Chapbook" format-version="2.3.0" options="" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript">// Function to load GoatCounter script if missing
function loadGoatCounter(callback) {
if (window.goatcounter) {
callback(); // Already loaded, just run the callback
return;
}
let script = document.createElement("script");
script.src = "https://ronynn.goatcounter.com/count.js";
script.async = true;
script.onload = callback; // Call the function once script loads
script.onerror = () => {
console.error("Failed to load GoatCounter.");
alert("Error: Could not load tracking.");
};
document.head.appendChild(script);
}
// Function to send stats
window.sendStats = function() {
loadGoatCounter(() => {
if (!window.goatcounter) {
console.error("GoatCounter script still not available.");
alert("Error: Tracking not initialized.");
return;
}
// Get tracked variables
let score = engine.state.get("score");
let timePlayed = engine.state.get("timePlayed");
let enemiesDefeated = engine.state.get("enemiesDefeated");
let secretsFound = engine.state.get("secretsFound");
// Send event using GoatCounter's `count()` function
window.goatcounter.count({
path: "endgame-stats",
title: "Game End Stats",
event: true,
referrer: "twine-game",
data: {
score: score,
timePlayed: timePlayed,
enemiesDefeated: enemiesDefeated,
secretsFound: secretsFound
}
});
console.log("Stats sent to GoatCounter.");
alert("Game Over! Stats sent.");
});
};</script><tw-passagedata pid="1" name="Start" tags="" position="100,100" size="100,100">score: 120
timePlayed: 35
enemiesDefeated: 1
secretsFound: 3
--
<script data-goatcounter="https://ronynn.goatcounter.com/count" async src="https://gc.zgo.at/count.js"></script>
When you're ready, click below to finish the game and send your stats.
<button class="endgame-button" onclick="sendStats()">Finish Game</button></tw-passagedata></tw-storydata></html>