{"version":3,"file":"index.cjs","sources":["../../node_modules/prismjs/prism.js","../../node_modules/prismjs/components/prism-markdown.js","../../node_modules/prismjs/components/prism-markup.js","../../node_modules/prismjs/components/prism-bash.js","../../node_modules/prismjs/components/prism-javascript.js","../../node_modules/prismjs/components/prism-typescript.js","../../node_modules/prismjs/components/prism-json.js","../../node_modules/prismjs/components/prism-css.js","../../src/core/utils/syntax-highlighter/index.ts","../../src/core/plugin-base.ts","../../src/core/plugins/confetti/index.ts","../../src/core/plugins/controller/index.ts","../../src/core/plugins/progress-bar/index.ts","../../src/core/plugins/slide-number/index.ts","../../src/core/services/plugin-service.ts","../../src/core/services/theme-service.ts","../../src/core/styles/foundation/base.css?raw","../../src/core/styles/foundation/typography.css?raw","../../src/core/components/ui/center/center.css?raw","../../src/core/components/ui/overview/overview.css?raw","../../src/core/components/ui/help/help.css?raw","../../src/core/styles/foundation/responsive.css?raw","../../src/core/styles/foundation/text-content.css?raw","../../src/core/themes/dark.css?raw","../../src/core/themes/dracula.css?raw","../../src/core/themes/light.css?raw","../../src/core/themes/ocean.css?raw","../../src/core/themes/rainbow.css?raw","../../node_modules/marked/lib/marked.esm.js","../../src/core/utils/markdown-parser/index.ts","../../src/core/services/content-service.ts","../../src/core/services/navigation-service.ts","../../src/core/components/navigation/transition.ts","../../src/core/components/ui/help/help.ts","../../src/core/components/ui/overview/overview.ts","../../src/core/components/ui/center/center.ts","../../src/core/components/navigation/url-hash.ts","../../src/core/engine/mostage-engine.ts","../../src/core/services/config-service.ts"],"sourcesContent":["\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n\t// + LC_ALL, RANDOM, REPLY, SECONDS.\n\t// + make sure PS1..4 are here as they are not always set,\n\t// - some useless things.\n\tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n\n\tvar commandAfterHeredoc = {\n\t\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation', // this looks reasonably well in all themes\n\t\tinside: null // see below\n\t};\n\n\tvar insideString = {\n\t\t'bash': commandAfterHeredoc,\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': [\n\t\t\t// [0]: Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/\n\t\t\t\t\t],\n\t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t'operator': /--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [1]: Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [2]: Brace expansion\n\t\t\t{\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t\t'environment': {\n\t\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'constant'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:\\w+|[#?*!@$])/\n\t\t],\n\t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/.*/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function-name': [\n\t\t\t// a) function foo {\n\t\t\t// b) foo() {\n\t\t\t// c) function foo() {\n\t\t\t// but not “foo {”\n\t\t\t{\n\t\t\t\t// a) and c)\n\t\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// b)\n\t\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\t\talias: 'function'\n\t\t\t}\n\t\t],\n\t\t// Highlight variable names as variables in for and select beginnings.\n\t\t'for-or-select': {\n\t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight variable names as variables in the left-hand part\n\t\t// of assignments (“=” and “+=”).\n\t\t'assign-left': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\t\tinside: {\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(^|[\\\\s;|&]|[<>]\\\\()' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight parameter names as variables\n\t\t'parameter': {\n\t\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t// Here-document with quotes around the tag\n\t\t\t// → No expansion (so no “inside”).\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t\t}\n\t\t\t},\n\t\t\t// “Normal” string\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\t\tpattern: /(^|[^$\\\\])'[^']*'/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\t\tpattern: /\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'entity': insideString.entity\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': insideString.variable,\n\t\t'function': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t\t'builtin': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true,\n\t\t\t// Alias added to make those easier to distinguish from strings.\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'file-descriptor': {\n\t\t\tpattern: /\\B&\\d\\b/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'operator': {\n\t\t\t// Lots of redirections here, but not just that.\n\t\t\tpattern: /\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,\n\t\t\tinside: {\n\t\t\t\t'file-descriptor': {\n\t\t\t\t\tpattern: /^\\d/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n\t\t'number': {\n\t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tcommandAfterHeredoc.inside = Prism.languages.bash;\n\n\t/* Patterns in command substitution. */\n\tvar toBeCopied = [\n\t\t'comment',\n\t\t'function-name',\n\t\t'for-or-select',\n\t\t'assign-left',\n\t\t'parameter',\n\t\t'string',\n\t\t'environment',\n\t\t'function',\n\t\t'keyword',\n\t\t'builtin',\n\t\t'boolean',\n\t\t'file-descriptor',\n\t\t'operator',\n\t\t'punctuation',\n\t\t'number'\n\t];\n\tvar inside = insideString.variable[1].inside;\n\tfor (var i = 0; i < toBeCopied.length; i++) {\n\t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n\t}\n\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.shell = Prism.languages.bash;\n}(Prism));\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","import Prism from \"prismjs\";\nimport \"prismjs/themes/prism-tomorrow.css\";\nimport \"prismjs/components/prism-markdown\";\nimport \"prismjs/components/prism-markup\";\nimport \"prismjs/components/prism-bash\";\nimport \"prismjs/components/prism-javascript\";\nimport \"prismjs/components/prism-typescript\";\nimport \"prismjs/components/prism-json\";\nimport \"prismjs/components/prism-css\";\n\n/**\n * Syntax Highlighter Configuration\n */\nexport interface SyntaxHighlighterConfig {\n  /** Enable line numbers */\n  lineNumbers?: boolean;\n  /** Custom CSS class for container */\n  containerClass?: string;\n  /** Show language label */\n  showLanguage?: boolean;\n}\n\n/**\n * Professional Syntax Highlighter\n *\n * A clean, efficient syntax highlighter using Prism.js\n * Supports standard Markdown language names\n */\nexport class SyntaxHighlighter {\n  private static instance: SyntaxHighlighter;\n  private isInitialized = false;\n  private config: SyntaxHighlighterConfig;\n\n  private constructor(config: SyntaxHighlighterConfig = {}) {\n    this.config = {\n      lineNumbers: false,\n      containerClass: \"syntax-highlight\",\n      showLanguage: false,\n      ...config,\n    };\n  }\n\n  /**\n   * Get singleton instance\n   */\n  static getInstance(config?: SyntaxHighlighterConfig): SyntaxHighlighter {\n    if (!SyntaxHighlighter.instance) {\n      SyntaxHighlighter.instance = new SyntaxHighlighter(config);\n    }\n    return SyntaxHighlighter.instance;\n  }\n\n  /**\n   * Initialize the highlighter\n   */\n  initialize(): void {\n    if (this.isInitialized) return;\n    this.isInitialized = true;\n  }\n\n  /**\n   * Highlight code with specified language\n   */\n  highlightCode(code: string, language: string): string {\n    this.initialize();\n\n    if (!code?.trim() || !language?.trim()) {\n      return this.escapeHtml(code || \"\");\n    }\n\n    const normalizedLang = this.normalizeLanguage(language);\n\n    if (!this.isLanguageSupported(normalizedLang)) {\n      console.warn(`Language \"${normalizedLang}\" not supported`);\n      return this.escapeHtml(code);\n    }\n\n    try {\n      const highlighted = Prism.highlight(\n        code,\n        Prism.languages[normalizedLang],\n        normalizedLang\n      );\n      return this.wrapCode(highlighted, normalizedLang);\n    } catch (error) {\n      console.error(`Highlighting failed for \"${normalizedLang}\":`, error);\n      return this.escapeHtml(code);\n    }\n  }\n\n  /**\n   * Highlight all code blocks in container\n   */\n  highlightAll(container: HTMLElement): void {\n    this.initialize();\n\n    // Highlight code blocks\n    const codeBlocks = container.querySelectorAll<HTMLElement>(\n      'pre code[class*=\"language-\"]'\n    );\n    codeBlocks.forEach((block) => this.highlightCodeBlock(block));\n\n    // Highlight inline code elements\n    this.highlightInlineCode(container);\n  }\n\n  /**\n   * Highlight inline code elements with syntax highlighting\n   */\n  highlightInlineCode(container: HTMLElement): void {\n    const inlineCodeElements =\n      container.querySelectorAll<HTMLElement>(\"code:not(pre code)\");\n\n    inlineCodeElements.forEach((element) => {\n      const code = element.textContent || \"\";\n      if (!code.trim()) return;\n\n      // Check if element has a data-language attribute\n      const dataLang = element.getAttribute(\"data-language\") || \"\";\n      try {\n        const highlighted = this.highlightCode(code, dataLang);\n        element.innerHTML = highlighted;\n        element.classList.add(\"inline-code-highlighted\");\n      } catch (error) {\n        console.warn(`Failed to highlight inline code: ${code}`, error);\n      }\n    });\n  }\n\n  /**\n   * Update configuration\n   */\n  updateConfig(newConfig: Partial<SyntaxHighlighterConfig>): void {\n    this.config = { ...this.config, ...newConfig };\n  }\n\n  /**\n   * Get current configuration\n   */\n  getConfig(): SyntaxHighlighterConfig {\n    return { ...this.config };\n  }\n\n  /**\n   * Reset to default configuration\n   */\n  reset(): void {\n    this.config = {\n      lineNumbers: false,\n      containerClass: \"syntax-highlight\",\n      showLanguage: false,\n    };\n  }\n\n  // Private methods\n\n  private isLanguageSupported(language: string): boolean {\n    return language in Prism.languages;\n  }\n\n  private normalizeLanguage(language: string): string {\n    return language?.toLowerCase().trim() || \"text\";\n  }\n\n  private escapeHtml(text: string): string {\n    const htmlEscapes: Record<string, string> = {\n      \"&\": \"&amp;\",\n      \"<\": \"&lt;\",\n      \">\": \"&gt;\",\n      '\"': \"&quot;\",\n      \"'\": \"&#x27;\",\n    };\n\n    return text.replace(/[&<>\"']/g, (char) => htmlEscapes[char] || char);\n  }\n\n  private wrapCode(highlightedCode: string, language: string): string {\n    let wrapped = highlightedCode;\n\n    if (this.config.showLanguage) {\n      wrapped = `<div class=\"language-label\">${language}</div>${wrapped}`;\n    }\n\n    if (this.config.containerClass) {\n      wrapped = `<div class=\"${this.config.containerClass}\">${wrapped}</div>`;\n    }\n\n    return wrapped;\n  }\n\n  private highlightCodeBlock(block: HTMLElement): void {\n    const className = block.className;\n    const languageMatch = className.match(/language-(\\w+)/);\n\n    if (!languageMatch) return;\n\n    const language = languageMatch[1];\n    const code = block.textContent || \"\";\n\n    if (!code.trim()) return;\n\n    const highlighted = this.highlightCode(code, language);\n    block.innerHTML = highlighted;\n  }\n}\n\n// Export default instance for convenience\nexport const syntaxHighlighter = SyntaxHighlighter.getInstance();\n","import { MoPlugin } from \"./types\";\n\n/**\n * Plugin base class that provides common functionality for all plugins\n * Reduces code duplication across plugins\n */\nexport abstract class PluginBase implements MoPlugin {\n  abstract name: string;\n  protected styleElement: HTMLElement | null = null;\n  protected enabled: boolean = true;\n\n  abstract init(mo: any, config?: any): void;\n  abstract destroy(): void;\n\n  /**\n   * Check if plugin is enabled\n   */\n  isEnabled(): boolean {\n    return this.enabled;\n  }\n\n  /**\n   * Set plugin enabled state\n   */\n  setEnabled(enabled: boolean): void {\n    this.enabled = enabled;\n  }\n\n  /**\n   * Check if plugin is enabled and return early if not\n   * This should be called at the beginning of init() method\n   */\n  protected checkEnabled(): boolean {\n    if (!this.enabled) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Inject CSS styles into the document\n   * @param styles CSS content to inject\n   * @param dataAttribute Unique data attribute to prevent duplicate injection\n   */\n  protected injectStyles(styles: string, dataAttribute: string): void {\n    if (document.querySelector(`[data-mostage-${dataAttribute}]`)) return;\n\n    this.styleElement = document.createElement(\"style\");\n    this.styleElement.setAttribute(`data-mostage-${dataAttribute}`, \"true\");\n    this.styleElement.textContent = styles;\n    document.head.appendChild(this.styleElement);\n  }\n\n  /**\n   * Clean up injected styles\n   */\n  protected cleanupStyles(): void {\n    if (this.styleElement) {\n      this.styleElement.remove();\n      this.styleElement = null;\n    }\n  }\n\n  /**\n   * Clean up DOM elements\n   * @param elements Array of elements to remove\n   */\n  protected cleanupElements(...elements: (HTMLElement | null)[]): void {\n    elements.forEach((element) => {\n      if (element) {\n        element.remove();\n      }\n    });\n  }\n}\n","import { PluginBase } from \"@/core/plugin-base\";\nimport styles from \"./style.css?inline\";\n\nexport interface ConfettiConfig {\n  enabled?: boolean;\n  particleCount?: number;\n  colors?: string[];\n  size?: {\n    min?: number;\n    max?: number;\n  };\n  duration?: number;\n  delay?: number;\n}\n\nexport class ConfettiPlugin extends PluginBase {\n  name = \"Confetti\";\n  private confettiContainer: HTMLElement | null = null;\n  private mo: any;\n  private confettiSlides: Set<number> = new Set();\n  private config!: ConfettiConfig;\n  private container: HTMLElement | null = null;\n\n  init(mo: any, config: ConfettiConfig = {}): void {\n    this.container = mo.getContainer();\n    this.mo = mo;\n    this.config = {\n      enabled: true,\n      particleCount: 50,\n      colors: [\n        \"#ff6b6b\",\n        \"#4ecdc4\",\n        \"#45b7d1\",\n        \"#96ceb4\",\n        \"#feca57\",\n        \"#ff9ff3\",\n        \"#54a0ff\",\n      ],\n      size: {\n        min: 5,\n        max: 15,\n      },\n      duration: 4000,\n      delay: 50,\n      ...config,\n    };\n\n    // Check if plugin is enabled\n    if (!this.checkEnabled()) {\n      return;\n    }\n\n    this.injectStyles(styles, \"confetti-styles\");\n    this.createConfettiContainer();\n    this.parseSlidesForConfetti();\n    this.setupSlideListener();\n  }\n\n  private createConfettiContainer(): void {\n    this.confettiContainer = document.createElement(\"div\");\n    this.confettiContainer.className = \"mostage-confetti-container\";\n    this.confettiContainer.style.pointerEvents = \"none\";\n    if (this.container) {\n      this.container.appendChild(this.confettiContainer);\n    }\n  }\n\n  private parseSlidesForConfetti(): void {\n    const slides = this.mo.getSlides();\n    slides.forEach((slide: any, index: number) => {\n      // Check for confetti comments\n      if (slide.content.includes(\"<!-- confetti -->\")) {\n        this.confettiSlides.add(index);\n      }\n    });\n  }\n\n  private setupSlideListener(): void {\n    this.mo.on(\"slidechange\", (event: any) => {\n      const currentSlide = event.currentSlide;\n      if (this.confettiSlides.has(currentSlide)) {\n        // Wait for slide transition to complete, then add a small delay\n        const transitionDuration = this.mo.config.transition?.duration || 300;\n        const delay = transitionDuration + (this.config.delay || 100);\n\n        setTimeout(() => {\n          this.triggerConfetti();\n        }, delay);\n      }\n    });\n  }\n\n  private triggerConfetti(): void {\n    if (!this.confettiContainer || !this.config.enabled) return;\n\n    // Clear any existing confetti\n    this.confettiContainer.innerHTML = \"\";\n\n    // Create confetti particles\n    for (let i = 0; i < (this.config.particleCount || 50); i++) {\n      this.createConfettiParticle();\n    }\n\n    // Clean up after animation\n    setTimeout(() => {\n      if (this.confettiContainer) {\n        this.confettiContainer.innerHTML = \"\";\n      }\n    }, this.config.duration || 3000);\n  }\n\n  private createConfettiParticle(): void {\n    if (!this.confettiContainer) return;\n\n    const particle = document.createElement(\"div\");\n    particle.className = \"mostage-confetti-particle\";\n\n    // Random properties\n    const colors = this.config.colors || [\n      \"#ff6b6b\",\n      \"#4ecdc4\",\n      \"#45b7d1\",\n      \"#96ceb4\",\n      \"#feca57\",\n      \"#ff9ff3\",\n      \"#54a0ff\",\n    ];\n    const color = colors[Math.floor(Math.random() * colors.length)];\n    const minSize = this.config.size?.min || 5;\n    const maxSize = this.config.size?.max || 15;\n    const size = Math.random() * (maxSize - minSize) + minSize;\n    const containerWidth = this.container?.offsetWidth || window.innerWidth;\n    const containerHeight = this.container?.offsetHeight || window.innerHeight;\n    const startX = Math.random() * containerWidth;\n    const endX = startX + (Math.random() - 0.5) * 200; // -100 to +100 from start\n    const rotation = Math.random() * 360;\n    const rotationSpeed = (Math.random() - 0.5) * 720; // -360 to +360 degrees\n    const fallSpeed = Math.random() * 2 + 1; // 1-3 seconds\n\n    // Set particle properties\n    particle.style.backgroundColor = color;\n    particle.style.width = `${size}px`;\n    particle.style.height = `${size}px`;\n    particle.style.left = `${startX}px`;\n    particle.style.top = \"-10px\";\n    particle.style.transform = `rotate(${rotation}deg)`;\n    particle.style.animationDuration = `${fallSpeed}s`;\n\n    // Add particle to container\n    this.confettiContainer.appendChild(particle);\n\n    // Animate particle\n    requestAnimationFrame(() => {\n      particle.style.transform = `translate(${endX - startX}px, ${containerHeight + 20}px) rotate(${rotation + rotationSpeed}deg)`;\n    });\n  }\n\n  destroy(): void {\n    this.cleanupElements(this.confettiContainer);\n    this.cleanupStyles();\n    this.confettiContainer = null;\n  }\n}\n\nexport default ConfettiPlugin;\n","import { PluginBase } from \"@/core/plugin-base\";\nimport styles from \"./style.css?inline\";\n\nexport interface ControllerConfig {\n  enabled?: boolean;\n  position?: \"bottom-right\" | \"bottom-left\" | \"bottom-center\";\n}\n\nexport class ControllerPlugin extends PluginBase {\n  name = \"Controller\";\n  private controller: HTMLElement | null = null;\n  private firstBtn: HTMLButtonElement | null = null;\n  private prevBtn: HTMLButtonElement | null = null;\n  private overviewBtn: HTMLButtonElement | null = null;\n  private nextBtn: HTMLButtonElement | null = null;\n  private lastBtn: HTMLButtonElement | null = null;\n  private config!: ControllerConfig;\n  private container: HTMLElement | null = null;\n\n  init(mo: any, config: ControllerConfig = {}): void {\n    this.container = mo.getContainer();\n    this.config = {\n      enabled: true,\n      position: \"bottom-center\",\n      ...config,\n    };\n\n    // Check if plugin is enabled\n    if (!this.checkEnabled()) {\n      return;\n    }\n\n    this.injectStyles(styles, \"controller-styles\");\n    this.createController(mo);\n  }\n\n  private createController(mo: any): void {\n    this.controller = document.createElement(\"div\");\n    this.controller.className = `mostage-controller mostage-controller-${this.config.position}`;\n    this.controller.innerHTML = `\n      <button class=\"mostage-btn controller-first\">|‹</button>\n      <button class=\"mostage-btn controller-prev\">‹</button>\n      <button class=\"mostage-btn controller-overview\">⊞</button>\n      <button class=\"mostage-btn controller-next\">›</button>\n      <button class=\"mostage-btn controller-last\">›|</button>\n    `;\n\n    // Get button references\n    this.firstBtn = this.controller.querySelector(\n      \".controller-first\"\n    ) as HTMLButtonElement;\n    this.prevBtn = this.controller.querySelector(\n      \".controller-prev\"\n    ) as HTMLButtonElement;\n    this.overviewBtn = this.controller.querySelector(\n      \".controller-overview\"\n    ) as HTMLButtonElement;\n    this.nextBtn = this.controller.querySelector(\n      \".controller-next\"\n    ) as HTMLButtonElement;\n    this.lastBtn = this.controller.querySelector(\n      \".controller-last\"\n    ) as HTMLButtonElement;\n\n    // Add event listeners\n    this.firstBtn.addEventListener(\"click\", () => mo.goToSlide(0));\n    this.prevBtn.addEventListener(\"click\", () => mo.previousSlide());\n    this.overviewBtn.addEventListener(\"click\", () => mo.toggleOverview());\n    this.nextBtn.addEventListener(\"click\", () => mo.nextSlide());\n    this.lastBtn.addEventListener(\"click\", () =>\n      mo.goToSlide(mo.getTotalSlides() - 1)\n    );\n\n    // Listen for slide changes and update button states\n    mo.on(\"slidechange\", (event: any) => {\n      this.updateButtonStates(event.currentSlide, event.totalSlides);\n    });\n\n    // Set initial button states\n    this.updateButtonStates(mo.getCurrentSlide(), mo.getTotalSlides());\n\n    if (this.container) {\n      this.container.appendChild(this.controller);\n    }\n  }\n\n  private updateButtonStates(currentSlide: number, totalSlides: number): void {\n    if (\n      this.firstBtn &&\n      this.prevBtn &&\n      this.overviewBtn &&\n      this.nextBtn &&\n      this.lastBtn\n    ) {\n      this.firstBtn.disabled = currentSlide === 0;\n      this.prevBtn.disabled = currentSlide === 0;\n      // Overview button is never disabled\n      this.nextBtn.disabled = currentSlide === totalSlides - 1;\n      this.lastBtn.disabled = currentSlide === totalSlides - 1;\n    }\n  }\n\n  destroy(): void {\n    this.cleanupElements(this.controller);\n    this.cleanupStyles();\n    this.controller = null;\n    this.firstBtn = null;\n    this.prevBtn = null;\n    this.overviewBtn = null;\n    this.nextBtn = null;\n    this.lastBtn = null;\n  }\n}\n\nexport default ControllerPlugin;\n","import { PluginBase } from \"@/core/plugin-base\";\nimport styles from \"./style.css?inline\";\n\nexport interface ProgressBarConfig {\n  enabled?: boolean;\n  position?: \"top\" | \"bottom\";\n  color?: string;\n  height?: string;\n}\n\nexport class ProgressBarPlugin extends PluginBase {\n  name = \"ProgressBar\";\n  private progressBar: HTMLElement | null = null;\n  private config!: ProgressBarConfig;\n  private container: HTMLElement | null = null;\n\n  init(mo: any, config: ProgressBarConfig = {}): void {\n    this.container = mo.getContainer();\n    this.config = {\n      enabled: true,\n      position: \"bottom\",\n      color: \"#007acc\",\n      height: \"12px\",\n      ...config,\n    };\n\n    // Check if plugin is enabled\n    if (!this.checkEnabled()) {\n      return;\n    }\n\n    this.injectStyles(styles, \"progress-styles\");\n    this.createProgressBar();\n    this.updateProgress(mo.getCurrentSlide(), mo.getTotalSlides());\n\n    mo.on(\"slidechange\", (event: any) => {\n      this.updateProgress(event.currentSlide, event.totalSlides);\n    });\n  }\n\n  private createProgressBar(): void {\n    this.progressBar = document.createElement(\"div\");\n    this.progressBar.className = `mostage-progress-bar mostage-progress-${this.config.position}`;\n    this.progressBar.innerHTML = '<div class=\"mostage-progress-fill\"></div>';\n\n    // Apply custom styles\n    this.progressBar.style.backgroundColor = \"rgba(0,0,0,0.1)\";\n    this.progressBar.style.height = this.config.height!;\n\n    const fill = this.progressBar.querySelector(\n      \".mostage-progress-fill\"\n    ) as HTMLElement;\n    if (fill) {\n      fill.style.backgroundColor = this.config.color!;\n      fill.style.height = \"100%\";\n    }\n\n    if (this.container) {\n      this.container.appendChild(this.progressBar);\n    }\n  }\n\n  private updateProgress(current: number, total: number): void {\n    if (!this.progressBar) return;\n\n    const fill = this.progressBar.querySelector(\n      \".mostage-progress-fill\"\n    ) as HTMLElement;\n    if (fill) {\n      const percentage = ((current + 1) / total) * 100;\n      fill.style.width = `${percentage}%`;\n    }\n  }\n\n  destroy(): void {\n    this.cleanupElements(this.progressBar);\n    this.cleanupStyles();\n    this.progressBar = null;\n  }\n}\n\nexport default ProgressBarPlugin;\n","import { PluginBase } from \"@/core/plugin-base\";\nimport styles from \"./style.css?inline\";\n\nexport interface SlideNumberConfig {\n  enabled?: boolean;\n  position?: \"bottom-right\" | \"bottom-left\" | \"bottom-center\";\n  format?: string;\n}\n\nexport class SlideNumberPlugin extends PluginBase {\n  name = \"SlideNumber\";\n  private slideNumberElement: HTMLElement | null = null;\n  private config!: SlideNumberConfig;\n  private container: HTMLElement | null = null;\n\n  init(mo: any, config: SlideNumberConfig = {}): void {\n    this.container = mo.getContainer();\n    this.config = {\n      enabled: true,\n      position: \"bottom-right\",\n      format: \"current/total\",\n      ...config,\n    };\n\n    // Check if plugin is enabled\n    if (!this.checkEnabled()) {\n      return;\n    }\n\n    this.injectStyles(styles, \"slide-number-styles\");\n    this.createSlideNumber();\n    this.updateSlideNumber(mo.getCurrentSlide(), mo.getTotalSlides());\n\n    mo.on(\"slidechange\", (event: any) => {\n      this.updateSlideNumber(event.currentSlide, event.totalSlides);\n    });\n  }\n\n  private createSlideNumber(): void {\n    this.slideNumberElement = document.createElement(\"div\");\n    this.slideNumberElement.className = `mostage-slide-number mostage-slide-number-${this.config.position}`;\n    if (this.container) {\n      this.container.appendChild(this.slideNumberElement);\n    }\n  }\n\n  private updateSlideNumber(current: number, total: number): void {\n    if (this.slideNumberElement) {\n      // Format based on configuration\n      let text = this.config\n        .format!.replace(\"current\", (current + 1).toString())\n        .replace(\"total\", total.toString());\n      this.slideNumberElement.textContent = text;\n    }\n  }\n\n  destroy(): void {\n    this.cleanupElements(this.slideNumberElement);\n    this.cleanupStyles();\n    this.slideNumberElement = null;\n  }\n}\n\nexport default SlideNumberPlugin;\n","import { MoPlugin } from \"@/types\";\n\n/**\n * Enhanced Plugin Service - Auto-discovers and manages all plugins\n * Provides comprehensive plugin management with better error handling\n */\nexport class PluginService {\n  private static plugins: Record<string, new () => MoPlugin> = {};\n  private static loadedPlugins: Map<string, MoPlugin> = new Map();\n  private static initialized = false;\n\n  /**\n   * Initialize plugin auto-discovery system\n   */\n  static initialize() {\n    if (this.initialized) return this.plugins;\n\n    // Dynamic plugin discovery - automatically loads all plugins from subdirectories\n    const pluginContext = import.meta.glob(\"../plugins/*/index.ts\", {\n      eager: true,\n    });\n\n    // Auto-register all discovered plugins\n    Object.entries(pluginContext).forEach(([path, module]) => {\n      const exports = module as any;\n\n      // Find the plugin class (default export or named export ending with 'Plugin')\n      const PluginClass =\n        exports.default ||\n        Object.values(exports).find(\n          (exp: any) =>\n            typeof exp === \"function\" && exp.name && exp.name.endsWith(\"Plugin\")\n        );\n\n      if (PluginClass && typeof PluginClass === \"function\") {\n        try {\n          const instance = new (PluginClass as new () => MoPlugin)();\n          this.plugins[instance.name] = PluginClass as new () => MoPlugin;\n        } catch (error) {\n          console.warn(`Failed to register plugin from ${path}:`, error);\n        }\n      }\n    });\n\n    this.initialized = true;\n    return this.plugins;\n  }\n\n  /**\n   * Get all registered plugins\n   */\n  static getPlugins(): Record<string, new () => MoPlugin> {\n    if (!this.initialized) {\n      this.initialize();\n    }\n    return this.plugins;\n  }\n\n  /**\n   * Get a specific plugin by name\n   */\n  static getPlugin(name: string): (new () => MoPlugin) | undefined {\n    const plugins = this.getPlugins();\n    return plugins[name];\n  }\n\n  /**\n   * Get list of available plugin names\n   */\n  static getAvailablePlugins(): string[] {\n    return Object.keys(this.getPlugins());\n  }\n\n  /**\n   * Load a plugin with configuration\n   */\n  static async loadPlugin(name: string): Promise<MoPlugin> {\n    try {\n      const PluginClass = this.getPlugin(name);\n      if (!PluginClass) {\n        throw new PluginNotFoundError(`Plugin '${name}' not found`);\n      }\n\n      const plugin = new PluginClass();\n\n      // Store the loaded plugin\n      this.loadedPlugins.set(name, plugin);\n\n      return plugin;\n    } catch (error) {\n      throw new PluginLoadError(\n        `Failed to load plugin '${name}': ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        name\n      );\n    }\n  }\n\n  /**\n   * Unload a plugin\n   */\n  static unloadPlugin(name: string): void {\n    const plugin = this.loadedPlugins.get(name);\n    if (plugin) {\n      try {\n        if (plugin.destroy) {\n          plugin.destroy();\n        }\n        this.loadedPlugins.delete(name);\n      } catch (error) {\n        console.error(`Error destroying plugin '${name}':`, error);\n      }\n    }\n  }\n\n  /**\n   * Get all loaded plugins\n   */\n  static getLoadedPlugins(): MoPlugin[] {\n    return Array.from(this.loadedPlugins.values());\n  }\n\n  /**\n   * Check if a plugin is loaded\n   */\n  static isPluginLoaded(name: string): boolean {\n    return this.loadedPlugins.has(name);\n  }\n\n  /**\n   * Enable a plugin\n   */\n  static enablePlugin(name: string): void {\n    const plugin = this.loadedPlugins.get(name);\n    if (plugin && plugin.setEnabled) {\n      plugin.setEnabled(true);\n    }\n  }\n\n  /**\n   * Disable a plugin\n   */\n  static disablePlugin(name: string): void {\n    const plugin = this.loadedPlugins.get(name);\n    if (plugin && plugin.setEnabled) {\n      plugin.setEnabled(false);\n    }\n  }\n\n  /**\n   * Get plugin statistics\n   */\n  static getPluginStats(): {\n    total: number;\n    loaded: number;\n    available: string[];\n  } {\n    return {\n      total: Object.keys(this.plugins).length,\n      loaded: this.loadedPlugins.size,\n      available: Object.keys(this.plugins),\n    };\n  }\n}\n\n/**\n * Custom error classes for plugin operations\n */\nexport class PluginError extends Error {\n  constructor(\n    message: string,\n    public readonly code?: string\n  ) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}\n\nexport class PluginLoadError extends PluginError {\n  constructor(\n    message: string,\n    public readonly pluginName: string\n  ) {\n    super(message, \"PLUGIN_LOAD_ERROR\");\n  }\n}\n\nexport class PluginNotFoundError extends PluginError {\n  constructor(pluginName: string) {\n    super(`Plugin '${pluginName}' not found`, \"PLUGIN_NOT_FOUND\");\n  }\n}\n\n// Auto-initialize and export plugins for backward compatibility\nexport const plugins = PluginService.initialize();\n","// Import base styles from separate files\nimport baseStylesCSS from \"../styles/foundation/base.css?raw\";\nimport typographyStylesCSS from \"../styles/foundation/typography.css?raw\";\nimport centerContentStylesCSS from \"../components/ui/center/center.css?raw\";\nimport overviewModeStylesCSS from \"../components/ui/overview/overview.css?raw\";\nimport helpStylesCSS from \"../components/ui/help/help.css?raw\";\nimport responsiveStylesCSS from \"../styles/foundation/responsive.css?raw\";\nimport textContentStylesCSS from \"../styles/foundation/text-content.css?raw\";\nimport { Theme } from \"@/types\";\n\n// Combine all base styles into a single string\nconst combinedBaseStyles = [\n  baseStylesCSS,\n  typographyStylesCSS,\n  centerContentStylesCSS,\n  overviewModeStylesCSS,\n  helpStylesCSS,\n  responsiveStylesCSS,\n  textContentStylesCSS,\n].join(\"\\n\");\n\n/**\n * Enhanced Theme Service with better error handling and management\n * Auto-discovers and manages themes with improved functionality\n */\nexport class ThemeService {\n  private static availableThemes: Record<string, Theme> = {};\n  private static baseStylesLoaded = false;\n  private static initialized = false;\n  private static currentTheme: Theme | null = null;\n\n  /**\n   * Ensure themes are initialized\n   */\n  private static ensureInitialized(): void {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  }\n\n  /**\n   * Initialize theme auto-discovery system\n   */\n  static initialize(): Record<string, Theme> {\n    if (this.initialized) return this.availableThemes;\n\n    // Auto-discover all themes from themes directory\n    const themeContext = import.meta.glob(\"../themes/*.css\", {\n      eager: true,\n      query: \"?raw\",\n      import: \"default\",\n    });\n\n    // Auto-register all discovered themes\n    Object.entries(themeContext).forEach(([path, cssContent]) => {\n      // Extract theme name from file path (e.g., '../themes/dark.css' -> 'dark')\n      const themeName = path.replace(\"../themes/\", \"\").replace(\".css\", \"\");\n\n      this.availableThemes[themeName] = {\n        name: themeName,\n        cssContent: cssContent as string,\n      };\n    });\n\n    this.initialized = true;\n    return this.availableThemes;\n  }\n\n  /**\n   * Load a theme by name with enhanced error handling\n   */\n  static async loadTheme(themeName: string): Promise<void> {\n    try {\n      // Initialize themes if not already done\n      this.ensureInitialized();\n\n      const theme = this.availableThemes[themeName];\n      if (!theme) {\n        const availableThemes = Object.keys(this.availableThemes);\n\n        if (availableThemes.length === 0) {\n          throw new ThemeError(\n            `No themes available. Theme '${themeName}' not found.`\n          );\n        }\n\n        // Try to load the first available theme as fallback\n        console.warn(\n          `Theme '${themeName}' not found. Falling back to '${availableThemes[0]}'`\n        );\n        return this.loadTheme(availableThemes[0]);\n      }\n\n      // Load base styles first if not already loaded\n      if (!this.baseStylesLoaded) {\n        this.loadBaseStyles();\n        this.baseStylesLoaded = true;\n      }\n\n      // Remove existing theme styles\n      this.removeExistingThemeStyles();\n\n      // Add new theme styles\n      this.injectThemeStyles(theme);\n\n      // Update current theme\n      this.currentTheme = theme;\n\n      console.log(`Theme '${themeName}' loaded successfully`);\n    } catch (error) {\n      throw new ThemeLoadError(\n        `Failed to load theme '${themeName}': ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        themeName\n      );\n    }\n  }\n\n  /**\n   * Switch to a different theme\n   */\n  static async switchTheme(themeName: string): Promise<void> {\n    await this.loadTheme(themeName);\n  }\n\n  /**\n   * Get the currently loaded theme\n   */\n  static getCurrentTheme(): Theme | null {\n    return this.currentTheme;\n  }\n\n  /**\n   * Check if a theme is currently loaded\n   */\n  static isThemeLoaded(themeName: string): boolean {\n    return this.currentTheme?.name === themeName;\n  }\n\n  /**\n   * Get all available themes\n   */\n  static getAvailableThemes(): Theme[] {\n    this.ensureInitialized();\n    return Object.values(this.availableThemes);\n  }\n\n  /**\n   * Remove existing theme styles from DOM\n   */\n  private static removeExistingThemeStyles(): void {\n    const existingThemeStyles = document.querySelectorAll(\n      \"style[data-mostage-theme]\"\n    );\n    existingThemeStyles.forEach((style) => style.remove());\n  }\n\n  /**\n   * Inject theme styles into DOM\n   */\n  private static injectThemeStyles(theme: Theme): void {\n    const styleElement = document.createElement(\"style\");\n    styleElement.setAttribute(\"data-mostage-theme\", theme.name);\n    styleElement.textContent = theme.cssContent;\n    document.head.appendChild(styleElement);\n  }\n\n  /**\n   * Load base styles\n   */\n  private static loadBaseStyles(): void {\n    // Check if base styles are already loaded\n    if (document.querySelector(\"style[data-mostage-base]\")) {\n      return;\n    }\n\n    const styleElement = document.createElement(\"style\");\n    styleElement.setAttribute(\"data-mostage-base\", \"true\");\n    styleElement.textContent = combinedBaseStyles;\n    document.head.appendChild(styleElement);\n  }\n\n  /**\n   * Get all available themes as record\n   */\n  static getAvailableThemesRecord(): Record<string, Theme> {\n    this.ensureInitialized();\n    return this.availableThemes;\n  }\n\n  /**\n   * Get list of available theme names\n   */\n  static getThemeNames(): string[] {\n    this.ensureInitialized();\n    return Object.keys(this.availableThemes);\n  }\n\n  /**\n   * Get theme by name\n   */\n  static getTheme(name: string): Theme | undefined {\n    this.ensureInitialized();\n    return this.availableThemes[name];\n  }\n\n  /**\n   * Register a new theme dynamically\n   */\n  static registerTheme(theme: Theme): void {\n    this.ensureInitialized();\n    this.availableThemes[theme.name] = theme;\n  }\n\n  /**\n   * Check if a theme exists\n   */\n  static hasTheme(name: string): boolean {\n    this.ensureInitialized();\n    return name in this.availableThemes;\n  }\n}\n\n/**\n * Custom error classes for theme operations\n */\nexport class ThemeError extends Error {\n  constructor(\n    message: string,\n    public readonly code?: string\n  ) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}\n\nexport class ThemeLoadError extends ThemeError {\n  constructor(\n    message: string,\n    public readonly themeName: string\n  ) {\n    super(message, \"THEME_LOAD_ERROR\");\n  }\n}\n\nexport class ThemeNotFoundError extends ThemeError {\n  constructor(themeName: string) {\n    super(`Theme '${themeName}' not found`, \"THEME_NOT_FOUND\");\n  }\n}\n\n// Auto-initialize and export for backward compatibility\nexport const themes = ThemeService.initialize();\nexport const loadTheme = ThemeService.loadTheme.bind(ThemeService);\nexport const getAvailableThemes = ThemeService.getThemeNames.bind(ThemeService);\n","export default \"/* Mostage Base Styles - Simple & Clean */\\n\\n/* Reset and Base */\\n*,\\n*::before,\\n*::after {\\n  box-sizing: border-box;\\n}\\n\\nbody {\\n  margin: 0;\\n  padding: 0;\\n  font-family:\\n    -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Roboto\\\", \\\"Helvetica Neue\\\",\\n    sans-serif;\\n}\\n\\n/* Container - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-container {\\n  /* Auto-detection will override these values based on parent element */\\n  width: 100%;\\n  height: 100%;\\n  position: relative;\\n  overflow: hidden;\\n  font-size: clamp(18px, 2vw, 18px);\\n  line-height: 1.6;\\n}\\n\\n.mostage-slides {\\n  width: 100%;\\n  height: 100%;\\n  position: relative;\\n  overflow: hidden;\\n}\\n\\n/* Slide Layout - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide {\\n  width: 100%;\\n  height: 100%;\\n  padding: clamp(2.5rem, 3.5vw, 3rem);\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  /* Removed base transition to prevent conflict with JavaScript transitions */\\n  overflow: auto;\\n  display: block;\\n}\\n\\n/* Background Image Support */\\n.mostage-slide[style*=\\\"background-image\\\"] {\\n  background-attachment: fixed;\\n}\\n\\n/* Ensure content is visible over background images */\\n.mostage-slide-content {\\n  position: relative;\\n  z-index: 1;\\n}\\n\\n/* Header and Footer Styles - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-header {\\n  position: absolute;\\n  z-index: 1000;\\n  padding: clamp(1.5rem, 2vw, 1.5rem) clamp(2.5rem, 3vw, 3rem);\\n  opacity: 0;\\n  animation: mostage-fade-in 0.7s ease forwards;\\n  font-size: clamp(1rem, 1.5vw, 1.2rem);\\n  line-height: 1.4;\\n  color: inherit;\\n}\\n\\n.mostage-footer {\\n  position: absolute;\\n  z-index: 1000;\\n  padding: clamp(1.5rem, 2vw, 1.5rem) clamp(2.5rem, 3vw, 3rem);\\n  opacity: 0;\\n  animation: mostage-fade-in 0.7s ease forwards;\\n  font-size: clamp(0.9rem, 1.3vw, 1.1rem);\\n  line-height: 1.4;\\n  color: inherit;\\n  margin-bottom: 2rem;\\n}\\n\\n/* Header and Footer Typography */\\n.mostage-header h1,\\n.mostage-footer h1 {\\n  font-size: clamp(1.8rem, 2.5vw, 2.2rem);\\n  font-weight: 700;\\n  margin: 0 0 0.5rem 0;\\n  line-height: 1.2;\\n}\\n\\n.mostage-header h2,\\n.mostage-footer h2 {\\n  font-size: clamp(1.5rem, 2.2vw, 1.8rem);\\n  font-weight: 600;\\n  margin: 0 0 0.4rem 0;\\n  line-height: 1.3;\\n}\\n\\n.mostage-header h3,\\n.mostage-footer h3 {\\n  font-size: clamp(1.3rem, 1.8vw, 1.5rem);\\n  font-weight: 600;\\n  margin: 0 0 0.3rem 0;\\n  line-height: 1.3;\\n}\\n\\n.mostage-header h4,\\n.mostage-footer h4 {\\n  font-size: clamp(1.1rem, 1.5vw, 1.3rem);\\n  font-weight: 500;\\n  margin: 0 0 0.3rem 0;\\n  line-height: 1.4;\\n}\\n\\n.mostage-header h5,\\n.mostage-footer h5 {\\n  font-size: clamp(1rem, 1.3vw, 1.1rem);\\n  font-weight: 500;\\n  margin: 0 0 0.2rem 0;\\n  line-height: 1.4;\\n}\\n\\n.mostage-header h6,\\n.mostage-footer h6 {\\n  font-size: clamp(0.9rem, 1.2vw, 1rem);\\n  font-weight: 500;\\n  margin: 0 0 0.2rem 0;\\n  line-height: 1.4;\\n}\\n\\n.mostage-header p,\\n.mostage-footer p {\\n  margin: 0 0 0.5rem 0;\\n  line-height: 1.5;\\n}\\n\\n.mostage-header strong,\\n.mostage-footer strong,\\n.mostage-header b,\\n.mostage-footer b {\\n  font-weight: 600;\\n}\\n\\n.mostage-header em,\\n.mostage-footer em,\\n.mostage-header i,\\n.mostage-footer i {\\n  font-style: italic;\\n}\\n\\n.mostage-header code,\\n.mostage-footer code {\\n  background-color: rgba(0, 0, 0, 0.1);\\n  padding: 0.2rem 0.4rem;\\n  border-radius: 0.25rem;\\n  font-family: \\\"Courier New\\\", Courier, monospace;\\n  font-size: 0.9em;\\n}\\n\\n.mostage-header ul,\\n.mostage-footer ul,\\n.mostage-header ol,\\n.mostage-footer ol {\\n  margin: 0.5rem 0;\\n  padding-left: 1.5rem;\\n}\\n\\n.mostage-header li,\\n.mostage-footer li {\\n  margin: 0.2rem 0;\\n  line-height: 1.4;\\n}\\n\\n@keyframes mostage-fade-in {\\n  from {\\n    opacity: 0;\\n  }\\n  to {\\n    opacity: 1;\\n  }\\n}\\n\\n/* Header Position Classes */\\n.mostage-header-top-left {\\n  top: 0;\\n  left: 0;\\n}\\n\\n.mostage-header-top-center {\\n  top: 0;\\n  left: 50%;\\n  transform: translateX(-50%);\\n}\\n\\n.mostage-header-top-right {\\n  top: 0;\\n  right: 0;\\n}\\n\\n/* Footer Position Classes */\\n.mostage-footer-bottom-left {\\n  bottom: 0;\\n  left: 0;\\n}\\n\\n.mostage-footer-bottom-center {\\n  bottom: 0;\\n  left: 50%;\\n  transform: translateX(-50%);\\n}\\n\\n.mostage-footer-bottom-right {\\n  bottom: 0;\\n  right: 0;\\n}\\n\"","export default \"/* Typography - Proper Hierarchy */\\n\\n/* Headings - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide h1 {\\n  font-size: clamp(4rem, 5vw, 6rem);\\n  font-weight: 700;\\n  line-height: 1.1;\\n  margin-bottom: 1.5rem;\\n  color: #1a202c;\\n}\\n\\n.mostage-slide h2 {\\n  font-size: clamp(3rem, 4vw, 4.5rem);\\n  font-weight: 600;\\n  line-height: 1.2;\\n  margin-bottom: 1.25rem;\\n  color: #2d3748;\\n}\\n\\n.mostage-slide h3 {\\n  font-size: clamp(2rem, 3vw, 3rem);\\n  font-weight: 600;\\n  line-height: 1.3;\\n  margin-bottom: 1rem;\\n  color: #2d3748;\\n}\\n\\n.mostage-slide h4 {\\n  font-size: clamp(1.75rem, 2.5vw, 2.25rem);\\n  font-weight: 600;\\n  line-height: 1.4;\\n  margin-bottom: 0.875rem;\\n  color: #4a5568;\\n}\\n\\n.mostage-slide h5 {\\n  font-size: clamp(1.5rem, 2vw, 1.875rem);\\n  font-weight: 600;\\n  line-height: 1.4;\\n  margin-bottom: 0.75rem;\\n  color: #4a5568;\\n}\\n\\n.mostage-slide h6 {\\n  font-size: clamp(1.25rem, 1.5vw, 1.5rem);\\n  font-weight: 600;\\n  line-height: 1.2;\\n  margin-bottom: 0.625rem;\\n  color: #718096;\\n}\\n\\n/* Content - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide p {\\n  font-size: clamp(1.5rem, 2vw, 1.5rem);\\n  line-height: 1.6;\\n  margin: 0 0 1.25rem 0;\\n}\\n\\n/* Lists - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide ul,\\n.mostage-slide ol {\\n  font-size: clamp(1.5rem, 2vw, 1.5rem);\\n  line-height: 1.6;\\n  margin: 0 0 1.25rem 0;\\n  padding-left: 2rem;\\n}\\n\\n.mostage-slide li {\\n  margin-bottom: 0.5rem;\\n}\\n\\n/* Nested Lists - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide ul ul,\\n.mostage-slide ol ol,\\n.mostage-slide ul ol,\\n.mostage-slide ol ul {\\n  margin: 0.5rem 0;\\n  padding-left: 2rem;\\n  font-size: clamp(1.25rem, 1.5vw, 1.25rem);\\n}\\n\\n.mostage-slide ul ul ul,\\n.mostage-slide ol ol ol,\\n.mostage-slide ul ol ul,\\n.mostage-slide ol ul ol,\\n.mostage-slide ul ul ol,\\n.mostage-slide ol ol ul {\\n  padding-left: 2.5rem;\\n  font-size: clamp(1.125rem, 1.25vw, 1.125rem);\\n}\\n\\n.mostage-slide li li {\\n  margin-bottom: 0.375rem;\\n}\\n\\n.mostage-slide li li li {\\n  margin-bottom: 0.25rem;\\n}\\n\\n/* List Styles */\\n.mostage-slide ol {\\n  list-style-type: decimal;\\n}\\n\\n.mostage-slide ol ol {\\n  list-style-type: lower-alpha;\\n}\\n\\n.mostage-slide ol ol ol {\\n  list-style-type: lower-roman;\\n}\\n\\n.mostage-slide ol li {\\n  margin-bottom: 0.5rem;\\n  padding-left: 0.5rem;\\n}\\n\\n.mostage-slide ol ol li {\\n  margin-bottom: 0.375rem;\\n  padding-left: 0.25rem;\\n}\\n\\n.mostage-slide ol ol ol li {\\n  margin-bottom: 0.25rem;\\n  padding-left: 0.125rem;\\n}\\n\\n.mostage-slide ul {\\n  list-style-type: disc;\\n}\\n\\n.mostage-slide ul ul {\\n  list-style-type: circle;\\n}\\n\\n.mostage-slide ul ul ul {\\n  list-style-type: square;\\n}\\n\\n/* Blockquotes - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide blockquote {\\n  display: inline-block;\\n  font-size: clamp(1.5rem, 2vw, 1.5rem);\\n  line-height: 1.6;\\n  margin: 1.5rem 0;\\n  padding: 1rem 1.5rem;\\n  border-left: 4px solid currentColor;\\n  background: rgba(0, 0, 0, 0.05);\\n  border-radius: 0 4px 4px 0;\\n}\\n\\n/* Code - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide pre {\\n  width: fit-content;\\n  border-radius: 3px;\\n  overflow: auto;\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n/* Enhanced inline code with syntax highlighting */\\n.mostage-slide code.inline-code-highlighted {\\n  background: rgba(255, 255, 255, 0.08);\\n  display: inline-block;\\n  border-radius: 3px;\\n  padding: 0 5px;\\n}\\n\\n/* Links */\\n.mostage-slide a {\\n  color: inherit;\\n  text-decoration: underline;\\n  text-decoration-thickness: 1px;\\n  text-underline-offset: 2px;\\n  transition: opacity 0.2s ease;\\n}\\n\\n/* Images */\\n.mostage-slide img {\\n  max-width: 100%;\\n  height: auto;\\n  border-radius: 4px;\\n  margin: 1rem 0;\\n}\\n\\n/* Tables - Clamp-based responsive sizing with larger minimums and preferred sizes */\\n.mostage-slide table {\\n  border-collapse: collapse;\\n  margin: 1.5rem 0;\\n  font-size: clamp(1.25rem, 1.5vw, 1.25rem);\\n}\\n\\n.mostage-slide th,\\n.mostage-slide td {\\n  border: 1px solid rgba(0, 0, 0, 0.2);\\n  padding: 0.75rem 1rem;\\n}\\n\\n.mostage-slide th {\\n  background-color: rgba(0, 0, 0, 0.05);\\n  font-weight: 600;\\n}\\n\\n.mostage-slide tbody tr:nth-child(even) {\\n  background-color: rgba(0, 0, 0, 0.02);\\n}\\n\\n.mostage-slide tbody tr:hover {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n/* Text Elements */\\n.mostage-slide del {\\n  text-decoration: line-through;\\n  opacity: 0.7;\\n}\\n\\n.mostage-slide hr {\\n  border: none;\\n  height: 1px;\\n  background: rgba(0, 0, 0, 0.2);\\n  margin: 2rem 0;\\n}\\n\\n.mostage-slide strong {\\n  font-weight: 600;\\n}\\n\\n.mostage-slide em {\\n  font-style: italic;\\n}\\n\"","export default \"/* Center Content Styles - Applied when centerContent is enabled */\\n\\n.mostage-slide.mostage-slide-centered .mostage-slide-content {\\n  transform: translateY(-5vh);\\n\\n  display: flex;\\n  flex-direction: column;\\n  justify-content: center;\\n  align-items: center;\\n\\n  position: absolute;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0;\\n\\n  padding: 2rem;\\n  box-sizing: border-box;\\n  overflow: auto;\\n}\\n\\n.mostage-slide.mostage-slide-centered > * {\\n  max-width: 100%;\\n  width: auto;\\n}\\n\\n.mostage-slide.mostage-slide-centered h1,\\n.mostage-slide.mostage-slide-centered h2,\\n.mostage-slide.mostage-slide-centered h3,\\n.mostage-slide.mostage-slide-centered h4,\\n.mostage-slide.mostage-slide-centered h5,\\n.mostage-slide.mostage-slide-centered h6,\\n.mostage-slide.mostage-slide-centered p,\\n.mostage-slide.mostage-slide-centered blockquote {\\n  text-align: left;\\n}\\n\\n.mostage-slide.mostage-slide-centered ul,\\n.mostage-slide.mostage-slide-centered ol {\\n  text-align: left;\\n}\\n\\n.mostage-slide.mostage-slide-centered img {\\n  display: block;\\n  margin: clamp(1.5rem, 2vw, 1.5rem) auto;\\n}\\n\"","export default \"/* Overview Mode Styles */\\n\\n/* ==========================================================================\\n   BASE STYLES (Desktop First)\\n   ========================================================================== */\\n\\n.mostage-overview {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  z-index: 2000;\\n  display: grid;\\n  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\\n  gap: 30px 20px;\\n  padding: 80px;\\n  overflow-y: auto;\\n  box-sizing: border-box;\\n  align-content: start;\\n  justify-content: center;\\n  opacity: 0;\\n  animation: overviewFadeIn 0.3s ease-out forwards;\\n}\\n\\n@keyframes overviewFadeIn {\\n  from {\\n    opacity: 0;\\n    transform: scale(0.95);\\n  }\\n  to {\\n    opacity: 1;\\n    transform: scale(1);\\n  }\\n}\\n\\n.mostage-overview-slide {\\n  width: 280px;\\n  height: 180px;\\n  background-color: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  border-radius: 5px;\\n  cursor: pointer;\\n  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\\n  border: 3px solid var(--mostage-border-color);\\n  overflow: hidden;\\n  position: relative;\\n  transform-origin: center;\\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\\n  backdrop-filter: blur(10px);\\n}\\n\\n/* Theme-aware background fallbacks */\\n.mostage-overview-slide:not([style*=\\\"background-color\\\"]) {\\n  background-color: var(--mostage-bg-color);\\n}\\n\\n.mostage-overview-slide::before {\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  border-radius: 5px;\\n  pointer-events: none;\\n}\\n\\n.mostage-overview-slide:hover {\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-overview-slide.selected {\\n  border-color: var(--mostage-primary-color);\\n  box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);\\n}\\n\\n.mostage-overview-slide-number {\\n  position: absolute;\\n  bottom: 8px;\\n  right: 8px;\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 4px 8px;\\n  border-radius: 3px;\\n  font-size: 18px;\\n  font-weight: 600;\\n  z-index: 10;\\n  backdrop-filter: blur(5px);\\n}\\n\\n.mostage-overview-slide-content {\\n  width: 333.33%; /* Compensate for scale (100% / 0.3) */\\n  height: 333.33%; /* Compensate for scale (100% / 0.3) */\\n  overflow: hidden;\\n  border-radius: 12px;\\n  position: relative;\\n  z-index: 1;\\n  transform: scale(0.3);\\n  transform-origin: top left;\\n  padding: 2rem;\\n  box-sizing: border-box;\\n  background-color: inherit;\\n  color: inherit;\\n}\\n\\n/* Ensure all content inside overview slides inherits theme styles */\\n.mostage-overview-slide-content * {\\n  font-family: inherit;\\n  line-height: inherit;\\n  letter-spacing: inherit;\\n}\\n\\n/* Apply centerContent styles to overview mode */\\n.mostage-overview-slide-content.mostage-slide-centered {\\n  display: flex;\\n  flex-direction: column;\\n  justify-content: center;\\n  align-items: center;\\n  position: absolute;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0;\\n  padding: 2rem;\\n  box-sizing: border-box;\\n  transform-origin: center center;\\n}\\n\\n.mostage-overview-slide-content.mostage-slide-centered > * {\\n  max-width: 100%;\\n  width: auto;\\n}\\n\\n.mostage-overview-slide-content.mostage-slide-centered h1,\\n.mostage-overview-slide-content.mostage-slide-centered h2,\\n.mostage-overview-slide-content.mostage-slide-centered h3,\\n.mostage-overview-slide-content.mostage-slide-centered h4,\\n.mostage-overview-slide-content.mostage-slide-centered h5,\\n.mostage-overview-slide-content.mostage-slide-centered h6,\\n.mostage-overview-slide-content.mostage-slide-centered p,\\n.mostage-overview-slide-content.mostage-slide-centered blockquote {\\n  text-align: left;\\n}\\n\\n.mostage-overview-slide-content.mostage-slide-centered ul,\\n.mostage-overview-slide-content.mostage-slide-centered ol {\\n  text-align: left;\\n}\\n\\n.mostage-overview-slide-content.mostage-slide-centered pre {\\n  text-align: left;\\n  max-width: 90%;\\n  margin: 1rem auto;\\n}\\n\\n.mostage-overview-slide-content.mostage-slide-centered img {\\n  display: block;\\n  margin: 1rem auto;\\n}\\n\\n/* Disable all interactive elements in overview mode */\\n.mostage-overview-slide-content a,\\n.mostage-overview-slide-content button,\\n.mostage-overview-slide-content input,\\n.mostage-overview-slide-content select,\\n.mostage-overview-slide-content textarea {\\n  pointer-events: none;\\n  cursor: default;\\n}\\n\\n.mostage-overview-close {\\n  position: absolute;\\n  top: 30px;\\n  right: 30px;\\n  width: 50px;\\n  height: 50px;\\n  border: none;\\n  border-radius: 50%;\\n  background: rgba(255, 255, 255, 0.5);\\n  color: var(--mostage-text-color);\\n  border: 1px solid var(--mostage-border-color);\\n  font-size: 24px;\\n  font-weight: bold;\\n  cursor: pointer;\\n  transition: all 0.3s ease;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  backdrop-filter: blur(10px);\\n  z-index: 2001;\\n}\\n\\n.mostage-overview-close:hover {\\n  background-color: rgba(255, 255, 255, 0.5);\\n}\\n\\n/* ==========================================================================\\n   RESPONSIVE STYLES\\n   ========================================================================== */\\n\\n/* Tablet devices */\\n@media screen and (min-width: 481px) and (max-width: 768px) {\\n  .mostage-overview {\\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\\n    padding: 40px 20px;\\n    gap: 20px 15px;\\n  }\\n\\n  .mostage-overview-slide {\\n    width: 100%;\\n    aspect-ratio: 4/3;\\n  }\\n\\n  .mostage-overview-slide-content {\\n    padding: 15px;\\n    font-size: 12px;\\n  }\\n\\n  .mostage-overview-slide h1 {\\n    font-size: 16px;\\n  }\\n\\n  .mostage-overview-slide h2 {\\n    font-size: 14px;\\n  }\\n\\n  .mostage-overview-slide h3 {\\n    font-size: 13px;\\n  }\\n\\n  .mostage-overview-close {\\n    top: 20px;\\n    right: 20px;\\n    width: 40px;\\n    height: 40px;\\n    font-size: 20px;\\n  }\\n\\n  .mostage-overview-help {\\n    display: none;\\n  }\\n}\\n\\n/* Mobile devices */\\n@media screen and (max-width: 480px) {\\n  .mostage-overview {\\n    grid-template-columns: repeat(2, 1fr);\\n    padding: 20px 10px 40px;\\n    gap: 12px 8px;\\n  }\\n\\n  .mostage-overview-slide {\\n    width: 100%;\\n  }\\n\\n  .mostage-overview-slide-content {\\n    padding: 12px;\\n    font-size: 11px;\\n  }\\n\\n  .mostage-overview-slide h1 {\\n    font-size: 14px;\\n  }\\n\\n  .mostage-overview-slide h2 {\\n    font-size: 12px;\\n  }\\n\\n  .mostage-overview-slide h3 {\\n    font-size: 11px;\\n  }\\n\\n  .mostage-overview-close {\\n    top: 15px;\\n    right: 15px;\\n    width: 40px;\\n    height: 40px;\\n    font-size: 20px;\\n  }\\n\\n  .mostage-overview-help {\\n    display: none;\\n  }\\n}\\n\\n/* Very small mobile devices - Single column */\\n@media screen and (max-width: 360px) {\\n  .mostage-overview {\\n    grid-template-columns: 1fr;\\n    padding: 15px 8px;\\n    gap: 12px;\\n  }\\n\\n  .mostage-overview-slide {\\n    width: 100%;\\n    max-width: 300px;\\n    margin: 0 auto;\\n  }\\n\\n  .mostage-overview-slide-content {\\n    padding: 10px;\\n    font-size: 10px;\\n  }\\n\\n  .mostage-overview-slide h1 {\\n    font-size: 12px;\\n  }\\n\\n  .mostage-overview-slide h2 {\\n    font-size: 11px;\\n  }\\n\\n  .mostage-overview-slide h3 {\\n    font-size: 10px;\\n  }\\n\\n  .mostage-overview-close {\\n    top: 15px;\\n    right: 15px;\\n    width: 35px;\\n    height: 35px;\\n    font-size: 18px;\\n  }\\n\\n  .mostage-overview-help {\\n    display: none;\\n  }\\n}\\n\\n/* ==========================================================================\\n   ACCESSIBILITY & INTERACTIONS\\n   ========================================================================== */\\n\\n/* Touch-friendly interactions */\\n@media (hover: none) and (pointer: coarse) {\\n  .mostage-overview button {\\n    min-width: 44px;\\n    min-height: 44px;\\n    touch-action: manipulation;\\n  }\\n}\\n\\n/* Focus indicators for keyboard navigation */\\n.mostage-overview button:focus {\\n  outline: 2px solid var(--mostage-primary-color, #667eea);\\n  outline-offset: 2px;\\n}\\n\\n/* Footer */\\n.mostage-overview-footer {\\n  position: absolute;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n  text-align: center;\\n  padding: 7px;\\n  font-size: 12px;\\n  color: rgba(255, 255, 255, 0.7);\\n  z-index: 2001;\\n  background: var(--mostage-bg-color);\\n  backdrop-filter: blur(10px);\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-overview-footer a {\\n  color: var(--mostage-primary-color);\\n  text-decoration: none;\\n}\\n\\n.mostage-overview-footer a:hover {\\n  text-decoration: underline;\\n}\\n\"","export default \"/* Help System Styles */\\n\\n/* ==========================================================================\\n   BASE STYLES (Desktop First)\\n   ========================================================================== */\\n\\n/* Normal Mode Help - Top Right */\\n.mostage-help {\\n  position: absolute;\\n  top: 30px;\\n  right: 30px;\\n  background: rgba(0, 0, 0, 0.8);\\n  color: #ffffff;\\n  padding: 15px 20px;\\n  border-radius: 3px;\\n  font-size: 14px;\\n  line-height: 1.5;\\n  backdrop-filter: blur(10px);\\n  border: 1px solid rgba(255, 255, 255, 0.2);\\n  z-index: 3000;\\n  width: 300px;\\n  opacity: 0;\\n  transform: translateY(-10px) scale(0.95);\\n  transition:\\n    opacity 0.3s ease-out,\\n    transform 0.3s ease-out;\\n}\\n\\n/* Animation classes */\\n.mostage-help.fade-in {\\n  opacity: 1;\\n  transform: translateY(0) scale(1);\\n}\\n\\n.mostage-help.fade-out {\\n  opacity: 0;\\n  transform: translateY(-10px) scale(0.95);\\n}\\n\\n/* Overview help animation classes */\\n.mostage-overview-help.fade-in {\\n  opacity: 1;\\n  transform: translateY(0) scale(1);\\n}\\n\\n.mostage-overview-help.fade-out {\\n  opacity: 0;\\n  transform: translateY(10px) scale(0.95);\\n}\\n\\n.mostage-help-overlay {\\n  display: none;\\n}\\n\\n.mostage-help-content {\\n  position: relative;\\n  background: none;\\n  border-radius: 0;\\n  box-shadow: none;\\n  max-width: none;\\n  width: auto;\\n  max-height: none;\\n  overflow: visible;\\n  z-index: auto;\\n}\\n\\n.mostage-help-header {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  padding: 0 0 8px 0;\\n  border-bottom: 1px solid rgba(255, 255, 255, 0.2);\\n  margin-bottom: 8px;\\n}\\n\\n.mostage-help-header h3 {\\n  margin: 0;\\n  color: #007acc;\\n  font-size: 16px;\\n  font-weight: 600;\\n}\\n\\n.mostage-help-close {\\n  background: none;\\n  border: none;\\n  font-size: 18px;\\n  color: #ffffff;\\n  cursor: pointer;\\n  padding: 2px;\\n  border-radius: 4px;\\n  transition: all 0.2s ease;\\n}\\n\\n.mostage-help-close:hover {\\n  background: rgba(255, 255, 255, 0.1);\\n  color: #ffffff;\\n}\\n\\n.mostage-help-body {\\n  padding: 0;\\n}\\n\\n.mostage-help-section {\\n  margin-bottom: 12px;\\n}\\n\\n.mostage-help-section:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.mostage-help-section h4 {\\n  margin: 0 0 6px 0;\\n  color: #ffffff;\\n  font-size: 14px;\\n  font-weight: 600;\\n}\\n\\n.mostage-help-item {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  padding: 2px 0;\\n  border-bottom: none;\\n}\\n\\n.mostage-help-item:last-child {\\n  border-bottom: none;\\n}\\n\\n.mostage-help-description {\\n  color: #e2e8f0;\\n  font-size: 13px;\\n}\\n\\n.mostage-help-keys {\\n  display: flex;\\n  gap: 4px;\\n}\\n\\n.mostage-help-key {\\n  background: rgba(255, 255, 255, 0.1);\\n  border: 1px solid rgba(255, 255, 255, 0.3);\\n  padding: 2px 6px;\\n  border-radius: 4px;\\n  font-family: monospace;\\n  font-size: 12px;\\n  color: #ffffff;\\n  font-weight: 500;\\n  cursor: default;\\n}\\n\\n/* Overview Mode Help - Bottom Right */\\n.mostage-overview-help {\\n  position: static;\\n  bottom: 30px;\\n  right: 30px;\\n  background: rgba(0, 0, 0, 0.8);\\n  color: #ffffff;\\n  padding: 15px 20px;\\n  border-radius: 3px;\\n  font-size: 14px;\\n  line-height: 1.5;\\n  backdrop-filter: blur(10px);\\n  border: 1px solid rgba(255, 255, 255, 0.2);\\n  z-index: 2002;\\n  width: 280px;\\n  opacity: 0;\\n  transform: translateY(10px) scale(0.95);\\n  transition:\\n    opacity 0.3s ease-out,\\n    transform 0.3s ease-out;\\n}\\n\\n/* Content wrapper for overview help */\\n.mostage-overview-help-content {\\n  position: relative;\\n  background: none;\\n  border-radius: 0;\\n  box-shadow: none;\\n  max-width: none;\\n  width: auto;\\n  max-height: none;\\n  overflow: visible;\\n  z-index: auto;\\n}\\n\\n/* Unified help styles - both normal and overview use the same structure */\\n\\n/* Header styles for both modes */\\n.mostage-help-header,\\n.mostage-overview-help-header {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  padding: 0 0 8px 0;\\n  border-bottom: 1px solid rgba(255, 255, 255, 0.2);\\n  margin-bottom: 8px;\\n}\\n\\n.mostage-help-header h3,\\n.mostage-overview-help-header h3 {\\n  margin: 0;\\n  color: #007acc;\\n  font-size: 16px;\\n  font-weight: 600;\\n}\\n\\n.mostage-help-close,\\n.mostage-overview-help-close {\\n  background: none;\\n  border: none;\\n  font-size: 18px;\\n  color: #ffffff;\\n  cursor: pointer;\\n  padding: 2px;\\n  border-radius: 4px;\\n  transition: all 0.2s ease;\\n}\\n\\n.mostage-help-close:hover,\\n.mostage-overview-help-close:hover {\\n  background: rgba(255, 255, 255, 0.1);\\n  color: #ffffff;\\n}\\n\\n/* Body styles for both modes */\\n.mostage-help-body,\\n.mostage-overview-help-body {\\n  padding: 0;\\n}\\n\\n.mostage-help-item,\\n.mostage-overview-help-item {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  margin-bottom: 4px;\\n}\\n\\n.mostage-help-key,\\n.mostage-overview-help-key {\\n  background: rgba(255, 255, 255, 0.1);\\n  padding: 2px 6px;\\n  border-radius: 4px;\\n  font-family: monospace;\\n  font-size: 12px;\\n  border: 1px solid rgba(255, 255, 255, 0.3);\\n}\\n\\n.mostage-help-description,\\n.mostage-overview-help-description {\\n  color: #e2e8f0;\\n  font-size: 13px;\\n}\\n\\n.mostage-help-keys,\\n.mostage-overview-help-keys {\\n  display: flex;\\n  gap: 4px;\\n}\\n\\n/* ==========================================================================\\n   RESPONSIVE STYLES\\n   ========================================================================== */\\n\\n/* Tablet devices */\\n@media screen and (min-width: 481px) and (max-width: 768px) {\\n  .mostage-help {\\n    top: 20px;\\n    right: 20px;\\n    width: 280px;\\n    font-size: 12px;\\n    padding: 12px 16px;\\n  }\\n\\n  .mostage-help-header h3 {\\n    font-size: 14px;\\n  }\\n\\n  .mostage-help-section h4 {\\n    font-size: 12px;\\n  }\\n\\n  .mostage-help-description {\\n    font-size: 11px;\\n  }\\n\\n  .mostage-help-key {\\n    font-size: 10px;\\n    padding: 1px 4px;\\n  }\\n}\\n\\n/* Mobile devices - Hide help by default */\\n@media screen and (max-width: 480px) {\\n  .mostage-help {\\n    display: none;\\n  }\\n}\\n\\n/* ==========================================================================\\n   ANIMATIONS\\n   ========================================================================== */\\n\\n@keyframes helpFadeIn {\\n  from {\\n    opacity: 0;\\n    transform: translateY(-10px);\\n  }\\n  to {\\n    opacity: 1;\\n    transform: translateY(0);\\n  }\\n}\\n\\n/* ==========================================================================\\n   ACCESSIBILITY & INTERACTIONS\\n   ========================================================================== */\\n\\n/* Touch-friendly interactions */\\n@media (hover: none) and (pointer: coarse) {\\n  .mostage-help button,\\n  .mostage-overview-help button {\\n    min-width: 44px;\\n    min-height: 44px;\\n    touch-action: manipulation;\\n  }\\n}\\n\\n/* Focus indicators for keyboard navigation */\\n.mostage-help button:focus,\\n.mostage-overview-help button:focus {\\n  outline: 2px solid var(--mostage-primary-color, #667eea);\\n  outline-offset: 2px;\\n}\\n\"","export default \"/* Mostage Responsive Styles */\\n\\n/* ==========================================================================\\n   BASE STYLES (Desktop First)\\n   ========================================================================== */\\n\\n/* Default styles are for desktop/larger screens */\\n\\n/* ==========================================================================\\n   TABLET DEVICES (768px and below)\\n   ========================================================================== */\\n\\n@media screen and (max-width: 768px) {\\n  .mostage-container {\\n    font-size: 16px;\\n    line-height: 1.5;\\n    overflow-x: hidden;\\n  }\\n\\n  .mostage-slide {\\n    padding: 1rem;\\n    font-size: 14px;\\n    line-height: 1.6;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n    padding-bottom: 5rem; /* Space for controller */\\n  }\\n\\n  /* Typography scaling */\\n  .mostage-slide h1 {\\n    font-size: 1.8rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.5rem;\\n  }\\n\\n  .mostage-slide h2 {\\n    font-size: 1.5rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.4rem;\\n  }\\n\\n  .mostage-slide h3 {\\n    font-size: 1.3rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.2rem;\\n  }\\n\\n  .mostage-slide h4 {\\n    font-size: 1.1rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.2rem;\\n  }\\n\\n  .mostage-slide h5 {\\n    font-size: 0.8rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.2rem;\\n  }\\n\\n  .mostage-slide h6 {\\n    font-size: 0.7rem;\\n    line-height: 1.8;\\n    margin-bottom: 0.1rem;\\n  }\\n\\n  .mostage-slide p {\\n    font-size: 14px;\\n    line-height: 1.8;\\n    margin-bottom: 0.3rem;\\n  }\\n\\n  /* Lists */\\n  .mostage-slide ul,\\n  .mostage-slide ol {\\n    padding-left: 1.2rem;\\n    margin: 0.5rem 0;\\n  }\\n\\n  .mostage-slide li {\\n    font-size: 14px;\\n    line-height: 1.4;\\n    margin-bottom: 0.2rem;\\n  }\\n\\n  /* Code blocks */\\n  .mostage-slide pre {\\n    font-size: 12px;\\n    padding: 0.8rem;\\n    margin: 0.5rem 0;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n  }\\n\\n  /* Tables */\\n  .mostage-slide table {\\n    font-size: 12px;\\n    width: 100%;\\n    display: block;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n  }\\n\\n  .mostage-slide th,\\n  .mostage-slide td {\\n    padding: 0.3rem 0.5rem;\\n    white-space: nowrap;\\n  }\\n\\n  /* Images */\\n  .mostage-slide img {\\n    max-width: 100%;\\n    height: auto;\\n    display: block;\\n    margin: 0.5rem auto;\\n  }\\n\\n  /* Blockquotes */\\n  .mostage-slide blockquote {\\n    font-size: 13px;\\n    padding: 0.5rem 0.8rem;\\n    margin: 0.5rem 0;\\n    border-left-width: 3px;\\n  }\\n\\n  /* Header and Footer */\\n  .mostage-header,\\n  .mostage-footer {\\n    padding: 0.5rem;\\n    font-size: 12px;\\n    max-width: 100%;\\n    overflow: hidden;\\n    text-overflow: ellipsis;\\n    white-space: nowrap;\\n  }\\n\\n  .mostage-header {\\n    top: 2rem;\\n    z-index: 1000;\\n  }\\n\\n  .mostage-footer {\\n    bottom: 2rem;\\n    z-index: 1000;\\n  }\\n\\n  /* Navigation */\\n  .mostage-navigation {\\n    font-size: 12px;\\n  }\\n\\n  /* Touch-friendly interactions */\\n  .mostage-navigation button {\\n    min-width: 44px;\\n    min-height: 44px;\\n    touch-action: manipulation;\\n  }\\n}\\n\\n/* ==========================================================================\\n   MOBILE DEVICES (480px and below)\\n   ========================================================================== */\\n\\n@media screen and (max-width: 480px) {\\n  .mostage-container {\\n    font-size: 14px;\\n  }\\n\\n  .mostage-slide {\\n    padding: 0.8rem;\\n    font-size: 13px;\\n  }\\n\\n  .mostage-slide h1 {\\n    font-size: 1.5rem;\\n  }\\n\\n  .mostage-slide h2 {\\n    font-size: 1.3rem;\\n  }\\n\\n  .mostage-slide h3 {\\n    font-size: 1.1rem;\\n  }\\n\\n  .mostage-slide h4 {\\n    font-size: 1rem;\\n  }\\n\\n  .mostage-slide p {\\n    font-size: 13px;\\n  }\\n\\n  .mostage-slide pre {\\n    font-size: 11px;\\n    padding: 0.6rem;\\n  }\\n\\n  .mostage-slide code {\\n    font-size: 11px;\\n  }\\n\\n  .mostage-slide table {\\n    font-size: 11px;\\n  }\\n\\n  .mostage-slide th,\\n  .mostage-slide td {\\n    padding: 0.2rem 0.3rem;\\n  }\\n\\n  .mostage-slide blockquote {\\n    font-size: 12px;\\n    padding: 0.4rem 0.6rem;\\n  }\\n\\n  .mostage-header,\\n  .mostage-footer {\\n    /* font-size: 11px;\\n    padding: 0.3rem 1.2rem; */\\n    display: none !important;\\n  }\\n}\\n\\n/* ==========================================================================\\n   SMALL MOBILE DEVICES (320px and below)\\n   ========================================================================== */\\n\\n@media screen and (max-width: 320px) {\\n  .mostage-header,\\n  .mostage-footer {\\n    display: none;\\n  }\\n\\n  .mostage-slide-number {\\n    display: none;\\n  }\\n}\\n\\n/* ==========================================================================\\n   HIGH DPI DISPLAYS\\n   ========================================================================== */\\n\\n@media screen and (-webkit-min-device-pixel-ratio: 2),\\n  screen and (min-resolution: 192dpi) {\\n  .mostage-slide img {\\n    image-rendering: -webkit-optimize-contrast;\\n    image-rendering: crisp-edges;\\n  }\\n}\\n\\n/* ==========================================================================\\n   ACCESSIBILITY IMPROVEMENTS\\n   ========================================================================== */\\n\\n/* Focus indicators for keyboard navigation */\\n.mostage-navigation button:focus {\\n  outline: 2px solid var(--mostage-primary-color, #667eea);\\n  outline-offset: 2px;\\n}\\n\\n/* Reduced motion for users who prefer it */\\n@media (prefers-reduced-motion: reduce) {\\n  .mostage-slide {\\n    transition: none;\\n  }\\n\\n  .mostage-container * {\\n    animation-duration: 0.01ms;\\n    animation-iteration-count: 1;\\n    transition-duration: 0.01ms;\\n  }\\n}\\n\\n/* High contrast mode support */\\n@media (prefers-contrast: high) {\\n  .mostage-slide {\\n    border: 2px solid currentColor;\\n  }\\n\\n  .mostage-slide h1,\\n  .mostage-slide h2,\\n  .mostage-slide h3,\\n  .mostage-slide h4,\\n  .mostage-slide h5,\\n  .mostage-slide h6 {\\n    text-decoration: underline;\\n  }\\n}\\n\\n/* ==========================================================================\\n   UTILITY CLASSES\\n   ========================================================================== */\\n\\n.mobile-only {\\n  display: none;\\n}\\n\\n@media screen and (max-width: 768px) {\\n  .mobile-only {\\n    display: block;\\n  }\\n}\\n\"","export default \"/* Text Content Styles - For text parser specific content */\\n\\n.text-content {\\n  width: 100%;\\n  max-width: 100%;\\n}\\n\\n.text-heading {\\n  margin: 1.5rem 0 1rem 0;\\n  font-weight: 600;\\n  line-height: 1.3;\\n}\\n\\n.text-heading:first-child {\\n  margin-top: 0;\\n}\\n\\n.text-paragraph {\\n  margin: 1rem 0;\\n  line-height: 1.6;\\n}\\n\\n.text-paragraph:first-child {\\n  margin-top: 0;\\n}\\n\\n.text-paragraph:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.text-emphasis {\\n  margin: 1.5rem 0;\\n  padding: 1rem;\\n  background: rgba(0, 122, 204, 0.1);\\n  border-left: 4px solid var(--accent-color, #007acc);\\n  border-radius: 4px;\\n  font-weight: 500;\\n  font-style: italic;\\n}\\n\"","export default \"/* Dark Theme - Mostage */\\n\\n:root {\\n  --mostage-bg-color: #0f0f23;\\n  --mostage-text-color: #e2e8f0;\\n  --mostage-primary-color: #667eea;\\n  --mostage-secondary-color: #764ba2;\\n  --mostage-accent-color: #fbb6ce;\\n  --mostage-border-color: #4a5568;\\n  --mostage-highlight-color: #63b3ed;\\n}\\n\\n.mostage-container {\\n  background: linear-gradient(135deg, var(--mostage-bg-color) 0%, #1a1a2e 100%);\\n  color: var(--mostage-text-color);\\n  font-family:\\n    \\\"Inter\\\",\\n    -apple-system,\\n    BlinkMacSystemFont,\\n    \\\"Segoe UI\\\",\\n    \\\"Roboto\\\",\\n    sans-serif;\\n}\\n\\n.mostage-slide {\\n  background: rgba(26, 32, 44, 0.9);\\n  color: var(--mostage-text-color);\\n  border: 1px solid rgba(74, 85, 104, 0.6);\\n  box-shadow:\\n    0 20px 40px rgba(0, 0, 0, 0.3),\\n    0 8px 16px rgba(0, 0, 0, 0.2);\\n  backdrop-filter: blur(10px);\\n}\\n\\n.mostage-slide h1,\\n.mostage-slide h2,\\n.mostage-slide h3,\\n.mostage-slide h4,\\n.mostage-slide h5,\\n.mostage-slide h6 {\\n  color: #ffffff;\\n  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\\n}\\n\\n.mostage-slide h1 {\\n  background: linear-gradient(\\n    135deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n  -webkit-background-clip: text;\\n  -webkit-text-fill-color: transparent;\\n  background-clip: text;\\n}\\n\\n.mostage-slide pre {\\n  background: linear-gradient(135deg, #2d3748 0%, #1a202c 100%);\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n.mostage-slide blockquote {\\n  color: #cbd5e0;\\n  background: rgba(74, 85, 104, 0.3);\\n  border-left-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide a {\\n  color: #90cdf4;\\n}\\n\\n.mostage-slide a:hover {\\n  color: var(--mostage-highlight-color);\\n}\\n\\n.mostage-progress-bar {\\n  background: rgba(26, 32, 44, 0.8);\\n  backdrop-filter: blur(10px);\\n}\\n\\n.mostage-progress-fill {\\n  background: linear-gradient(\\n    90deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n}\\n\\n.mostage-slide-number {\\n  background: rgba(26, 32, 44, 0.9);\\n  color: #cbd5e0;\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn {\\n  background: rgba(26, 32, 44, 0.9);\\n  color: #cbd5e0;\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn:hover {\\n  background: rgba(45, 55, 72, 0.9);\\n  color: var(--mostage-text-color);\\n  border-color: rgba(113, 128, 150, 0.8);\\n}\\n\\n.mostage-overview-slide {\\n  background: rgba(26, 32, 44, 0.9);\\n  border: 2px solid var(--mostage-border-color);\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-overview-slide:hover {\\n  background: rgba(45, 55, 72, 0.9);\\n  border-color: rgba(113, 128, 150, 0.8);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n/* Table background for dark theme */\\n.mostage-slide table {\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-slide th,\\n.mostage-slide td {\\n  border: 1px solid var(--mostage-border-color);\\n}\\n\\n/* Dark Theme Header and Footer */\\n.mostage-container .mostage-header {\\n  background: linear-gradient(\\n    135deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n  -webkit-background-clip: text;\\n  -webkit-text-fill-color: transparent;\\n  background-clip: text;\\n}\\n\"","export default \"/* Dracula Theme - Mostage (Official Colors) */\\n:root {\\n  --mostage-bg-color: #282a36; /* Background */\\n  --mostage-text-color: #f8f8f2; /* Foreground */\\n  --mostage-primary-color: #bd93f9; /* Purple */\\n  --mostage-secondary-color: #ff79c6; /* Pink */\\n  --mostage-accent-color: #ffb86c; /* Orange */\\n  --mostage-border-color: #6272a4; /* Comment */\\n  --mostage-highlight-color: #50fa7b; /* Green */\\n  --mostage-cyan-color: #8be9fd; /* Cyan */\\n}\\n\\n.mostage-container {\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  font-family:\\n    \\\"Inter\\\",\\n    -apple-system,\\n    BlinkMacSystemFont,\\n    \\\"Segoe UI\\\",\\n    \\\"Roboto\\\",\\n    sans-serif;\\n}\\n\\n.mostage-slide {\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  border: 1px solid var(--mostage-border-color);\\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.mostage-slide h1,\\n.mostage-slide h2,\\n.mostage-slide h3,\\n.mostage-slide h4,\\n.mostage-slide h5,\\n.mostage-slide h6 {\\n  color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide h1 {\\n  color: var(--mostage-secondary-color);\\n}\\n\\n.mostage-slide pre {\\n  background: var(--mostage-bg-color);\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n.mostage-slide blockquote {\\n  color: var(--mostage-border-color);\\n  background: var(--mostage-bg-color);\\n  border-left-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide a {\\n  color: var(--mostage-cyan-color);\\n}\\n\\n.mostage-slide a:hover {\\n  color: var(--mostage-highlight-color);\\n}\\n\\n.mostage-progress-bar {\\n  background: var(--mostage-bg-color);\\n}\\n\\n.mostage-progress-fill {\\n  background: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide-number {\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn {\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn:hover {\\n  background: var(--mostage-border-color);\\n  color: var(--mostage-secondary-color);\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-overview-slide {\\n  background: var(--mostage-bg-color);\\n  border: 2px solid var(--mostage-border-color);\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-overview-slide:hover {\\n  background: var(--mostage-border-color);\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-primary-color);\\n}\\n\"","export default \"/* Light Theme - Mostage */\\n:root {\\n  --mostage-bg-color: #fdfbfb;\\n  --mostage-text-color: #2d3748;\\n  --mostage-primary-color: #667eea;\\n  --mostage-secondary-color: #764ba2;\\n  --mostage-accent-color: #e53e3e;\\n  --mostage-border-color: #e2e8f0;\\n  --mostage-highlight-color: #5a67d8;\\n}\\n\\n.mostage-container {\\n  background: linear-gradient(135deg, var(--mostage-bg-color) 0%, #ebedee 100%);\\n  color: var(--mostage-text-color);\\n  font-family:\\n    \\\"Inter\\\",\\n    -apple-system,\\n    BlinkMacSystemFont,\\n    \\\"Segoe UI\\\",\\n    \\\"Roboto\\\",\\n    sans-serif;\\n}\\n\\n.mostage-slide {\\n  background: rgba(255, 255, 255, 0.9);\\n  color: var(--mostage-text-color);\\n  border: 1px solid rgba(226, 232, 240, 0.8);\\n  box-shadow:\\n    0 20px 40px rgba(0, 0, 0, 0.05),\\n    0 8px 16px rgba(0, 0, 0, 0.03);\\n  backdrop-filter: blur(10px);\\n}\\n\\n.mostage-slide h1,\\n.mostage-slide h2,\\n.mostage-slide h3,\\n.mostage-slide h4,\\n.mostage-slide h5,\\n.mostage-slide h6 {\\n  color: #1a202c;\\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\\n}\\n\\n.mostage-slide h1 {\\n  background: linear-gradient(\\n    135deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n  -webkit-background-clip: text;\\n  -webkit-text-fill-color: transparent;\\n  background-clip: text;\\n}\\n\\n.mostage-slide pre {\\n  background: linear-gradient(135deg, #f7fafc 0%, #edf2f7 100%);\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n.mostage-slide blockquote {\\n  color: #4a5568;\\n  background: rgba(237, 242, 247, 0.3);\\n  border-left-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide a {\\n  color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide a:hover {\\n  color: var(--mostage-highlight-color);\\n}\\n\\n.mostage-progress-bar {\\n  background: rgba(255, 255, 255, 0.2);\\n  backdrop-filter: blur(10px);\\n}\\n\\n.mostage-progress-fill {\\n  background: linear-gradient(\\n    90deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n}\\n\\n.mostage-slide-number {\\n  background: rgba(255, 255, 255, 0.9);\\n  color: #4a5568;\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn {\\n  background: rgba(255, 255, 255, 0.9);\\n  color: #4a5568;\\n  border-color: var(--mostage-border-color);\\n}\\n\\n.mostage-btn:hover {\\n  background: rgba(255, 255, 255, 0.95);\\n  color: var(--mostage-text-color);\\n  border-color: rgba(203, 213, 224, 0.8);\\n}\\n\\n.mostage-overview-slide {\\n  background: rgba(255, 255, 255, 0.95);\\n  border: 2px solid var(--mostage-border-color);\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-overview-slide:hover {\\n  background: rgba(255, 255, 255, 0.98);\\n  border-color: rgba(203, 213, 224, 0.8);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-primary-color);\\n}\\n\"","export default \"/* Ocean Theme - Mostage */\\n:root {\\n  --mostage-bg-color: #0f1419;\\n  --mostage-text-color: #e6f1ff;\\n  --mostage-primary-color: #00d4ff;\\n  --mostage-secondary-color: #36d7b7;\\n  --mostage-accent-color: #ff6b6b;\\n  --mostage-border-color: #1e3a8a;\\n  --mostage-highlight-color: #0ea5e9;\\n}\\n\\n.mostage-container {\\n  background: linear-gradient(135deg, var(--mostage-bg-color) 0%, #1e3a8a 100%);\\n  color: var(--mostage-text-color);\\n  font-family:\\n    \\\"Inter\\\",\\n    -apple-system,\\n    BlinkMacSystemFont,\\n    \\\"Segoe UI\\\",\\n    \\\"Roboto\\\",\\n    sans-serif;\\n}\\n\\n.mostage-slide {\\n  background: rgba(30, 58, 138, 0.1);\\n  color: var(--mostage-text-color);\\n  border: 1px solid var(--mostage-border-color);\\n  backdrop-filter: blur(10px);\\n}\\n\\n.mostage-slide h1,\\n.mostage-slide h2,\\n.mostage-slide h3,\\n.mostage-slide h4,\\n.mostage-slide h5,\\n.mostage-slide h6 {\\n  color: var(--mostage-primary-color);\\n  text-shadow: 0 0 10px rgba(0, 212, 255, 0.3);\\n}\\n\\n.mostage-slide h1 {\\n  background: linear-gradient(\\n    135deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n  -webkit-background-clip: text;\\n  -webkit-text-fill-color: transparent;\\n  background-clip: text;\\n}\\n\\n.mostage-slide pre {\\n  background: #1e293b;\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n.mostage-slide blockquote {\\n  color: var(--mostage-secondary-color);\\n  background: rgba(54, 215, 183, 0.1);\\n  border-left-color: var(--mostage-secondary-color);\\n}\\n\\n.mostage-slide a {\\n  color: var(--mostage-primary-color);\\n  text-decoration: none;\\n  border-bottom: 1px solid transparent;\\n  transition: all 0.3s ease;\\n}\\n\\n.mostage-slide a:hover {\\n  border-bottom-color: var(--mostage-primary-color);\\n  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);\\n}\\n\\n.mostage-progress-bar {\\n  background: var(--mostage-primary-color);\\n  box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);\\n}\\n\\n.mostage-progress-fill {\\n  background: linear-gradient(\\n    90deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 100%\\n  );\\n}\\n\\n.mostage-slide-number {\\n  background: rgba(30, 58, 138, 0.8);\\n  color: var(--mostage-primary-color);\\n  border: 1px solid var(--mostage-border-color);\\n  backdrop-filter: blur(5px);\\n}\\n\\n.mostage-btn {\\n  background: rgba(30, 58, 138, 0.8);\\n  color: var(--mostage-primary-color);\\n  border: 1px solid var(--mostage-border-color);\\n  backdrop-filter: blur(5px);\\n  transition: all 0.3s ease;\\n}\\n\\n.mostage-btn:hover {\\n  background: rgba(0, 212, 255, 0.2);\\n  box-shadow: 0 0 15px rgba(0, 212, 255, 0.4);\\n}\\n\\n.mostage-overview-slide {\\n  background: rgba(15, 20, 25, 0.9);\\n  border: 2px solid var(--mostage-border-color);\\n  color: var(--mostage-text-color);\\n}\\n\\n.mostage-overview-slide:hover {\\n  background: rgba(0, 212, 255, 0.1);\\n  border-color: var(--mostage-primary-color);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-primary-color);\\n}\\n\"","export default \"/* Rainbow Theme - Mostage (Colorful & Bright) */\\n:root {\\n  --mostage-bg-color: #e2e8f0; /* Background */\\n  --mostage-text-color: #1e293b; /* Dark text */\\n  --mostage-primary-color: #3b82f6; /* Blue */\\n  --mostage-secondary-color: #8b5cf6; /* Purple */\\n  --mostage-accent-color: #f59e0b; /* Orange */\\n  --mostage-border-color: #e2e8f0; /* Light border */\\n  --mostage-highlight-color: #10b981; /* Green */\\n  --mostage-pink-color: #ec4899; /* Pink */\\n  --mostage-red-color: #ef4444; /* Red */\\n  --mostage-yellow-color: #eab308; /* Yellow */\\n}\\n\\n.mostage-container {\\n  background: var(--mostage-bg-color);\\n  color: var(--mostage-text-color);\\n  font-family:\\n    \\\"Inter\\\",\\n    -apple-system,\\n    BlinkMacSystemFont,\\n    \\\"Segoe UI\\\",\\n    \\\"Roboto\\\",\\n    sans-serif;\\n}\\n\\n.mostage-slide {\\n  background: #ffffff;\\n  color: var(--mostage-text-color);\\n  border: 2px solid var(--mostage-border-color);\\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\\n}\\n\\n.mostage-slide h1,\\n.mostage-slide h2,\\n.mostage-slide h3,\\n.mostage-slide h4,\\n.mostage-slide h5,\\n.mostage-slide h6 {\\n  color: var(--mostage-primary-color);\\n}\\n\\n.mostage-slide h1 {\\n  color: var(--mostage-secondary-color);\\n  background: linear-gradient(\\n    135deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 50%,\\n    var(--mostage-pink-color) 100%\\n  );\\n  -webkit-background-clip: text;\\n  -webkit-text-fill-color: transparent;\\n  background-clip: text;\\n}\\n\\n.mostage-slide h2 {\\n  color: var(--mostage-pink-color);\\n}\\n\\n.mostage-slide h3 {\\n  color: var(--mostage-accent-color);\\n}\\n\\n.mostage-slide h4 {\\n  color: var(--mostage-highlight-color);\\n}\\n\\n.mostage-slide h5 {\\n  color: var(--mostage-red-color);\\n}\\n\\n.mostage-slide h6 {\\n  color: var(--mostage-yellow-color);\\n}\\n\\n.mostage-slide pre {\\n  background: #1e293b;\\n  border: 1px solid var(--mostage-border-color);\\n  padding: 0.5rem 1.5rem;\\n}\\n\\n.mostage-slide blockquote {\\n  color: var(--mostage-accent-color);\\n  background: #fef3c7;\\n  border-left: 4px solid var(--mostage-yellow-color);\\n  border-radius: 0 8px 8px 0;\\n}\\n\\n.mostage-slide a {\\n  color: var(--mostage-primary-color);\\n  text-decoration: none;\\n  border-bottom: 2px solid transparent;\\n  transition: all 0.3s ease;\\n}\\n\\n.mostage-slide a:hover {\\n  color: var(--mostage-pink-color);\\n  border-bottom-color: var(--mostage-pink-color);\\n}\\n\\n.mostage-progress-bar {\\n  background: #e2e8f0;\\n  border-radius: 10px;\\n}\\n\\n.mostage-progress-fill {\\n  background: linear-gradient(\\n    90deg,\\n    var(--mostage-primary-color) 0%,\\n    var(--mostage-secondary-color) 25%,\\n    var(--mostage-pink-color) 50%,\\n    var(--mostage-accent-color) 75%,\\n    var(--mostage-highlight-color) 100%\\n  );\\n  border-radius: 10px;\\n}\\n\\n.mostage-slide-number {\\n  background: var(--mostage-primary-color);\\n  color: #ffffff;\\n  border: 2px solid var(--mostage-secondary-color);\\n  border-radius: 50%;\\n}\\n\\n.mostage-btn {\\n  background: var(--mostage-primary-color);\\n  color: #ffffff;\\n  border: 2px solid var(--mostage-primary-color);\\n  border-radius: 8px;\\n  transition: all 0.3s ease;\\n}\\n\\n.mostage-btn:hover {\\n  background: var(--mostage-secondary-color);\\n  border-color: var(--mostage-secondary-color);\\n  transform: translateY(-2px);\\n  box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);\\n}\\n\\n.mostage-overview-slide {\\n  background: #ffffff;\\n  border: 3px solid var(--mostage-border-color);\\n  color: var(--mostage-text-color);\\n  border-radius: 12px;\\n  transition: all 0.3s ease;\\n}\\n\\n.mostage-overview-slide:hover {\\n  border-color: var(--mostage-primary-color);\\n  transform: scale(1.02);\\n  box-shadow: 0 8px 20px rgba(59, 130, 246, 0.2);\\n}\\n\\n.mostage-overview-slide.active {\\n  border-color: var(--mostage-secondary-color);\\n  background: linear-gradient(135deg, #f8fafc 0%, #e0e7ff 100%);\\n}\\n\"","/**\n * marked v16.3.0 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function G(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"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|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {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[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").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\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\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\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).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\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).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:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ze=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"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])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:Ge,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ze,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:He,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\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.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let H=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let Z=e.split(`\n`,1)[0],A;if(k=Z,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\"  \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\"    \"),te.test(k)||ne.test(k)||me.test(k)||H.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=Z+`\n`,e=e.substring(Z.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let 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){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let 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){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let 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){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.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);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));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}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var S=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=$;Lexer=b;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];S.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,G(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,G(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=$;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=S;d.parse=d;var Dt=d.options,Ht=d.setOptions,Zt=d.use,Gt=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{S as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Ht as setOptions,Zt as use,Gt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","import { marked } from \"marked\";\n\n/**\n * Markdown parser using marked.js\n * Supports HTML within markdown content\n */\nexport class MarkdownParser {\n  constructor() {\n    // Configure marked with appropriate settings for presentations\n    marked.setOptions({\n      breaks: true, // Convert line breaks to <br>\n      gfm: true, // GitHub Flavored Markdown\n    });\n  }\n\n  /**\n   * Parse markdown content to HTML\n   * @param content - Markdown content string\n   * @returns HTML string\n   */\n  parse(content: string): string {\n    if (!content || content.trim() === \"\") {\n      return \"\";\n    }\n\n    try {\n      return marked.parse(content) as string;\n    } catch (error) {\n      console.error(\"Error parsing markdown:\", error);\n      return `<p>Error parsing markdown content</p>`;\n    }\n  }\n}\n","import { MoSlide } from \"@/types\";\nimport { MarkdownParser } from \"../utils/markdown-parser\";\n\n/**\n * Enhanced Content Service with better error handling and validation\n * Provides content loading, parsing, and validation functionality\n */\nexport class ContentService {\n  private markdownParser: MarkdownParser;\n  private cache: Map<string, string> = new Map();\n\n  constructor() {\n    this.markdownParser = new MarkdownParser();\n  }\n\n  /**\n   * Load content from various sources (file, URL, etc.)\n   * @param sourcePath - Path or URL to the content\n   * @returns Promise<string> - The loaded content\n   */\n  async loadContentFromSource(sourcePath: string): Promise<string> {\n    try {\n      // Check cache first\n      if (this.cache.has(sourcePath)) {\n        return this.cache.get(sourcePath)!;\n      }\n\n      const response = await fetch(sourcePath);\n\n      if (!response.ok) {\n        throw new ContentLoadError(\n          `Failed to load content from ${sourcePath}: ${response.status} ${response.statusText}`,\n          sourcePath,\n          response.status\n        );\n      }\n\n      const content = await response.text();\n\n      // Validate content\n      this.validateContent(content);\n\n      // Cache the content\n      this.cache.set(sourcePath, content);\n\n      return content;\n    } catch (error) {\n      if (error instanceof ContentLoadError) {\n        throw error;\n      }\n\n      throw new ContentLoadError(\n        `Error loading content from ${sourcePath}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        sourcePath\n      );\n    }\n  }\n\n  /**\n   * Parse content into slides\n   * @param content - Raw content string\n   * @returns Array of parsed slides\n   */\n  parseContent(content: string): MoSlide[] {\n    try {\n      this.validateContent(content);\n      return this.parseMarkdown(content);\n    } catch (error) {\n      throw new ContentParseError(\n        `Failed to parse content: ${error instanceof Error ? error.message : \"Unknown error\"}`\n      );\n    }\n  }\n\n  /**\n   * Parse markdown content to HTML\n   * @param content - Markdown content\n   * @returns HTML string\n   */\n  parseMarkdownToHtml(content: string): string {\n    try {\n      return this.markdownParser.parse(content);\n    } catch (error) {\n      throw new ContentParseError(\n        `Failed to parse markdown: ${error instanceof Error ? error.message : \"Unknown error\"}`\n      );\n    }\n  }\n\n  /**\n   * Clear content cache\n   */\n  clearCache(): void {\n    this.cache.clear();\n  }\n\n  /**\n   * Get cache statistics\n   */\n  getCacheStats(): { size: number; keys: string[] } {\n    return {\n      size: this.cache.size,\n      keys: Array.from(this.cache.keys()),\n    };\n  }\n\n  /**\n   * Parse markdown content into slides\n   * @param content - Raw markdown content\n   * @returns Array of slides\n   */\n  private parseMarkdown(content: string): MoSlide[] {\n    // Handle empty content\n    if (!content || content.trim().length === 0) {\n      return [\n        {\n          id: \"slide-0\",\n          content: \"\",\n          html: \"<div class='empty-slide'>Start typing your presentation content here...</div>\",\n        },\n      ];\n    }\n\n    const slideContents = content\n      .split(/^---\\s*$/gm)\n      .filter((slide) => slide.trim());\n\n    if (slideContents.length === 0) {\n      throw new ContentParseError(\"No slides found in content\");\n    }\n\n    return slideContents.map((slideContent, index) => {\n      const trimmedContent = slideContent.trim();\n\n      return {\n        id: `slide-${index}`,\n        content: trimmedContent,\n        html: this.markdownParser.parse(trimmedContent),\n      };\n    });\n  }\n\n  /**\n   * Validate content before processing\n   * @param content - Content to validate\n   */\n  private validateContent(content: string): void {\n    if (!content || typeof content !== \"string\") {\n      throw new ContentValidationError(\"Content must be a non-empty string\");\n    }\n\n    // if (content.trim().length === 0) {\n    //   throw new ContentValidationError(\"Content cannot be empty\");\n    // }\n\n    // // Check for minimum content length\n    // if (content.length < 10) {\n    //   throw new ContentValidationError(\n    //     \"Content is too short to be a valid presentation\"\n    //   );\n    // }\n\n    // Allow any content length for live editing scenarios\n    // No minimum length validation needed\n  }\n}\n\n/**\n * Custom error classes for better error handling\n */\nexport class ContentError extends Error {\n  constructor(\n    message: string,\n    public readonly code?: string\n  ) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}\n\nexport class ContentLoadError extends ContentError {\n  constructor(\n    message: string,\n    public readonly sourcePath: string,\n    public readonly statusCode?: number\n  ) {\n    super(message, \"CONTENT_LOAD_ERROR\");\n  }\n}\n\nexport class ContentParseError extends ContentError {\n  constructor(message: string) {\n    super(message, \"CONTENT_PARSE_ERROR\");\n  }\n}\n\nexport class ContentValidationError extends ContentError {\n  constructor(message: string) {\n    super(message, \"CONTENT_VALIDATION_ERROR\");\n  }\n}\n","/**\n * Navigation Service for Mostage\n * Provides centralized navigation management with enhanced functionality\n */\n\nimport { MoSlide } from \"@/types\";\n\n/**\n * Enhanced Navigation Service\n * Manages slide navigation with keyboard, touch, and programmatic controls\n */\nexport class NavigationService {\n  private container: HTMLElement;\n  private slides: MoSlide[] = [];\n  private currentSlideIndex = 0;\n  private keyboardEnabled = false;\n  private touchEnabled = false;\n  private navigationCallback?: (index: number) => void;\n  private eventListeners: Map<string, any> = new Map();\n\n  constructor(\n    container: HTMLElement,\n    keyboardEnabled: boolean = false,\n    touchEnabled: boolean = false,\n    navigationCallback?: (index: number) => void\n  ) {\n    this.container = container;\n    this.keyboardEnabled = keyboardEnabled;\n    this.touchEnabled = touchEnabled;\n    this.navigationCallback = navigationCallback;\n  }\n\n  /**\n   * Set slides for navigation\n   */\n  setSlides(slides: MoSlide[]): void {\n    this.slides = slides;\n    this.currentSlideIndex = Math.min(\n      this.currentSlideIndex,\n      slides.length - 1\n    );\n  }\n\n  /**\n   * Set current slide index\n   */\n  setCurrentSlideIndex(index: number): void {\n    if (index >= 0 && index < this.slides.length) {\n      this.currentSlideIndex = index;\n    }\n  }\n\n  /**\n   * Get current slide index\n   */\n  getCurrentSlideIndex(): number {\n    return this.currentSlideIndex;\n  }\n\n  /**\n   * Get total number of slides\n   */\n  getTotalSlides(): number {\n    return this.slides.length;\n  }\n\n  /**\n   * Setup navigation controls\n   */\n  setupNavigation(): void {\n    this.setupKeyboardNavigation();\n    this.setupTouchNavigation();\n  }\n\n  /**\n   * Setup keyboard navigation\n   */\n  private setupKeyboardNavigation(): void {\n    if (!this.keyboardEnabled) return;\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      this.handleKeyboardEvent(event);\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    this.eventListeners.set(\"keydown\", handleKeyDown);\n  }\n\n  /**\n   * Setup touch navigation\n   */\n  private setupTouchNavigation(): void {\n    if (!this.touchEnabled) return;\n\n    let startX = 0;\n    let startY = 0;\n    let endX = 0;\n    let endY = 0;\n\n    const handleTouchStart = (event: TouchEvent) => {\n      const touch = event.touches[0];\n      startX = touch.clientX;\n      startY = touch.clientY;\n    };\n\n    const handleTouchEnd = (event: TouchEvent) => {\n      const touch = event.changedTouches[0];\n      endX = touch.clientX;\n      endY = touch.clientY;\n\n      this.handleTouchGesture(startX, startY, endX, endY);\n    };\n\n    this.container.addEventListener(\"touchstart\", handleTouchStart);\n    this.container.addEventListener(\"touchend\", handleTouchEnd);\n\n    this.eventListeners.set(\"touchstart\", handleTouchStart);\n    this.eventListeners.set(\"touchend\", handleTouchEnd);\n  }\n\n  /**\n   * Handle keyboard events\n   */\n  private handleKeyboardEvent(event: KeyboardEvent): void {\n    const key = event.key;\n\n    switch (key) {\n      case \"ArrowRight\":\n      case \"ArrowDown\":\n      case \" \":\n        event.preventDefault();\n        this.nextSlide();\n        break;\n      case \"ArrowLeft\":\n      case \"ArrowUp\":\n        event.preventDefault();\n        this.previousSlide();\n        break;\n      case \"Home\":\n        event.preventDefault();\n        this.goToFirstSlide();\n        break;\n      case \"End\":\n        event.preventDefault();\n        this.goToLastSlide();\n        break;\n    }\n  }\n\n  /**\n   * Handle touch gestures\n   */\n  private handleTouchGesture(\n    startX: number,\n    startY: number,\n    endX: number,\n    endY: number\n  ): void {\n    const deltaX = endX - startX;\n    const deltaY = endY - startY;\n    const minSwipeDistance = 50;\n\n    // Check if it's a horizontal swipe\n    if (\n      Math.abs(deltaX) > Math.abs(deltaY) &&\n      Math.abs(deltaX) > minSwipeDistance\n    ) {\n      if (deltaX > 0) {\n        this.previousSlide();\n      } else {\n        this.nextSlide();\n      }\n    }\n    // Check if it's a vertical swipe\n    else if (\n      Math.abs(deltaY) > Math.abs(deltaX) &&\n      Math.abs(deltaY) > minSwipeDistance\n    ) {\n      if (deltaY > 0) {\n        // Swipe down - go to previous slide\n        this.previousSlide();\n      } else {\n        // Swipe up - go to next slide\n        this.nextSlide();\n      }\n    }\n  }\n\n  /**\n   * Navigate to next slide\n   */\n  nextSlide(): void {\n    if (this.currentSlideIndex < this.slides.length - 1) {\n      this.goToSlide(this.currentSlideIndex + 1);\n    }\n  }\n\n  /**\n   * Navigate to previous slide\n   */\n  previousSlide(): void {\n    if (this.currentSlideIndex > 0) {\n      this.goToSlide(this.currentSlideIndex - 1);\n    }\n  }\n\n  /**\n   * Go to first slide\n   */\n  goToFirstSlide(): void {\n    this.goToSlide(0);\n  }\n\n  /**\n   * Go to last slide\n   */\n  goToLastSlide(): void {\n    this.goToSlide(this.slides.length - 1);\n  }\n\n  /**\n   * Go to specific slide\n   */\n  goToSlide(index: number): void {\n    if (\n      index >= 0 &&\n      index < this.slides.length &&\n      index !== this.currentSlideIndex\n    ) {\n      this.currentSlideIndex = index;\n      this.navigationCallback?.(index);\n    }\n  }\n\n  /**\n   * Check if navigation is at first slide\n   */\n  isFirstSlide(): boolean {\n    return this.currentSlideIndex === 0;\n  }\n\n  /**\n   * Check if navigation is at last slide\n   */\n  isLastSlide(): boolean {\n    return this.currentSlideIndex === this.slides.length - 1;\n  }\n\n  /**\n   * Get navigation statistics\n   */\n  getNavigationStats(): {\n    currentSlide: number;\n    totalSlides: number;\n    progress: number;\n    isFirst: boolean;\n    isLast: boolean;\n  } {\n    return {\n      currentSlide: this.currentSlideIndex,\n      totalSlides: this.slides.length,\n      progress:\n        this.slides.length > 0\n          ? (this.currentSlideIndex + 1) / this.slides.length\n          : 0,\n      isFirst: this.isFirstSlide(),\n      isLast: this.isLastSlide(),\n    };\n  }\n\n  /**\n   * Enable keyboard navigation\n   */\n  enableKeyboard(): void {\n    this.keyboardEnabled = true;\n    this.setupKeyboardNavigation();\n  }\n\n  /**\n   * Disable keyboard navigation\n   */\n  disableKeyboard(): void {\n    this.keyboardEnabled = false;\n    this.removeEventListener(\"keydown\");\n  }\n\n  /**\n   * Enable touch navigation\n   */\n  enableTouch(): void {\n    this.touchEnabled = true;\n    this.setupTouchNavigation();\n  }\n\n  /**\n   * Disable touch navigation\n   */\n  disableTouch(): void {\n    this.touchEnabled = false;\n    this.removeEventListener(\"touchstart\");\n    this.removeEventListener(\"touchend\");\n  }\n\n  /**\n   * Remove specific event listener\n   */\n  private removeEventListener(eventType: string): void {\n    const listener = this.eventListeners.get(eventType);\n    if (listener) {\n      if (eventType === \"keydown\") {\n        document.removeEventListener(eventType, listener);\n      } else {\n        this.container.removeEventListener(eventType, listener);\n      }\n      this.eventListeners.delete(eventType);\n    }\n  }\n\n  /**\n   * Cleanup all event listeners\n   */\n  destroy(): void {\n    this.eventListeners.forEach((listener, eventType) => {\n      if (eventType === \"keydown\") {\n        document.removeEventListener(eventType, listener);\n      } else {\n        this.container.removeEventListener(eventType, listener);\n      }\n    });\n    this.eventListeners.clear();\n  }\n}\n","export interface TransitionConfig {\n  type?: \"horizontal\" | \"vertical\" | \"fade\" | \"slide\";\n  duration?: number;\n  easing?: string;\n}\n\nexport class TransitionManager {\n  private container: HTMLElement;\n  private transitionConfig: TransitionConfig;\n\n  constructor(container: HTMLElement, transitionConfig: TransitionConfig) {\n    this.container = container;\n    this.transitionConfig = transitionConfig;\n  }\n\n  animateTransition(fromIndex: number, toIndex: number): void {\n    const slides = this.container.querySelectorAll(\".mostage-slide\");\n    const fromSlide = slides[fromIndex] as HTMLElement;\n    const toSlide = slides[toIndex] as HTMLElement;\n\n    if (!fromSlide || !toSlide) return;\n\n    if (fromIndex === toIndex) {\n      this.showSlide(toIndex);\n      return;\n    }\n\n    const duration = this.transitionConfig.duration || 300;\n\n    // Clear any existing transitions first\n    fromSlide.style.transition = \"\";\n    toSlide.style.transition = \"\";\n\n    // Apply transition based on config\n    switch (this.transitionConfig.type) {\n      case \"fade\":\n        this.fadeTransition(fromSlide, toSlide, duration);\n        break;\n      case \"vertical\":\n        this.verticalTransition(\n          fromSlide,\n          toSlide,\n          toIndex > fromIndex,\n          duration\n        );\n        break;\n      case \"slide\":\n        this.slideTransition(fromSlide, toSlide, toIndex > fromIndex, duration);\n        break;\n      case \"horizontal\":\n      default:\n        this.horizontalTransition(\n          fromSlide,\n          toSlide,\n          toIndex > fromIndex,\n          duration\n        );\n        break;\n    }\n  }\n\n  showSlide(index: number): void {\n    const slides = this.container.querySelectorAll(\".mostage-slide\");\n    slides.forEach((slide, i) => {\n      const slideElement = slide as HTMLElement;\n      slideElement.style.display = i === index ? \"block\" : \"none\";\n      slideElement.style.opacity = \"1\";\n      slideElement.style.transform = \"\";\n    });\n  }\n\n  private fadeTransition(\n    fromSlide: HTMLElement,\n    toSlide: HTMLElement,\n    duration: number\n  ): void {\n    // Clear any existing transitions first\n    fromSlide.style.transition = \"\";\n    toSlide.style.transition = \"\";\n\n    // Set up initial states\n    fromSlide.style.opacity = \"1\";\n    toSlide.style.display = \"block\";\n    toSlide.style.opacity = \"0\";\n\n    // Force reflow to ensure initial positioning\n    toSlide.offsetHeight;\n\n    // Set transitions for smooth animation\n    fromSlide.style.transition = `opacity ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n    toSlide.style.transition = `opacity ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n\n    setTimeout(() => {\n      fromSlide.style.opacity = \"0\";\n      toSlide.style.opacity = \"1\";\n\n      setTimeout(() => {\n        fromSlide.style.display = \"none\";\n        fromSlide.style.opacity = \"1\";\n        toSlide.style.opacity = \"1\";\n        // Clear transitions after animation\n        fromSlide.style.transition = \"\";\n        toSlide.style.transition = \"\";\n      }, duration);\n    }, 50);\n  }\n\n  private horizontalTransition(\n    fromSlide: HTMLElement,\n    toSlide: HTMLElement,\n    isNext: boolean,\n    duration: number\n  ): void {\n    const direction = isNext ? \"translateX(-100%)\" : \"translateX(100%)\";\n    const enterDirection = isNext ? \"translateX(100%)\" : \"translateX(-100%)\";\n\n    // Clear any existing transitions first\n    fromSlide.style.transition = \"\";\n    toSlide.style.transition = \"\";\n\n    toSlide.style.display = \"block\";\n    toSlide.style.transform = enterDirection;\n\n    // Force reflow to ensure initial positioning\n    toSlide.offsetHeight;\n\n    // Set transitions for smooth animation\n    fromSlide.style.transition = `transform ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n    toSlide.style.transition = `transform ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n\n    setTimeout(() => {\n      fromSlide.style.transform = direction;\n      toSlide.style.transform = \"translateX(0)\";\n\n      setTimeout(() => {\n        fromSlide.style.display = \"none\";\n        fromSlide.style.transform = \"\";\n        toSlide.style.transform = \"\";\n        // Clear transitions after animation\n        fromSlide.style.transition = \"\";\n        toSlide.style.transition = \"\";\n      }, duration);\n    }, 50);\n  }\n\n  private verticalTransition(\n    fromSlide: HTMLElement,\n    toSlide: HTMLElement,\n    isNext: boolean,\n    duration: number\n  ): void {\n    const direction = isNext ? \"translateY(-100%)\" : \"translateY(100%)\";\n    const enterDirection = isNext ? \"translateY(100%)\" : \"translateY(-100%)\";\n\n    // Clear any existing transitions first\n    fromSlide.style.transition = \"\";\n    toSlide.style.transition = \"\";\n\n    toSlide.style.display = \"block\";\n    toSlide.style.transform = enterDirection;\n\n    // Force reflow to ensure initial positioning\n    toSlide.offsetHeight;\n\n    // Set transitions for smooth animation\n    fromSlide.style.transition = `transform ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n    toSlide.style.transition = `transform ${duration}ms ${this.transitionConfig.easing || \"ease-in-out\"}`;\n\n    setTimeout(() => {\n      fromSlide.style.transform = direction;\n      toSlide.style.transform = \"translateY(0)\";\n\n      setTimeout(() => {\n        fromSlide.style.display = \"none\";\n        fromSlide.style.transform = \"\";\n        toSlide.style.transform = \"\";\n        // Clear transitions after animation\n        fromSlide.style.transition = \"\";\n        toSlide.style.transition = \"\";\n      }, duration);\n    }, 50);\n  }\n\n  private slideTransition(\n    fromSlide: HTMLElement,\n    toSlide: HTMLElement,\n    isNext: boolean,\n    duration: number\n  ): void {\n    // Similar to horizontal but with different easing\n    this.horizontalTransition(fromSlide, toSlide, isNext, duration);\n  }\n}\n","// Help System - Domain-Driven Design\n// Everything in one file\n\nexport interface HelpItem {\n  description: string;\n  keys: string[];\n}\n\nexport interface HelpSection {\n  title: string;\n  items: HelpItem[];\n}\n\nexport type HelpMode = \"normal\" | \"overview\";\n\n// Help data\nconst HELP_DATA = {\n  overview: [\n    {\n      title: \"Keyboard Shortcuts\",\n      items: [\n        { description: \"Navigate\", keys: [\"←\", \"→\", \"Enter\"] },\n        { description: \"First slide\", keys: [\"Home\"] },\n        { description: \"Last slide\", keys: [\"End\"] },\n        { description: \"Exit\", keys: [\"Esc\", \"O\"] },\n      ],\n    },\n  ],\n  normal: [\n    {\n      title: \"Navigation\",\n      items: [\n        { description: \"Next slide\", keys: [\"→\", \"Space\"] },\n        { description: \"Previous slide\", keys: [\"←\"] },\n        { description: \"First slide\", keys: [\"Home\"] },\n        { description: \"Last slide\", keys: [\"End\"] },\n      ],\n    },\n    {\n      title: \"Modes\",\n      items: [\n        { description: \"Overview mode\", keys: [\"O\", \"Esc\"] },\n        { description: \"Help\", keys: [\"H\", \"?\"] },\n      ],\n    },\n  ],\n} as const;\n\n// HelpComponent - Help rendering component\nexport class HelpComponent {\n  private mode: HelpMode;\n  private sections: HelpSection[];\n  private prefix: string;\n\n  constructor(mode: HelpMode) {\n    this.mode = mode;\n    this.prefix =\n      mode === \"overview\" ? \"mostage-overview-help\" : \"mostage-help\";\n    this.sections = JSON.parse(JSON.stringify(HELP_DATA[mode]));\n  }\n\n  createHelpElement(): HTMLElement {\n    const container = document.createElement(\"div\");\n    container.className = this.prefix;\n    container.innerHTML = this.generateHTML();\n    return container;\n  }\n\n  private generateHTML(): string {\n    if (this.mode === \"overview\") {\n      const section = this.sections[0];\n      return `\n        <div class=\"${this.prefix}-content\">\n          <div class=\"${this.prefix}-header\">\n            <h3>${section.title}</h3>\n            <button class=\"${this.prefix}-close\">×</button>\n          </div>\n          <div class=\"${this.prefix}-body\">\n            ${this.renderItems(section.items)}\n          </div>\n        </div>\n      `;\n    } else {\n      return `\n        <div class=\"${this.prefix}-content\">\n          <div class=\"${this.prefix}-header\">\n            <h3>Keyboard Shortcuts</h3>\n            <button class=\"${this.prefix}-close\">×</button>\n          </div>\n          <div class=\"${this.prefix}-body\">\n            ${this.sections.map((section) => this.renderSection(section)).join(\"\")}\n          </div>\n        </div>\n      `;\n    }\n  }\n\n  private renderSection(section: HelpSection): string {\n    return `\n      <div class=\"${this.prefix}-section\">\n        <h4>${section.title}</h4>\n        ${this.renderItems(section.items)}\n      </div>\n    `;\n  }\n\n  private renderItems(items: HelpItem[]): string {\n    return items.map((item) => this.renderItem(item)).join(\"\");\n  }\n\n  private renderItem(item: HelpItem): string {\n    return `\n      <div class=\"${this.prefix}-item\">\n        <span class=\"${this.prefix}-description\">${item.description}</span>\n        ${this.renderKeys(item.keys)}\n      </div>\n    `;\n  }\n\n  private renderKeys(keys: string[]): string {\n    if (keys.length === 1) {\n      return `<span class=\"${this.prefix}-key\">${keys[0]}</span>`;\n    }\n    return `\n      <div class=\"${this.prefix}-keys\">\n        ${keys.map((key) => `<span class=\"${this.prefix}-key\">${key}</span>`).join(\"\")}\n      </div>\n    `;\n  }\n\n  addCloseButtonListener(element: HTMLElement, onClose: () => void): void {\n    const closeButton = element.querySelector(`.${this.prefix}-close`);\n    closeButton?.addEventListener(\"click\", onClose);\n  }\n}\n\n// Global flag to track if initial help has been shown in this session\nlet globalHasShownInitialHelp = false;\n\n// HelpManager - Help visibility management\nexport class HelpManager {\n  private isHelpVisible = false;\n  private helpContainer: HTMLElement | null = null;\n  private wasHelpVisibleBeforeOverview = false;\n  private helpComponent: HelpComponent;\n  private autoHideTimeout: number | null = null;\n  private container: HTMLElement;\n\n  constructor(container: HTMLElement) {\n    this.container = container;\n    this.helpComponent = new HelpComponent(\"normal\");\n  }\n\n  toggleHelp(): void {\n    if (this.isHelpVisible) {\n      this.hideHelp();\n    } else {\n      this.showHelp();\n    }\n  }\n\n  // Show help on initial load with auto-hide after 3 seconds\n  showInitialHelp(): void {\n    // Only show initial help once per session\n    if (globalHasShownInitialHelp) {\n      return;\n    }\n\n    globalHasShownInitialHelp = true;\n    this.showHelp();\n    this.scheduleAutoHide();\n  }\n\n  // Schedule auto-hide after 5 seconds\n  private scheduleAutoHide(): void {\n    this.clearAutoHide();\n    this.autoHideTimeout = window.setTimeout(() => {\n      this.hideHelp();\n    }, 3000);\n  }\n\n  // Clear auto-hide timeout\n  private clearAutoHide(): void {\n    if (this.autoHideTimeout) {\n      clearTimeout(this.autoHideTimeout);\n      this.autoHideTimeout = null;\n    }\n  }\n\n  getHelpVisible(): boolean {\n    return this.isHelpVisible;\n  }\n\n  hideForOverview(): void {\n    if (this.isHelpVisible) {\n      this.wasHelpVisibleBeforeOverview = true;\n      this.hideHelp();\n    } else {\n      this.wasHelpVisibleBeforeOverview = false;\n    }\n  }\n\n  restoreAfterOverview(): void {\n    if (this.wasHelpVisibleBeforeOverview) {\n      this.showHelp();\n      this.wasHelpVisibleBeforeOverview = false;\n    }\n  }\n\n  private showHelp(): void {\n    if (this.isHelpVisible) return;\n\n    this.isHelpVisible = true;\n    this.helpContainer = this.createHelpComponent();\n    this.container.appendChild(this.helpContainer);\n\n    // Trigger fade-in animation\n    requestAnimationFrame(() => {\n      if (this.helpContainer) {\n        this.helpContainer.classList.add(\"fade-in\");\n      }\n    });\n  }\n\n  private hideHelp(): void {\n    if (!this.isHelpVisible) return;\n\n    this.isHelpVisible = false;\n    this.clearAutoHide(); // Clear any pending auto-hide\n    this.hideHelpWithAnimation();\n  }\n\n  // Hide help with fade-out animation\n  private hideHelpWithAnimation(): void {\n    if (!this.helpContainer) return;\n\n    // Add fade-out class for animation\n    this.helpContainer.classList.add(\"fade-out\");\n    this.helpContainer.classList.remove(\"fade-in\");\n\n    // Wait for animation to complete, then remove element\n    setTimeout(() => {\n      if (this.helpContainer) {\n        this.helpContainer.remove();\n        this.helpContainer = null;\n      }\n    }, 300); // Match CSS transition duration\n  }\n\n  private createHelpComponent(): HTMLElement {\n    const helpContainer = this.helpComponent.createHelpElement();\n\n    // Add close button event listener\n    this.helpComponent.addCloseButtonListener(helpContainer, () => {\n      this.hideHelp();\n    });\n\n    return helpContainer;\n  }\n}\n","import { HelpComponent } from \"../help/help\";\nimport pkg from \"../../../../../package.json\";\n\nexport class OverviewManager {\n  private container: HTMLElement;\n  private currentSlideIndex = 0;\n  private isOverviewMode = false;\n  private overviewContainer: HTMLElement | null = null;\n  private overviewSelectedIndex = 0;\n  private onSlideChange: (index: number) => void;\n  private onExitOverview: () => void;\n  private onEnterOverview: () => void;\n  private helpComponent: HelpComponent;\n\n  constructor(\n    container: HTMLElement,\n    onSlideChange: (index: number) => void,\n    onExitOverview: () => void,\n    onEnterOverview?: () => void\n  ) {\n    this.container = container;\n    this.onSlideChange = onSlideChange;\n    this.onExitOverview = onExitOverview;\n    this.onEnterOverview = onEnterOverview || (() => {});\n    this.helpComponent = new HelpComponent(\"overview\");\n  }\n\n  setCurrentSlideIndex(index: number): void {\n    this.currentSlideIndex = index;\n  }\n\n  toggleOverview(): void {\n    if (this.isOverviewMode) {\n      this.exitOverview();\n    } else {\n      this.enterOverview();\n    }\n  }\n\n  isInOverviewMode(): boolean {\n    return this.isOverviewMode;\n  }\n\n  /**\n   * Handles keyboard events in overview mode\n   * Supports navigation (arrows, home, end) and actions (enter, escape, o)\n   */\n  handleOverviewKeyboard(event: KeyboardEvent): void {\n    if (!this.isOverviewMode) return;\n\n    const key = event.key;\n    const keyLower = key.toLowerCase();\n\n    // Handle navigation keys\n    if (key === \"ArrowRight\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.nextOverviewSlide();\n      return;\n    }\n\n    if (key === \"ArrowLeft\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.previousOverviewSlide();\n      return;\n    }\n\n    if (key === \"Home\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.goToFirstSlide();\n      return;\n    }\n\n    if (key === \"End\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.goToLastSlide();\n      return;\n    }\n\n    if (key === \"Enter\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.selectOverviewSlide();\n      return;\n    }\n\n    if (key === \"Escape\" || keyLower === \"o\") {\n      event.preventDefault();\n      event.stopPropagation();\n      this.exitOverview();\n      return;\n    }\n  }\n\n  private getThumbnails(): NodeListOf<Element> | null {\n    return (\n      this.overviewContainer?.querySelectorAll(\".mostage-overview-slide\") ||\n      null\n    );\n  }\n\n  private goToFirstSlide(): void {\n    this.overviewSelectedIndex = 0;\n    this.updateOverviewSelection();\n  }\n\n  private goToLastSlide(): void {\n    const thumbnails = this.getThumbnails();\n    const actualSlidesCount = thumbnails?.length || 0;\n\n    this.overviewSelectedIndex = actualSlidesCount - 1;\n    this.updateOverviewSelection();\n  }\n\n  private enterOverview(): void {\n    if (this.isOverviewMode) return;\n\n    this.isOverviewMode = true;\n    this.overviewSelectedIndex = this.currentSlideIndex;\n    this.onEnterOverview();\n    this.createOverviewGrid();\n  }\n\n  private exitOverview(): void {\n    if (!this.isOverviewMode) return;\n\n    this.isOverviewMode = false;\n    this.removeOverviewContainer();\n    this.onExitOverview();\n  }\n\n  private removeOverviewContainer(): void {\n    if (this.overviewContainer) {\n      this.overviewContainer.remove();\n      this.overviewContainer = null;\n    }\n  }\n\n  private nextOverviewSlide(): void {\n    const thumbnails = this.getThumbnails();\n    const actualSlidesCount = thumbnails?.length || 0;\n\n    if (this.overviewSelectedIndex < actualSlidesCount - 1) {\n      this.overviewSelectedIndex++;\n      this.updateOverviewSelection();\n    }\n  }\n\n  private previousOverviewSlide(): void {\n    if (this.overviewSelectedIndex > 0) {\n      this.overviewSelectedIndex--;\n      this.updateOverviewSelection();\n    }\n  }\n\n  private selectOverviewSlide(): void {\n    this.onSlideChange(this.overviewSelectedIndex);\n    this.exitOverview();\n  }\n\n  private updateOverviewSelection(): void {\n    const thumbnails = this.getThumbnails();\n    if (!thumbnails) return;\n\n    if (this.overviewSelectedIndex >= thumbnails.length) return;\n\n    thumbnails.forEach((thumbnail: Element, index: number) => {\n      const slideElement = thumbnail as HTMLElement;\n      if (index === this.overviewSelectedIndex) {\n        slideElement.classList.add(\"selected\");\n        slideElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      } else {\n        slideElement.classList.remove(\"selected\");\n      }\n    });\n  }\n\n  private createOverviewGrid(): void {\n    this.overviewContainer = document.createElement(\"div\");\n    this.overviewContainer.className = \"mostage-overview\";\n\n    const slideElements = this.container.querySelectorAll(\n      \".mostage-slide\"\n    ) as NodeListOf<HTMLElement>;\n    const currentSlideIndex = this.currentSlideIndex;\n\n    slideElements.forEach((slideElement: HTMLElement, index: number) => {\n      const thumbnail = this.createThumbnail(\n        slideElement,\n        index,\n        currentSlideIndex\n      );\n      this.overviewContainer!.appendChild(thumbnail);\n    });\n\n    const helpComponent = this.createHelpComponent();\n    this.helpComponent.addCloseButtonListener(helpComponent, () => {\n      // Hide help with animation\n      this.hideOverviewHelp(helpComponent);\n    });\n    this.overviewContainer.appendChild(helpComponent);\n\n    // Trigger fade-in animation for overview help\n    requestAnimationFrame(() => {\n      helpComponent.classList.add(\"fade-in\");\n    });\n\n    this.container.appendChild(this.overviewContainer);\n\n    // Add close button and footer to the overview container\n    this.overviewContainer.appendChild(this.createCloseButton());\n    this.overviewContainer.appendChild(this.createFooter());\n\n    // Set initial selection\n    this.updateOverviewSelection();\n  }\n\n  private createThumbnail(\n    slideElement: HTMLElement,\n    index: number,\n    currentIndex: number\n  ): HTMLElement {\n    const thumbnail = document.createElement(\"div\");\n    thumbnail.className = \"mostage-overview-slide\";\n\n    if (index === currentIndex) {\n      thumbnail.classList.add(\"active\");\n    }\n\n    // Get theme-aware background color from the original slide\n    const computedStyle = window.getComputedStyle(slideElement);\n    const backgroundColor = computedStyle.backgroundColor;\n    if (\n      backgroundColor &&\n      backgroundColor !== \"rgba(0, 0, 0, 0)\" &&\n      backgroundColor !== \"transparent\"\n    ) {\n      thumbnail.style.backgroundColor = backgroundColor;\n    }\n\n    // Create slide number element\n    const slideNumber = document.createElement(\"div\");\n    slideNumber.className = \"mostage-overview-slide-number\";\n    slideNumber.textContent = (index + 1).toString();\n\n    // Create content wrapper\n    const contentWrapper = document.createElement(\"div\");\n    contentWrapper.className = \"mostage-overview-slide-content\";\n\n    // Create a simplified version of the slide content for the thumbnail\n    // Extract content from the slide content wrapper if it exists\n    const slideContentWrapper = slideElement.querySelector(\n      \".mostage-slide-content\"\n    );\n    const content = slideContentWrapper\n      ? slideContentWrapper.innerHTML\n      : slideElement.innerHTML;\n    contentWrapper.innerHTML = content;\n\n    // Apply theme styles to the content wrapper to ensure proper theming\n    this.applyThemeToOverviewContent(contentWrapper, slideElement);\n\n    // Assemble the thumbnail\n    thumbnail.appendChild(slideNumber);\n    thumbnail.appendChild(contentWrapper);\n\n    thumbnail.addEventListener(\"click\", () => {\n      this.overviewSelectedIndex = index;\n      this.updateOverviewSelection();\n      this.selectOverviewSlide();\n    });\n\n    return thumbnail;\n  }\n\n  /**\n   * Apply theme styles to overview content to ensure it matches the main slides\n   */\n  private applyThemeToOverviewContent(\n    contentWrapper: HTMLElement,\n    originalSlide: HTMLElement\n  ): void {\n    // Copy computed styles from the original slide to maintain theme consistency\n    const originalStyles = window.getComputedStyle(originalSlide);\n\n    // Apply the same background and color styles\n    contentWrapper.style.backgroundColor = originalStyles.backgroundColor;\n    contentWrapper.style.color = originalStyles.color;\n\n    // Apply theme styles to all child elements\n    const allElements = contentWrapper.querySelectorAll(\"*\");\n    allElements.forEach((element: Element) => {\n      const htmlElement = element as HTMLElement;\n\n      // Find the corresponding element in the original slide\n      const tagName = element.tagName.toLowerCase();\n      const originalElement = originalSlide.querySelector(tagName);\n\n      if (originalElement) {\n        const originalElementStyles = window.getComputedStyle(originalElement);\n\n        // Apply color, background, and other theme-related styles\n        htmlElement.style.color = originalElementStyles.color;\n        htmlElement.style.backgroundColor =\n          originalElementStyles.backgroundColor;\n        htmlElement.style.borderColor = originalElementStyles.borderColor;\n\n        // For headings, apply the same gradient and text effects\n        if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(tagName)) {\n          htmlElement.style.background = originalElementStyles.background;\n          htmlElement.style.webkitBackgroundClip =\n            originalElementStyles.webkitBackgroundClip;\n          htmlElement.style.webkitTextFillColor =\n            originalElementStyles.webkitTextFillColor;\n          htmlElement.style.backgroundClip =\n            originalElementStyles.backgroundClip;\n          htmlElement.style.textShadow = originalElementStyles.textShadow;\n        }\n\n        // For code elements\n        if ([\"code\", \"pre\"].includes(tagName)) {\n          htmlElement.style.background = originalElementStyles.background;\n          htmlElement.style.border = originalElementStyles.border;\n        }\n\n        // For links\n        if (tagName === \"a\") {\n          htmlElement.style.color = originalElementStyles.color;\n        }\n\n        // For blockquotes\n        if (tagName === \"blockquote\") {\n          htmlElement.style.color = originalElementStyles.color;\n          htmlElement.style.backgroundColor =\n            originalElementStyles.backgroundColor;\n          htmlElement.style.borderLeftColor =\n            originalElementStyles.borderLeftColor;\n        }\n      }\n    });\n  }\n\n  private createCloseButton(): HTMLElement {\n    const closeButton = document.createElement(\"button\");\n    closeButton.className = \"mostage-overview-close\";\n    closeButton.innerHTML = \"×\";\n    closeButton.addEventListener(\"click\", () => {\n      this.exitOverview();\n    });\n    return closeButton;\n  }\n\n  private createHelpComponent(): HTMLElement {\n    return this.helpComponent.createHelpElement();\n  }\n\n  private createFooter(): HTMLElement {\n    const footer = document.createElement(\"div\");\n    footer.className = \"mostage-overview-footer\";\n    footer.innerHTML = `Made with <a href=\"https://github.com/mirmousaviii/mostage\" target=\"_blank\" rel=\"noopener noreferrer\">Mostage</a> v${pkg.version || \"1\"}`;\n    return footer;\n  }\n\n  // Hide overview help with fade-out animation\n  private hideOverviewHelp(helpComponent: HTMLElement): void {\n    // Add fade-out class for animation\n    helpComponent.classList.add(\"fade-out\");\n    helpComponent.classList.remove(\"fade-in\");\n\n    // Wait for animation to complete, then hide element\n    setTimeout(() => {\n      helpComponent.style.display = \"none\";\n    }, 300); // Match CSS transition duration\n  }\n}\n","export interface CenterContentConfig {\n  vertical?: boolean;\n  horizontal?: boolean;\n}\n\nexport class CenterContentManager {\n  private centerContentConfig: CenterContentConfig | null = null;\n  private observer: MutationObserver | null = null;\n  private isUpdating = false; // re-entrancy guard to avoid observer feedback loops\n  private scheduled = false; // coalesce multiple mutations into one update frame\n\n  constructor(private container: HTMLElement) {}\n\n  initialize(config: CenterContentConfig | null): void {\n    if (!config) return;\n\n    this.centerContentConfig = {\n      vertical: true,\n      horizontal: true,\n      ...config,\n    };\n\n    // If both vertical and horizontal are false, disable centerContent\n    if (\n      !this.centerContentConfig.vertical &&\n      !this.centerContentConfig.horizontal\n    ) {\n      this.centerContentConfig = null;\n      return;\n    }\n\n    this.setupCenterContentObserver();\n    // Initial apply after DOM settles\n    setTimeout(() => this.updateCurrentSlideCentering(), 100);\n  }\n\n  onSlideChange(): void {\n    setTimeout(() => this.updateCurrentSlideCentering(), 50);\n  }\n\n  private setupCenterContentObserver(): void {\n    // Disconnect any existing observer first\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n\n    this.observer = new MutationObserver(() => {\n      // Ignore mutations triggered by our own style writes\n      if (this.isUpdating) return;\n\n      // Debounce within a frame to prevent tight loops\n      if (this.scheduled) return;\n      this.scheduled = true;\n      requestAnimationFrame(() => {\n        this.scheduled = false;\n        this.updateCurrentSlideCentering();\n      });\n    });\n\n    if (this.container) {\n      this.observer.observe(this.container, {\n        childList: true,\n        subtree: true,\n        // attributes true can cause feedback loops when we also set styles.\n        // We keep it enabled but guard with isUpdating + rAF scheduling.\n        attributes: true,\n        attributeFilter: [\"style\"],\n      });\n    }\n  }\n\n  private updateCurrentSlideCentering(): void {\n    if (!this.centerContentConfig) return;\n    this.isUpdating = true;\n\n    const slides = document.querySelectorAll(\".mostage-slide\");\n    slides.forEach((slide: Element) => {\n      const slideElement = slide as HTMLElement;\n      const isVisible = slideElement.style.display !== \"none\";\n      const contentWrapper = slideElement.querySelector(\n        \".mostage-slide-content\"\n      ) as HTMLElement;\n\n      if (isVisible && contentWrapper) {\n        slideElement.classList.add(\"mostage-slide-centered\");\n        slideElement.style.display = \"flex\";\n        contentWrapper.style.display = \"flex\";\n        contentWrapper.style.flexDirection = \"column\";\n\n        // Apply centering based on config\n        if (\n          this.centerContentConfig!.vertical &&\n          this.centerContentConfig!.horizontal\n        ) {\n          slideElement.style.alignItems = \"center\";\n          slideElement.style.justifyContent = \"center\";\n          contentWrapper.style.alignItems = \"center\";\n          contentWrapper.style.justifyContent = \"center\";\n        } else if (this.centerContentConfig!.vertical) {\n          slideElement.style.alignItems = \"center\";\n          slideElement.style.justifyContent = \"flex-start\";\n          contentWrapper.style.alignItems = \"center\";\n          contentWrapper.style.justifyContent = \"flex-start\";\n        } else if (this.centerContentConfig!.horizontal) {\n          slideElement.style.alignItems = \"flex-start\";\n          slideElement.style.justifyContent = \"center\";\n          contentWrapper.style.alignItems = \"flex-start\";\n          contentWrapper.style.justifyContent = \"center\";\n        }\n      } else {\n        slideElement.classList.remove(\"mostage-slide-centered\");\n        if (contentWrapper) {\n          contentWrapper.style.display = \"block\";\n          contentWrapper.style.flexDirection = \"unset\";\n          contentWrapper.style.alignItems = \"unset\";\n          contentWrapper.style.justifyContent = \"unset\";\n        }\n      }\n    });\n\n    this.isUpdating = false;\n  }\n\n  cleanup(): void {\n    // Clean up center content classes\n    const slides = document.querySelectorAll(\".mostage-slide\");\n    slides.forEach((slide: Element) => {\n      slide.classList.remove(\"mostage-slide-centered\");\n    });\n\n    // Disconnect observer\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n  }\n}\n","export class UrlHashManager {\n  private urlHashEnabled: boolean;\n  private onSlideChange: (index: number) => void;\n\n  constructor(urlHashEnabled: boolean, onSlideChange: (index: number) => void) {\n    this.urlHashEnabled = urlHashEnabled;\n    this.onSlideChange = onSlideChange;\n  }\n\n  setupUrlHashNavigation(): void {\n    if (!this.urlHashEnabled) return;\n\n    // Listen for hash changes\n    window.addEventListener(\"hashchange\", () => {\n      const slideIndex = this.getSlideIndexFromHash();\n      if (slideIndex !== -1) {\n        this.onSlideChange(slideIndex);\n      }\n    });\n  }\n\n  getInitialSlideFromUrl(): number {\n    if (!this.urlHashEnabled) return 0;\n\n    const slideIndex = this.getSlideIndexFromHash();\n    return slideIndex !== -1 ? slideIndex : 0;\n  }\n\n  private getSlideIndexFromHash(): number {\n    const hash = window.location.hash;\n    if (!hash) return -1;\n\n    // Support both #1 and #slide-1 formats\n    const match = hash.match(/^#(?:slide-)?(\\d+)$/);\n    if (match) {\n      const slideNumber = parseInt(match[1], 10);\n      // Convert 1-based to 0-based index\n      const slideIndex = slideNumber - 1;\n      return slideIndex;\n    }\n\n    return -1;\n  }\n\n  updateUrlHash(slideIndex: number, totalSlides: number): void {\n    if (!this.urlHashEnabled) return;\n\n    if (slideIndex < 0 || slideIndex >= totalSlides) return;\n\n    const slideNumber = slideIndex + 1; // Convert to 1-based\n    const newHash = `#${slideNumber}`;\n\n    // Update URL without triggering hashchange event\n    if (window.location.hash !== newHash) {\n      history.replaceState(null, \"\", newHash);\n    }\n  }\n}\n","// Import types from centralized type definitions\nimport { SyntaxHighlighter } from \"../utils/syntax-highlighter\";\nimport { plugins } from \"../services/plugin-service\";\nimport { loadTheme } from \"../services/theme-service\";\nimport { ContentService } from \"../services/content-service\";\nimport { NavigationService } from \"../services/navigation-service\";\nimport { TransitionManager } from \"../components/navigation/transition\";\nimport { OverviewManager } from \"../components/ui/overview/overview\";\nimport { HelpManager } from \"../components/ui/help/help\";\nimport { CenterContentManager } from \"../components/ui/center/center\";\nimport { UrlHashManager } from \"../components/navigation/url-hash\";\nimport {\n  MoConfig,\n  MoSlide,\n  MoPlugin,\n  MoSlideEvent,\n  MostageInstance,\n  TransitionConfig,\n} from \"@/types\";\n\n// Global variable to preserve slide position across instances\nlet globalCurrentSlideIndex = 0;\n\n/**\n * Mostage Presentation Engine\n *\n * The main class for creating and managing Mostage presentations.\n * Provides a comprehensive API for slide navigation, theming, plugins, and more.\n *\n * @example\n * ```typescript\n * import { Mostage } from 'mostage';\n *\n * const presentation = new Mostage({\n *   element: '#presentation',\n *   theme: 'dark',\n *   contentPath: './content.md'\n * });\n *\n * await presentation.start();\n * ```\n */\nexport class Mostage implements MostageInstance {\n  private config: MoConfig;\n  private container: HTMLElement;\n  private slides: MoSlide[] = [];\n  private currentSlideIndex = 0;\n  private plugins: MoPlugin[] = [];\n  private syntaxHighlighter: SyntaxHighlighter;\n\n  // Enhanced Services\n  private contentService: ContentService;\n  private navigationService: NavigationService;\n  private transitionManager!: TransitionManager;\n  private overviewManager: OverviewManager;\n  private helpManager: HelpManager;\n  private centerContentManager: CenterContentManager;\n  private urlHashManager!: UrlHashManager;\n  private eventListeners: Map<string, Function[]> = new Map();\n\n  /**\n   * Creates a new Mostage presentation instance\n   *\n   * @param config - Configuration object or path to JSON config file\n   * @throws {Error} When container element is not found or invalid\n   * @throws {ConfigValidationError} When configuration is invalid\n   */\n  constructor(config: MoConfig | string) {\n    // Handle string input (JSON file path)\n    if (typeof config === \"string\") {\n      this.config = {\n        theme: \"light\",\n        transition: {\n          type: \"horizontal\",\n          duration: 300,\n          easing: \"ease-in-out\",\n        },\n        scale: 1.0,\n        loop: false,\n        plugins: {},\n        keyboard: true,\n        touch: true,\n        urlHash: true,\n        centerContent: {\n          vertical: true,\n          horizontal: true,\n        },\n        configPath: config,\n      };\n    } else {\n      // Handle object input (inline config)\n      this.config = {\n        theme: \"light\",\n        transition: {\n          type: \"horizontal\",\n          duration: 300,\n          easing: \"ease-in-out\",\n        },\n        scale: 1.0,\n        loop: false,\n        plugins: {},\n        keyboard: true,\n        touch: true,\n        urlHash: true,\n        centerContent: {\n          vertical: true,\n          horizontal: true,\n        },\n        ...config,\n      };\n    }\n\n    // Handle legacy transition format\n    if (typeof this.config.transition === \"string\") {\n      this.config.transition = {\n        type: this.config.transition as any,\n        duration: 600,\n        easing: \"ease-in-out\",\n      };\n    }\n\n    this.syntaxHighlighter = SyntaxHighlighter.getInstance();\n    this.container = this.resolveElement(this.config.element || document.body);\n    this.container.classList.add(\"mostage-container\");\n\n    // Auto-detect container mode and apply appropriate positioning\n    this.applyAutoDetection();\n\n    // Initialize services\n    this.contentService = new ContentService();\n    this.navigationService = new NavigationService(\n      this.container,\n      this.config.keyboard || false,\n      this.config.touch || false,\n      (index: number) => this.goToSlide(index)\n    );\n\n    // Initialize managers\n    this.overviewManager = new OverviewManager(\n      this.container,\n      (index: number) => this.goToSlide(index),\n      () => this.onExitOverview(),\n      () => this.onEnterOverview()\n    );\n    this.helpManager = new HelpManager(this.container);\n    this.centerContentManager = new CenterContentManager(this.container);\n\n    // Initialize config-dependent managers\n    this.initializeConfigDependentManagers();\n  }\n\n  /**\n   * Auto-detect container mode and apply appropriate positioning\n   * If parent is body -> standalone mode (absolute positioning)\n   * If parent is not body -> embedded mode (relative positioning)\n   */\n  private applyAutoDetection(): void {\n    const isStandalone = this.container === document.body;\n\n    if (isStandalone) {\n      // Standalone mode: use absolute positioning for full viewport\n      this.container.style.position = \"absolute\";\n      this.container.style.width = \"100vw\";\n      this.container.style.height = \"100vh\";\n      this.container.style.top = \"0\";\n      this.container.style.left = \"0\";\n    } else {\n      // Embedded mode: use relative positioning for container\n      this.container.style.position = \"relative\";\n      this.container.style.width = \"100%\";\n      this.container.style.height = \"100%\";\n    }\n  }\n\n  /**\n   * Initialize managers that depend on configuration values\n   */\n  private initializeConfigDependentManagers(): void {\n    this.transitionManager = new TransitionManager(\n      this.container,\n      this.config.transition as TransitionConfig\n    );\n    this.urlHashManager = new UrlHashManager(\n      this.config.urlHash || false,\n      (index: number) => this.goToSlide(index)\n    );\n  }\n\n  /**\n   * Load configuration from a JSON file and merge it with existing config\n   * @param configPath Path to the JSON configuration file\n   */\n  private async loadConfigFromFile(configPath: string): Promise<void> {\n    try {\n      const response = await fetch(configPath);\n      if (!response.ok) {\n        throw new Error(\n          `Failed to load config file: ${response.status} ${response.statusText}`\n        );\n      }\n      const jsonConfig: MoConfig = await response.json();\n\n      // Merge the loaded config with existing config\n      this.config = {\n        ...this.config,\n        ...jsonConfig,\n      };\n\n      // Handle legacy transition format\n      if (typeof this.config.transition === \"string\") {\n        this.config.transition = {\n          type: this.config.transition as any,\n          duration: 300,\n          easing: \"ease-in-out\",\n        };\n      }\n\n      // Re-initialize managers that depend on config values\n      this.initializeConfigDependentManagers();\n    } catch (error) {\n      console.error(\"Failed to load configuration from file:\", error);\n      throw error;\n    }\n  }\n\n  /**\n   * Initializes and starts the presentation\n   *\n   * Loads content, applies theme, initializes plugins, and sets up navigation.\n   * This method must be called after creating a Mostage instance.\n   *\n   * @throws {ContentLoadError} When content cannot be loaded\n   * @throws {ThemeLoadError} When theme cannot be loaded\n   * @throws {PluginLoadError} When plugins fail to load\n   *\n   * @example\n   * ```typescript\n   * const presentation = new Mostage(config);\n   * await presentation.start();\n   * ```\n   */\n  async start(): Promise<void> {\n    try {\n      // Load configuration from JSON file if configPath is provided\n      if (this.config.configPath) {\n        await this.loadConfigFromFile(this.config.configPath);\n      }\n\n      // Load theme\n      if (this.config.theme) {\n        await loadTheme(this.config.theme);\n      }\n\n      // Load content using enhanced service\n      let content: string;\n\n      if (this.config.content) {\n        content = this.config.content;\n      } else if (this.config.contentPath) {\n        content = await this.contentService.loadContentFromSource(\n          this.config.contentPath\n        );\n      } else {\n        throw new Error(\n          \"No content provided. Please specify content or contentPath.\"\n        );\n      }\n\n      this.slides = this.contentService.parseContent(content);\n\n      // Initialize center content if configured\n      this.centerContentManager.initialize(this.config.centerContent || null);\n\n      // Setup navigation using enhanced service\n      this.navigationService.setSlides(this.slides);\n      // Setup only touch navigation from NavigationService, keyboard is handled by main engine\n      if (this.config.touch) {\n        this.navigationService.enableTouch();\n      }\n\n      // Setup keyboard event listener for overview and help\n      if (this.config.keyboard) {\n        document.addEventListener(\"keydown\", this.handleKeyboard.bind(this));\n      }\n\n      // Setup URL hash navigation if enabled\n      this.urlHashManager.setupUrlHashNavigation();\n\n      // Determine target slide before rendering\n      const urlSlide = this.urlHashManager.getInitialSlideFromUrl();\n      const targetSlide = urlSlide !== 0 ? urlSlide : globalCurrentSlideIndex;\n\n      // Set current slide index before rendering\n      this.currentSlideIndex = targetSlide;\n\n      // Render slides\n      await this.renderSlides();\n\n      // Show the target slide without transition\n      this.transitionManager.showSlide(targetSlide);\n\n      // Initialize plugins AFTER DOM is ready\n      this.initializePlugins();\n\n      this.emit(\"ready\", {\n        type: \"ready\",\n        currentSlide: this.currentSlideIndex,\n        totalSlides: this.slides.length,\n      });\n\n      // Show initial help with auto-hide after 5 seconds\n      this.helpManager.showInitialHelp();\n    } catch (error) {\n      console.error(\"Failed to start Mostage:\", error);\n      throw error;\n    }\n  }\n\n  private resolveElement(element: string | HTMLElement): HTMLElement {\n    if (typeof element === \"string\") {\n      const found = document.querySelector(element) as HTMLElement;\n      if (!found) {\n        throw new Error(`Element \"${element}\" not found`);\n      }\n      return found;\n    }\n    return element;\n  }\n\n  private initializePlugins(): void {\n    if (!this.config.plugins) return;\n\n    Object.entries(this.config.plugins).forEach(\n      ([pluginName, pluginConfig]) => {\n        try {\n          const PluginClass = plugins[pluginName];\n          if (!PluginClass) {\n            console.warn(\n              `Plugin \"${pluginName}\" not found. Available plugins: ${Object.keys(plugins).join(\", \")}`\n            );\n            return;\n          }\n\n          const pluginInstance = new PluginClass();\n          const finalConfig = pluginConfig || {};\n\n          // Check if plugin is enabled (must be explicitly true)\n          const isEnabled = (finalConfig as any).enabled === true;\n\n          if (!isEnabled) {\n            return;\n          }\n\n          // Set enabled state and initialize\n          if (pluginInstance.setEnabled) {\n            pluginInstance.setEnabled(true);\n          }\n          pluginInstance.init(this, finalConfig);\n          this.plugins.push(pluginInstance);\n        } catch (error) {\n          console.error(`Failed to initialize plugin \"${pluginName}\":`, error);\n        }\n      }\n    );\n  }\n\n  private handleKeyboard(event: KeyboardEvent): void {\n    // Check if focus is on an input element (textarea, input, contenteditable)\n    const activeElement = document.activeElement as HTMLElement;\n    const isInputFocused =\n      activeElement &&\n      (activeElement.tagName === \"INPUT\" ||\n        activeElement.tagName === \"TEXTAREA\" ||\n        activeElement.contentEditable === \"true\" ||\n        activeElement.isContentEditable);\n\n    // If user is typing in an input field, don't handle keyboard navigation\n    if (isInputFocused) {\n      return;\n    }\n\n    // Delegate to overview manager if in overview mode\n    if (this.overviewManager.isInOverviewMode()) {\n      this.overviewManager.handleOverviewKeyboard(event);\n      return;\n    }\n\n    const key = event.key;\n    const keyLower = key.toLowerCase();\n\n    // Navigation keys\n    if (this.isNavigationKey(key, keyLower)) {\n      event.preventDefault();\n      this.handleNavigationKey(key, keyLower);\n      return;\n    }\n\n    // Mode switching keys\n    if (this.isModeKey(keyLower)) {\n      event.preventDefault();\n      this.handleModeKey(keyLower);\n      return;\n    }\n  }\n\n  private isNavigationKey(key: string, keyLower: string): boolean {\n    return (\n      key === \"ArrowRight\" ||\n      key === \"ArrowLeft\" ||\n      key === \"ArrowUp\" ||\n      key === \"ArrowDown\" ||\n      key === \"Home\" ||\n      key === \"End\" ||\n      keyLower === \" \"\n    );\n  }\n\n  private isModeKey(keyLower: string): boolean {\n    return (\n      keyLower === \"escape\" ||\n      keyLower === \"o\" ||\n      keyLower === \"h\" ||\n      keyLower === \"?\"\n    );\n  }\n\n  private handleNavigationKey(key: string, keyLower: string): void {\n    switch (key) {\n      case \"ArrowRight\":\n      case \"ArrowDown\":\n        this.nextSlide();\n        break;\n      case \"ArrowLeft\":\n      case \"ArrowUp\":\n        this.previousSlide();\n        break;\n      case \"Home\":\n        this.goToSlide(0);\n        break;\n      case \"End\":\n        this.goToSlide(this.slides.length - 1);\n        break;\n    }\n\n    // Handle space key\n    if (keyLower === \" \") {\n      this.nextSlide();\n    }\n  }\n\n  private handleModeKey(keyLower: string): void {\n    switch (keyLower) {\n      case \"escape\":\n      case \"o\":\n        this.overviewManager.toggleOverview();\n        break;\n      case \"h\":\n      case \"?\":\n        this.helpManager.toggleHelp();\n        break;\n    }\n  }\n\n  private async renderSlides(): Promise<void> {\n    this.container.innerHTML = \"\";\n\n    // Create header if configured\n    if (this.config.header) {\n      await this.renderHeader();\n    }\n\n    // Create footer if configured\n    if (this.config.footer) {\n      await this.renderFooter();\n    }\n\n    const slidesContainer = document.createElement(\"div\");\n    slidesContainer.className = \"mostage-slides\";\n\n    this.slides.forEach((slide, index) => {\n      const slideElement = document.createElement(\"div\");\n      slideElement.className = \"mostage-slide\";\n      slideElement.id = slide.id;\n\n      // Apply background if configured\n      this.applyBackgroundToSlide(slideElement, index);\n\n      // Create content wrapper for scaling\n      const contentWrapper = document.createElement(\"div\");\n      contentWrapper.className = \"mostage-slide-content\";\n      contentWrapper.innerHTML = slide.html;\n\n      // Apply scale to content if specified\n      if (this.config.scale !== 1.0) {\n        contentWrapper.style.transform = `scale(${this.config.scale})`;\n        contentWrapper.style.transformOrigin = \"center center\";\n\n        // If scaling up, ensure content fits within slide boundaries\n        if (this.config.scale && this.config.scale > 1.0) {\n          // Calculate the inverse scale to fit the content\n          const inverseScale = 1 / this.config.scale;\n          contentWrapper.style.width = `${100 * inverseScale}%`;\n          contentWrapper.style.height = `${100 * inverseScale}%`;\n        }\n      }\n\n      slideElement.appendChild(contentWrapper);\n      // Initially hide all slides, will be shown by goToSlide\n      slideElement.style.display = \"none\";\n      slidesContainer.appendChild(slideElement);\n    });\n\n    this.container.appendChild(slidesContainer);\n\n    // Apply syntax highlighting to all slides after rendering\n    this.syntaxHighlighter.highlightAll(this.container);\n  }\n\n  private applyBackgroundToSlide(\n    slideElement: HTMLElement,\n    slideIndex: number\n  ): void {\n    if (!this.config.background) return;\n\n    const slideNumber = slideIndex + 1; // Convert 0-based index to 1-based slide number\n\n    // Handle both single background and array of backgrounds\n    const backgrounds = Array.isArray(this.config.background)\n      ? this.config.background\n      : [this.config.background];\n\n    // Apply all matching backgrounds\n    backgrounds.forEach((bg: any) => {\n      if (this.shouldApplyBackground(bg, slideNumber)) {\n        this.applyBackgroundStyles(slideElement, bg);\n      }\n    });\n  }\n\n  private shouldApplyBackground(bg: any, slideNumber: number): boolean {\n    // Check global\n    if (bg.global === true) {\n      return true;\n    }\n\n    // Check allSlides (specific slides)\n    if (bg.allSlides && bg.allSlides.length > 0) {\n      if (bg.allSlides.includes(slideNumber)) {\n        return true;\n      }\n    }\n\n    // Check allSlidesExcept (works independently of global)\n    if (bg.allSlidesExcept && bg.allSlidesExcept.length > 0) {\n      if (!bg.allSlidesExcept.includes(slideNumber)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  private applyBackgroundStyles(slideElement: HTMLElement, bg: any): void {\n    // Apply background color if specified\n    if (bg.bgColor) {\n      slideElement.style.backgroundColor = bg.bgColor;\n    }\n\n    // Apply background image if specified\n    if (bg.imagePath) {\n      slideElement.style.backgroundImage = `url(\"${bg.imagePath}\")`;\n      slideElement.style.backgroundSize = bg.size || \"cover\";\n      slideElement.style.backgroundPosition = bg.position || \"center\";\n      slideElement.style.backgroundRepeat = bg.repeat || \"no-repeat\";\n    }\n  }\n\n  private async renderHeader(): Promise<void> {\n    if (!this.config.header) return;\n\n    const headerElement = document.createElement(\"div\");\n    headerElement.className = \"mostage-header\";\n\n    // Add position class\n    const position = this.config.header.position || \"top-left\";\n    headerElement.classList.add(`mostage-header-${position.replace(\"-\", \"-\")}`);\n\n    let content = \"\";\n    if (this.config.header.content) {\n      content = this.config.header.content;\n    } else if (this.config.header.contentPath) {\n      try {\n        content = await this.contentService.loadContentFromSource(\n          this.config.header.contentPath\n        );\n      } catch (error) {\n        console.error(\"Failed to load header content:\", error);\n        return;\n      }\n    }\n\n    if (content) {\n      // Parse markdown content if it's markdown\n      if (\n        content.includes(\"#\") ||\n        content.includes(\"*\") ||\n        content.includes(\"`\")\n      ) {\n        const parsedContent = this.contentService.parseMarkdownToHtml(content);\n        headerElement.innerHTML = parsedContent;\n      } else {\n        headerElement.innerHTML = content;\n      }\n    }\n\n    this.container.appendChild(headerElement);\n\n    // Hide header on first slide if showOnFirstSlide is explicitly false\n    if (\n      this.currentSlideIndex === 0 &&\n      this.config.header.showOnFirstSlide === false\n    ) {\n      headerElement.style.display = \"none\";\n    }\n  }\n\n  private async renderFooter(): Promise<void> {\n    if (!this.config.footer) return;\n\n    const footerElement = document.createElement(\"div\");\n    footerElement.className = \"mostage-footer\";\n\n    // Add position class\n    const position = this.config.footer.position || \"bottom-left\";\n    footerElement.classList.add(`mostage-footer-${position.replace(\"-\", \"-\")}`);\n\n    let content = \"\";\n    if (this.config.footer.content) {\n      content = this.config.footer.content;\n    } else if (this.config.footer.contentPath) {\n      try {\n        content = await this.contentService.loadContentFromSource(\n          this.config.footer.contentPath\n        );\n      } catch (error) {\n        console.error(\"Failed to load footer content:\", error);\n        return;\n      }\n    }\n\n    if (content) {\n      // Parse markdown content if it's markdown\n      if (\n        content.includes(\"#\") ||\n        content.includes(\"*\") ||\n        content.includes(\"`\")\n      ) {\n        const parsedContent = this.contentService.parseMarkdownToHtml(content);\n        footerElement.innerHTML = parsedContent;\n      } else {\n        footerElement.innerHTML = content;\n      }\n    }\n\n    this.container.appendChild(footerElement);\n\n    // Hide footer on first slide if showOnFirstSlide is explicitly false\n    if (\n      this.currentSlideIndex === 0 &&\n      this.config.footer.showOnFirstSlide === false\n    ) {\n      footerElement.style.display = \"none\";\n    }\n  }\n\n  private updateHeaderFooterVisibility(): void {\n    // Update header visibility\n    if (this.config.header) {\n      const headerElement = this.container.querySelector(\n        \".mostage-header\"\n      ) as HTMLElement;\n      if (headerElement) {\n        if (\n          this.currentSlideIndex === 0 &&\n          this.config.header.showOnFirstSlide === false\n        ) {\n          headerElement.style.display = \"none\";\n        } else {\n          headerElement.style.display = \"block\";\n        }\n      }\n    }\n\n    // Update footer visibility\n    if (this.config.footer) {\n      const footerElement = this.container.querySelector(\n        \".mostage-footer\"\n      ) as HTMLElement;\n      if (footerElement) {\n        if (\n          this.currentSlideIndex === 0 &&\n          this.config.footer.showOnFirstSlide === false\n        ) {\n          footerElement.style.display = \"none\";\n        } else {\n          footerElement.style.display = \"block\";\n        }\n      }\n    }\n  }\n\n  nextSlide(): void {\n    if (this.currentSlideIndex < this.slides.length - 1) {\n      this.goToSlide(this.currentSlideIndex + 1);\n    } else if (this.config.loop) {\n      this.goToSlide(0);\n    }\n  }\n\n  previousSlide(): void {\n    if (this.currentSlideIndex > 0) {\n      this.goToSlide(this.currentSlideIndex - 1);\n    } else if (this.config.loop) {\n      this.goToSlide(this.slides.length - 1);\n    }\n  }\n\n  goToSlide(index: number): void {\n    // Validate slide index and adjust if necessary\n    if (index < 0) {\n      index = 0;\n    } else if (index >= this.slides.length) {\n      index = Math.max(0, this.slides.length - 1);\n    }\n\n    // If no slides exist, return early\n    if (this.slides.length === 0) {\n      return;\n    }\n\n    const previousIndex = this.currentSlideIndex;\n    this.currentSlideIndex = index;\n\n    // Update global slide index to preserve position across instances\n    globalCurrentSlideIndex = index;\n\n    // Update URL hash if enabled\n    this.urlHashManager.updateUrlHash(index, this.slides.length);\n\n    if (previousIndex === index) {\n      this.transitionManager.showSlide(index);\n    } else {\n      this.transitionManager.animateTransition(previousIndex, index);\n    }\n\n    // Update center content\n    this.centerContentManager.onSlideChange();\n\n    // Update header and footer visibility\n    this.updateHeaderFooterVisibility();\n\n    // Update navigation service\n    this.navigationService.setCurrentSlideIndex(index);\n    this.overviewManager.setCurrentSlideIndex(index);\n\n    this.emit(\"slidechange\", {\n      type: \"slidechange\",\n      currentSlide: index,\n      totalSlides: this.slides.length,\n      slide: this.slides[index],\n    });\n  }\n\n  private onEnterOverview(): void {\n    // Hide help when entering overview mode\n    this.helpManager.hideForOverview();\n  }\n\n  private onExitOverview(): void {\n    // Restore help if it was visible before overview mode\n    this.helpManager.restoreAfterOverview();\n  }\n\n  // Event system\n  on(event: string, callback: Function): void {\n    if (!this.eventListeners.has(event)) {\n      this.eventListeners.set(event, []);\n    }\n    this.eventListeners.get(event)!.push(callback);\n  }\n\n  emit(event: string, data: MoSlideEvent): void {\n    const listeners = this.eventListeners.get(event);\n    if (listeners) {\n      listeners.forEach((callback) => callback(data));\n    }\n  }\n\n  // Getters for plugins\n  /**\n   * Gets the current slide index (0-based)\n   * @returns Current slide index\n   */\n  getCurrentSlide(): number {\n    return this.currentSlideIndex;\n  }\n\n  /**\n   * Gets the total number of slides\n   * @returns Total number of slides\n   */\n  getTotalSlides(): number {\n    return this.slides.length;\n  }\n\n  /**\n   * Gets all slides\n   * @returns Array of all slides\n   */\n  getSlides(): MoSlide[] {\n    return this.slides;\n  }\n\n  /**\n   * Gets the presentation container element\n   * @returns The container HTMLElement\n   */\n  getContainer(): HTMLElement {\n    return this.container;\n  }\n\n  // Overview control\n  toggleOverview(): void {\n    this.overviewManager.toggleOverview();\n  }\n\n  /**\n   * Updates the presentation content and re-renders slides\n   * @param newContent - New markdown content\n   */\n  async updateContent(newContent: string): Promise<void> {\n    try {\n      // Parse new content\n      const newSlides = this.contentService.parseContent(newContent);\n\n      // Update slides\n      this.slides = newSlides;\n\n      // Adjust current slide index if necessary\n      if (this.slides.length === 0) {\n        this.currentSlideIndex = 0;\n      } else if (this.currentSlideIndex >= this.slides.length) {\n        // If current slide is beyond the new slide count, go to last slide\n        this.currentSlideIndex = this.slides.length - 1;\n      }\n\n      // Update navigation service with new slides\n      this.navigationService.setSlides(this.slides);\n\n      // Re-render slides\n      await this.renderSlides();\n\n      // Show the current slide\n      this.transitionManager.showSlide(this.currentSlideIndex);\n\n      // Update header and footer visibility\n      this.updateHeaderFooterVisibility();\n\n      // Update navigation service\n      this.navigationService.setCurrentSlideIndex(this.currentSlideIndex);\n      this.overviewManager.setCurrentSlideIndex(this.currentSlideIndex);\n\n      // Clean up existing plugins before re-initializing\n      this.plugins.forEach((plugin) => {\n        try {\n          if (plugin.destroy) {\n            plugin.destroy();\n          }\n        } catch (error) {\n          console.error(`Failed to destroy plugin: ${plugin.name}`, error);\n        }\n      });\n      this.plugins = [];\n\n      // Re-initialize plugins after content update\n      this.initializePlugins();\n\n      // Emit content update event\n      this.emit(\"contentupdate\", {\n        type: \"contentupdate\",\n        currentSlide: this.currentSlideIndex,\n        totalSlides: this.slides.length,\n        slide: this.slides[this.currentSlideIndex],\n      });\n    } catch (error) {\n      console.error(\"Failed to update content:\", error);\n      throw error;\n    }\n  }\n\n  // Cleanup\n  destroy(): void {\n    // Clean up plugins\n    this.plugins.forEach((plugin) => {\n      try {\n        if (plugin.destroy) {\n          plugin.destroy();\n        }\n      } catch (error) {\n        console.error(`Failed to destroy plugin: ${plugin.name}`, error);\n      }\n    });\n    this.plugins = [];\n    this.eventListeners.clear();\n\n    // Clean up services\n    this.navigationService.destroy();\n    this.contentService.clearCache();\n\n    // Clean up managers\n    this.centerContentManager.cleanup();\n  }\n}\n","/**\n * Configuration Service for Mostage\n * Provides centralized configuration management with validation\n */\n\nimport {\n  MoConfig,\n  ConfigLoader,\n  ConfigValidator,\n  ConfigValidationResult,\n} from \"@/types\";\n\n/**\n * Enhanced Configuration Service\n * Manages configuration loading, validation, and merging\n */\nexport class ConfigService implements ConfigLoader, ConfigValidator {\n  private static defaultConfig: Partial<MoConfig> = {\n    theme: \"light\",\n    transition: {\n      type: \"horizontal\",\n      duration: 300,\n      easing: \"ease-in-out\",\n    },\n    scale: 1.0,\n    loop: false,\n    plugins: {},\n    keyboard: true,\n    touch: true,\n    urlHash: false,\n    centerContent: {\n      vertical: true,\n      horizontal: true,\n    },\n  };\n\n  /**\n   * Load configuration from file\n   */\n  async loadFromFile(path: string): Promise<MoConfig> {\n    try {\n      const response = await fetch(path);\n\n      if (!response.ok) {\n        throw new ConfigLoadError(\n          `Failed to load config from ${path}: ${response.status} ${response.statusText}`,\n          path,\n          response.status\n        );\n      }\n\n      const configData = await response.json();\n      return this.validateAndMerge(configData);\n    } catch (error) {\n      if (error instanceof ConfigLoadError) {\n        throw error;\n      }\n\n      throw new ConfigLoadError(\n        `Error loading config from ${path}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        path\n      );\n    }\n  }\n\n  /**\n   * Load configuration from URL\n   */\n  async loadFromURL(url: string): Promise<MoConfig> {\n    try {\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new ConfigLoadError(\n          `Failed to load config from ${url}: ${response.status} ${response.statusText}`,\n          url,\n          response.status\n        );\n      }\n\n      const configData = await response.json();\n      return this.validateAndMerge(configData);\n    } catch (error) {\n      if (error instanceof ConfigLoadError) {\n        throw error;\n      }\n\n      throw new ConfigLoadError(\n        `Error loading config from ${url}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        url\n      );\n    }\n  }\n\n  /**\n   * Load configuration from object\n   */\n  loadFromObject(obj: any): MoConfig {\n    try {\n      return this.validateAndMerge(obj);\n    } catch (error) {\n      throw new ConfigValidationError(\n        `Invalid configuration object: ${error instanceof Error ? error.message : \"Unknown error\"}`\n      );\n    }\n  }\n\n  /**\n   * Validate configuration\n   */\n  validate(config: any): ConfigValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    // Check if config is an object\n    if (!config || typeof config !== \"object\") {\n      errors.push(\"Configuration must be an object\");\n      return { isValid: false, errors, warnings };\n    }\n\n    // Validate theme\n    if (config.theme && typeof config.theme !== \"string\") {\n      errors.push(\"Theme must be a string\");\n    }\n\n    // Validate scale\n    if (config.scale !== undefined) {\n      if (typeof config.scale !== \"number\" || config.scale <= 0) {\n        errors.push(\"Scale must be a positive number\");\n      }\n    }\n\n    // Validate transition\n    if (config.transition) {\n      if (typeof config.transition === \"string\") {\n        // Legacy format - convert to object\n        warnings.push(\"Transition as string is deprecated, use object format\");\n      } else if (typeof config.transition === \"object\") {\n        if (\n          config.transition.type &&\n          ![\"horizontal\", \"vertical\", \"fade\", \"slide\"].includes(\n            config.transition.type\n          )\n        ) {\n          errors.push(\"Invalid transition type\");\n        }\n        if (\n          config.transition.duration &&\n          (typeof config.transition.duration !== \"number\" ||\n            config.transition.duration < 0)\n        ) {\n          errors.push(\"Transition duration must be a non-negative number\");\n        }\n      }\n    }\n\n    // Validate plugins\n    if (config.plugins && typeof config.plugins !== \"object\") {\n      errors.push(\"Plugins must be an object\");\n    }\n\n    // Validate boolean properties\n    const booleanProps = [\"loop\", \"keyboard\", \"touch\", \"urlHash\"];\n    booleanProps.forEach((prop) => {\n      if (config[prop] !== undefined && typeof config[prop] !== \"boolean\") {\n        errors.push(`${prop} must be a boolean`);\n      }\n    });\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n\n  /**\n   * Validate required fields\n   */\n  validateRequired(config: any, required: string[]): ConfigValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    required.forEach((field) => {\n      if (!(field in config)) {\n        errors.push(`Required field '${field}' is missing`);\n      }\n    });\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n\n  /**\n   * Validate field types\n   */\n  validateTypes(\n    config: any,\n    schema: Record<string, string>\n  ): ConfigValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    Object.entries(schema).forEach(([field, expectedType]) => {\n      if (field in config) {\n        const actualType = typeof config[field];\n        if (actualType !== expectedType) {\n          errors.push(\n            `Field '${field}' must be of type ${expectedType}, got ${actualType}`\n          );\n        }\n      }\n    });\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n\n  /**\n   * Get default configuration\n   */\n  getDefaultConfig(): Partial<MoConfig> {\n    return { ...ConfigService.defaultConfig };\n  }\n\n  /**\n   * Merge configuration with defaults\n   */\n  private validateAndMerge(config: any): MoConfig {\n    const validation = this.validate(config);\n\n    if (!validation.isValid) {\n      throw new ConfigValidationError(\n        `Configuration validation failed: ${validation.errors.join(\", \")}`\n      );\n    }\n\n    // Log warnings if any\n    if (validation.warnings.length > 0) {\n      console.warn(\"Configuration warnings:\", validation.warnings);\n    }\n\n    // Merge with defaults\n    return this.deepMerge(ConfigService.defaultConfig, config) as MoConfig;\n  }\n\n  /**\n   * Deep merge objects\n   */\n  private deepMerge(target: any, source: any): any {\n    const result = { ...target };\n\n    for (const key in source) {\n      if (source.hasOwnProperty(key)) {\n        if (\n          source[key] &&\n          typeof source[key] === \"object\" &&\n          !Array.isArray(source[key])\n        ) {\n          result[key] = this.deepMerge(target[key] || {}, source[key]);\n        } else {\n          result[key] = source[key];\n        }\n      }\n    }\n\n    return result;\n  }\n}\n\n/**\n * Custom error classes for configuration operations\n */\nexport class ConfigError extends Error {\n  constructor(\n    message: string,\n    public readonly code?: string\n  ) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}\n\nexport class ConfigLoadError extends ConfigError {\n  constructor(\n    message: string,\n    public readonly path: string,\n    public readonly statusCode?: number\n  ) {\n    super(message, \"CONFIG_LOAD_ERROR\");\n  }\n}\n\nexport class ConfigValidationError extends ConfigError {\n  constructor(message: string) {\n    super(message, \"CONFIG_VALIDATION_ERROR\");\n  }\n}\n"],"names":["Prism","_self","lang","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","type","content","alias","Array","isArray","map","replace","o","Object","prototype","toString","call","slice","objId","obj","defineProperty","value","clone","deepClone","visited","id","key","hasOwnProperty","forEach","v","i","getLanguage","element","m","exec","className","toLowerCase","parentElement","setLanguage","language","RegExp","classList","add","currentScript","document","tagName","Error","err","src","stack","scripts","getElementsByTagName","isActive","defaultActivation","no","contains","languages","plain","plaintext","text","txt","extend","redef","insertBefore","inside","before","insert","root","grammar","ret","token","newToken","old","DFS","this","callback","property","propertyType","plugins","highlightAll","async","highlightAllUnder","container","env","selector","hooks","run","elements","apply","querySelectorAll","highlightElement","parent","nodeName","code","textContent","insertHighlightedCode","highlightedCode","innerHTML","hasAttribute","setAttribute","Worker","worker","filename","onmessage","evt","data","postMessage","JSON","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","head","matchGrammar","toArray","list","array","node","next","tail","push","all","name","callbacks","length","matchedStr","matchPattern","pattern","pos","lookbehind","lastIndex","match","lookbehindLength","index","startNode","startPos","rematch","patterns","j","cause","patternObj","greedy","global","flags","source","currentNode","reach","str","removeCount","from","to","p","k","matchStr","after","removeFrom","prev","removeRange","nestedRematch","newNode","count","s","e","tag","classes","attributes","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","readyState","defer","window","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","markup","comment","prolog","doctype","string","punctuation","cdata","namespace","entity","addInlined","includedCdataInside","def","attrName","html","mathml","svg","xml","ssml","atom","rss","css","atrule","rule","keyword","url","function","important","addAttribute","clike","boolean","number","operator","javascript","regex","parameter","constant","hashbang","interpolation","js","Element","matches","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","py","rb","ps1","psm1","sh","bat","h","tex","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","appendChild","createElement","getAttribute","extension","autoloader","loadLanguages","loadFile","success","error","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","range","parseRange","start","Number","comma","end","lines","split","Math","max","min","String","fileHighlight","logged","console","warn","arguments","inner","createInline","tableCell","tableRow","tableLine","markdown","yaml","blockquote","table","title","hr","variable","bold","italic","strike","walkTokens","l","codeLang","codeBlock","cls","tagPattern","parseInt","fromCodePoint","known","KNOWN_ENTITY_NAMES","Date","valueOf","floor","random","ele","getElementById","amp","lt","gt","quot","fromCharCode","md","envVars","commandAfterHeredoc","insideString","bash","environment","shebang","builtin","toBeCopied","shell","typescript","typeInside","decorator","at","generic","ts","json","null","webmanifest","SyntaxHighlighter","constructor","config","isInitialized","lineNumbers","containerClass","showLanguage","getInstance","instance","initialize","highlightCode","trim","escapeHtml","normalizedLang","normalizeLanguage","isLanguageSupported","highlighted","wrapCode","block","highlightCodeBlock","highlightInlineCode","dataLang","updateConfig","newConfig","getConfig","reset","htmlEscapes","char","wrapped","languageMatch","PluginBase","styleElement","enabled","isEnabled","setEnabled","checkEnabled","injectStyles","styles","dataAttribute","querySelector","cleanupStyles","remove","cleanupElements","ConfettiPlugin","super","confettiContainer","confettiSlides","Set","init","mo","getContainer","particleCount","colors","size","duration","delay","createConfettiContainer","parseSlidesForConfetti","setupSlideListener","style","pointerEvents","getSlides","slide","includes","on","event","currentSlide","has","transition","triggerConfetti","createConfettiParticle","particle","color","minSize","maxSize","containerWidth","offsetWidth","innerWidth","containerHeight","offsetHeight","innerHeight","startX","endX","rotation","rotationSpeed","fallSpeed","backgroundColor","width","height","left","top","transform","animationDuration","destroy","ControllerPlugin","controller","firstBtn","prevBtn","overviewBtn","nextBtn","lastBtn","position","createController","goToSlide","previousSlide","toggleOverview","nextSlide","getTotalSlides","updateButtonStates","totalSlides","getCurrentSlide","disabled","ProgressBarPlugin","progressBar","createProgressBar","updateProgress","fill","current","total","percentage","SlideNumberPlugin","slideNumberElement","format","createSlideNumber","updateSlideNumber","_PluginService","initialized","pluginContext","assign","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","entries","path","PluginClass","default","values","find","exp","endsWith","getPlugins","getPlugin","getAvailablePlugins","keys","loadPlugin","PluginNotFoundError","plugin","loadedPlugins","set","PluginLoadError","unloadPlugin","get","delete","getLoadedPlugins","isPluginLoaded","enablePlugin","disablePlugin","getPluginStats","loaded","available","Map","PluginService","PluginError","pluginName","combinedBaseStyles","_ThemeService","ensureInitialized","availableThemes","themeContext","cssContent","themeName","loadTheme","theme","ThemeError","baseStylesLoaded","loadBaseStyles","removeExistingThemeStyles","injectThemeStyles","currentTheme","log","ThemeLoadError","switchTheme","getCurrentTheme","isThemeLoaded","getAvailableThemes","getAvailableThemesRecord","getThemeNames","getTheme","registerTheme","hasTheme","ThemeService","themes","bind","L","breaks","extensions","gfm","pedantic","renderer","silent","tokenizer","O","G","E","t","n","r","caret","getRegex","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","C","se","ie","Te","F","Q","ye","Pe","U","Se","oe","K","fences","heading","lheading","newline","paragraph","re","_e","Le","ae","D","W","le","Ee","ue","pe","qe","ve","ce","De","He","Ze","Ge","Ne","je","Fe","q","Qe","he","de","X","_backpedal","anyPunctuation","autolink","blockSkip","br","del","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","escape","link","nolink","reflink","reflinkSearch","Ke","N","We","I","normal","M","Xe","ke","w","test","J","encodeURI","V","a","u","shift","pop","splice","z","charAt","fe","href","other","state","inLink","raw","inlineTokens","y","options","rules","lexer","space","codeBlockStyle","Je","inline","depth","c","f","blockTokens","x","g","T","substring","ordered","loose","items","repeat","H","trimStart","search","ee","te","ne","me","A","Z","Y","task","checked","trimEnd","filter","some","header","align","rows","inRawBlock","ge","indexOf","emStrong","codespan","inlineText","escaped","b","inlineQueue","links","create","lex","lexInline","startBlock","charCodeAt","lastIndexOf","emStrongMask","startInline","P","parser","parseInline","listitem","checkbox","unshift","tablecell","tablerow","strong","em","image","textRenderer","$","R","renderers","S","static","preprocess","postprocess","processAllTokens","provideLexer","provideParser","defaults","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","concat","childTokens","flat","level","passThroughHooks","passThroughHooksRespectAsync","Promise","resolve","then","onError","catch","reject","d","getDefaults","MarkdownParser","marked","ContentService","cache","markdownParser","loadContentFromSource","sourcePath","response","fetch","ok","ContentLoadError","validateContent","parseContent","ContentParseError","parseMarkdownToHtml","clearCache","clear","getCacheStats","slideContents","slideContent","trimmedContent","ContentValidationError","ContentError","statusCode","NavigationService","keyboardEnabled","touchEnabled","navigationCallback","slides","currentSlideIndex","eventListeners","setSlides","setCurrentSlideIndex","getCurrentSlideIndex","setupNavigation","setupKeyboardNavigation","setupTouchNavigation","handleKeyDown","handleKeyboardEvent","startY","endY","handleTouchStart","touch","touches","clientX","clientY","handleTouchEnd","changedTouches","handleTouchGesture","preventDefault","goToFirstSlide","goToLastSlide","deltaX","deltaY","abs","isFirstSlide","isLastSlide","getNavigationStats","progress","isFirst","isLast","enableKeyboard","disableKeyboard","removeEventListener","enableTouch","disableTouch","eventType","listener","TransitionManager","transitionConfig","animateTransition","fromIndex","toIndex","fromSlide","toSlide","showSlide","fadeTransition","verticalTransition","slideTransition","horizontalTransition","slideElement","display","opacity","easing","isNext","direction","enterDirection","HELP_DATA","overview","description","HelpComponent","mode","prefix","sections","createHelpElement","generateHTML","section","renderItems","renderSection","item","renderItem","renderKeys","addCloseButtonListener","onClose","closeButton","globalHasShownInitialHelp","HelpManager","isHelpVisible","helpContainer","wasHelpVisibleBeforeOverview","autoHideTimeout","helpComponent","toggleHelp","hideHelp","showHelp","showInitialHelp","scheduleAutoHide","clearAutoHide","clearTimeout","getHelpVisible","hideForOverview","restoreAfterOverview","createHelpComponent","hideHelpWithAnimation","OverviewManager","onSlideChange","onExitOverview","onEnterOverview","isOverviewMode","overviewContainer","overviewSelectedIndex","exitOverview","enterOverview","isInOverviewMode","handleOverviewKeyboard","keyLower","stopPropagation","nextOverviewSlide","previousOverviewSlide","selectOverviewSlide","getThumbnails","updateOverviewSelection","thumbnails","actualSlidesCount","createOverviewGrid","removeOverviewContainer","thumbnail","scrollIntoView","behavior","slideElements","createThumbnail","hideOverviewHelp","createCloseButton","createFooter","currentIndex","getComputedStyle","slideNumber","contentWrapper","slideContentWrapper","applyThemeToOverviewContent","originalSlide","originalStyles","htmlElement","originalElement","originalElementStyles","borderColor","background","webkitBackgroundClip","webkitTextFillColor","backgroundClip","textShadow","border","borderLeftColor","footer","pkg","CenterContentManager","centerContentConfig","observer","isUpdating","scheduled","vertical","horizontal","setupCenterContentObserver","updateCurrentSlideCentering","disconnect","MutationObserver","observe","childList","subtree","attributeFilter","isVisible","flexDirection","alignItems","justifyContent","cleanup","UrlHashManager","urlHashEnabled","setupUrlHashNavigation","slideIndex","getSlideIndexFromHash","getInitialSlideFromUrl","hash","location","updateUrlHash","newHash","history","replaceState","globalCurrentSlideIndex","Mostage","scale","loop","keyboard","urlHash","centerContent","configPath","syntaxHighlighter","resolveElement","body","applyAutoDetection","contentService","navigationService","overviewManager","helpManager","centerContentManager","initializeConfigDependentManagers","transitionManager","urlHashManager","loadConfigFromFile","jsonConfig","contentPath","handleKeyboard","urlSlide","targetSlide","renderSlides","initializePlugins","emit","found","pluginConfig","pluginInstance","finalConfig","activeElement","contentEditable","isContentEditable","isNavigationKey","handleNavigationKey","isModeKey","handleModeKey","renderHeader","renderFooter","slidesContainer","applyBackgroundToSlide","transformOrigin","inverseScale","bg","shouldApplyBackground","applyBackgroundStyles","allSlides","allSlidesExcept","bgColor","imagePath","backgroundImage","backgroundSize","backgroundPosition","backgroundRepeat","headerElement","parsedContent","showOnFirstSlide","footerElement","updateHeaderFooterVisibility","previousIndex","listeners","updateContent","newContent","newSlides","_ConfigService","loadFromFile","ConfigLoadError","configData","validateAndMerge","loadFromURL","loadFromObject","ConfigValidationError","validate","errors","warnings","isValid","prop","validateRequired","required","field","validateTypes","schema","expectedType","actualType","getDefaultConfig","defaultConfig","validation","deepMerge","target","result","ConfigService","ConfigError"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,28]}