diff --git a/app.config.ts b/app.config.ts new file mode 100644 index 00000000..d4b26e03 --- /dev/null +++ b/app.config.ts @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ +export default defineAppConfig({ + theme: { + mode: "dark", + lightTheme: "Zhihu", + darkTheme: "Zhihu", + }, +}) diff --git a/assets/scss/index.scss b/assets/scss/index.scss deleted file mode 100644 index 56e01804..00000000 --- a/assets/scss/index.scss +++ /dev/null @@ -1,22 +0,0 @@ -html, -body, -#app { - margin: 0; - padding: 0; -} - -html.dark { - background: #222; - color: white; -} - -a { - font-weight: 400; - color: var(--el-color-primary); -} - -body { - font-family: "Open Sans", "LXGW WenKai", "JetBrains Mono", "-apple-system", "Microsoft YaHei", "Times New Roman", - "方正北魏楷书_GBK", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", - "Droid Sans", "Helvetica Neue", sans-serif; -} diff --git a/assets/siyuan/index.styl b/assets/siyuan/index.styl new file mode 100644 index 00000000..9b6e01df --- /dev/null +++ b/assets/siyuan/index.styl @@ -0,0 +1,15 @@ +// 整体布局 +html, body + margin 0 + padding 0 + overflow auto +#app + margin 0 + padding 0 + +// 字体 +body + font-family "Open Sans", "LXGW WenKai", "JetBrains Mono", "-apple-system", "Microsoft YaHei", "Times New Roman", + "方正北魏楷书_GBK", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", + "Droid Sans", "Helvetica Neue", sans-serif + diff --git a/composables/api/usePostApi.ts b/composables/api/usePostApi.ts index de18ace2..c035454f 100644 --- a/composables/api/usePostApi.ts +++ b/composables/api/usePostApi.ts @@ -1,3 +1,28 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + import { createAppLogger } from "~/common/appLogger" import { SiYuanApiAdaptor, SiyuanConfig } from "zhi-siyuan-api" @@ -11,10 +36,10 @@ export const usePostApi = () => { const getPost = async (id: string) => { logger.info("Loading post from remote api...") - logger.info("env=>", env) - logger.info("defaultType=>", env.public.defaultType) - logger.info("siyuanApiUrl=>", env.public.siyuanApiUrl) - logger.info("siyuanAuthToken=>", env.siyuanAuthToken) + // logger.info("env=>", env) + // logger.info("defaultType=>", env.public.defaultType) + // logger.info("siyuanApiUrl=>", env.public.siyuanApiUrl) + // logger.info("siyuanAuthToken=>", env.siyuanAuthToken) const siyuanConfig = new SiyuanConfig(env.public.siyuanApiUrl, env.siyuanAuthToken) const blogApi = new SiYuanApiAdaptor(siyuanConfig) diff --git a/nuxt.config.ts b/nuxt.config.ts index 837cc815..4c28135e 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -9,7 +9,7 @@ const generateDynamicV = () => { } const isDev = process.env.NODE_ENV === "development" -const appBase = "/" +const appBase = "/plugins/siyuan-blog/" const staticV = generateDynamicV() // https://nuxt.com/docs/api/configuration/nuxt-config @@ -24,7 +24,7 @@ export default defineNuxtConfig({ }, // build modules - modules: ["@vueuse/nuxt", "@nuxtjs/i18n", "@element-plus/nuxt", "@nuxtjs/color-mode"], + modules: ["@vueuse/nuxt", "@nuxtjs/i18n-edge", "@element-plus/nuxt", "@nuxtjs/color-mode"], // vueuse vueuse: { @@ -59,7 +59,15 @@ export default defineNuxtConfig({ themes: ["dark"], }, - css: ["~/assets/siyuan/style.styl"], + // https://nuxt.com/docs/guide/going-further/custom-routing#hash-mode-spa + ssr: false, + router: { + options: { + hashMode: true, + }, + }, + + css: ["~/assets/siyuan/style.styl", "~/assets/siyuan/index.styl"], app: { baseURL: appBase, @@ -76,22 +84,22 @@ export default defineNuxtConfig({ { rel: "stylesheet", href: appBase + "libs/fonts/webfont.css?v=" + staticV }, { rel: "stylesheet", - href: "http://127.0.0.1:59541/stage/build/app/base.55870db539c2a1c02cb5.css?v=" + staticV, + href: appBase + "resources/stage/build/app/base.css?v=" + staticV, }, { rel: "stylesheet", id: "themeDefaultStyle", - href: "http://127.0.0.1:59541/appearance/themes/midnight/theme.css?v=2.9.1", + href: appBase + "resources/appearance/themes/midnight/theme.css?v=2.9.1", }, { rel: "stylesheet", id: "themeStyle", - href: "http://127.0.0.1:59541/appearance/themes/Zhihu/theme.css?v=0.0.6", + href: appBase + "resources/appearance/themes/Zhihu/theme.css?v=0.0.6", }, { rel: "stylesheet", id: "protyleHljsStyle", - href: "http://127.0.0.1:59541/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", + href: appBase + "resources/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", }, ], // https://nuxt.com/docs/api/configuration/nuxt-config#head diff --git a/nuxt.node.config.ts b/nuxt.node.config.ts index 837cc815..c1d9f9ba 100644 --- a/nuxt.node.config.ts +++ b/nuxt.node.config.ts @@ -43,14 +43,6 @@ export default defineNuxtConfig({ vite: { define: { "process.env.DEV_MODE": `"${isDev}"` }, plugins: [], - - css: { - preprocessorOptions: { - scss: { - additionalData: `@use "@/assets/scss/element/index.scss" as element;`, - }, - }, - }, }, // https://github.com/element-plus/element-plus-nuxt-starter/blob/main/nuxt.config.ts elementPlus: { @@ -59,7 +51,7 @@ export default defineNuxtConfig({ themes: ["dark"], }, - css: ["~/assets/siyuan/style.styl"], + css: ["~/assets/siyuan/style.styl", "~/assets/siyuan/index.styl"], app: { baseURL: appBase, @@ -76,22 +68,22 @@ export default defineNuxtConfig({ { rel: "stylesheet", href: appBase + "libs/fonts/webfont.css?v=" + staticV }, { rel: "stylesheet", - href: "http://127.0.0.1:59541/stage/build/app/base.55870db539c2a1c02cb5.css?v=" + staticV, + href: appBase + "resources/stage/build/app/base.css?v=" + staticV, }, { rel: "stylesheet", id: "themeDefaultStyle", - href: "http://127.0.0.1:59541/appearance/themes/midnight/theme.css?v=2.9.1", + href: appBase + "resources/appearance/themes/midnight/theme.css?v=2.9.1", }, { rel: "stylesheet", id: "themeStyle", - href: "http://127.0.0.1:59541/appearance/themes/Zhihu/theme.css?v=0.0.6", + href: appBase + "resources/appearance/themes/Zhihu/theme.css?v=0.0.6", }, { rel: "stylesheet", id: "protyleHljsStyle", - href: "http://127.0.0.1:59541/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", + href: appBase + "resources/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", }, ], // https://nuxt.com/docs/api/configuration/nuxt-config#head diff --git a/nuxt.siyuan.config.ts b/nuxt.siyuan.config.ts index fd890131..4c28135e 100644 --- a/nuxt.siyuan.config.ts +++ b/nuxt.siyuan.config.ts @@ -61,14 +61,13 @@ export default defineNuxtConfig({ // https://nuxt.com/docs/guide/going-further/custom-routing#hash-mode-spa ssr: false, - // https://nuxt.com/docs/guide/going-further/custom-routing#hash-mode-spa router: { options: { hashMode: true, }, }, - css: ["~/assets/siyuan/style.styl"], + css: ["~/assets/siyuan/style.styl", "~/assets/siyuan/index.styl"], app: { baseURL: appBase, @@ -85,22 +84,22 @@ export default defineNuxtConfig({ { rel: "stylesheet", href: appBase + "libs/fonts/webfont.css?v=" + staticV }, { rel: "stylesheet", - href: "http://127.0.0.1:59541/stage/build/app/base.55870db539c2a1c02cb5.css?v=" + staticV, + href: appBase + "resources/stage/build/app/base.css?v=" + staticV, }, { rel: "stylesheet", id: "themeDefaultStyle", - href: "http://127.0.0.1:59541/appearance/themes/midnight/theme.css?v=2.9.1", + href: appBase + "resources/appearance/themes/midnight/theme.css?v=2.9.1", }, { rel: "stylesheet", id: "themeStyle", - href: "http://127.0.0.1:59541/appearance/themes/Zhihu/theme.css?v=0.0.6", + href: appBase + "resources/appearance/themes/Zhihu/theme.css?v=0.0.6", }, { rel: "stylesheet", id: "protyleHljsStyle", - href: "http://127.0.0.1:59541/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", + href: appBase + "resources/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", }, ], // https://nuxt.com/docs/api/configuration/nuxt-config#head diff --git a/nuxt.vercel.config.ts b/nuxt.vercel.config.ts index 837cc815..c1d9f9ba 100644 --- a/nuxt.vercel.config.ts +++ b/nuxt.vercel.config.ts @@ -43,14 +43,6 @@ export default defineNuxtConfig({ vite: { define: { "process.env.DEV_MODE": `"${isDev}"` }, plugins: [], - - css: { - preprocessorOptions: { - scss: { - additionalData: `@use "@/assets/scss/element/index.scss" as element;`, - }, - }, - }, }, // https://github.com/element-plus/element-plus-nuxt-starter/blob/main/nuxt.config.ts elementPlus: { @@ -59,7 +51,7 @@ export default defineNuxtConfig({ themes: ["dark"], }, - css: ["~/assets/siyuan/style.styl"], + css: ["~/assets/siyuan/style.styl", "~/assets/siyuan/index.styl"], app: { baseURL: appBase, @@ -76,22 +68,22 @@ export default defineNuxtConfig({ { rel: "stylesheet", href: appBase + "libs/fonts/webfont.css?v=" + staticV }, { rel: "stylesheet", - href: "http://127.0.0.1:59541/stage/build/app/base.55870db539c2a1c02cb5.css?v=" + staticV, + href: appBase + "resources/stage/build/app/base.css?v=" + staticV, }, { rel: "stylesheet", id: "themeDefaultStyle", - href: "http://127.0.0.1:59541/appearance/themes/midnight/theme.css?v=2.9.1", + href: appBase + "resources/appearance/themes/midnight/theme.css?v=2.9.1", }, { rel: "stylesheet", id: "themeStyle", - href: "http://127.0.0.1:59541/appearance/themes/Zhihu/theme.css?v=0.0.6", + href: appBase + "resources/appearance/themes/Zhihu/theme.css?v=0.0.6", }, { rel: "stylesheet", id: "protyleHljsStyle", - href: "http://127.0.0.1:59541/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", + href: appBase + "resources/stage/protyle/js/highlight.js/styles/vs2015.min.css?v=11.5.0", }, ], // https://nuxt.com/docs/api/configuration/nuxt-config#head diff --git a/package.json b/package.json index d95d19f8..d7d887db 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "dependencies": { "@element-plus/icons-vue": "^2.1.0", "element-plus": "^2.3.6", - "vue-dompurify-html": "^4.1.4", + "highlight.js": "^11.6.0", "zhi-siyuan-api": "^1.13.0" } } diff --git a/pages/p/[id].vue b/pages/p/[id].vue index fbda6fe5..d8dd47f1 100644 --- a/pages/p/[id].vue +++ b/pages/p/[id].vue @@ -3,22 +3,36 @@ import { usePost } from "~/composables/usePost" const { currentPost } = usePost() // https://stackoverflow.com/a/71781246/4037224 -const VNode = () => h("div", { class: "b3-typography", innerHTML: currentPost.post.description }) +const VNode = () => + h("div", { + class: "", + innerHTML: currentPost.post.editorDom?.replaceAll('contenteditable="true"', 'contenteditable="false"') ?? "", + }) - - diff --git a/pages/post/[id].vue b/pages/post/[id].vue index fbda6fe5..d8dd47f1 100644 --- a/pages/post/[id].vue +++ b/pages/post/[id].vue @@ -3,22 +3,36 @@ import { usePost } from "~/composables/usePost" const { currentPost } = usePost() // https://stackoverflow.com/a/71781246/4037224 -const VNode = () => h("div", { class: "b3-typography", innerHTML: currentPost.post.description }) +const VNode = () => + h("div", { + class: "", + innerHTML: currentPost.post.editorDom?.replaceAll('contenteditable="true"', 'contenteditable="false"') ?? "", + }) - - diff --git a/pages/s/[id].vue b/pages/s/[id].vue index 2e6042cb..d8dd47f1 100644 --- a/pages/s/[id].vue +++ b/pages/s/[id].vue @@ -3,7 +3,11 @@ import { usePost } from "~/composables/usePost" const { currentPost } = usePost() // https://stackoverflow.com/a/71781246/4037224 -const VNode = () => h("div", { class: "", innerHTML: currentPost.post.editorDom?.replaceAll('contenteditable="true"', 'contenteditable="false"') ?? "" }) +const VNode = () => + h("div", { + class: "", + innerHTML: currentPost.post.editorDom?.replaceAll('contenteditable="true"', 'contenteditable="false"') ?? "", + }) - - diff --git a/plugins/01.hljs.client.ts b/plugins/01.hljs.client.ts new file mode 100644 index 00000000..fce8ba80 --- /dev/null +++ b/plugins/01.hljs.client.ts @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +import { createAppLogger } from "~/common/appLogger" +import { useHljs } from "~/plugins/hljs/useHljs" + +/** + * 代码高亮插件 + * https://github.com/nuxt/nuxt/issues/13382 + * client = browser only + * + * @author terwer + * @version 1.0.0 + * @since 0.0.1 + */ +export default defineNuxtPlugin(({ vueApp }) => { + const logger = createAppLogger("hljs-plugin") + const { hljs } = useHljs() + logger.info("hljs plugin load") + + vueApp.directive("highlight", { + mounted(el, binding) { + setTimeout(() => { + const blocks = el.querySelectorAll("pre code") + Array.prototype.forEach.call(blocks, hljs.highlightBlock) + logger.info("hljs code highlighted") + }, 500) + + setTimeout(() => { + const blocks = el.querySelectorAll("div[class='hljs']") + Array.prototype.forEach.call(blocks, hljs.highlightBlock) + logger.info("hljs div highlighted") + }, 500) + }, + }) +}) diff --git a/plugins/01.domPlugin.ts b/plugins/02.hljs.server.ts similarity index 89% rename from plugins/01.domPlugin.ts rename to plugins/02.hljs.server.ts index bb1f98b2..a7a8b847 100644 --- a/plugins/01.domPlugin.ts +++ b/plugins/02.hljs.server.ts @@ -23,8 +23,7 @@ * questions. */ -import VueDOMPurifyHTML from "vue-dompurify-html" - -export default defineNuxtPlugin((nuxtApp) => { - nuxtApp.vueApp.use(VueDOMPurifyHTML) +// stub - block nuxt getSSRProps error +export default defineNuxtPlugin(({ vueApp }) => { + vueApp.directive("highlight", {}) }) diff --git a/plugins/hljs/codecopy/codecopy.css b/plugins/hljs/codecopy/codecopy.css new file mode 100644 index 00000000..d5705766 --- /dev/null +++ b/plugins/hljs/codecopy/codecopy.css @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +.hljs-copy-wrapper { + position: relative; + overflow: hidden; +} +.hljs-copy-wrapper:hover .hljs-copy-button, +.hljs-copy-button:focus { + transform: translateX(0); +} +.hljs-copy-button { + position: absolute; + transform: translateX(calc(100% + 1.125em)); + top: 0.15em; + right: 1em; + width: 2rem; + height: 2rem; + text-indent: -9999px; /* Hide the inner text */ + color: #fff; + border-radius: 0.25rem; + border: 1px solid #ffffff22; + /*background-color: #2d2b57;*/ + background-color: #0d6efd; + background-image: url('data:image/svg+xml;utf-8,'); + background-repeat: no-repeat; + background-position: center; + transition: background-color 200ms ease, transform 200ms ease-out; + cursor: pointer; +} +.hljs-copy-button:hover { + border-color: #ffffff44; +} +.hljs-copy-button:active { + border-color: #ffffff66; +} +.hljs-copy-button[data-copied="true"] { + text-indent: 0px; /* Shows the inner text */ + width: auto; + background-image: none; +} +@media (prefers-reduced-motion) { + .hljs-copy-button { + transition: none; + } +} + +/* visually-hidden */ +.hljs-copy-alert { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} diff --git a/plugins/hljs/codecopy/index.js b/plugins/hljs/codecopy/index.js new file mode 100644 index 00000000..f0616daf --- /dev/null +++ b/plugins/hljs/codecopy/index.js @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2022, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +/** + * Adds a copy button to highlightjs code blocks + */ +export class CopyButtonPlugin { + /** + * Create a new CopyButtonPlugin class instance + * @param {Object} [options] - Functions that will be called when a copy event fires + * @param {CopyCallback} [options.callback] + * @param {Hook} [options.hook] + */ + constructor(options = {}) { + self.hook = options.hook + self.callback = options.callback + } + + "after:highlightElement"({ el, text }) { + // Create the copy button and append it to the codeblock. + const button = Object.assign(document.createElement("button"), { + innerHTML: "Copy", + className: "hljs-copy-button", + }) + button.dataset.copied = false + el.parentElement.classList.add("hljs-copy-wrapper") + el.parentElement.appendChild(button) + + // Add a custom property to the code block so that the copy button can reference and match its background-color value. + el.parentElement.style.setProperty("--hljs-theme-background", window.getComputedStyle(el).backgroundColor) + + button.onclick = function () { + if (!navigator.clipboard) return + + let newText = text + if (hook && typeof hook === "function") { + newText = hook(text, el) || text + } + + navigator.clipboard + .writeText(newText) + .then(function () { + button.innerHTML = "复制成功" + button.dataset.copied = true + + let alert = Object.assign(document.createElement("div"), { + role: "status", + className: "hljs-copy-alert", + innerHTML: "复制到剪贴板", + }) + el.parentElement.appendChild(alert) + + setTimeout(() => { + button.innerHTML = "Copy" + button.dataset.copied = false + el.parentElement.removeChild(alert) + alert = null + }, 2000) + }) + .then(function () { + if (typeof callback === "function") return callback(newText, el) + }) + } + } +} + +/** + * @typedef {function} CopyCallback + * @param {string} text - The raw text copied to the clipboard. + * @param {HTMLElement} el - The code block element that was copied from. + * @returns {undefined} + */ +/** + * @typedef {function} Hook + * @param {string} text - The raw text copied to the clipboard. + * @param {HTMLElement} el - The code block element that was copied from. + * @returns {string|undefined} + */ diff --git a/plugins/hljs/useHljs.ts b/plugins/hljs/useHljs.ts new file mode 100644 index 00000000..a785b3b7 --- /dev/null +++ b/plugins/hljs/useHljs.ts @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +import hljs from "highlight.js/lib/core" +import javascript from "highlight.js/lib/languages/javascript" +import typescript from "highlight.js/lib/languages/typescript" +import c from "highlight.js/lib/languages/c" +import cpp from "highlight.js/lib/languages/cpp" +import java from "highlight.js/lib/languages/java" +import kotlin from "highlight.js/lib/languages/kotlin" +import bash from "highlight.js/lib/languages/bash" +import xml from "highlight.js/lib/languages/xml" +import css from "highlight.js/lib/languages/css" +import plaintext from "highlight.js/lib/languages/plaintext" +import php from "highlight.js/lib/languages/php" +import properties from "highlight.js/lib/languages/properties" +import sql from "highlight.js/lib/languages/sql" +import markdown from "highlight.js/lib/languages/markdown" +import { CopyButtonPlugin } from "~/plugins/hljs/codecopy" +import "./codecopy/codecopy.css" + +export const useHljs = () => { + // 按需加载语言,防止打包体积过大 + hljs.registerLanguage("javascript", javascript) + hljs.registerLanguage("js", javascript) + hljs.registerLanguage("typescript", typescript) + hljs.registerLanguage("ts", typescript) + hljs.registerLanguage("c", c) + hljs.registerLanguage("cpp", cpp) + hljs.registerLanguage("java", java) + hljs.registerLanguage("kotlin", kotlin) + hljs.registerLanguage("csharp", java) + hljs.registerLanguage("cs", java) + hljs.registerLanguage("bash", bash) + hljs.registerLanguage("shell", bash) + hljs.registerLanguage("xml", xml) + hljs.registerLanguage("html", xml) + hljs.registerLanguage("css", css) + hljs.registerLanguage("plaintext", plaintext as any) + hljs.registerLanguage("plantuml", plaintext as any) + hljs.registerLanguage("php", php) + hljs.registerLanguage("properties", properties) + hljs.registerLanguage("sql", sql) + hljs.registerLanguage("markdown", markdown) + hljs.registerLanguage("md", markdown) + + // 代码复制 + hljs.addPlugin( + new CopyButtonPlugin({ + callback: (text: string, el: HTMLElement) => console.log("Copied to clipboard", text), + }) + ) + + return { hljs } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f7f495c..866b4c1d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - dependencies: '@element-plus/icons-vue': specifier: ^2.1.0 @@ -11,9 +7,9 @@ dependencies: element-plus: specifier: ^2.3.6 version: 2.3.6(vue@3.3.4) - vue-dompurify-html: - specifier: ^4.1.4 - version: 4.1.4(vue@3.3.4) + highlight.js: + specifier: ^11.6.0 + version: 11.6.0 zhi-siyuan-api: specifier: ^1.13.0 version: 1.13.0 @@ -3460,10 +3456,6 @@ packages: domelementtype: 2.3.0 dev: true - /dompurify@3.0.3: - resolution: {integrity: sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ==} - dev: false - /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: @@ -4767,6 +4759,11 @@ packages: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true + /highlight.js@11.6.0: + resolution: {integrity: sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==} + engines: {node: '>=12.0.0'} + dev: false + /hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} dev: true @@ -8448,18 +8445,6 @@ packages: resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} dev: true - /vue-dompurify-html@4.1.4(vue@3.3.4): - resolution: {integrity: sha512-K0XDSZA4dmMMvAgW8yaCx1kAYQldmgXeHJaLPS0mlSKOu8B+onE06X4KfB5LGyX4jR3rlVosyWJczRBzR0sZ/g==} - peerDependencies: - vue: ^2.7.0 || ^3.0.0 - dependencies: - dompurify: 3.0.3 - vue: 3.3.4 - vue-demi: 0.14.5(vue@3.3.4) - transitivePeerDependencies: - - '@vue/composition-api' - dev: false - /vue-eslint-parser@9.3.1(eslint@8.43.0): resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} engines: {node: ^14.17.0 || >=16.0.0} @@ -8842,3 +8827,7 @@ packages: compress-commons: 4.1.1 readable-stream: 3.6.2 dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/public/resources/appearance/themes/Zhihu/theme.css b/public/resources/appearance/themes/Zhihu/theme.css new file mode 100644 index 00000000..bdb0f88e --- /dev/null +++ b/public/resources/appearance/themes/Zhihu/theme.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +html[data-theme-mode="light"]{--b3-theme-surface:#f4f4f4;--b3-theme-background:#fff;--b3-theme-background-light:rgba(255,255,255,0.8);--b3-theme-primary:#121212;--b3-theme-on-background:#121212;--b3-border-color:rgba(0,0,0,0.12);--b3-list-hover:rgba(153,153,153,0.15)}html[data-theme-mode="dark"]{--b3-theme-surface:#121212;--b3-theme-background:#000;--b3-theme-background-light:rgba(30,30,34,0.8);--b3-theme-primary:#3573f0;--b3-theme-on-background:#9b9baa;--b3-border-color:#30363d;--b3-list-hover:rgba(153,153,153,0.15)}html[data-theme-mode="green"]{--b3-theme-surface:#ececcc;--b3-theme-background:#f5f5d5;--b3-theme-background-light:rgba(245,245,213,0.8);--b3-theme-primary:#00323c;--b3-theme-on-background:#704214;--b3-border-color:rgba(0,0,0,0.15);--b3-list-hover:rgba(153,153,153,0.15)}body{--b3-font-family:"Open Sans","LXGW WenKai","JetBrains Mono","-apple-system","Microsoft YaHei","Times New Roman","方正北魏楷书_GBK";--b3-font-family-code:"Open Sans","LXGW WenKai","JetBrains Mono","-apple-system","Microsoft YaHei","Times New Roman","方正北魏楷书_GBK";--b3-font-family-graph:"Open Sans","LXGW WenKai","JetBrains Mono","-apple-system","Microsoft YaHei","Times New Roman","方正北魏楷书_GBK";--b3-font-family-emoji:"Open Sans","LXGW WenKai","JetBrains Mono","-apple-system","Microsoft YaHei","Times New Roman","方正北魏楷书_GBK";--b3-font-family-math:"Open Sans","LXGW WenKai","JetBrains Mono","-apple-system","Microsoft YaHei","Times New Roman","方正北魏楷书_GBK";font-size:16px;margin:0;padding:0;color:var(--b3-theme-on-background)}body .b3-label{line-height:22px}html[data-theme-mode="light"]{--zhi-code-tab-bg:#fff;--zhi-code-content-bg:#f8f9fa}html[data-theme-mode="dark"]{--zhi-code-tab-bg:#000;--zhi-code-content-bg:#1e1e1e}html[data-theme-mode="green"]{--zhi-code-tab-bg:#f5f5d5;--zhi-code-content-bg:rgba(27,31,35,0.05)}#preview .protyle-action__language{right:.2rem !important}#preview .protyle-action__language::after{display:none !important}#preview .protyle-action__copy{display:none !important}.code-block{border:.5px solid var(--b3-border-color) !important;border-radius:5px !important;padding-top:32px !important;background:var(--zhi-code-tab-bg)}.b3-typography div.hljs,.protyle-wysiwyg div.hljs{color:var(--b3-theme-on-background);padding:8px;font-family:var(--b3-font-family-code);border-top:.5px solid var(--b3-border-color);border-radius:0 0 5px 5px !important;background:var(--zhi-code-content-bg)}.code-block::after{content:" ";position:absolute;background:#fa625c;box-shadow:23px 0 #fdbc40,45px 0 #35cd4b;border-radius:50%;top:9px !important;left:8px !important;height:12px !important;width:12px !important;z-index:1}.protyle-linenumber__rows{margin-top:32px !important;padding:4px;background-color:var(--b3-theme-background) !important;margin-bottom:0;font-family:var(--b3-font-family-code);border-top-left-radius:4px}.protyle-linenumber__rows span::before{color:#808007}.b3-typography .code-block .protyle-action .protyle-action__language,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language{margin-top:0;position:absolute;right:3.5em;border-radius:1px;opacity:1 !important;font-family:var(--b3-font-family-code)}.b3-typography .code-block .protyle-action .protyle-action__language::after,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language::after{content:"›";font-family:var(--b3-font-family-code);color:rgba(128,128,128,0.502);opacity:1}code.hljs{border:1px solid var(--b3-border-color1)}.b3-typography .code-block .protyle-action .protyle-icon,.b3-typography .code-block .protyle-action .protyle-action__language,.protyle-wysiwyg .code-block .protyle-action .protyle-icon,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language{opacity:1 !important;background-color:transparent !important}.b3-typography .code-block .protyle-action .protyle-icon svg,.b3-typography .code-block .protyle-action .protyle-action__language svg,.protyle-wysiwyg .code-block .protyle-action .protyle-icon svg,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language svg{color:#808080}.protyle-wysiwyg .p[data-node-id][custom-riff-decks]{box-shadow:none !important}@media screen and (min-width:1px) and (max-width:719px){.protyle-background{min-height:32px !important;padding-bottom:0 !important}.protyle-icons{opacity:.86 !important}.protyle-background__iconw{left:16px !important}.protyle-title{margin-left:16px !important;margin-right:16px !important}.protyle-wysiwyg{padding-left:16px !important;padding-right:16px !important}}html[data-theme-mode="light"]{--b3-protyle-inline-blockref-color:#175199;--b3-protyle-inline-tag-color:#8590a6;--b3-protyle-inline-link-color:#175199}html[data-theme-mode="dark"]{--b3-protyle-inline-blockref-color:#6385a6;--b3-protyle-inline-fileref-color:#8590a6;--b3-protyle-inline-link-color:#6385a6}html[data-theme-mode="green"]{--b3-protyle-inline-blockref-color:#175199;--b3-protyle-inline-tag-color:#8590a6;--b3-protyle-inline-link-color:#175199}.protyle-background__tags{margin-left:36px !important}.protyle-background__iconw{left:54px !important}.protyle-title{margin-top:0 !important;margin-left:48px !important;margin-right:48px !important}.protyle-wysiwyg{padding-left:48px !important;padding-right:48px !important}.protyle-wysiwyg--attr{padding-top:0 !important}.b3-typography blockquote,.b3-typography .bq,.protyle-wysiwyg blockquote,.protyle-wysiwyg .bq{background-color:transparent} \ No newline at end of file diff --git a/public/resources/appearance/themes/midnight/theme.css b/public/resources/appearance/themes/midnight/theme.css new file mode 100644 index 00000000..a6d4c804 --- /dev/null +++ b/public/resources/appearance/themes/midnight/theme.css @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +:root { + /* 主色 */ + --b3-theme-primary: #3573f0; + --b3-theme-primary-light: rgba(53, 115, 240, 0.72); + --b3-theme-primary-lighter: rgba(53, 115, 240, 0.48); + --b3-theme-primary-lightest: rgba(53, 115, 240, 0.24); + --b3-theme-secondary: #f3a92f; + --b3-theme-background: #1e1f22; + --b3-theme-background-light: #353637; + --b3-theme-surface: #2b2d30; + --b3-theme-surface-light: rgba(41, 42, 45, .86); + --b3-theme-surface-lighter: rgba(230, 230, 230, .06); + --b3-theme-error: #d23f31; + + /* 文字颜色 */ + --b3-theme-on-primary: #fff; + --b3-theme-on-secondary: #fff; + --b3-theme-on-background: #c9d1d9; + --b3-theme-on-surface: #9aa0a6; + --b3-theme-on-surface-light: rgba(154, 160, 166, .68); + --b3-theme-on-error: #fff; + + /* 字体 */ + --b3-font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Microsoft Yahei", sans-serif, "Apple Color Emoji", "Noto Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; + --b3-font-family-code: "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace, "Apple Color Emoji", "Noto Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; + --b3-font-family-graph: mononoki; + --b3-font-family-emoji: "Segoe UI Emoji", "Segoe UI Symbol", "Segoe UI", "Apple Color Emoji", "Twemoji Mozilla", "Noto Color Emoji", "Android Emoji"; + --b3-font-family-math: KaTeX_Math; + + /* 顶部工具栏 */ + --b3-toolbar-background: #2b2d30; + --b3-toolbar-blur-background: #373a41; + --b3-toolbar-color: #ced0d6; + --b3-toolbar-hover: #383a42; + --b3-toolbar-left-mac: 69px; + + /* 线条 */ + --b3-border-color: #0e0f10; + + /* 滚动条 */ + --b3-scroll-color: rgba(230, 230, 230, .2); + + /* 列表 */ + --b3-list-hover: #3f4041; + --b3-list-icon-hover: rgba(201, 209, 217, .1); + + /* 菜单 */ + --b3-menu-background: #27282a; + + /* 提示 */ + --b3-tooltips-color: rgba(70, 72, 76, .86); + + /* 遮罩 */ + --b3-mask-background: rgba(0, 0, 0, 0.78); + + /* 卡片背景 */ + --b3-card-error-color: rgb(243, 153, 147); + --b3-card-error-background: #cc352d3d; + --b3-card-warning-color: rgb(255, 213, 153); + --b3-card-warning-background: #be8b585d; + --b3-card-info-color: rgb(166, 213, 250); + --b3-card-info-background: rgba(0, 153, 255, 0.288); + --b3-card-success-color: rgb(183, 223, 185); + --b3-card-success-background: #85d0a34d; + + /* 自定义文字 */ + --b3-font-color1: var(--b3-card-error-color); + --b3-font-color2: var(--b3-card-warning-color); + --b3-font-color3: var(--b3-card-info-color); + --b3-font-color4: var(--b3-card-success-color); + --b3-font-color5: var(--b3-theme-on-surface); + --b3-font-color6: var(--b3-theme-primary); + --b3-font-color7: var(--b3-theme-secondary); + --b3-font-color8: var(--b3-theme-error); + --b3-font-color9: #f5539e; + --b3-font-color10: #bc67bc; + --b3-font-color11: #65b84d; + --b3-font-color12: #f5822e; + --b3-font-color13: var(--b3-theme-background); + --b3-font-background1: var(--b3-card-error-background); + --b3-font-background2: var(--b3-card-warning-background); + --b3-font-background3: var(--b3-card-info-background); + --b3-font-background4: var(--b3-card-success-background); + --b3-font-background5: #4c5257; + --b3-font-background6: #0c3d88; + --b3-font-background7: #593905; + --b3-font-background8: #541812; + --b3-font-background9: #6a0634; + --b3-font-background10: #6b2f6b; + --b3-font-background11: #376629; + --b3-font-background12: #803a06; + --b3-font-background13: var(--b3-theme-on-background); + + /* 动画效果 */ + --b3-transition: all .2s cubic-bezier(0, 0, .2, 1) 0ms; + --b3-width-transition: width .2s cubic-bezier(0, 0, .2, 1) 0ms; + + /* 下拉菜单 */ + --b3-select-background: url("data:image/svg+xml;utf8,") no-repeat right 2px center var(--b3-theme-background); + + /* 阴影 */ + --b3-point-shadow: 0 3px 6px #010409; + --b3-dialog-shadow: 0 8px 24px #010409; + --b3-button-shadow: 0px 5px 5px -3px rgb(0 0 0 / 0.2), 0px 8px 10px 1px rgb(0 0 0 / 0.14), 0px 3px 14px 2px rgb(0 0 0 / 0.12); + + /* 图表颜色 */ + --b3-graph-p-point: #076f7e; + --b3-graph-heading-point: #8957e5; + --b3-graph-math-point: #80FFA5; + --b3-graph-code-point: #00DDFF; + --b3-graph-table-point: #37A2FF; + --b3-graph-list-point: #FF0087; + --b3-graph-todo-point: #FFBF00; + --b3-graph-olist-point: #b3005f; + --b3-graph-listitem-point: #f65b00; + --b3-graph-bq-point: #8d48e3; + --b3-graph-super-point: #dd79ff; + --b3-graph-doc-point: #e8eaed; + --b3-graph-tag-point: #dbf32f; + --b3-graph-asset-point: #05c091; + --b3-graph-line: #9aa0a6; + --b3-graph-ref-line: #d23f31; + --b3-graph-tag-line: #5f6b06; + --b3-graph-tag-tag-line: #dbf32f; + --b3-graph-asset-line: #037457; + --b3-graph-hl-point: #f3a92f; + --b3-graph-hl-line: #4285f4; + + /* 编辑器搜索颜色 */ + --b3-protyle-search-background: #32593c; + --b3-protyle-search-border-color: #486a51; + --b3-protyle-search-current-background: #204282; + + /* 代码片段背景 */ + --b3-protyle-code-background: rgba(240, 246, 252, .15); + --b3-protyle-code-linenumber-hl: #26364a; + + /* 所见即所得行内元素颜色 */ + --b3-protyle-inline-strong-color: #e8eaed; + --b3-protyle-inline-em-color: #e8eaed; + --b3-protyle-inline-s-color: #e8eaed; + --b3-protyle-inline-link-color: #8ab4f8; + --b3-protyle-inline-mark-background: rgb(50, 89, 61); + --b3-protyle-inline-mark-color: #e8eaed; + --b3-protyle-inline-tag-color: #9aa0a6; + --b3-protyle-inline-blockref-color: #8957e5; + --b3-protyle-inline-fileref-color: var(--b3-theme-secondary); + + /* PDF */ + --b3-pdf-selection: #779170; + --b3-pdf-sidebar-width: 200px; + --b3-pdf-offset: 0; + --b3-pdf-background1: var(--b3-theme-error); + --b3-pdf-background2: #f5822e; + --b3-pdf-background3: var(--b3-theme-secondary); + --b3-pdf-background4: #65b84d; + --b3-pdf-background5: #f5539e; + --b3-pdf-background6: var(--b3-theme-primary); + --b3-pdf-background7: #944194; + --b3-pdf-dark: #212224; +} + +/* https://github.com/siyuan-note/siyuan/issues/6440 */ +.protyle-action--order:after { + mix-blend-mode: screen; +} + +.b3-text-field::-webkit-calendar-picker-indicator { + filter: invert(1) +} \ No newline at end of file diff --git a/public/resources/stage/build/app/base.css b/public/resources/stage/build/app/base.css new file mode 100644 index 00000000..e88903ef --- /dev/null +++ b/public/resources/stage/build/app/base.css @@ -0,0 +1 @@ +@keyframes addCard{0%{box-shadow:-100vw 0px 0px -1px var(--b3-protyle-inline-mark-background) inset}100%{box-shadow:-3px 0px 0px -1px var(--b3-protyle-inline-mark-background) inset}}@keyframes fadeIn{0%{opacity:0;display:block}to{opacity:1;display:block}}@keyframes zoomIn{0%{opacity:0;transform:scale(0.8)}to{opacity:1;transform:scale(1)}}@keyframes rotate{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes stripMove{0%{background-position:0 0}100%{background-position:50px 50px}}.fn__hidescrollbar::-webkit-scrollbar{display:none}.fn__ellipsis{word-break:break-all;-webkit-line-clamp:1;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;display:block}.fn__space{width:8px;display:inline-block;flex-shrink:0}.fn__hr{height:8px;display:block;flex-shrink:0}.fn__hr--b{display:block;height:16px;flex-shrink:0}.fn__hr--small{height:4px;flex-shrink:0}.fn__flex{display:flex}.fn__flex-center{align-self:center}.fn__flex-1{flex:1;min-width:.1px;overflow:auto;min-height:.1px}.fn__flex-column,.card__main{min-height:100%;display:flex;flex-direction:column}.fn__flex-shrink{flex-shrink:0}.fn__flex-wrap{flex-wrap:wrap}.fn__pointer{cursor:pointer}.fn__none{display:none !important}.fn__hidden{visibility:hidden}.fn__a{color:var(--b3-theme-on-surface);cursor:pointer}.fn__a:hover{color:var(--b3-theme-on-background)}.fn__displayblock{display:block}.fn__block{width:100%}.fn__size200{width:200px;flex-shrink:0}.fn__size96{width:96px}.fn__rotate{animation:rotate 2s infinite linear}.fn__loading{position:absolute;top:0;display:flex;justify-content:center;width:100%;bottom:0;align-content:center;z-index:1;align-items:center}.fn__loading--top{top:48px}.fn__code,.b3-typography code:not(.hljs),.b3-typography span[data-type~=code],.protyle-wysiwyg code:not(.hljs),.protyle-wysiwyg span[data-type~=code]{padding:.2em .4em;margin:0;font-size:85%;border-radius:3px;font-family:var(--b3-font-family-code);word-break:break-word;background-size:20px 20px;white-space:pre-wrap;background-color:var(--b3-protyle-code-background)}.fn__list{padding-left:2em}.ft__breakword{word-break:break-word}.ft__smaller{font-size:12px}.ft__center{text-align:center}.ft__on-background{color:var(--b3-theme-on-background)}.ft__on-surface{color:var(--b3-theme-on-surface)}.ft__pink{color:#ea4aaa}.ft__error{color:var(--b3-theme-error) !important}.ft__primary{color:var(--b3-theme-primary)}.ft__secondary{color:var(--b3-theme-secondary)}.history__text{background-color:var(--b3-theme-background);padding:16px;box-sizing:border-box;border:0;border-radius:0 0 4px 0;resize:none;color:var(--b3-theme-on-background)}.history__repo{background-color:var(--b3-theme-surface);display:flex;flex-direction:column;height:100%;box-sizing:border-box;border-radius:0 0 4px 4px}.history__date{text-align:center;line-height:20px;color:var(--b3-theme-on-surface);background:var(--b3-theme-background)}.history__diff{width:200px;border-right:1px solid var(--b3-border-color);padding:8px 0;overflow:auto}.history__panel>.b3-list,.history__panel>.history__diff{width:256px}.b3-chips{display:flex;padding:4px;flex-wrap:wrap}.b3-chips .b3-chip{margin:4px}.b3-chip{background-color:var(--b3-list-hover);color:var(--b3-theme-on-background);line-height:16px;font-weight:400;font-size:.8125rem;display:inline-flex;align-items:center;box-sizing:border-box;padding:8px 12px;border-radius:16px;transition:var(--b3-transition);text-decoration:none}.b3-chip--hover{cursor:pointer}.b3-chip--hover:hover{box-shadow:var(--b3-button-shadow);text-decoration:none}.b3-chip--small{padding:0 8px;font-size:12px;line-height:16px}.b3-chip--secondary{background-color:var(--b3-theme-secondary);color:var(--b3-theme-on-secondary)}.b3-chip--primary{background-color:var(--b3-theme-primary);color:var(--b3-theme-on-primary)}.b3-chip--pink{color:var(--b3-theme-on-secondary);background-color:#ea4aaa}.b3-chip--info{color:var(--b3-card-info-color);background-color:var(--b3-card-info-background)}.b3-chip--warning{color:var(--b3-card-warning-color);background-color:var(--b3-card-warning-background)}.b3-chip--error{color:var(--b3-card-error-color);background-color:var(--b3-card-error-background)}.b3-chip--success{color:var(--b3-card-success-color);background-color:var(--b3-card-success-background)}.b3-chip--pointer{cursor:pointer;opacity:.86}.b3-chip--pointer:hover{opacity:.99}.b3-chip svg:not(.b3-chip__close){margin-right:6px;margin-left:-5px;height:16px;width:16px}.b3-chip__close{margin-right:-5px;margin-left:6px;border-radius:10px;height:16px;width:16px;transition:var(--b3-transition);cursor:pointer;opacity:.68;flex-shrink:0}.b3-chip__close:hover{opacity:.99}.b3-chip--middle{padding:4px 6px}.b3-chip--middle .b3-chip__close{margin-right:-2px;margin-left:3px}.b3-chip--middle svg:not(.b3-chip__close){margin-right:3px;margin-left:-2px}.b3-slider{-webkit-appearance:none;border-radius:2px;height:16px;background-color:rgba(0,0,0,0);padding:0 4px}.b3-slider::-webkit-slider-runnable-track{-webkit-appearance:none;height:2px;background-color:var(--b3-theme-primary-lighter)}.b3-slider::-webkit-slider-thumb{-webkit-appearance:none;width:10px;height:10px;border-radius:8px;cursor:pointer;background-color:var(--b3-theme-primary);margin-top:-4px;box-shadow:var(--b3-point-shadow);border:1px solid var(--b3-theme-surface-lighter);transition:transform 100ms ease-out}.b3-slider:focus,.b3-slider:hover{outline:none}.b3-slider:focus::-webkit-slider-thumb,.b3-slider:hover::-webkit-slider-thumb{transform:scale(1.5)}.b3-switch{flex-shrink:0;-webkit-appearance:none;box-sizing:border-box;width:28px;height:12px;border:1px solid rgba(0,0,0,0);border-radius:7px;margin:0;outline:none;display:inline-block;position:relative;cursor:pointer;background-color:var(--b3-theme-surface-lighter);overflow:inherit;user-select:none}.b3-switch:after{border:1px solid var(--b3-theme-surface-lighter);box-shadow:var(--b3-point-shadow);box-sizing:border-box;width:16px;height:16px;border-radius:50%;pointer-events:none;z-index:1;content:"";background-color:#fff;left:-4px;top:-3px;display:block;position:absolute;transition:transform .3s ease,opacity .2s}.b3-switch:before{content:"";left:-14px;right:initial;top:-13px;width:36px;height:36px;background-color:rgba(158,158,158,.12);display:none;border-radius:24px;position:absolute;transition:transform .3s ease,opacity .2s;opacity:.54}.b3-switch:checked{background-color:var(--b3-theme-primary-light)}.b3-switch:checked:after{background-color:var(--b3-theme-primary);border-color:var(--b3-theme-primary)}.b3-switch:checked:before,.b3-switch:checked:after{transform:translateX(19px);transition:transform .6s cubic-bezier(0.2, 0.85, 0.32, 1.2),opacity .3s}.b3-switch:disabled{opacity:.38;cursor:not-allowed}.b3-switch:hover:not(:disabled):before,.b3-switch:focus:not(:disabled):before{display:inline-block}.b3-switch:focus:not(:disabled):before{background-color:var(--b3-theme-primary-lightest)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}::-webkit-scrollbar-thumb{box-sizing:content-box;border:4px solid rgba(0,0,0,0);border-radius:5px;box-shadow:inset 0 0 5px 5px var(--b3-scroll-color)}::-webkit-scrollbar-thumb:hover{border-width:1px}.tooltip{pointer-events:none;position:fixed;z-index:1000000;padding:4px 8px;font-size:12px;font-weight:normal;-webkit-font-smoothing:subpixel-antialiased;color:#fff;word-wrap:break-word;background:var(--b3-tooltips-color);border-radius:4px;line-height:17px;max-width:320px;animation-duration:150ms;animation-fill-mode:both;animation-name:zoomIn}.tooltip--error{background:var(--b3-theme-error)}.b3-tooltips{position:relative;cursor:pointer;overflow:hidden}.b3-tooltips::after{z-index:1000000;padding:4px 8px;font-size:12px;font-weight:normal;-webkit-font-smoothing:subpixel-antialiased;color:#fff;word-wrap:break-word;white-space:pre;content:attr(aria-label);background:var(--b3-tooltips-color);border-radius:4px;line-height:17px;transform:scale(0.8);max-width:60vw;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box}.b3-tooltips::before{z-index:1000001;width:0;height:0;color:var(--b3-tooltips-color);content:"";border:5px solid rgba(0,0,0,0);transform:scale(1.54)}.b3-tooltips::after,.b3-tooltips::before{pointer-events:none;position:absolute;opacity:0;transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.b3-tooltips:hover,.b3-tooltips:focus-within{overflow:initial}.b3-tooltips:hover::before,.b3-tooltips:hover::after{display:inline-block;opacity:1;transform:scale(1)}.b3-tooltips__s::after,.b3-tooltips__se::after,.b3-tooltips__sw::after{top:100%;right:50%;margin-top:5px}.b3-tooltips__s::before,.b3-tooltips__se::before,.b3-tooltips__sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:var(--b3-tooltips-color)}.b3-tooltips__se::after{right:auto;left:50%;margin-left:-15px}.b3-tooltips__sw::after{margin-right:-15px}.b3-tooltips__n::after,.b3-tooltips__ne::after,.b3-tooltips__nw::after{right:50%;bottom:100%;margin-bottom:5px}.b3-tooltips__n::before,.b3-tooltips__ne::before,.b3-tooltips__nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:var(--b3-tooltips-color)}.b3-tooltips__ne::after{right:auto;left:50%;margin-left:-15px}.b3-tooltips__nw::after{margin-right:-15px}.b3-tooltips__s::after,.b3-tooltips__n::after{transform:translateX(50%) scale(0.8)}.b3-tooltips__s:hover::after,.b3-tooltips__n:hover::after{transform:translateX(50%) scale(1)}.b3-tooltips__w::after{right:100%;bottom:50%;margin-right:5px;transform:translateY(50%) scale(0.8)}.b3-tooltips__w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:var(--b3-tooltips-color)}.b3-tooltips__e::after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%) scale(0.8)}.b3-tooltips__e:hover::after,.b3-tooltips__w:hover::after{transform:translateY(50%) scale(1)}.b3-tooltips__e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:var(--b3-tooltips-color)}@media screen and (max-width: 520px){.b3-tooltips:before,.b3-tooltips:after{content:none}}.b3-dialog{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%;display:flex;z-index:305}.b3-dialog--open .b3-dialog__scrim{opacity:1}.b3-dialog--open .b3-dialog__container{transform:none;opacity:1}.b3-dialog__scrim{background-color:var(--b3-mask-background);position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;transition:opacity 150ms linear}.b3-dialog__container{border-radius:4px;background-color:var(--b3-theme-surface);position:relative;box-shadow:var(--b3-dialog-shadow);display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;transform:scale(0.8);opacity:0;transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);border:1px solid var(--b3-theme-surface-lighter)}.b3-dialog__header{padding:9px 24px;line-height:24px;font-size:16px;font-weight:500;border-bottom:1px solid var(--b3-theme-surface-lighter)}.b3-dialog__body{overflow:auto;flex:1;display:flex;flex-direction:column}.b3-dialog__content{padding:16px 24px;word-break:break-all;flex:1;overflow:auto}.b3-dialog__action{padding:7px 24px;border-top:1px solid var(--b3-theme-surface-lighter);display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;user-select:none}.b3-dialog__close{position:absolute;cursor:pointer;top:-2px;right:-36px;height:18px;width:18px;opacity:.68;color:var(--b3-theme-on-surface);padding:8px}.b3-dialog__close:hover{opacity:1}.b3-button{cursor:pointer;color:var(--b3-theme-on-primary);border-radius:4px;line-height:20px;padding:4px 8px;background-color:var(--b3-theme-primary);white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);border:0;box-sizing:border-box;text-align:center}.b3-button svg{height:16px;width:16px;margin-right:4px;flex-shrink:0}.b3-button:hover,.b3-button:focus,.b3-button--progress{text-decoration:none;box-shadow:var(--b3-button-shadow)}.b3-button:active{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12)}.b3-button--progress{position:relative;background-color:rgba(0,0,0,0);height:28px}.b3-button--progress>span{position:absolute;content:" ";height:100%;left:0;top:0;width:50%;background-color:var(--b3-theme-primary);border-radius:4px}.b3-button--small{padding:0 4px;font-size:12px}.b3-button--mid{padding:2px 8px}.b3-button--big{min-width:214px;background:var(--b3-theme-secondary);color:var(--b3-theme-on-secondary);padding:32px 16px;font-size:16px}.b3-button--text,.b3-button--cancel{color:var(--b3-theme-primary);background-color:rgba(0,0,0,0)}.b3-button--text:hover,.b3-button--text:focus,.b3-button--cancel:hover,.b3-button--cancel:focus{background-color:var(--b3-theme-primary-lightest);box-shadow:none}.b3-button--text:active,.b3-button--cancel:active{background-color:var(--b3-theme-primary-lighter);box-shadow:none}.b3-button--cancel{color:var(--b3-theme-on-surface)}.b3-button--outline{color:var(--b3-theme-primary);box-shadow:inset 0 0 0 .6px var(--b3-theme-primary);background-color:rgba(0,0,0,0)}.b3-button--outline:hover,.b3-button--outline:focus{background-color:var(--b3-theme-primary-lightest);box-shadow:inset 0 0 0 1px var(--b3-theme-primary)}.b3-button--outline:active{background-color:var(--b3-theme-primary-lighter);box-shadow:inset 0 0 0 1px var(--b3-theme-primary)}.b3-button--white{padding:4px 8px;font-size:12px;background-color:#fafbfc;color:var(--b3-theme-primary)}.b3-button--white:hover,.b3-button--white:focus{background-color:#f3f4f6}.b3-button--error{color:var(--b3-card-error-color);background-color:var(--b3-card-error-background)}.b3-button--warning{color:var(--b3-card-warning-color);background-color:var(--b3-card-warning-background)}.b3-button--info{color:var(--b3-card-info-color);background-color:var(--b3-card-info-background)}.b3-button--success{color:var(--b3-card-success-color);background-color:var(--b3-card-success-background)}.b3-button:disabled{opacity:.38;cursor:not-allowed}.b3-snackbar{margin-bottom:16px;position:relative;transition:transform 256ms cubic-bezier(0.45, 0.05, 0.55, 0.95) 0ms;text-align:right}.b3-snackbar--hide{transform:translate3d(calc(20vw + 48px), 0, 0)}.b3-snackbars{position:fixed;right:12px;top:22px;z-index:503;max-height:calc(100vh - 32px);display:flex;flex-direction:column;transform:translate3d(calc(20vw + 48px), 0, 0);transition:transform .15s cubic-bezier(0.4, 0, 1, 1) 0ms}.b3-snackbars--show{transform:translate3d(0, 0, 0) !important}.b3-snackbars>.b3-button{align-self:flex-end;margin-right:18px}.b3-snackbars>.fn__flex-1{padding:0 18px 0 18px}.b3-snackbars>.fn__flex-1::-webkit-scrollbar{display:none}.b3-snackbar--error .b3-snackbar__content{background-color:var(--b3-theme-error);color:var(--b3-theme-on-error)}.b3-snackbar__content{line-height:20px;border-radius:4px;padding:8px 16px;color:var(--b3-theme-on-primary);font-size:inherit;background-color:var(--b3-theme-primary);box-sizing:border-box;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);word-break:break-word;max-width:20vw;text-align:left;display:inline-block}.b3-snackbar__content--close{padding-right:27px}.b3-snackbar__content a{color:var(--b3-theme-on-primary);text-decoration:underline}.b3-snackbar__content ul{margin-left:16px}.b3-snackbar__close{position:absolute;cursor:pointer;height:16px;width:16px;color:var(--b3-theme-on-primary);transition:var(--b3-transition);opacity:.68;right:5px;top:10px}.b3-snackbar__close:hover{opacity:1}@media screen and (max-width: 520px){.b3-snackbars{top:35px;right:calc(10vw - 18px)}.b3-snackbar__content{max-width:80vw}.b3-snackbars{transform:translate3d(100vw, 0, 0)}}.b3-form__space{margin:16px 24px}.b3-form__space--small{margin:8px 16px}.b3-form__icon{position:relative;color:var(--b3-theme-on-surface)}.b3-form__icon-icon{position:absolute;left:9px;top:6px;height:16px;width:16px}.b3-form__icon-action{right:9px;top:5px;border-radius:2px;text-align:center;padding:2px;position:absolute;height:16px;width:16px}.b3-form__icon-action:hover{background-color:var(--b3-theme-surface);color:var(--b3-theme-primary)}.b3-form__icon-input{padding-left:35px !important}.b3-form__icon--small .b3-form__icon-icon{left:5px;top:4px;height:14px;width:14px}.b3-form__icon--small .b3-form__icon-input{padding-left:25px !important}.b3-form__icona{position:relative;color:var(--b3-theme-on-surface)}.b3-form__icona-icon{position:absolute;right:1px;top:1px;height:16px;width:16px;cursor:pointer;padding:5px;border-radius:2px}.b3-form__icona-icon:hover{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover)}.b3-form__icona-input{width:100%;padding-right:35px !important}.b3-form__img{position:relative}.b3-form__img img{position:absolute;left:1px;top:1px;height:28px;border-radius:3px 0 0 3px}.b3-form__img input{padding-left:93px}.b3-form__upload{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.001;overflow:hidden;cursor:pointer}.b3-label{border-bottom:1px solid var(--b3-theme-surface-lighter);padding:16px 24px;line-height:20px}.b3-label__text{color:var(--b3-theme-on-surface);font-size:14px !important;margin-top:4px;overflow:hidden !important}.b3-label__icon{width:36px;height:36px;align-self:center;margin-right:16px;color:var(--b3-theme-on-surface)}.b3-label--inner{border-bottom:0;padding:0 !important}.b3-label:last-child,.b3-label--noborder{border-bottom:0}.b3-text-field,.pcr-app .pcr-interaction .pcr-result{border:0;border-radius:4px;box-shadow:inset 0 0 0 .6px var(--b3-theme-on-surface-light);padding:4px 8px;line-height:20px;box-sizing:border-box;color:var(--b3-theme-on-background);transition:box-shadow 120ms 0ms cubic-bezier(0, 0, 0.2, 1);background-color:var(--b3-theme-background)}.b3-text-field:not(.b3-text-field--text):hover,.pcr-app .pcr-interaction .pcr-result:not(.b3-text-field--text):hover{box-shadow:inset 0 0 0 .6px var(--b3-theme-on-background)}.b3-text-field:not(.b3-text-field--text):focus,.pcr-app .pcr-interaction .pcr-result:not(.b3-text-field--text):focus{box-shadow:inset 0 0 0 1px var(--b3-theme-primary),0 0 0 3px var(--b3-theme-primary-lightest)}.b3-text-field[type=color],.pcr-app .pcr-interaction [type=color].pcr-result{padding:0}.b3-text-field--small{font-size:12px;padding:0 4px}.b3-text-field--text{box-shadow:0 0 0}.b3-select{border:0;border-radius:4px;padding:4px 26px 4px 8px;box-sizing:border-box;line-height:20px;color:var(--b3-theme-on-background);transition:box-shadow 120ms 0ms cubic-bezier(0, 0, 0.2, 1),background-color .2s cubic-bezier(0, 0, 0.2, 1) 0ms;height:28px;font-size:14px;box-shadow:inset 0 0 0 .6px var(--b3-theme-on-surface-light);background:var(--b3-select-background);appearance:none;cursor:pointer}.b3-select:hover{box-shadow:inset 0 0 0 .6px var(--b3-theme-on-background);background-color:var(--b3-theme-background-light)}.b3-select:focus{box-shadow:inset 0 0 0 1px var(--b3-theme-primary),0 0 0 3px var(--b3-theme-primary-lightest)}.b3-list mark{background-color:var(--b3-protyle-inline-mark-background);color:var(--b3-protyle-inline-mark-color)}.b3-list--background .b3-list-item{border-radius:4px}.b3-list--background .b3-list-item:hover:not(.b3-list-item--focus){background-color:var(--b3-theme-background-light)}.b3-list--background .b3-list-item--focus:not(.dragover):not(.dragover__top):not(.dragover__bottom){background-color:var(--b3-list-hover)}.b3-list--empty{justify-content:center;color:var(--b3-theme-on-surface);padding:4px 16px;list-style:none}.b3-list--border .b3-list__panel{margin-left:34px;position:relative}.b3-list--border .b3-list__panel:before{content:"";height:100%;top:0px;position:absolute;border-left:1px solid var(--b3-theme-background-light);left:-21px}.b3-list-item{line-height:28px;min-height:28px;padding:1px 4px;display:flex;cursor:pointer;align-items:center;position:relative;background-color:rgba(0,0,0,0);text-align:left;border:0;color:var(--b3-theme-on-background);margin:0 8px}.b3-list-item[draggable=true]:active{cursor:grabbing}.b3-list-item--narrow{margin:0}.b3-list-item--big{padding:16px 24px}.b3-list-item--big .b3-list-item__graphic{margin-right:24px;height:16px;width:16px}.b3-list-item--two{display:block}.b3-list-item--two .b3-list-item__first{display:flex;align-items:center}.b3-list-item--two .b3-list-item__meta{margin-left:0}.b3-list-item--hide-action .b3-list-item__action{display:none}.b3-list-item--hide-action:hover>.b3-list-item__action,.b3-list-item--hide-action:hover>.fn__space{display:flex}.b3-list-item__toggle{display:flex;align-items:center;height:22px;padding:0 4px;color:var(--b3-theme-on-surface-light);transition:var(--b3-transition)}.b3-list-item__toggle--hl:hover{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover);border-radius:2px}.b3-list-item__icon{text-align:center;font-size:16px;font-family:var(--b3-font-family-emoji);margin-right:4px;line-height:22px;transition:var(--b3-transition);height:22px;padding:0 4px;flex-shrink:0}.b3-list-item__icon svg,.b3-list-item__icon img{float:left;margin:3px 0;height:16px;width:16px;color:var(--b3-theme-on-surface);border-radius:2px}.b3-list-item__icon:hover{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover);border-radius:2px}.b3-list-item__hinticon{width:12px;height:12px;fill:currentColor;color:var(--b3-theme-on-background);align-self:center;flex-shrink:0;margin-right:4px}.b3-list-item__graphic{margin-right:4px;padding:0 2px;flex-shrink:0;height:14px;width:14px;line-height:14px;font-size:12px;font-family:var(--b3-font-family-emoji)}.b3-list-item__graphic svg{width:12px;height:14px}.b3-list-item__arrow{flex-shrink:0;height:10px;width:10px;transition:transform .15s cubic-bezier(0, 0, 0.2, 1),opacity 1s cubic-bezier(0, 0, 0.2, 1)}.b3-list-item__arrow--open{transform:rotate(90deg)}.b3-list-item__text{flex:1;background-color:rgba(0,0,0,0);text-align:left;border:0;padding:0;color:var(--b3-theme-on-background);word-break:break-all;-webkit-line-clamp:1;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box}.b3-list-item__text>img,.b3-list-item__text>.custom-icon{height:14px;width:14px;float:left;margin-top:7px}.b3-list-item__showall{line-height:1;word-break:break-all}.b3-list-item__meta{font-size:.75rem;margin-left:8px;flex-shrink:0;color:var(--b3-theme-on-surface)}.b3-list-item__meta--ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:50%}.b3-list-item__action{flex-shrink:0;align-items:center;color:var(--b3-theme-on-surface-light);height:22px;padding:0 4px;margin-left:4px;display:flex}.b3-list-item__action svg{height:14px;width:14px}.b3-list-item__action:hover{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover);border-radius:2px}.b3-list-item .counter{cursor:pointer}.b3-list-item .counter:hover{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover)}.graph{display:flex;flex-direction:column;background-color:var(--b3-theme-surface);position:relative;overflow:hidden !important}.graph__panel{transition:var(--b3-transition);width:200px;padding:0 16px 8px;background-color:var(--b3-theme-background);position:absolute;top:30px;right:-200px;bottom:0;overflow:auto;box-sizing:border-box;z-index:1;opacity:.9}.graph__panel label{display:flex;margin-top:8px;align-items:center;cursor:pointer}.graph__panel label span{flex:1;white-space:nowrap}.graph__panel label .b3-slider{width:68px}.graph__svg{position:relative;overflow:hidden !important}.graph__svg .vis-network{outline:none}.graph__svg .vis-tooltip{visibility:hidden;pointer-events:none;position:absolute;border:1px solid var(--b3-theme-surface-lighter);border-radius:4px;box-shadow:var(--b3-dialog-shadow);background-color:var(--b3-theme-surface);padding:4px 8px;color:var(--b3-theme-on-surface);max-width:10vw;word-break:break-all}.graph__loading{height:8px;background:var(--b3-theme-background);position:absolute;width:80%;left:10%;top:50%;z-index:1}.graph__loading div{background:var(--b3-theme-primary);width:0;height:8px;transition:var(--b3-transition)}.layout{overflow-y:hidden}.layout__wnd--active .layout-tab-bar .item--focus:after{background-color:var(--b3-theme-primary)}.layout__wnd--active .layout-tab-bar .item--focus>.item__text{color:var(--b3-theme-on-background)}.layout__dockl,.layout__dockr,.layout__dockb{transition:var(--b3-width-transition)}.layout>.layout__dockresize{display:none}.layout--float{position:fixed;z-index:3;min-height:auto;transition:transform .2s cubic-bezier(0, 0, 0.2, 1) 0ms,opacity .3s cubic-bezier(0, 0, 0.2, 1) 0ms}.layout--float.layout__dockl{border-radius:0 8px 8px 0;border:1px solid var(--b3-border-color);border-left:0;overflow:hidden;box-shadow:8px 0 24px rgba(140,149,159,.2);top:112px;bottom:82px;left:0}.layout--float.layout__dockr{border:1px solid var(--b3-border-color);box-shadow:-8px 0px 24px rgba(140,149,159,.2);border-right:0;border-radius:8px 0 0 8px;overflow:hidden;top:112px;bottom:82px;right:0}.layout--float.layout__dockr>.layout__dockresize--lr{border-top:0;border-right:0;border-left:1px solid rgba(0,0,0,0);left:0}.layout--float.layout__dockb{border-top:1px solid var(--b3-border-color);box-shadow:0 -8px 24px rgba(140,149,159,.2);left:0;right:0;bottom:0}.layout--float>.layout__dockresize{display:block;cursor:row-resize;height:6px;width:100%;position:absolute;border-top:1px solid rgba(0,0,0,0)}.layout--float>.layout__dockresize:hover{border-color:var(--b3-scroll-color)}.layout--float>.layout__dockresize--lr{cursor:col-resize;width:6px;height:100%;right:0;top:0;bottom:0;border-right:1px solid rgba(0,0,0,0)}.layout__tab--active .b3-list--background .b3-list-item--focus:not(.dragover):not(.dragover__top):not(.dragover__bottom){background-color:var(--b3-theme-primary-lightest)}.layout__tab--active .graph__svg,.layout__tab--active .inbox__list{background-color:var(--b3-theme-background)}.layout__resize{cursor:row-resize;margin:-3px 0;height:6px;width:100%;position:relative;z-index:2}.layout__resize:hover:after{background-color:var(--b3-scroll-color)}.layout__resize:after{content:"";width:100%;height:.5px;display:block;background-color:var(--b3-border-color);top:3px;position:absolute;left:0;transition:var(--b3-transition)}.layout__resize--lr{cursor:col-resize;width:6px;margin:0 -6px 0 0;height:auto}.layout__resize--lr:after{top:0;width:.5px;left:0;height:100%}.layout__empty{display:flex;height:100%;justify-content:center;flex-direction:column;width:100%;background-color:var(--b3-theme-background);align-items:center}.layout__empty .b3-list-item{width:204px;white-space:nowrap;font-size:17px;color:var(--b3-theme-on-surface);margin-top:8px !important}.layout__empty .b3-list-item:hover{color:var(--b3-theme-on-background)}.layout__empty .b3-list-item__graphic{margin-right:8px;height:16px;width:16px}.layout-tab-container{display:flex;position:relative;background-color:var(--b3-theme-surface);user-select:none}.layout-tab-container__drag{background-color:var(--b3-theme-primary-lightest);position:absolute;z-index:100;height:100%;width:100%;transition:var(--b3-transition)}.layout-tab-bars--drag>.layout-tab-bar{background-color:var(--b3-theme-primary-lightest)}.layout-tab-bar{list-style:none;align-items:center;overflow:auto;position:relative;background-color:var(--b3-theme-background);border-bottom:1px solid var(--b3-theme-background-light)}.layout-tab-bar::-webkit-scrollbar{display:none}.layout-tab-bar--readonly{flex-shrink:0;min-width:71px}.layout-tab-bar .item{line-height:22px;cursor:pointer;user-select:none;display:flex;align-items:center;transition:var(--b3-transition);min-height:42px;position:relative;max-width:186px;flex-shrink:0;overflow:hidden}.layout-tab-bar .item--full{max-width:none;flex:1}.layout-tab-bar .item--full.item--focus:after{background-color:var(--b3-theme-primary)}.layout-tab-bar .item:hover:not(.item--focus):not(.item--readonly) .item__text{color:var(--b3-theme-on-background)}.layout-tab-bar .item:hover .item__close svg,.layout-tab-bar .item.item--focus .item__close svg{opacity:.68}.layout-tab-bar .item--readonly{padding-left:13px;padding-right:8px;max-width:none}.layout-tab-bar .item--pin{flex:none;min-width:42px}.layout-tab-bar .item--pin .item__text{max-width:148px;font-style:normal;color:var(--b3-theme-on-background)}.layout-tab-bar .item--pin .item__graphic,.layout-tab-bar .item--pin .item__icon{padding:0 12px}.layout-tab-bar .item--pin .item__close{display:none}.layout-tab-bar .item--focus:after{content:"";width:100%;height:3px;border-radius:6px;bottom:0;position:absolute;background-color:var(--b3-theme-background-light)}.layout-tab-bar .item--unupdate:not(.item--pin){font-style:italic;color:var(--b3-theme-on-surface)}.layout-tab-bar .item__icon{padding:4px 0 4px 8px;line-height:22px;flex-shrink:0;font-family:var(--b3-font-family-emoji)}.layout-tab-bar .item__icon>img,.layout-tab-bar .item__icon>svg{float:left;height:18px;width:18px;border-radius:2px;margin-top:1px}.layout-tab-bar .item__graphic{padding:4px 0 4px 8px;height:14px;width:14px;flex-shrink:0}.layout-tab-bar .item__text{text-align:center;-webkit-font-smoothing:subpixel-antialiased;color:var(--b3-theme-on-surface);transition:var(--b3-transition);padding:0 8px;white-space:nowrap;overflow:hidden;-webkit-mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, #000 12px)}.layout-tab-bar .item__close{padding:13px 13px 13px 0;display:flex;align-items:center}.layout-tab-bar .item__close svg{border-radius:10px;height:8px;width:8px;color:var(--b3-theme-on-surface);transition:var(--b3-transition);padding:4px;opacity:0}.layout-tab-bar .item__close:hover svg{color:var(--b3-theme-on-background);background-color:var(--b3-theme-background-light)}.dock{height:42px;display:flex;padding:0 42px;user-select:none;background-color:var(--b3-theme-surface);box-sizing:border-box}.dock:hover .dock__item--pin{opacity:1}.dock#dockLeft{border-right:.5px solid var(--b3-border-color)}.dock#dockRight{border-left:.5px solid var(--b3-border-color)}.dock#dockBottom{border-top:.5px solid var(--b3-border-color)}.dock svg{height:16px;width:16px}.dock--vertical{width:42px;flex-direction:column;height:100%;padding:0}.dock--vertical .dock__item[data-index="0"]:after{top:-32px;bottom:auto}.dock--vertical .dock__item[data-index="1"]:after{bottom:100%}.dock__item{padding:8px;color:var(--b3-theme-on-surface-light);display:flex;border-radius:6px;margin:5px}.dock__item--pin{opacity:0;transition:var(--b3-transition)}.dock__item:hover,.dock__item--active{background-color:var(--b3-theme-background-light)}.dock__item--activefocus{color:var(--b3-theme-on-primary) !important;background-color:var(--b3-theme-primary) !important}.block__popover{background-color:var(--b3-theme-background);position:absolute;box-shadow:var(--b3-dialog-shadow);z-index:205;width:60vw;word-break:break-word;border-radius:4px;opacity:0;transition:opacity 75ms linear;top:-100px;display:flex;flex-direction:column;min-height:160px;border:1px solid var(--b3-theme-surface-lighter)}.block__popover--open{opacity:1}.block__popover--top{z-index:206}.block__popover>.block__icons{border-radius:4px 4px 0 0}.block__popover>.block__icons>.resize__move{height:42px}.block__content{overflow:auto;display:flex;flex-direction:column;border-radius:0 0 4px 4px;flex:1}.block__edit{display:flex;flex-direction:column;border-bottom:1px solid var(--b3-theme-surface-lighter)}.block__edit:last-child{border-bottom:0}.block__icons{padding:0 8px;display:flex;align-items:center;min-height:42px;flex-shrink:0}.block__icons--menu{background-color:var(--b3-menu-background)}.block__icons:hover .block__icon:not([disabled]){opacity:1}.block__icons:hover [disabled].block__icon{opacity:.38}.block__icons .counter{background-color:var(--b3-theme-background)}.block__icon{color:var(--b3-theme-on-surface);cursor:pointer;opacity:0;border:0;background:rgba(0,0,0,0);flex-shrink:0;padding:5px;display:flex;align-items:center;border-radius:2px;transition:var(--b3-transition),opacity .3s cubic-bezier(0, 0, 0.2, 1) 0ms}.block__icon:hover:not([disabled]):not(.ft__primary),.block__icon--active{color:var(--b3-theme-on-background);background-color:var(--b3-list-icon-hover)}.block__icon--show{opacity:1}.block__icon--show.block__icon[disabled]{opacity:.38;cursor:not-allowed}.block__icon svg{height:14px;width:14px}.block__logo{margin-right:8px;display:flex;align-items:center}.block__logo svg{height:16px;width:16px;padding:4px;flex-shrink:0}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;height:100%;box-sizing:border-box}body{text-rendering:optimizeLegibility;margin:0;font-family:var(--b3-font-family);font-size:14px;color:var(--b3-theme-on-background);background-color:var(--b3-theme-background);-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;height:100%;box-sizing:border-box;max-height:100%;overflow:hidden}body.body--blur .toolbar{background:var(--b3-toolbar-blur-background)}body.body--blur .layout__wnd--active .layout-tab-bar .item--focus{box-shadow:inset 0 -2px 0 0 var(--b3-theme-background-light)}body.body--blur .layout__wnd--active .layout-tab-bar .item--focus>.item__text{color:var(--b3-theme-on-surface)}body.body--blur .layout__tab--active .b3-list--background .b3-list-item--focus:not(.dragover):not(.dragover__top):not(.dragover__bottom){background-color:var(--b3-list-hover)}body.body--blur .layout__tab--active .graph__svg,body.body--blur .layout__tab--active .inbox__list{background-color:var(--b3-theme-surface)}body.body--blur .dock__item--activefocus{color:var(--b3-theme-on-surface-light) !important;background-color:var(--b3-theme-background-light) !important}body.body--win32{-webkit-font-smoothing:auto}body.body--win32 .toolbar{padding:0 0 0 5px}body.body--win32 .fullscreen>.protyle-breadcrumb,body.body--win32 .fullscreen>.block__icons{padding-left:10px;padding-right:108px}body.body--window .fullscreen>.protyle-breadcrumb,body.body--window .fullscreen>.block__icons{height:42px;padding-right:42px}body.body--window.body--win32 .fullscreen>.protyle-breadcrumb,body.body--window.body--win32 .fullscreen>.block__icons{padding-right:168px}body.body--window.body--blur .layout-tab-bar{opacity:.38}ul,ol{margin:0;padding:0}h1,h2,h3,h4,h5,h6,dl,dd,p{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none}a{outline:0;text-decoration:none;color:var(--b3-theme-primary)}a:hover{text-decoration:underline}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;vertical-align:middle;border:0;height:auto;-ms-interpolation-mode:bicubic;overflow:hidden;font-size:12px}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;font-family:var(--b3-font-family);outline:none}button,input{line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto}svg{fill:currentColor;display:inline-block}line,circle{transition:fill .15s ease-in-out}circle{cursor:pointer}blockquote{margin:0}.b3-card{box-shadow:var(--b3-point-shadow);background-color:var(--b3-theme-surface);border-radius:4px;margin:16px;overflow:hidden;position:relative;transition:var(--b3-transition);cursor:pointer;border:1px solid var(--b3-theme-surface-lighter);display:flex}.b3-card--wrap{flex:1;margin:16px 0 0 16px;min-width:342px}.b3-card:hover{background-color:var(--b3-theme-surface-lighter);transform:translate(0px, -4px);box-shadow:var(--b3-dialog-shadow)}.b3-cards{display:flex;flex-wrap:wrap;margin:0 16px 16px 0}.b3-card--current{background-color:var(--b3-theme-primary-lightest)}.b3-card__img{margin:16px 0 16px 16px}.b3-card__img img{height:74px;object-fit:cover;border-radius:4px;width:74px}.b3-card__info{padding:16px 16px 4px;line-height:18px}.b3-card__info--left{padding-bottom:16px;padding-right:8px}.b3-card__desc{color:var(--b3-theme-on-surface);font-size:12px;margin-top:4px;max-height:54px;word-break:break-all;-webkit-line-clamp:3;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box}.b3-card__actions{padding:0 16px 14px 16px;display:flex;box-sizing:border-box;font-size:12px;line-height:14px}.b3-card__actions--right{padding-left:0;padding-bottom:0;align-items:center}.b3-card__actions--right .block__icon{margin-left:8px}.b3-menu{position:fixed;border-radius:4px;box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);background-color:var(--b3-menu-background);padding:8px;z-index:210;max-height:80vh;overflow:overlay;box-sizing:border-box}.b3-menu::-webkit-scrollbar,.b3-menu__submenu::-webkit-scrollbar{width:5px;height:5px}.b3-menu::-webkit-scrollbar-thumb,.b3-menu__submenu::-webkit-scrollbar-thumb{box-sizing:content-box;border:2px solid rgba(0,0,0,0);border-radius:5px;box-shadow:inset 0 0 2.5px 2.5px var(--b3-scroll-color)}.b3-menu::-webkit-scrollbar-thumb:hover,.b3-menu__submenu::-webkit-scrollbar-thumb:hover{border-width:.5px}.b3-menu--fullscreen{top:100vh;left:0;width:100%;border:0;box-shadow:none;right:0;max-height:none;height:100vh;padding:0;border-radius:0;transition:transform .15s cubic-bezier(0, 0, 0.2, 1) 0ms;display:flex;flex-direction:column}.b3-menu--fullscreen .b3-menu__submenu{top:48.5px;left:0;bottom:0;max-height:none;right:0;box-shadow:none;border:0;padding:24px 0}.b3-menu--fullscreen .b3-menu__submenu>.b3-menu__item:first-child{border-top:.5px solid var(--b3-theme-background-light)}.b3-menu--fullscreen .b3-menu__items{flex:1;overflow:auto;padding:24px 0}.b3-menu--fullscreen .b3-menu__item{border-bottom:.5px solid var(--b3-theme-background-light);line-height:42px;background-color:var(--b3-theme-background);text-decoration:none}.b3-menu--fullscreen .b3-menu__item:first-child{border-top:.5px solid var(--b3-theme-background-light)}.b3-menu--fullscreen .b3-menu__item--show>.b3-menu__submenu--row{width:100%}.b3-menu--fullscreen .b3-menu__item--readonly{line-height:24px;padding:8px 16px;margin:0;max-width:none}.b3-menu--fullscreen .b3-menu__item .color__square{margin:0 16px 0 8px}.b3-menu--fullscreen .b3-menu__title{border-bottom:.5px solid var(--b3-theme-background-light);line-height:48px;padding:0 8px;display:flex;background-color:var(--b3-theme-background);height:48.5px}.b3-menu--fullscreen .b3-menu__separator{margin:0;height:24px;background-color:var(--b3-menu-background);border-bottom:.5px solid var(--b3-theme-background-light)}.b3-menu--fullscreen .b3-menu__label{font-size:17px}.b3-menu--fullscreen .b3-menu__icon{height:17px;width:17px;margin:0 16px 0 8px;border-radius:4px}.b3-menu--fullscreen .b3-menu__icon--arrow{width:12px;margin:0 8px 0 16px}.b3-menu--list{overflow:auto;max-height:70vh}.b3-menu--list .b3-menu__label{word-break:break-all;-webkit-line-clamp:1;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;max-width:30vw;white-space:nowrap;overflow:hidden;-webkit-mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, #000 12px)}.b3-menu__item{padding:0 8px;border-radius:4px;user-select:none;display:flex;line-height:30px;cursor:pointer;white-space:nowrap;border:0;text-align:left;width:100%;background-color:var(--b3-menu-background);color:var(--b3-theme-on-background);position:relative;box-sizing:border-box}.b3-menu__item[disabled=disabled]{cursor:not-allowed;opacity:.38}.b3-menu__item--show{background-color:var(--b3-list-hover)}.b3-menu__item--show>.b3-menu__submenu{display:block}.b3-menu__item--show>.b3-menu__submenu--row{display:flex;box-sizing:border-box;flex-wrap:wrap;flex-direction:row;width:312px;padding:4px;align-content:flex-start}.b3-menu__item--show>.b3-menu__submenu--row .b3-menu__item{width:auto;height:32px;padding:8px}.b3-menu__item--show>.b3-menu__submenu--row .b3-menu__label{min-width:auto}.b3-menu__item--show>.b3-menu__submenu--row .b3-menu__separator{background-color:rgba(0,0,0,0);margin:2px 0}.b3-menu__item--selected{color:var(--b3-theme-primary)}.b3-menu__item--current{background-color:var(--b3-list-hover)}.b3-menu__item--current>.b3-menu__action{opacity:.68}.b3-menu__item--readonly{cursor:auto;color:var(--b3-theme-on-surface);max-width:374px;white-space:normal;word-break:break-all;line-height:16px;margin:4px 0}.b3-menu__item--disabled{opacity:.38;cursor:not-allowed}.b3-menu__action{opacity:0;width:16px;height:16px;align-self:center;margin-left:8px;color:var(--b3-theme-on-surface)}.b3-menu__action:hover{opacity:1}.b3-menu__label{flex:1;min-width:84px}.b3-menu__icon{align-self:center;height:14px;width:14px;line-height:14px;margin-right:8px;color:var(--b3-theme-on-surface)}.b3-menu__icon--arrow{margin:0 0 0 8px;height:10px}.b3-menu__separator{background-color:var(--b3-theme-surface-lighter);height:1px;margin:4px 0;display:block;border:0;width:100%;box-sizing:border-box;padding:0}.b3-menu__submenu{overflow:auto;display:none;max-height:80vh;border:1px solid var(--b3-theme-surface-lighter);border-radius:4px;background-color:var(--b3-menu-background);padding:8px;position:fixed;box-shadow:var(--b3-dialog-shadow);z-index:1}.b3-menu__accelerator{font-size:.75rem;margin-left:16px;color:var(--b3-theme-on-surface);font-family:Consolas,Monaco,monospace}.b3-menu__emoji{font-size:20px;float:left;margin-right:8px;font-family:var(--b3-font-family-emoji)}.b3-menu__emoji img,.b3-menu__emoji svg{width:20px;height:20px;float:left}.emojis{word-break:break-all;white-space:normal;height:50vh;padding:0;display:flex;flex-direction:column;max-height:386px}.emojis__item{font-size:24px;line-height:24px;font-family:var(--b3-font-family-emoji);text-align:center;height:28px;padding:2px 4px;cursor:pointer;display:inline-block;transition:var(--b3-transition);background-color:rgba(0,0,0,0);border:0;margin:0;overflow:hidden}.emojis__item img,.emojis__item svg{height:24px;display:block;width:24px}.emojis__item--current,.emojis__item:hover{background:var(--b3-list-hover);border-radius:4px}.emojis__title{color:var(--b3-theme-on-surface);padding:8px 4px 4px 4px}.emojis__panel{flex:1;overflow:auto;padding:0 8px}.emojis__content{display:flex;flex-wrap:wrap}.emojis__type{cursor:pointer;flex:1;display:flex;align-items:center;justify-content:center;height:28px;line-height:28px;transition:var(--b3-list-hover);font-size:16px}.emojis__type:hover{background-color:var(--b3-theme-surface-lighter)}.emojis__type svg{height:16px;width:16px}.color__square{height:16px;margin-right:4px;width:16px;border:0;transition:var(--b3-transition);box-shadow:0 0 0 2px var(--b3-theme-surface-lighter) inset;display:flex;align-items:center;flex-direction:column;justify-content:center;background-color:var(--b3-theme-background);padding:0}.color__square:last-child{margin-right:0}.color__square:hover{box-shadow:0 0 0 1px var(--b3-theme-on-background) inset,0 0 0 2px var(--b3-theme-background) inset}.protyle{font-family:var(--b3-font-family);overflow-x:hidden;background-color:var(--b3-theme-background);position:relative;max-height:100%;min-height:155px;display:flex;flex-direction:column}.protyle-preview{flex:1;user-select:text;min-width:1px;overflow:auto;background-color:var(--b3-theme-background);display:flex;flex-direction:column;box-sizing:border-box}.protyle-preview__action{text-align:center;padding:10px;background-color:var(--b3-theme-surface)}.protyle-preview__action button{background-color:var(--b3-theme-surface);color:var(--b3-theme-on-surface);line-height:20px;border:0;margin:0 10px;cursor:pointer;padding:0 7px;font-size:12px}.protyle-preview__action button.protyle-preview__action--current,.protyle-preview__action button:hover{color:var(--b3-theme-primary);background-color:var(--b3-theme-surface)}.protyle-preview__action button:focus{outline:none}.protyle-preview__action button svg{fill:currentColor;height:15px;width:15px;vertical-align:middle}.protyle-preview>.b3-typography{padding:8px 16px;margin:0 auto;overflow:auto;width:100%;box-sizing:border-box}.protyle-upload{position:absolute;height:3px;left:0;top:-2px;transition:var(--b3-transition);background-color:var(--b3-theme-primary)}.protyle-toolbar{background-color:var(--b3-theme-background);z-index:3;position:fixed;box-shadow:var(--b3-point-shadow);border-radius:4px;display:flex;transition:top .15s cubic-bezier(0, 0, 0.2, 1) 0ms;border:1px solid var(--b3-theme-surface-lighter)}.protyle-toolbar__item{color:var(--b3-theme-on-surface);border:0;background-color:rgba(0,0,0,0);height:29px;box-sizing:border-box;font-size:0;padding:0 6px}.protyle-toolbar__item:focus{outline:none}.protyle-toolbar__item svg{fill:currentColor;display:inline-block;stroke-width:0;stroke:currentColor;width:14px;height:14px}.protyle-toolbar__item--current{color:var(--b3-theme-primary)}.protyle-toolbar__item:hover{background-color:var(--b3-theme-surface-lighter)}.protyle-toolbar__divider{border-left:1px solid var(--b3-theme-surface-lighter);margin:6px 4px}.protyle-hint{position:fixed;border-radius:4px;box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);background-color:var(--b3-menu-background);z-index:201;overflow:auto;max-height:402px;box-sizing:border-box;padding:8px 0}.protyle-util{position:fixed;border-radius:4px;box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);background-color:var(--b3-menu-background);padding:8px;max-height:80vh;z-index:4;box-sizing:border-box}.protyle-util--mobile{top:0;left:0;width:100vw}.protyle-font{font-size:12px;padding:4px 8px}.protyle-font__style{background-color:rgba(0,0,0,0);margin-right:4px;transition:var(--b3-transition);padding:0 4px;border-radius:2px;border:1px solid rgba(0,0,0,0);color:var(--b3-theme-on-background);white-space:nowrap}.protyle-font__style:hover{border-color:var(--b3-theme-surface-lighter)}.protyle-wysiwyg{padding:34px 16px 16px 24px;cursor:text;display:flex;flex-direction:column;box-sizing:border-box;user-select:auto}.protyle-wysiwyg .protyle-breadcrumb__bar{font-size:14px}.protyle-wysiwyg:focus{outline:none}.protyle-wysiwyg [data-node-id]{position:relative}.protyle-wysiwyg [data-node-id][custom-riff-decks]{box-shadow:-3px 0px 0px -1px var(--b3-protyle-inline-mark-background) inset}.protyle-wysiwyg [data-node-id] [spellcheck]{word-break:break-word;white-space:pre-wrap}.protyle-wysiwyg [data-node-id] [spellcheck]:focus{outline:none}.protyle-wysiwyg [data-node-id].hr{cursor:pointer}.protyle-wysiwyg [data-node-id].hr>div{border-bottom:1px solid var(--b3-theme-background-light)}.protyle-wysiwyg [data-node-id].list{padding-left:0}.protyle-wysiwyg [data-node-id].li{padding:0;margin:0}.protyle-wysiwyg [data-node-id].li:before{content:"";position:absolute;border-left:.5px solid var(--b3-theme-background-light);left:17px}.protyle-wysiwyg [data-node-id].li:hover:before{border-left-color:var(--b3-scroll-color)}.protyle-wysiwyg [data-node-id].li[fold="1"]:before{content:none}.protyle-wysiwyg [data-node-id].li[fold="1"]>.protyle-action:after{background-color:var(--b3-list-hover)}.protyle-wysiwyg [data-node-id].li[fold="1"]>div:nth-child(3):not(.protyle-attr),.protyle-wysiwyg [data-node-id].li[fold="1"]>div:nth-child(3)~div:not(.protyle-attr){display:none}.protyle-wysiwyg [data-node-id].li>.protyle-action{left:0;position:absolute;width:34px;top:0;transition:var(--b3-transition);color:var(--b3-theme-on-surface);justify-content:center;display:flex;align-items:center;word-break:keep-all}.protyle-wysiwyg [data-node-id].li>.protyle-action~.h1,.protyle-wysiwyg [data-node-id].li>.protyle-action~.h2,.protyle-wysiwyg [data-node-id].li>.protyle-action~.h3,.protyle-wysiwyg [data-node-id].li>.protyle-action~.h4,.protyle-wysiwyg [data-node-id].li>.protyle-action~.h5,.protyle-wysiwyg [data-node-id].li>.protyle-action~.h6{padding-top:0;padding-bottom:0}.protyle-wysiwyg [data-node-id].li>.protyle-action:after{content:"";position:absolute;border-radius:50%;top:50%;transition:var(--b3-transition);left:50%}.protyle-wysiwyg [data-node-id].li>.protyle-action svg{width:34px;display:block;z-index:1;position:relative}.protyle-wysiwyg [data-node-id].li>.protyle-action--order:after{border-radius:4px}.protyle-wysiwyg [data-node-id].li>div:nth-child(2){margin-top:0 !important}.protyle-wysiwyg [data-node-id].li>[data-node-id]{margin-left:34px !important;padding-right:0}.protyle-wysiwyg [data-node-id].li>[data-node-id].code-block{margin-top:4px;margin-bottom:4px}.protyle-wysiwyg [data-node-id].li>.list{margin-left:18px !important;padding-left:16px;padding-top:0;padding-bottom:0}.protyle-wysiwyg [data-node-id].sb{padding:0;max-width:100%}.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col]{display:flex;flex-wrap:wrap;justify-content:space-between}.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col]>div{flex:1;box-sizing:border-box;margin-right:24px}.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col]>div:nth-last-child(2),.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col]>div:last-child{margin-right:0}.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col] .sb{margin-top:0;margin-bottom:0}.protyle-wysiwyg [data-node-id].sb[data-sb-layout=col]>div .protyle-attr--refcount{position:initial;margin-left:4px}.protyle-wysiwyg [data-node-id] span[data-type~=tag]{border-bottom:1px solid;color:var(--b3-protyle-inline-tag-color);transition:var(--b3-transition)}.protyle-wysiwyg [data-node-id] span[data-type~=a]{color:var(--b3-protyle-inline-link-color);cursor:pointer;transition:var(--b3-transition)}.protyle-wysiwyg [data-node-id] span[data-type~=a]:hover{border-bottom:1px solid}.protyle-wysiwyg [data-node-id] span[data-type~=search-mark]{background-color:var(--b3-protyle-inline-mark-background);color:var(--b3-protyle-inline-mark-color)}.protyle-wysiwyg [data-node-id] span[data-type~=search-mark].search-mark--hl{background-color:var(--b3-theme-primary-lighter);box-shadow:0 0 0 .5px var(--b3-theme-on-background)}.protyle-wysiwyg [data-node-id] span[data-type=virtual-block-ref]{border-bottom:1px dashed var(--b3-theme-on-surface);transition:var(--b3-transition)}.protyle-wysiwyg [data-node-id] span[data-type=virtual-block-ref]:hover{border-color:var(--b3-theme-on-background)}.protyle-wysiwyg [data-node-id] .def--mark{background-color:var(--b3-protyle-inline-mark-background)}.protyle-wysiwyg [data-node-id] span[data-type~=block-ref],.protyle-wysiwyg [data-node-id] span[data-type~=file-annotation-ref]{color:var(--b3-protyle-inline-blockref-color);opacity:.86;transition:var(--b3-transition)}.protyle-wysiwyg [data-node-id] span[data-type~=file-annotation-ref]{color:var(--b3-protyle-inline-fileref-color)}.protyle-wysiwyg [data-node-id].render-node{min-height:32px}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]{background-color:var(--b3-theme-surface);border-left:1px dashed var(--b3-theme-surface-lighter);max-width:100%}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed] .protyle-attr--refcount{right:0}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]>.protyle-wysiwyg__embed{-webkit-user-modify:read-only;border-top:1px dashed var(--b3-theme-surface-lighter);position:relative}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]>.protyle-wysiwyg__embed .code-block:hover .protyle-icon,.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]>.protyle-wysiwyg__embed .render-node:hover .protyle-icons{opacity:0 !important}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]>.protyle-wysiwyg__embed>.list{margin-left:-4px}.protyle-wysiwyg [data-node-id].render-node[data-type=NodeBlockQueryEmbed]>.protyle-icons+.protyle-wysiwyg__embed{border-top:0}.protyle-wysiwyg [data-node-id] code:not(.hljs):empty{padding:0}.protyle-wysiwyg [data-node-id].table[custom-pinthead=true] table{max-height:50vh}.protyle-wysiwyg [data-node-id].table[custom-pinthead=true] thead{position:sticky;top:-1px;box-shadow:0px -1px 0px var(--b3-theme-on-surface-light) inset}.protyle-wysiwyg [data-node-id] .img--select{filter:brightness(0.68)}.protyle-wysiwyg [data-node-id] .img--drag>span:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.protyle-wysiwyg [data-node-id] .img:hover .protyle-action__drag{display:inline-block}.protyle-wysiwyg [data-node-id] .img .protyle-action__drag{height:30%;width:4px;background:var(--b3-theme-surface);display:none;border-radius:4px;cursor:col-resize;transition:var(--b3-transition);position:absolute;top:45%;right:4px;box-shadow:0 0 1px 1px var(--b3-theme-on-surface);box-sizing:border-box;z-index:1}.protyle-wysiwyg [data-node-id] .img .protyle-action__drag:hover{background-color:var(--b3-theme-background);box-shadow:0 0 1px 1px var(--b3-theme-on-background)}.protyle-wysiwyg [data-node-id] .img .protyle-action__drag:before,.protyle-wysiwyg [data-node-id] .img .protyle-action__drag:after{position:absolute;width:4px;content:"";height:100%;left:-4px}.protyle-wysiwyg [data-node-id] .img .protyle-action__drag:after{left:4px;width:8px}.protyle-wysiwyg [data-node-id] .img__net{position:absolute;top:4px;left:4px;color:var(--b3-theme-primary);background-color:var(--b3-theme-surface-lighter);padding:4px;border-radius:4px}.protyle-wysiwyg [data-node-id] .img__net svg{height:12px;width:12px;float:left}.protyle-wysiwyg [data-node-id]>[contenteditable=false]>.img:hover .protyle-action__drag{display:none}.protyle-wysiwyg [data-node-id].iframe[data-type=NodeWidget] .iframe-content,.protyle-wysiwyg [data-node-id].iframe[data-type=NodeIFrame] .iframe-content{-webkit-user-modify:read-only}.protyle-wysiwyg [data-node-id].iframe .iframe-content{display:inline-block;position:relative}.protyle-wysiwyg [data-node-id].iframe--drag .iframe-content:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.protyle-wysiwyg [data-node-id].iframe:hover .protyle-action__drag{display:inline-block}.protyle-wysiwyg [data-node-id].iframe .protyle-action__drag{height:32px;width:4px;background-color:var(--b3-theme-surface);display:none;border-radius:4px;cursor:nwse-resize;transition:var(--b3-transition);position:absolute;right:-4px;bottom:0;box-shadow:0 0 1px 1px var(--b3-theme-on-surface);box-sizing:border-box}.protyle-wysiwyg [data-node-id].iframe .protyle-action__drag:after{content:"";background-color:var(--b3-theme-surface);width:32px;height:4px;display:block;position:absolute;bottom:0;right:0;border-radius:4px;box-shadow:0 0 1px 1px var(--b3-theme-on-surface);box-sizing:border-box;cursor:nwse-resize}.protyle-wysiwyg [data-node-id].iframe .protyle-action__drag:hover,.protyle-wysiwyg [data-node-id].iframe .protyle-action__drag:hover:after{background-color:var(--b3-theme-background);box-shadow:0 0 1px 1px var(--b3-theme-on-background)}.protyle-wysiwyg--select,.protyle-wysiwyg--select .hljs{background-color:var(--b3-theme-primary-lightest) !important}.protyle-wysiwyg--hl,.protyle-wysiwyg--hl .hljs{transition:var(--b3-transition);background-color:var(--b3-theme-primary-lightest) !important}.protyle-wysiwyg--hl .protyle-linenumber__rows,.protyle-wysiwyg--select .protyle-linenumber__rows{background-color:var(--b3-protyle-code-linenumber-hl) !important}.protyle-wysiwyg .dragover__top{box-shadow:0 -4px 0 var(--b3-theme-primary-lighter) !important}.protyle-wysiwyg .dragover__bottom{box-shadow:0 4px 0 var(--b3-theme-primary-lighter) !important}.protyle-wysiwyg .dragover__left{box-shadow:-4px 0 0 var(--b3-theme-primary-lighter) !important}.protyle-wysiwyg .dragover__right{box-shadow:4px 0 0 var(--b3-theme-primary-lighter) !important}.protyle-wysiwyg--attr .protyle-attr{opacity:1}.protyle-wysiwyg--attr .protyle-attr>div:not(.protyle-attr--memo):not(.protyle-attr--refcount){cursor:pointer;word-break:break-all;-webkit-line-clamp:1;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box}.protyle-wysiwyg [data-type=backslash] span{display:none}.protyle-wysiwyg div[data-type=NodeMathBlock]{margin-top:0;margin-bottom:0;min-height:62px !important}.protyle-wysiwyg div[data-type=NodeHTMLBlock]{min-height:26px !important}.protyle-wysiwyg div[fold="1"][data-type=NodeHeading]:before{content:"";height:16px !important;width:16px;background:var(--b3-theme-surface-lighter);display:block;position:absolute;left:-18px !important;top:50% !important;border-radius:10px;margin-top:-8px;border-left:0 !important}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]){word-break:break-all;-webkit-line-clamp:1;overflow:hidden !important;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;opacity:.54;font-size:16px;height:26px;line-height:26px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]) .protyle-attr{opacity:0}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).list{height:34px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).list .li:first-child{overflow:hidden;height:34px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading])[data-type=NodeBlockQueryEmbed]{height:42px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading])[data-type=NodeBlockQueryEmbed] .protyle-wysiwyg__embed{height:34px;overflow:hidden}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).sb,.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).table{height:36px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).hr{height:auto}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).bq{height:42px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).bq>div:first-child{font-size:16px;height:26px;line-height:26px;overflow:hidden}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).code-block{line-height:1.625;height:25px}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).code-block .protyle-action__language{opacity:.86}.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).code-block .protyle-action__copy,.protyle-wysiwyg [data-node-id][fold="1"]:not(.li):not([data-type=NodeHeading]).code-block .protyle-action__menu{margin-top:-2px}.protyle-wysiwyg[contenteditable=true] span[data-type~=inline-math],.protyle-wysiwyg[contenteditable=true] span[data-type~=tag],.protyle-wysiwyg[contenteditable=true] span[data-type~=block-ref],.protyle-wysiwyg[contenteditable=true] span[data-type~=file-annotation-ref],.protyle-wysiwyg[contenteditable=true] .protyle-action__language,.protyle-wysiwyg[contenteditable=true] .img>span:nth-child(2),.protyle-wysiwyg[contenteditable=true] .li>.protyle-action,.protyle-wysiwyg[contenteditable=true] .render-node{cursor:pointer}.protyle-wysiwyg[contenteditable=true] span[data-type~=tag]:hover{background-color:var(--b3-theme-surface-lighter)}.protyle-wysiwyg[contenteditable=true] span[data-type~=block-ref]:hover,.protyle-wysiwyg[contenteditable=true] span[data-type~=file-annotation-ref]:hover{opacity:1}.protyle-wysiwyg[contenteditable=true] .li>.protyle-action:hover{color:var(--b3-theme-on-background)}.protyle-wysiwyg[contenteditable=true] .li>.protyle-action:hover:after{opacity:.68}.protyle-wysiwyg[contenteditable=true] .code-block .protyle-action{-webkit-user-modify:read-only}.protyle-wysiwyg[contenteditable=true] .code-block .protyle-action .protyle-action__language:hover{color:var(--b3-theme-on-background)}.protyle-wysiwyg[contenteditable=true] .code-block .protyle-action .protyle-action__language:empty::after{content:"language";opacity:.68}.protyle-wysiwyg[contenteditable=true] .img:hover .protyle-icons,.protyle-wysiwyg[contenteditable=true] .render-node:hover>.protyle-icons{opacity:.86}.protyle-attr{display:flex;position:absolute;right:0;top:-12px;opacity:0;font-size:12px;font-weight:normal;align-items:center;line-height:16px}.protyle-attr>div.protyle-attr--bookmark{flex:1}.protyle-attr>div:not(.protyle-attr--refcount){margin:0 4px;line-height:16px;color:var(--b3-theme-on-surface);min-width:12px}.protyle-attr>div:not(.protyle-attr--refcount).protyle-attr--memo svg{margin-right:0}.protyle-attr>div:not(.protyle-attr--refcount):hover{color:var(--b3-theme-on-background)}.protyle-attr>div:not(.protyle-attr--refcount) svg{height:12px;width:12px;margin:2px 2px 0 0;float:left}.protyle-attr--refcount{right:-16px;top:18px;position:absolute;line-height:16px;padding:0 4px;color:var(--b3-theme-on-surface);border-radius:2px;font-size:12px;user-select:none;cursor:pointer;height:16px;background-color:var(--b3-theme-surface);z-index:1}.protyle-attr--refcount:hover{color:var(--b3-theme-on-background);background-color:var(--b3-theme-surface-lighter)}.protyle-attr:empty{display:none}.protyle-scroll{--b3-dynamicscroll-width: 200px;position:absolute;right:0;top:30px;width:16px;bottom:9px}.protyle-scroll svg{height:16px;width:16px;display:block}.protyle-scroll__down,.protyle-scroll__up{transition:var(--b3-transition);position:absolute;opacity:0;cursor:pointer;color:var(--b3-border-color)}.protyle-scroll__down:hover,.protyle-scroll__up:hover{color:var(--b3-theme-on-surface)}.protyle-scroll__up{top:calc(50% - var(--b3-dynamicscroll-width)/2 - 20px)}.protyle-scroll__down{bottom:calc(50% - var(--b3-dynamicscroll-width)/2 - 20px)}.protyle-scroll:hover .protyle-scroll__down,.protyle-scroll:hover .protyle-scroll__up{opacity:1}.protyle-scroll__bar{position:absolute;right:calc(4px - var(--b3-dynamicscroll-width)/2);top:calc(50% - 8px);transform:rotate(90deg);z-index:1}.protyle-scroll__bar .b3-slider{width:var(--b3-dynamicscroll-width);display:block}.protyle-gutters,.av__gutters{cursor:pointer;user-select:none;position:fixed;box-sizing:border-box;z-index:1;text-align:center}.protyle-gutters button,.av__gutters button{border:0;background-color:rgba(0,0,0,0);padding:4px;transition:var(--b3-transition);cursor:pointer}.protyle-gutters button:hover svg,.av__gutters button:hover svg{color:var(--b3-theme-on-surface)}.protyle-gutters button:active,.av__gutters button:active{cursor:grabbing}.protyle-gutters svg,.av__gutters svg{height:14px;color:var(--b3-theme-on-surface-light);width:14px;float:left;transition:var(--b3-transition)}.protyle-select{position:fixed;background-color:var(--b3-theme-primary-lightest)}.protyle-breadcrumb{display:flex;padding:0 8px;background-color:var(--b3-theme-background);flex-shrink:0;box-sizing:border-box;min-height:30px;z-index:1}.protyle-breadcrumb__space{flex:1;min-width:8px;transition:var(--b3-transition);color:var(--b3-theme-on-surface);text-align:center;padding:6px 0;line-height:18px}.protyle-breadcrumb__bar{align-items:center;flex-wrap:wrap;display:flex;transition:var(--b3-transition);overflow:auto;min-height:30px}.protyle-breadcrumb__bar::-webkit-scrollbar{display:none}.protyle-breadcrumb__bar--hide{opacity:0;transition:1s}.protyle-breadcrumb__bar--nowrap{flex-wrap:nowrap}.protyle-breadcrumb__bar .b3-tooltips{height:22px;flex-shrink:0}.protyle-breadcrumb__arrow{height:10px;width:10px;color:var(--b3-theme-on-surface-light);margin:0 4px;flex-shrink:0}.protyle-breadcrumb__text--ellipsis{max-width:112px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.protyle-breadcrumb__text{margin-left:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.protyle-breadcrumb__item{cursor:pointer;display:flex;align-items:center;padding:4px;line-height:16px;height:16px;border-radius:4px;margin:3px 0;color:var(--b3-theme-on-surface);max-width:70%}.protyle-breadcrumb__item.b3-tooltips svg{margin-right:0}.protyle-breadcrumb__item svg{height:14px;width:14px;flex-shrink:0;color:var(--b3-theme-on-surface)}.protyle-breadcrumb__item svg:hover{color:var(--b3-theme-on-background)}.protyle-breadcrumb__item:hover,.protyle-breadcrumb__item--active{color:var(--b3-theme-on-background);background-color:var(--b3-list-hover)}.protyle-content{overflow:auto;flex:1}.protyle-content--transition .protyle-wysiwyg{transition:padding .3s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0ms}.protyle-content--transition .protyle-title{transition:margin .3s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0ms}.protyle-content--transition .protyle-background__iconw{transition:left .3s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0ms}.protyle-background{position:relative;padding-bottom:40px}.protyle-background--enable .protyle-background__tags .item:hover svg{opacity:1}.protyle-background--enable .protyle-background__img:hover .protyle-icons,.protyle-background--enable:hover>.protyle-background__iconw>.protyle-icons,.protyle-background--enable .protyle-background__icon:hover{opacity:.86}.protyle-background--mobileshow .protyle-background__iconw>.protyle-icons,.protyle-background--mobileshow .protyle-background__img .protyle-icons,.protyle-background--mobileshow .protyle-background__tags .item svg{opacity:.86}.protyle-background__icon{height:80px;width:80px;transition:var(--b3-transition);cursor:pointer;font-size:68px;line-height:80px;text-align:center;font-family:var(--b3-font-family-emoji);margin-right:16px}.protyle-background__icon img,.protyle-background__icon svg{height:80px;width:80px;float:left;border-radius:4px}.protyle-background__icon:not(.fn__none)+.protyle-icons{margin-top:57px}.protyle-background__img{position:absolute;width:100%}.protyle-background__img img{object-fit:cover;width:100%;height:30vh;opacity:1;object-position:center}.protyle-background__img .protyle-icons{bottom:8px;top:auto;margin-left:-44px;left:auto;right:32px}.protyle-background__img .protyle-icons:nth-child(3){right:auto;left:48%;opacity:.86;top:50%;bottom:auto;margin-top:-11px}.protyle-background__tags{padding:4px 16px;display:flex;flex-wrap:wrap;position:relative;z-index:1}.protyle-background__tags .item{margin:4px 16px 4px 0;position:relative;padding:0 4px;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;line-height:20px;color:var(--b3-card-success-color);background-color:var(--b3-card-success-background)}.protyle-background__tags .item:hover{color:var(--b3-theme-on-background)}.protyle-background__tags .item--1{color:var(--b3-card-info-color);background-color:var(--b3-card-info-background)}.protyle-background__tags .item--2{color:var(--b3-card-warning-color);background-color:var(--b3-card-warning-background)}.protyle-background__tags .item--3{color:var(--b3-card-error-color);background-color:var(--b3-card-error-background)}.protyle-background__tags .item svg{opacity:0;position:absolute;height:8px;width:8px;padding:4px;border-radius:10px;color:var(--b3-theme-on-surface);background-color:var(--b3-theme-surface);transition:var(--b3-transition);top:-6px;right:-10px}.protyle-background__tags .item svg:hover{color:var(--b3-theme-on-background);background-color:var(--b3-theme-background-light)}.protyle-background__iconw{bottom:0;display:flex;position:absolute}.protyle-background__iconw .protyle-icons{position:initial}.protyle-title{margin:34px 16px 0 24px;position:relative;font-size:16px;border-radius:4px}.protyle-title:hover .protyle-title__icon{opacity:1}.protyle-title[custom-riff-decks]{box-shadow:-3px 0px 0px -1px var(--b3-protyle-inline-mark-background) inset}.protyle-title__icon{position:absolute;left:-24px;top:50%;opacity:0;margin:-15px 4px 0 0;padding:8px 4px 8px 4px;transition:var(--b3-transition);color:var(--b3-theme-on-surface-light);cursor:pointer;line-height:20px}.protyle-title__icon:hover{color:var(--b3-theme-on-surface)}.protyle-title__icon svg{height:14px;width:14px;float:left}.protyle-title__input{width:100%;color:var(--b3-theme-on-background);box-sizing:border-box;border:0;font-size:2em;font-weight:bold;line-height:1.625;padding:0 4px;white-space:break-spaces}.protyle-title__input:empty:after{content:attr(data-tip);color:var(--b3-theme-on-surface);cursor:text}.protyle-title__input:focus{outline:none}.protyle-action__table{position:absolute;top:4px;height:0;width:0;-webkit-user-modify:read-only}.protyle-action__table .table__resize{position:absolute;top:0;width:6px;cursor:col-resize}.protyle-action__table .table__resize:hover:after{background-color:var(--b3-theme-primary-light)}.protyle-action__table .table__resize:after{top:0;width:2px;left:2px;height:100%;content:"";display:block;position:absolute;transition:var(--b3-transition)}.protyle-action__table .table__select{background:var(--b3-theme-primary-lightest);position:relative;transition:var(--b3-transition)}@font-face{font-family:"JetBrainsMono-Regular";src:url(../fonts/JetBrainsMono-Regular.woff) format("woff")}.b3-typography,.protyle-wysiwyg{font-variant-ligatures:no-common-ligatures}.b3-typography img,.protyle-wysiwyg img{max-width:100%;margin:0 auto}.b3-typography img.emoji,.protyle-wysiwyg img.emoji{cursor:auto;max-width:none;vertical-align:sub}.b3-typography p,.b3-typography [data-node-id],.protyle-wysiwyg p,.protyle-wysiwyg [data-node-id]{line-height:1.625;padding:4px;margin:4px 0;border-radius:4px}.b3-typography ins>iframe,.protyle-wysiwyg ins>iframe{border:0}.b3-typography iframe,.protyle-wysiwyg iframe{border:1px solid var(--b3-theme-surface-lighter);width:765px;box-sizing:border-box;height:256px;max-width:100%;vertical-align:bottom}.b3-typography span[data-type~=sup],.b3-typography span[data-type~=sub],.protyle-wysiwyg span[data-type~=sup],.protyle-wysiwyg span[data-type~=sub]{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.b3-typography span[data-type~=sup],.protyle-wysiwyg span[data-type~=sup]{top:-0.5em}.b3-typography span[data-type~=sub],.protyle-wysiwyg span[data-type~=sub]{bottom:-0.25em}.b3-typography em,.b3-typography span[data-type~=em],.protyle-wysiwyg em,.protyle-wysiwyg span[data-type~=em]{font-style:italic;color:var(--b3-protyle-inline-em-color)}.b3-typography s,.b3-typography span[data-type~=s],.protyle-wysiwyg s,.protyle-wysiwyg span[data-type~=s]{color:var(--b3-protyle-inline-s-color);text-decoration:line-through}.b3-typography strong,.b3-typography span[data-type~=strong],.protyle-wysiwyg strong,.protyle-wysiwyg span[data-type~=strong]{font-weight:bold;color:var(--b3-protyle-inline-strong-color)}.b3-typography span[data-type~=inline-math],.protyle-wysiwyg span[data-type~=inline-math]{user-select:text;display:inline}.b3-typography mark,.b3-typography span[data-type~=mark],.protyle-wysiwyg mark,.protyle-wysiwyg span[data-type~=mark]{background-color:var(--b3-protyle-inline-mark-background);color:var(--b3-protyle-inline-mark-color)}.b3-typography mark.mark__current,.b3-typography span[data-type~=mark].mark__current,.protyle-wysiwyg mark.mark__current,.protyle-wysiwyg span[data-type~=mark].mark__current{background-color:var(--b3-protyle-search-current-background);box-shadow:0 0 1px var(--b3-theme-on-background)}.b3-typography kbd,.b3-typography span[data-type~=kbd],.protyle-wysiwyg kbd,.protyle-wysiwyg span[data-type~=kbd]{padding:2px 4px;font:75% Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:1;color:var(--b3-theme-on-surface);vertical-align:middle;background-color:var(--b3-theme-surface);border:solid 1px var(--b3-theme-surface-lighter);border-radius:3px;box-shadow:inset 0 -1px 0 var(--b3-theme-surface-lighter)}.b3-typography u,.protyle-wysiwyg u{text-decoration:none}.b3-typography u,.b3-typography span[data-type~=u],.protyle-wysiwyg u,.protyle-wysiwyg span[data-type~=u]{border-bottom:1px solid}.b3-typography span[data-type~=inline-memo],.protyle-wysiwyg span[data-type~=inline-memo]{background-color:var(--b3-card-info-background);border-bottom:2px solid var(--b3-card-info-color)}.b3-typography blockquote,.b3-typography .bq,.protyle-wysiwyg blockquote,.protyle-wysiwyg .bq{padding:4px;color:var(--b3-theme-on-surface);border-left:.25em solid var(--b3-theme-surface-lighter);background-color:var(--b3-list-hover);margin:4px 0}.b3-typography .h1,.b3-typography h1,.b3-typography .h2,.b3-typography h2,.b3-typography .h3,.b3-typography h3,.b3-typography .h4,.b3-typography h4,.b3-typography .h5,.b3-typography h5,.b3-typography .h6,.b3-typography h6,.protyle-wysiwyg .h1,.protyle-wysiwyg h1,.protyle-wysiwyg .h2,.protyle-wysiwyg h2,.protyle-wysiwyg .h3,.protyle-wysiwyg h3,.protyle-wysiwyg .h4,.protyle-wysiwyg h4,.protyle-wysiwyg .h5,.protyle-wysiwyg h5,.protyle-wysiwyg .h6,.protyle-wysiwyg h6{padding:4px;margin:4px 0;font-weight:600;line-height:1.25}.b3-typography .h1,.b3-typography h1,.protyle-wysiwyg .h1,.protyle-wysiwyg h1{padding:.3em 4px;font-size:1.75em}.b3-typography .h2,.b3-typography h2,.protyle-wysiwyg .h2,.protyle-wysiwyg h2{padding:.3em 4px;font-size:1.55em}.b3-typography .h3,.b3-typography h3,.protyle-wysiwyg .h3,.protyle-wysiwyg h3{font-size:1.38em}.b3-typography .h4,.b3-typography h4,.protyle-wysiwyg .h4,.protyle-wysiwyg h4{font-size:1.25em}.b3-typography .h5,.b3-typography h5,.protyle-wysiwyg .h5,.protyle-wysiwyg h5{font-size:1.13em}.b3-typography .h6,.b3-typography h6,.protyle-wysiwyg .h6,.protyle-wysiwyg h6{font-size:1em}.b3-typography audio,.protyle-wysiwyg audio{max-width:100%;vertical-align:bottom}.b3-typography audio:focus,.protyle-wysiwyg audio:focus{outline:none}.b3-typography video,.protyle-wysiwyg video{max-height:90vh;max-width:100%;vertical-align:bottom}.b3-typography video:focus,.protyle-wysiwyg video:focus{outline:none}.b3-typography table,.protyle-wysiwyg table{border-collapse:collapse;empty-cells:show;margin:0;overflow:auto;border-spacing:0;display:inline-block;width:max-content}.b3-typography table tr:nth-child(2n) td,.protyle-wysiwyg table tr:nth-child(2n) td{background-color:var(--b3-theme-background)}.b3-typography table td,.b3-typography table th,.protyle-wysiwyg table td,.protyle-wysiwyg table th{background-color:var(--b3-theme-surface);padding:4px 8px;border:1px solid var(--b3-theme-surface-lighter);box-sizing:border-box}.b3-typography table td:empty::after,.b3-typography table th:empty::after,.protyle-wysiwyg table td:empty::after,.protyle-wysiwyg table th:empty::after{content:"";height:16px;display:inline-block}.b3-typography table thead th,.b3-typography table thead td,.protyle-wysiwyg table thead th,.protyle-wysiwyg table thead td{font-weight:600}.b3-typography table tbody th,.b3-typography table tbody td,.protyle-wysiwyg table tbody th,.protyle-wysiwyg table tbody td{font-weight:normal}.b3-typography a[href^=pdf-outline],.protyle-wysiwyg a[href^=pdf-outline]{white-space:pre !important;border-left:none !important;border-right:none !important;border-top:none !important;border-bottom:none !important;display:inline-block !important;position:absolute !important;width:1px !important;right:0 !important;outline:0 !important;background:0 0 !important;text-decoration:initial !important;text-shadow:initial !important;color:var(--b3-theme-background)}.b3-typography .code-block,.protyle-wysiwyg .code-block{position:relative;padding:0;margin:1em 0}.b3-typography .code-block .protyle-action,.protyle-wysiwyg .code-block .protyle-action{left:4px;top:4px;display:flex;z-index:1;position:absolute;right:4px}.b3-typography .code-block .protyle-action .protyle-action__language,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language{font-size:85%;color:var(--b3-theme-on-surface);margin-top:-4px}.b3-typography .code-block .protyle-action .protyle-icon,.b3-typography .code-block .protyle-action .protyle-action__language,.protyle-wysiwyg .code-block .protyle-action .protyle-icon,.protyle-wysiwyg .code-block .protyle-action .protyle-action__language{opacity:0;transition:var(--b3-transition)}.b3-typography .code-block:hover .protyle-icon,.b3-typography .code-block:hover .protyle-action__language,.protyle-wysiwyg .code-block:hover .protyle-icon,.protyle-wysiwyg .code-block:hover .protyle-action__language{opacity:.86}.b3-typography .code-block[linenumber=true] .protyle-action__language,.protyle-wysiwyg .code-block[linenumber=true] .protyle-action__language{margin-left:3.6em}.b3-typography .hljs,.protyle-wysiwyg .hljs{border-radius:4px;padding:22px 4px;font-size:85%;overflow:auto;font-family:var(--b3-font-family-code);min-height:22px !important;overflow-x:overlay}.b3-typography [data-subtype=echarts],.b3-typography [data-subtype=mindmap],.protyle-wysiwyg [data-subtype=echarts],.protyle-wysiwyg [data-subtype=mindmap]{z-index:1}.b3-typography [data-subtype=echarts]>div:not(.protyle-icons):not(.protyle-attr),.b3-typography [data-subtype=mindmap]>div:not(.protyle-icons):not(.protyle-attr),.protyle-wysiwyg [data-subtype=echarts]>div:not(.protyle-icons):not(.protyle-attr),.protyle-wysiwyg [data-subtype=mindmap]>div:not(.protyle-icons):not(.protyle-attr){overflow:hidden;height:420px}.b3-typography .katex-display,.protyle-wysiwyg .katex-display{user-select:none;overflow-x:auto;overflow-y:hidden;max-width:100%;padding:4px 0}.b3-typography .katex-display>.katex>.katex-html,.protyle-wysiwyg .katex-display>.katex>.katex-html{display:flex;align-items:baseline}.b3-typography .katex-display>.katex>.katex-html:before,.protyle-wysiwyg .katex-display>.katex>.katex-html:before{content:"";flex:1}.b3-typography .katex-display>.katex>.katex-html>.tag,.protyle-wysiwyg .katex-display>.katex>.katex-html>.tag{position:initial;margin-right:2px;margin-left:8px}.b3-typography .katex,.protyle-wysiwyg .katex{font-size:113%;line-height:normal}.b3-typography .katex .mathnormal,.protyle-wysiwyg .katex .mathnormal{font-family:var(--b3-font-family-math)}.b3-typography [data-subtype=graphviz],.protyle-wysiwyg [data-subtype=graphviz]{text-align:center}.b3-typography [data-subtype=graphviz] svg,.protyle-wysiwyg [data-subtype=graphviz] svg{border-radius:4px}.b3-typography [data-subtype=flowchart],.protyle-wysiwyg [data-subtype=flowchart]{text-align:center}.b3-typography [data-subtype=flowchart] [contenteditable=false] svg,.protyle-wysiwyg [data-subtype=flowchart] [contenteditable=false] svg{background:var(--b3-theme-on-primary);border-radius:4px}.b3-typography [data-subtype=mermaid],.b3-typography [data-subtype=plantuml],.b3-typography [data-subtype=abc],.protyle-wysiwyg [data-subtype=mermaid],.protyle-wysiwyg [data-subtype=plantuml],.protyle-wysiwyg [data-subtype=abc]{text-align:center}.b3-typography [data-subtype=mermaid],.protyle-wysiwyg [data-subtype=mermaid]{overflow:auto}.b3-typography [data-subtype=plantuml] img,.protyle-wysiwyg [data-subtype=plantuml] img{border-radius:4px}.b3-typography .abcjs-container svg,.b3-typography .abcjs-container path,.protyle-wysiwyg .abcjs-container svg,.protyle-wysiwyg .abcjs-container path{fill:currentColor;color:var(--b3-theme-on-background)}.b3-typography .img,.protyle-wysiwyg .img{display:inline-block;text-align:center;vertical-align:top;margin:0 auto}.b3-typography .img:not([style]),.protyle-wysiwyg .img:not([style]){display:initial}.b3-typography .img>span:nth-child(2),.protyle-wysiwyg .img>span:nth-child(2){max-width:calc(100% - 10px);position:relative;display:inline-block;min-width:22px}.b3-typography .img .protyle-action__title,.protyle-wysiwyg .img .protyle-action__title{width:100%;display:block;font-size:85%;color:var(--b3-theme-on-surface)}.b3-typography .iframe,.protyle-wysiwyg .iframe{text-align:center;padding:4px;margin:4px 0}.b3-typography{font-family:var(--b3-font-family);word-wrap:break-word;overflow:auto;line-height:1.625;font-size:16px;word-break:break-word}.b3-typography ul{list-style-type:disc}.b3-typography ul,.b3-typography ol{padding-left:2em;margin:4px 0}.b3-typography hr{border:0;border-bottom:1px solid var(--b3-theme-background-light);margin:8px 0}.b3-typography table{margin:1em 0}.b3-typography div[data-subtype=math]{position:relative;padding-top:4px}.b3-typography .protyle-icons{display:none}.protyle-icons{z-index:1;transition:var(--b3-transition);opacity:0;position:absolute;right:4px;top:4px;display:flex}.protyle-icons--show{opacity:.86}.protyle-icon{font-size:85%;line-height:22px;cursor:pointer;padding:0 4px;transition:var(--b3-transition);background-color:var(--b3-theme-on-surface);height:22px;color:var(--b3-theme-surface)}.protyle-icon--only{border-radius:4px}.protyle-icon--first{border-bottom-left-radius:4px;border-top-left-radius:4px}.protyle-icon--last{border-bottom-right-radius:4px;border-top-right-radius:4px}.protyle-icon:hover{color:var(--b3-theme-background);background-color:var(--b3-theme-on-background)}.protyle-icon--text{cursor:text;border-radius:4px}.protyle-icon--text:hover{color:var(--b3-theme-surface);background-color:var(--b3-theme-on-surface)}.protyle-icon>svg{height:22px;width:14px;fill:currentColor}.protyle-linenumber{margin-left:3.6em;position:relative}.protyle-linenumber__rows{position:absolute;pointer-events:none;top:0;left:0;user-select:none;counter-reset:linenumber;font-size:85%;line-height:1.625;background-color:var(--b3-theme-surface);padding:22px 4px;box-sizing:border-box;border-radius:4px 0 0 4px;width:3.6em;font-family:var(--b3-font-family-code)}.protyle-linenumber__rows>span{pointer-events:none;display:block}.protyle-linenumber__rows>span::before{counter-increment:linenumber;content:counter(linenumber);color:var(--b3-theme-on-surface);display:block;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl}.protyle-speech{position:absolute;display:none;background-color:var(--b3-theme-surface);border:1px solid var(--b3-theme-surface-lighter);border-radius:3px;padding:3px;cursor:pointer;color:var(--b3-theme-on-surface)}.protyle-speech:hover,.protyle-speech--current{color:var(--b3-theme-primary)}.protyle-speech svg{height:14px;width:14px;fill:currentColor;display:block;stroke-width:0;stroke:currentColor}.protyle-task{list-style:none !important;word-break:break-all;position:relative}.protyle-task--done>div[data-node-id].p{color:var(--b3-theme-on-surface-light);text-decoration:line-through}.protyle-task input{left:-1.5em;position:absolute;top:0;height:32px;margin:0;width:1em}.protyle-wysiwyg .table>div:first-child{overflow:auto}.mermaidTooltip{position:fixed;border-radius:4px;box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);background-color:var(--b3-theme-surface);z-index:304;padding:4px}:root{--annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,");--input-focus-border-color: Highlight;--input-focus-outline: 1px solid Canvas;--input-unfocused-border-color: transparent;--input-disabled-border-color: transparent;--input-hover-border-color: black;--link-outline: none}@media screen and (forced-colors: active){:root{--input-focus-border-color: CanvasText;--input-unfocused-border-color: ActiveText;--input-disabled-border-color: GrayText;--input-hover-border-color: Highlight;--link-outline: 1.5px solid LinkText}.annotationLayer .linkAnnotation:hover{backdrop-filter:invert(100%)}}.annotationLayer{position:absolute;top:0;left:0;pointer-events:none;transform-origin:0 0;z-index:3}.annotationLayer[data-main-rotation="90"] .norotate{transform:rotate(270deg) translateX(-100%)}.annotationLayer[data-main-rotation="180"] .norotate{transform:rotate(180deg) translate(-100%, -100%)}.annotationLayer[data-main-rotation="270"] .norotate{transform:rotate(90deg) translateY(-100%)}.annotationLayer canvas{position:absolute;width:100%;height:100%}.annotationLayer section{position:absolute;text-align:initial;pointer-events:auto;box-sizing:border-box;transform-origin:0 0}.annotationLayer .linkAnnotation{outline:var(--link-outline)}.annotationLayer .linkAnnotation>a,.annotationLayer .buttonWidgetAnnotation.pushButton>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%}.annotationLayer .linkAnnotation>a:hover,.annotationLayer .buttonWidgetAnnotation.pushButton>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.annotationLayer .textAnnotation img{position:absolute;cursor:pointer;width:100%;height:100%;top:0;left:0}.annotationLayer .textWidgetAnnotation input,.annotationLayer .textWidgetAnnotation textarea,.annotationLayer .choiceWidgetAnnotation select,.annotationLayer .buttonWidgetAnnotation.checkBox input,.annotationLayer .buttonWidgetAnnotation.radioButton input{background-color:rgba(0,54,255,.13);border:2px solid var(--input-unfocused-border-color);box-sizing:border-box;font:calc(9px*var(--scale-factor)) sans-serif;height:100%;margin:0;vertical-align:top;width:100%}.annotationLayer .textWidgetAnnotation input:required,.annotationLayer .textWidgetAnnotation textarea:required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation.checkBox input:required,.annotationLayer .buttonWidgetAnnotation.radioButton input:required{outline:1.5px solid red}.annotationLayer .choiceWidgetAnnotation select option{padding:0}.annotationLayer .buttonWidgetAnnotation.radioButton input{border-radius:50%}.annotationLayer .textWidgetAnnotation textarea{resize:none}.annotationLayer .textWidgetAnnotation input[disabled],.annotationLayer .textWidgetAnnotation textarea[disabled],.annotationLayer .choiceWidgetAnnotation select[disabled],.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled]{background:none;border:2px solid var(--input-disabled-border-color);cursor:not-allowed}.annotationLayer .textWidgetAnnotation input:hover,.annotationLayer .textWidgetAnnotation textarea:hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,.annotationLayer .buttonWidgetAnnotation.radioButton input:hover{border:2px solid var(--input-hover-border-color)}.annotationLayer .textWidgetAnnotation input:hover,.annotationLayer .textWidgetAnnotation textarea:hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation.checkBox input:hover{border-radius:2px}.annotationLayer .textWidgetAnnotation input:focus,.annotationLayer .textWidgetAnnotation textarea:focus,.annotationLayer .choiceWidgetAnnotation select:focus{background:none;border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.checkBox :focus,.annotationLayer .buttonWidgetAnnotation.radioButton :focus{background-image:none;background-color:rgba(0,0,0,0)}.annotationLayer .buttonWidgetAnnotation.checkBox :focus{border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.radioButton :focus{border:2px solid var(--input-focus-border-color);outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{background-color:#000;content:"";display:block;position:absolute}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{height:80%;left:45%;width:1px}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before{transform:rotate(45deg)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{transform:rotate(-45deg)}.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{border-radius:50%;height:50%;left:30%;top:20%;width:50%}.annotationLayer .textWidgetAnnotation input.comb{font-family:monospace;padding-left:2px;padding-right:0}.annotationLayer .textWidgetAnnotation input.comb:focus{width:103%}.annotationLayer .buttonWidgetAnnotation.checkBox input,.annotationLayer .buttonWidgetAnnotation.radioButton input{appearance:none}.annotationLayer .popupTriggerArea{height:100%;width:100%}.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{position:absolute}.annotationLayer .popupWrapper{position:absolute;font-size:calc(9px*var(--scale-factor));width:100%;min-width:calc(180px*var(--scale-factor));pointer-events:none}.annotationLayer .popup{position:absolute;max-width:calc(180px*var(--scale-factor));background-color:#ff9;box-shadow:0 calc(2px*var(--scale-factor)) calc(5px*var(--scale-factor)) #888;border-radius:calc(2px*var(--scale-factor));padding:calc(6px*var(--scale-factor));margin-left:calc(5px*var(--scale-factor));cursor:pointer;font:message-box;white-space:normal;word-wrap:break-word;pointer-events:auto}.annotationLayer .popup>*{font-size:calc(9px*var(--scale-factor))}.annotationLayer .popup h1{display:inline-block}.annotationLayer .popupDate{display:inline-block;margin-left:calc(5px*var(--scale-factor))}.annotationLayer .popupContent{border-top:1px solid #333;margin-top:calc(2px*var(--scale-factor));padding-top:calc(2px*var(--scale-factor))}.annotationLayer .richText>*{white-space:pre-wrap;font-size:calc(9px*var(--scale-factor))}.annotationLayer .highlightAnnotation,.annotationLayer .underlineAnnotation,.annotationLayer .squigglyAnnotation,.annotationLayer .strikeoutAnnotation,.annotationLayer .freeTextAnnotation,.annotationLayer .lineAnnotation svg line,.annotationLayer .squareAnnotation svg rect,.annotationLayer .circleAnnotation svg ellipse,.annotationLayer .polylineAnnotation svg polyline,.annotationLayer .polygonAnnotation svg polygon,.annotationLayer .caretAnnotation,.annotationLayer .inkAnnotation svg polyline,.annotationLayer .stampAnnotation,.annotationLayer .fileAttachmentAnnotation{cursor:pointer}.annotationLayer section svg{position:absolute;width:100%;height:100%;top:0;left:0}.annotationLayer .annotationTextContent{position:absolute;width:100%;height:100%;opacity:0;color:rgba(0,0,0,0);user-select:none;pointer-events:none}.annotationLayer .annotationTextContent span{width:100%;display:inline-block}.textLayer{position:absolute;text-align:initial;left:0;top:0;right:0;bottom:0;overflow:hidden;line-height:1;text-size-adjust:none}.textLayer span,.textLayer br{color:rgba(0,0,0,0);position:absolute;white-space:pre;cursor:text;transform-origin:0% 0%}.textLayer span.markedContent{top:0;height:0}.textLayer .highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}.textLayer .highlight.appended{position:initial}.textLayer .highlight.begin{border-radius:4px 0 0 4px}.textLayer .highlight.end{border-radius:0 4px 4px 0}.textLayer .highlight.middle{border-radius:0}.textLayer .highlight.selected{background-color:#006400}.textLayer ::selection{background:var(--b3-pdf-selection)}.textLayer br::selection{background:rgba(0,0,0,0)}.textLayer .endOfContent{display:block;position:absolute;left:0;top:100%;right:0;bottom:0;z-index:-1;cursor:default;user-select:none}.textLayer .endOfContent.active{top:0}:root{--xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,")}.xfaLayer .highlight{margin:-1px;padding:1px;background-color:#efcbed;border-radius:4px}.xfaLayer .highlight.appended{position:initial}.xfaLayer .highlight.begin{border-radius:4px 0 0 4px}.xfaLayer .highlight.end{border-radius:0 4px 4px 0}.xfaLayer .highlight.middle{border-radius:0}.xfaLayer .highlight.selected{background-color:#cbdfcb}.xfaLayer ::selection{background:var(--b3-pdf-selection)}.xfaPage{overflow:hidden;position:relative}.xfaContentarea{position:absolute}.xfaPrintOnly{display:none}.xfaLayer{position:absolute;text-align:initial;top:0;left:0;transform-origin:0 0;line-height:1.2}.xfaLayer *{color:inherit;font:inherit;font-style:inherit;font-weight:inherit;font-kerning:inherit;letter-spacing:-0.01px;text-align:inherit;text-decoration:inherit;box-sizing:border-box;background-color:rgba(0,0,0,0);padding:0;margin:0;pointer-events:auto;line-height:inherit}.xfaLayer div{pointer-events:none}.xfaLayer svg{pointer-events:none}.xfaLayer svg *{pointer-events:none}.xfaLayer a{color:blue}.xfaRich li{margin-left:3em}.xfaFont{color:#000;font-weight:normal;font-kerning:none;font-size:10px;font-style:normal;letter-spacing:0;text-decoration:none;vertical-align:0}.xfaCaption{overflow:hidden;flex:0 0 auto}.xfaCaptionForCheckButton{overflow:hidden;flex:1 1 auto}.xfaLabel{height:100%;width:100%}.xfaLeft{display:flex;flex-direction:row;align-items:center}.xfaRight{display:flex;flex-direction:row-reverse;align-items:center}.xfaLeft>.xfaCaption,.xfaLeft>.xfaCaptionForCheckButton,.xfaRight>.xfaCaption,.xfaRight>.xfaCaptionForCheckButton{max-height:100%}.xfaTop{display:flex;flex-direction:column;align-items:flex-start}.xfaBottom{display:flex;flex-direction:column-reverse;align-items:flex-start}.xfaTop>.xfaCaption,.xfaTop>.xfaCaptionForCheckButton,.xfaBottom>.xfaCaption,.xfaBottom>.xfaCaptionForCheckButton{width:100%}.xfaBorder{background-color:rgba(0,0,0,0);position:absolute;pointer-events:none}.xfaWrapped{width:100%;height:100%}.xfaTextfield:focus,.xfaSelect:focus{background-image:none;background-color:rgba(0,0,0,0);outline:auto;outline-offset:-1px}.xfaCheckbox:focus,.xfaRadio:focus{outline:auto}.xfaTextfield,.xfaSelect{height:100%;width:100%;flex:1 1 auto;border:none;resize:none;background-image:var(--xfa-unfocused-field-background)}.xfaTop>.xfaTextfield,.xfaTop>.xfaSelect,.xfaBottom>.xfaTextfield,.xfaBottom>.xfaSelect{flex:0 1 auto}.xfaButton{cursor:pointer;width:100%;height:100%;border:none;text-align:center}.xfaLink{width:100%;height:100%;position:absolute;top:0;left:0}.xfaCheckbox,.xfaRadio{width:100%;height:100%;flex:0 0 auto;border:none}.xfaRich{white-space:pre-wrap;width:100%;height:100%}.xfaImage{object-position:left top;object-fit:contain;width:100%;height:100%}.xfaLrTb,.xfaRlTb,.xfaTb{display:flex;flex-direction:column;align-items:stretch}.xfaLr{display:flex;flex-direction:row;align-items:stretch}.xfaRl{display:flex;flex-direction:row-reverse;align-items:stretch}.xfaTb>div{justify-content:left}.xfaPosition{position:relative}.xfaArea{position:relative}.xfaValignMiddle{display:flex;align-items:center}.xfaTable{display:flex;flex-direction:column;align-items:stretch}.xfaTable .xfaRow{display:flex;flex-direction:row;align-items:stretch}.xfaTable .xfaRlRow{display:flex;flex-direction:row-reverse;align-items:stretch;flex:1}.xfaTable .xfaRlRow>div{flex:1}.xfaNonInteractive input,.xfaNonInteractive textarea,.xfaDisabled input,.xfaDisabled textarea,.xfaReadOnly input,.xfaReadOnly textarea{background:initial}@media print{.xfaTextfield,.xfaSelect{background:rgba(0,0,0,0)}.xfaSelect{appearance:none;text-indent:1px;text-overflow:""}}:root{--viewer-container-height: 0;--pdfViewer-padding-bottom: 0;--page-margin: 1px auto -8px;--page-border: 9px solid transparent;--spreadHorizontalWrapped-margin-LR: -3.5px;--loading-icon-delay: 400ms}@media screen and (forced-colors: active){:root{--pdfViewer-padding-bottom: 9px;--page-margin: 8px auto -1px;--page-border: none;--spreadHorizontalWrapped-margin-LR: 3.5px}}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%, -100%)}[data-main-rotation="270"]{transform:rotate(270deg) translateX(-100%)}.pdfViewer{--scale-factor: 1;padding-bottom:var(--pdfViewer-padding-bottom)}.pdfViewer .canvasWrapper{overflow:hidden;width:100%;height:100%;z-index:1}.pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:var(--page-margin);position:relative;overflow:visible;border:var(--page-border);background-clip:content-box;background-color:#fff}.pdfViewer .dummyPage{position:relative;width:0;height:var(--viewer-container-height)}.pdfViewer.removePageBorders .page{margin:0 auto 10px;border:none}.pdfViewer.singlePageView{display:inline-block}.pdfViewer.singlePageView .page{margin:0;border:none}.pdfViewer.scrollHorizontal,.pdfViewer.scrollWrapped,.spread{margin-inline:3.5px;text-align:center}.pdfViewer.scrollHorizontal,.spread{white-space:nowrap}.pdfViewer.removePageBorders,.pdfViewer.scrollHorizontal .spread,.pdfViewer.scrollWrapped .spread{margin-inline:0}.spread .page,.spread .dummyPage,.pdfViewer.scrollHorizontal .page,.pdfViewer.scrollWrapped .page,.pdfViewer.scrollHorizontal .spread,.pdfViewer.scrollWrapped .spread{display:inline-block;vertical-align:middle}.spread .page,.pdfViewer.scrollHorizontal .page,.pdfViewer.scrollWrapped .page{margin-inline:var(--spreadHorizontalWrapped-margin-LR)}.pdfViewer.removePageBorders .spread .page,.pdfViewer.removePageBorders.scrollHorizontal .page,.pdfViewer.removePageBorders.scrollWrapped .page{margin-inline:5px}.pdfViewer .page canvas{margin:0;display:block}.pdfViewer .page canvas .structTree{contain:strict}.pdfViewer .page canvas[hidden]{display:none}.pdfViewer .page canvas[zooming]{width:100%;height:100%}.pdfViewer .page.loadingIcon:after{position:absolute;top:0;left:0;content:"";width:100%;height:100%;display:none;transition-property:display;transition-delay:var(--loading-icon-delay);z-index:5;contain:strict}.pdfViewer .page.loading:after{display:block}.pdfViewer .page:not(.loading):after{transition-property:none;display:none}.pdfViewer.enablePermissions .textLayer span{user-select:none !important;cursor:not-allowed}.pdfPresentationMode .pdfViewer{padding-bottom:0}.pdfPresentationMode .spread{margin:0}.pdfPresentationMode .pdfViewer .page{margin:0 auto;border:2px solid rgba(0,0,0,0)}.pdf__toolbar{position:relative;left:0;right:0;cursor:default}.pdf__outer{user-select:text;overflow:hidden;width:100%;height:100%;position:relative}.pdf__outer .textLayer,.pdf__outer .pdf__resize{mix-blend-mode:multiply}.pdf__util--hide .pdf__util__hide{display:none}.pdf__util .b3-menu__item:hover{background-color:var(--b3-list-hover)}.pdf__rect{cursor:pointer}.pdf__rect--hl>div{transition:opacity 1500ms linear;animation-duration:1s;animation-fill-mode:both;animation-name:fadeIn}.pdf__rect>div{box-sizing:border-box;position:absolute}.pdf__rect>div:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.pdf__rect>div:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.pdf__resize{position:fixed;border:2px solid var(--b3-pdf-background1);box-sizing:border-box;border-radius:4px}.pdf__outer--dark .pdfViewer .page canvas,.pdf__outer--dark .thumbnailImage{filter:grayscale(0%) invert(100%) contrast(100%) brightness(100%) hue-rotate(180deg)}.pdf__outer--dark .textLayer{background-color:var(--b3-pdf-dark)}.pdf__outer--dark .textLayer,.pdf__outer--dark .pdf__resize{z-index:2;mix-blend-mode:screen}.annotationLayer section:not(.linkAnnotation){display:none}.pdfViewer.enablePermissions .textLayer span{user-select:none !important;cursor:not-allowed}#viewerContainer.pdfPresentationMode:fullscreen{top:0;border-top:2px solid rgba(0,0,0,0);background-color:var(--b3-theme-background);width:100%;height:100%;overflow:hidden;cursor:none;user-select:none}.pdfPresentationMode:fullscreen a:not(.internalLink){display:none}.pdfPresentationMode:fullscreen .textLayer span{cursor:none}.pdfPresentationMode.pdfPresentationModeControls>*,.pdfPresentationMode.pdfPresentationModeControls .textLayer span{cursor:default}#sidebarContainer{position:absolute;top:32px;bottom:0;width:var(--b3-pdf-sidebar-width);visibility:hidden;z-index:1;transition-duration:200ms;transition-timing-function:ease;transition-property:left;left:calc(0px - var(--b3-pdf-sidebar-width));background-color:var(--b3-theme-surface)}#outerContainer.sidebarResizing #sidebarContainer{transition-duration:0s;user-select:none}#outerContainer.sidebarMoving #sidebarContainer,#outerContainer.sidebarOpen #sidebarContainer{visibility:visible}#outerContainer.sidebarOpen #sidebarContainer{left:0}#mainContainer{position:absolute;top:0;right:0;bottom:0;left:0;min-width:320px}#sidebarContent{top:32px;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;width:100%;left:0}#viewerContainer{overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;top:32px;right:0;bottom:0;left:0;outline:none}#viewerContainer:not(.pdfPresentationMode){transition-duration:200ms;transition-timing-function:ease}#outerContainer.sidebarResizing #viewerContainer{transition-duration:0s}#outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode){transition-property:left;left:var(--b3-pdf-sidebar-width)}#toolbarSidebar,#toolbarViewer{width:100%;height:32px;display:flex;padding-left:8px;box-sizing:border-box}#toolbarViewer #numPages{line-height:32px;padding-left:4px}#sidebarResizer{position:absolute;top:0;bottom:0;width:6px;z-index:200;cursor:ew-resize;right:-6px}#sidebarResizer:after{content:"";width:1px;height:100%;background-color:var(--b3-border-color);position:absolute;top:0;left:3px}#sidebarResizer:hover:after{background-color:var(--b3-scroll-color)}#loadingBar{position:absolute;height:4px;background-color:var(--b3-theme-on-background);transition-duration:200ms;transition-timing-function:ease;z-index:1}#loadingBar{transition-property:left;left:0;right:var(--b3-pdf-offset)}#outerContainer.sidebarOpen #loadingBar{left:var(--b3-pdf-sidebar-width)}#outerContainer.sidebarResizing #loadingBar{transition-duration:0s}#loadingBar .progress{position:absolute;top:0;left:0;width:var(--progressBar-percent);height:100%;background-color:var(--b3-theme-primary-light);overflow:hidden;transition:width 200ms}@keyframes progressIndeterminate{0%{left:-142px}100%{left:0}}#loadingBar .progress.indeterminate{background-color:var(--b3-theme-on-surface);transition:none}#loadingBar .progress.indeterminate .glimmer{position:absolute;top:0;left:0;height:100%;width:calc(100% + 150px);background:repeating-linear-gradient(135deg, var(--b3-theme-primary-lighter) 0, var(--b3-theme-on-surface) 5px, var(--b3-theme-on-surface) 45px, var(--b3-theme-primary-light) 55px, var(--b3-theme-primary-light) 95px, var(--b3-theme-primary-lighter) 100px);animation:progressIndeterminate 1s linear infinite}.findbar{left:64px;position:absolute;top:36px;padding:4px 8px;display:flex;align-items:center;flex-wrap:wrap;overflow:initial}.findbar #findInput{width:120px}.findbar #findInput[data-status=notFound]{background-color:var(--b3-theme-error)}.secondaryToolbar{right:4px;position:absolute;top:36px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:60vh}#secondaryToolbarButtonContainer.hiddenScrollModeButtons>.scrollModeButtons,#secondaryToolbarButtonContainer.hiddenSpreadModeButtons>.spreadModeButtons{display:none !important}#findMsg{color:var(--b3-theme-error)}#findMsg:empty{display:none}.toolbarButton{border:none;background:none;cursor:pointer;padding:0 4px;line-height:32px;user-select:none;width:20px;box-sizing:border-box;height:32px;margin-right:8px;color:var(--b3-theme-on-surface);overflow:initial}.toolbarButton:hover,.toolbarButton:focus{color:var(--b3-theme-on-background)}.toolbarButton>svg{height:12px;width:12px}.toolbarButton[disabled]{color:var(--b3-theme-surface-lighter)}.toolbarButton.toggled,.secondaryToolbarButton.toggled{color:var(--b3-theme-primary)}.secondaryToolbarButton:hover{background-color:var(--b3-list-hover)}.secondaryToolbarButton[disabled]{opacity:.38;cursor:not-allowed}.dropdownToolbarButton{--scale-select-width: 140px;width:var(--scale-select-width);margin:4px 8px 0 0}.dropdownToolbarButton select{width:inherit;min-width:auto;height:24px;line-height:24px;padding:0 8px}#customScaleOption{display:none}#pageWidthOption{border-bottom:1px rgba(255,255,255,.5) solid}.bookmark[href="#"]{opacity:.5;pointer-events:none}.toolbarField[type=checkbox]{opacity:0;position:absolute !important;margin:10px 0 3px 7px}.toolbarField.pageNumber{min-width:16px;text-align:right;width:48px;padding:1px 8px;margin:4px 0}.toolbarField.pageNumber::-webkit-inner-spin-button,.toolbarField.pageNumber::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.toolbarField.pageNumber.visiblePageIsLoading{background-image:var(--loading-icon);background-repeat:no-repeat;background-position:3px}#thumbnailView,#outlineView,#attachmentsView,#layersView{width:calc(100% - 16px);top:0;bottom:0;padding:8px;overflow:auto;-webkit-overflow-scrolling:touch;position:absolute}#thumbnailView>a:active,#thumbnailView>a:focus{outline:0}#thumbnailView .thumbnail{margin-bottom:8px}.thumbnailImage{border:1px solid rgba(0,0,0,0);box-shadow:0 0 0 1px rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.3);opacity:.8;z-index:99;background-color:#fff;background-clip:content-box}.thumbnailSelectionRing{border-radius:2px;padding:7px;margin:0 auto;box-shadow:0 0 1px 1px var(--b3-theme-surface-lighter)}a:focus>.thumbnail>.thumbnailSelectionRing>.thumbnailImage,.thumbnail:hover>.thumbnailSelectionRing>.thumbnailImage{opacity:.9}a:focus>.thumbnail>.thumbnailSelectionRing,.thumbnail:hover>.thumbnailSelectionRing{background-color:var(--b3-list-hover);background-clip:padding-box;color:rgba(255,255,255,.9)}.thumbnail.selected>.thumbnailSelectionRing>.thumbnailImage{opacity:1}.thumbnail.selected>.thumbnailSelectionRing{background-color:var(--b3-list-hover);background-clip:padding-box;color:#fff}.treeWithDeepNesting>.treeItem,.treeItem>.treeItems{margin-left:20px}.treeItem>a{text-decoration:none;display:inline-block;min-width:95%;height:auto;margin-bottom:1px;border-radius:2px;line-height:15px;user-select:none;white-space:normal;cursor:pointer;padding:4px 0 4px 4px;color:var(--b3-theme-on-background)}#layersView .treeItem>a>*{cursor:pointer}#layersView .treeItem>a>label{padding-left:4px}.treeItem{position:relative}.treeItem .treeItemToggler{transition:var(--b3-transition);height:24px;width:24px;cursor:pointer;text-align:center;color:var(--b3-theme-on-surface);position:absolute;left:-19px;top:2px}.treeItem .treeItemToggler svg{height:20px;width:8px}.treeItem .treeItemToggler.treeItemsHidden{transform:rotate(-90deg);left:-17px;top:0}.treeItem .treeItemToggler.treeItemsHidden~.treeItems{display:none}.treeItem .treeItemToggler:hover{color:var(--b3-theme-on-background)}.treeItem.selected>a{background-color:var(--b3-theme-surface-lighter)}.treeItemToggler:hover+a,.treeItemToggler:hover~.treeItems,.treeItem:not(.selected)>a:hover{background-color:var(--b3-list-hover)}#errorWrapper{background:none repeat scroll 0 0 var(--b3-theme-on-background);color:var(--main-color);left:0;position:absolute;right:0;z-index:1000;padding:3px 6px}#errorMessageLeft{float:left}#errorMessageRight{float:right}#errorMoreInfo{background-color:var(--b3-theme-surface);color:var(--b3-theme-on-surface);border:1px solid var(--b3-theme-surface-lighter);padding:3px;margin:3px;width:98%}.overlayButton{width:auto;margin:3px 4px 2px !important;padding:2px 11px;color:var(--b3-theme-on-background);background-color:var(--b3-theme-background);border:0 none !important}#dialogContainer>.dialog{padding:8px;box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);background-color:var(--b3-theme-surface);border-radius:4px;width:520px;position:absolute;inset-inline-start:0px;inset-inline-end:0px;height:fit-content;margin:auto;display:none}#dialogContainer>.dialog--open{position:fixed;inset-block-start:0px;inset-block-end:0px;max-width:calc(100% - 6px - 2em);max-height:calc(100% - 6px - 2em);user-select:text;display:block;z-index:100;overflow:auto}#dialogContainer>.dialog>.row{display:table-row}#dialogContainer>.dialog>.row>span{white-space:nowrap;color:var(--b3-theme-on-surface);padding-right:8px}#dialogContainer>.dialog>.row>*{display:table-cell;color:var(--b3-theme-on-background)}#dialogContainer>.dialog .toolbarField{margin:5px 0}#dialogContainer>.dialog .separator{display:block;margin:4px 0;height:1px;width:100%;background-color:var(--b3-theme-surface-lighter)}#dialogContainer>.dialog .buttonRow{text-align:center;vertical-align:middle}#dialogContainer>.dialog :link{color:#fff}#passwordOverlay>dialog{text-align:center}#passwordOverlay .toolbarField{width:200px}#documentPropertiesOverlay>dialog{text-align:left}#documentPropertiesOverlay .row>*{min-width:100px}#documentPropertiesOverlay .row>*{text-align:left}#documentPropertiesOverlay .row>span{width:125px;word-wrap:break-word}#documentPropertiesOverlay .row>p{max-width:225px;word-wrap:break-word}#documentPropertiesOverlay .buttonRow{margin-top:10px}.clearBoth{clear:both}.fileInput{background:#fff;color:#000;margin-top:5px;visibility:hidden;position:fixed;right:0;top:0}#PDFBug{background:none repeat scroll 0 0 #fff;border:1px solid #666;position:fixed;top:32px;right:0;bottom:0;font-size:10px;padding:0;width:300px}#PDFBug .controls{background:#eee;border-bottom:1px solid #666;padding:3px}#PDFBug .panels{bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;position:absolute;right:0;top:27px}#PDFBug .panels>div{padding:5px}#PDFBug button.active{font-weight:bold}.debuggerShowText{background:none repeat scroll 0 0 #ff0;color:blue}.debuggerHideText:hover{background:none repeat scroll 0 0 #ff0}#PDFBug .stats{font-family:courier;font-size:10px;white-space:pre}#PDFBug .stats .title{font-weight:bold}#PDFBug table{font-size:10px}#PDFBug table.showText{border-collapse:collapse;text-align:center}#PDFBug table.showText,#PDFBug table.showText tr,#PDFBug table.showText td{border:1px solid #000;padding:1px}#PDFBug table.showText td.advance{color:gray}#viewer.textLayer-visible .textLayer{opacity:1}#viewer.textLayer-visible .canvasWrapper{background-color:#80ff80}#viewer.textLayer-visible .canvasWrapper canvas{mix-blend-mode:screen}#viewer.textLayer-visible .textLayer span{background-color:rgba(255,255,0,.1);color:#000;border:solid 1px rgba(255,0,0,.5);box-sizing:border-box}#viewer.textLayer-hover .textLayer span:hover{background-color:#fff;color:#000}#viewer.textLayer-shadow .textLayer span{background-color:rgba(255,255,255,.6);color:#000}.rect-to-annotation{cursor:crosshair !important;user-select:none}.rect-to-annotation *:not(input):not(textarea):not(button):not(select):not(:link){cursor:inherit !important;user-select:auto}.grab-to-pan-grab{cursor:grab !important}.grab-to-pan-grab *:not(input):not(textarea):not(button):not(select):not(:link){cursor:inherit !important}.grab-to-pan-grab:active,.grab-to-pan-grabbing{cursor:grabbing !important;position:fixed;background:rgba(0,0,0,0);display:block;top:0;left:0;right:0;bottom:0;overflow:hidden;z-index:50000}@page{margin:0}#printContainer{display:none}@media print{#sidebarContainer,#secondaryToolbar,.toolbar,#loadingBox,#errorWrapper,.textLayer,.canvasWrapper{display:none}#viewerContainer{overflow:visible}#mainContainer,#viewerContainer,.page,.page canvas{position:static;padding:0;margin:0}.page{float:left;display:none;border:none;box-shadow:none;background-clip:content-box;background-color:#fff}.page[data-loaded]{display:block}.fileInput{display:none}#printContainer{height:100%}#printContainer>.printedPage{page-break-after:always;page-break-inside:avoid;height:100%;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}#printContainer>.xfaPrintedPage .xfaPage{position:absolute}#printContainer>.xfaPrintedPage{page-break-after:always;page-break-inside:avoid;width:100%;height:100%;position:relative}#printContainer>.printedPage canvas,#printContainer>.printedPage img{max-width:100%;max-height:100%;display:block}}.visibleLargeView,.visibleMediumView,.visibleSmallView{display:none}@media all and (max-width: 840px){#outerContainer.sidebarOpen #viewerContainer{left:0 !important}#outerContainer .hiddenLargeView,#outerContainer .hiddenMediumView{display:inherit}#outerContainer .visibleLargeView,#outerContainer .visibleMediumView{display:none}}@media all and (max-width: 770px){#outerContainer .hiddenLargeView{display:none}#outerContainer .visibleLargeView{display:inherit}}@media all and (max-width: 700px){#outerContainer .hiddenMediumView{display:none}#outerContainer .visibleMediumView{display:inherit}}@media all and (max-width: 640px){.hiddenSmallView,.hiddenSmallView *{display:none}.visibleSmallView{display:inherit}}@media all and (max-width: 535px){#scaleSelectContainer{display:none}}.config__tab-container{overflow:auto;box-sizing:border-box;flex:1;background-color:var(--b3-theme-background)}.config__tab-container .b3-label{padding:16px 0;margin:0 24px}.config__panel>.b3-tab-bar{user-select:none;width:200px;overflow:auto;padding:8px 0;box-sizing:border-box}.config__panel>.b3-tab-bar .b3-form__icon{margin:0 8px 8px}.config__panel>.b3-tab-bar .b3-list-item{line-height:38px}.config__panel>.b3-tab-bar .b3-list-item__graphic{margin-right:0;padding:0 10px 0 5px;height:16px;width:16px}.config-query{display:flex;flex-wrap:wrap}.config-query label{width:16%;margin:8px 17% 0 0;color:var(--b3-theme-on-surface);align-items:center}.config-repos__sync{margin:0 0 -16px 16px;overflow:hidden;max-height:180px;display:flex;flex-direction:column;padding-bottom:16px}.config-account{height:100%}.config-account__center{flex-direction:column;justify-content:center;flex:1;display:flex;min-width:1px;align-items:center}.config-account__center--text{background-color:var(--b3-theme-surface);padding:16px 24px}.config-account__center--text .b3-button--outline{white-space:normal}.config-account__form{max-width:298px;width:100%}.config-account__bg{position:relative;margin-bottom:82px;width:100%;flex:1;min-height:128px}.config-account__info{width:100%;box-sizing:border-box;padding:16px 24px;margin-top:10vh}.config-account__cover{position:absolute;top:0;width:100%;height:100%;background-size:cover;background-position:center center}.config-account__avatar{position:absolute;bottom:24px;width:128px;height:128px;left:50%;margin-left:-64px;background-repeat:no-repeat;background-position:50%;background-size:cover;border-radius:90px;background-color:rgba(255,255,255,.8);box-shadow:var(--b3-point-shadow);border:1px solid var(--b3-theme-surface-lighter)}.config-account__name{bottom:-58px;position:absolute;width:100%;text-align:center}.config-about__logo{display:flex;align-items:center;flex-wrap:wrap}.config-about__logo img{height:24px;width:24px;margin-right:8px}.config-assets{display:flex;flex-direction:column;height:100%;box-sizing:border-box;position:relative}.config-assets__list{overflow:auto;flex:1}.config-assets__preview{display:flex;flex-direction:row;align-items:center;justify-content:center;overflow:auto;flex:1;margin-top:8px}.config-keymap__key{padding:2px 4px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:1;color:var(--b3-theme-on-surface);vertical-align:middle;background-color:var(--b3-theme-surface);border:solid 1px var(--b3-theme-surface-lighter);border-radius:3px;box-shadow:inset 0 -1px 0 var(--b3-theme-surface-lighter);margin-left:4px;cursor:pointer;height:14px;min-width:17px}.config-keymap .b3-list__panel .b3-text-field,.config-keymap .b3-list__panel .pcr-app .pcr-interaction .pcr-result,.pcr-app .pcr-interaction .config-keymap .b3-list__panel .pcr-result{margin-left:4px}.config-keymap div.b3-list-item>.b3-list-item__text{padding-left:4px}.config-bazaar__readme{position:absolute;transition:transform .2s cubic-bezier(0, 0, 0.2, 1) 0ms,opacity .3s cubic-bezier(0, 0, 0.2, 1) 0ms;right:-100%;top:0;width:100%;height:100%;background-color:var(--b3-theme-background);display:flex;padding:16px 16px 16px 0;box-sizing:border-box;opacity:0;z-index:1}.config-bazaar__readme--show{opacity:1;transform:translateX(-100%)}.config-bazaar__readme .item__side{text-align:center;width:260px;display:flex;flex-direction:column;height:100%;overflow:auto;padding:0 16px}.config-bazaar__readme .item__readme{margin-top:24px;position:relative}.config-bazaar__readme .item__main{flex:1;margin-left:16px;overflow:auto}.config-bazaar__readme .item__title{font-size:24px;word-break:break-all;color:var(--b3-theme-on-background)}.config-bazaar__readme .item__img{height:96px;width:96px;margin:32px auto 32px;border-radius:4px;flex-shrink:0}.config-bazaar__readme .item__preview{width:100%;height:50%;background-position:center center;background-repeat:no-repeat;background-size:cover;border-radius:4px;margin-bottom:32px;cursor:pointer;left:0;top:0;transition:var(--b3-transition)}.config-bazaar__readme .item__preview--fullscreen{position:absolute;z-index:1;height:100%;background-size:contain;background-color:var(--b3-mask-background)}.search__layout{display:flex;flex:1;min-height:.1px;flex-direction:column}.search__layout--row{flex-direction:row;border-top:1px solid var(--b3-theme-surface-lighter);border-bottom:1px solid var(--b3-theme-surface-lighter)}.search__layout--row .search__preview{border-top:0;border-left:1px solid var(--b3-theme-surface-lighter)}.search__layout--row .search__drag{cursor:col-resize;width:6px;margin:0 -6px 0 0;height:auto}.search__layout--row .search__drag:after{width:.5px;height:100%}.search__header{display:flex;background:var(--b3-theme-background);position:relative;border-bottom:1px solid var(--b3-theme-surface-lighter)}.search__header .block__icon{opacity:1}.search__header .b3-text-field--text{font-size:18px;height:42px;line-height:32px;border-radius:0;padding:5px 8px 5px 44px !important;box-shadow:none;width:100%}.search__header .b3-form__icon-icon{top:13px;left:8px}.search__header .b3-menu{max-width:70%;max-height:50vh;overflow:auto;top:42px;position:absolute;left:8px}.search__arrowdown{position:absolute;height:10px;width:10px;left:26px;top:17px}.search__label{cursor:pointer;flex:1}.search__label:hover{color:var(--b3-theme-on-background)}.search__label .b3-form__icon-input{width:0;transition:var(--b3-transition);border-color:rgba(0,0,0,0);box-sizing:border-box;padding-right:0}.search__label .b3-form__icon-input:focus,.search__label .b3-form__icon-input.search__input--block{width:100%;border-color:var(--b3-theme-primary)}.search__preview{background-color:var(--b3-theme-background);border-top:1px solid var(--b3-theme-surface-lighter)}.search__drag{cursor:row-resize;width:100%;margin:0 0 -6px 0;height:6px;position:relative;z-index:2}.search__drag:after{content:"";display:block;background-color:var(--b3-theme-surface-lighter);position:absolute;left:0;transition:var(--b3-transition);top:0;width:100%;height:.5px}.search__drag:hover:after{background-color:var(--b3-scroll-color)}.search__list{position:relative;flex:1;overflow:auto;padding:8px 0}.search__list .b3-list-item__text{user-select:none}.search__path{white-space:nowrap;position:relative;padding-right:20px;line-height:18px}.search__rmpath{position:absolute;height:18px;width:16px;opacity:.68;transition:var(--b3-transition);right:0;cursor:pointer}.search__rmpath:hover{opacity:1}.search__tip{font-size:12px;color:var(--b3-theme-on-surface-light);margin:2px 8px;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}.search__tip kbd{padding:1px 3px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;background-color:var(--b3-theme-surface);border:solid 1px var(--b3-theme-surface-lighter);border-radius:3px;box-shadow:inset 0 -1px 0 var(--b3-theme-surface-lighter);margin:2px 4px 0 16px}.search__tip kbd:first-child{margin-left:0}.search__empty{text-align:center;font-size:17px;padding:32px;color:var(--b3-theme-on-surface)}.pcr-app{box-shadow:var(--b3-dialog-shadow);border:1px solid var(--b3-theme-surface-lighter);border-radius:4px}.pcr-app .pcr-interaction .pcr-result{background:rgba(0,0,0,0);font-size:12px}.pcr-app .pcr-selection .pcr-picker{height:16px;width:16px;border:1px solid var(--b3-theme-surface-lighter);box-shadow:var(--b3-point-shadow);transition:transform 100ms ease-out}.viewer-zoom-in svg,.viewer-zoom-out svg,.viewer-one-to-one svg,.viewer-reset svg,.viewer-prev svg,.viewer-play svg,.viewer-next svg,.viewer-rotate-left svg,.viewer-rotate-right svg,.viewer-flip-horizontal svg,.viewer-flip-vertical svg,.viewer-fullscreen svg,.viewer-fullscreen-exit svg,.viewer-close svg{height:24px;width:12px;color:rgba(255,255,255,.78)}.viewer-container{bottom:0;direction:ltr;font-size:0;left:0;line-height:0;overflow:hidden;position:absolute;right:0;-webkit-tap-highlight-color:rgba(0,0,0,0);top:0;touch-action:none;-webkit-touch-callout:none;user-select:none}.viewer-container::selection,.viewer-container *::selection{background-color:rgba(0,0,0,0)}.viewer-container:focus{outline:0}.viewer-container img{display:block;height:auto;max-height:none !important;max-width:none !important;min-height:0 !important;min-width:0 !important;width:100%}.viewer-canvas{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}.viewer-canvas>img{height:auto;margin:15px auto;max-width:90% !important;width:auto}.viewer-footer{bottom:0;left:0;overflow:hidden;position:absolute;right:0;text-align:center}.viewer-navbar{background-color:rgba(0,0,0,.48);overflow:hidden}.viewer-list{box-sizing:content-box;height:50px;margin:0;overflow:hidden;padding:1px 0}.viewer-list>li{color:rgba(0,0,0,0);cursor:pointer;float:left;font-size:0;height:50px;line-height:0;opacity:.48;overflow:hidden;transition:opacity .15s;width:30px}.viewer-list>li:focus,.viewer-list>li:hover{opacity:.78}.viewer-list>li:focus{outline:0}.viewer-list>li+li{margin-left:1px}.viewer-list>.viewer-loading{position:relative}.viewer-list>.viewer-loading::after{border-width:2px;height:20px;margin-left:-10px;margin-top:-10px;width:20px}.viewer-list>.viewer-active,.viewer-list>.viewer-active:focus,.viewer-list>.viewer-active:hover{opacity:1}.viewer-player{background-color:#000;bottom:0;cursor:none;display:none;left:0;position:absolute;right:0;top:0;z-index:1}.viewer-player>img{left:0;position:absolute;top:0}.viewer-toolbar>ul{display:inline-block;margin:0 auto 5px;overflow:hidden;padding:6px 3px}.viewer-toolbar>ul>li{background-color:var(--b3-tooltips-color);border-radius:50%;cursor:pointer;float:left;height:24px;overflow:hidden;transition:background-color .15s;width:24px}.viewer-toolbar>ul>li:focus svg,.viewer-toolbar>ul>li:hover svg{color:#fff}.viewer-toolbar>ul>li:focus{box-shadow:0 0 3px #fff;outline:0;position:relative;z-index:1}.viewer-toolbar>ul>li::before{margin:2px}.viewer-toolbar>ul>li+li{margin-left:1px}.viewer-toolbar>ul>.viewer-small{height:18px;margin-bottom:3px;margin-top:3px;width:18px}.viewer-toolbar>ul>.viewer-small::before{margin:-1px}.viewer-toolbar>ul>.viewer-large{height:30px;margin-bottom:-3px;margin-top:-3px;width:30px}.viewer-toolbar>ul>.viewer-large svg{height:30px;width:16px}.viewer-tooltip{background-color:var(--b3-tooltips-color);border-radius:10px;color:#fff;display:none;font-size:12px;height:20px;left:50%;line-height:20px;margin-left:-25px;margin-top:-10px;position:absolute;text-align:center;top:50%;width:50px}.viewer-title{color:var(--b3-theme-on-secondary);display:inline-block;font-size:12px;line-height:1.2;margin:0 5% 5px;max-width:90%;opacity:.8;overflow:hidden;text-overflow:ellipsis;transition:opacity .15s;white-space:nowrap}.viewer-title:hover{opacity:1}.viewer-button{background-color:rgba(0,0,0,.48);border-radius:50%;cursor:pointer;height:80px;overflow:hidden;position:absolute;right:-40px;top:-40px;transition:background-color .15s;width:80px;-webkit-app-region:no-drag}.viewer-button:focus,.viewer-button:hover{background-color:var(--b3-mask-background)}.viewer-button:focus{box-shadow:0 0 3px #fff;outline:0}.viewer-button::before{bottom:15px;left:15px;position:absolute}.viewer-fixed{position:fixed}.viewer-open{overflow:hidden}.viewer-show{display:block}.viewer-hide{display:none}.viewer-backdrop{background-color:rgba(0,0,0,.24)}.viewer-invisible{visibility:hidden}.viewer-move{cursor:move;cursor:grab}.viewer-fade{opacity:0}.viewer-in{opacity:1}.viewer-transition{transition:all .3s}@keyframes viewer-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.viewer-loading::after{animation:viewer-spinner 1s linear infinite;border:4px solid rgba(255,255,255,.1);border-left-color:rgba(255,255,255,.5);border-radius:50%;content:"";display:inline-block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:1}@media(max-width: 767px){.viewer-hide-xs-down{display:none}}@media(max-width: 991px){.viewer-hide-sm-down{display:none}}@media(max-width: 1199px){.viewer-hide-md-down{display:none}}.export-img.protyle-wysiwyg [data-node-id].li[fold="1"]>.protyle-action:after{background-color:rgba(0,0,0,0);border:1px solid var(--b3-list-hover);box-sizing:border-box}.card__main{box-sizing:border-box;max-height:100%;background-color:var(--b3-theme-surface)}.card__empty{display:flex;flex:1;text-align:center;background-color:var(--b3-theme-background);font-size:16px;box-sizing:border-box;flex-direction:column;justify-content:center;color:var(--b3-theme-on-surface);align-items:center}.card__empty--space{padding:16px}.card__empty>div{font-size:64px;margin-bottom:16px}.card__action{padding:8px 4px}.card__action .b3-button{padding:8px 0;display:block;width:100%}.card__action .b3-button>div{font-size:32px;display:block;line-height:46px;margin-bottom:4px}.card__action>div{flex:1;margin:0 4px}.card__action>div>span{display:flex;color:var(--b3-theme-on-surface);text-align:center;font-size:12px;margin-bottom:8px;height:28px;line-height:14px;justify-content:center;align-items:center}.card__block .protyle-wysiwyg [data-node-id][custom-riff-decks]{box-shadow:none}.card__block--hidemark span[data-type~=mark]{transition:var(--b3-transition);color:rgba(0,0,0,0) !important}.card__block--hideli .li>.list{display:none}.card__block--hidesb .protyle-wysiwyg>.sb>div:nth-of-type(n+2):not(.protyle-attr){display:none}.custom-attr .b3-label{display:block;padding:8px 16px}.resize__rd,.resize__ld,.resize__lt,.resize__rt,.resize__r,.resize__l,.resize__t,.resize__d{position:absolute}.resize__rd{height:16px;width:16px;cursor:nwse-resize;right:-8px;bottom:-8px}.resize__lt{height:16px;width:16px;cursor:nwse-resize;left:-8px;top:-8px}.resize__ld{height:16px;width:16px;cursor:nesw-resize;left:-8px;bottom:-8px}.resize__rt{height:16px;width:16px;cursor:nesw-resize;top:-8px;right:-8px}.resize__d{height:8px;cursor:ns-resize;left:8px;right:8px;bottom:-8px}.resize__t{height:8px;cursor:ns-resize;left:8px;right:8px;top:-8px}.resize__r{width:8px;cursor:ew-resize;top:8px;right:-8px;bottom:8px}.resize__l{width:8px;cursor:ew-resize;top:8px;left:-8px;bottom:8px}.av{user-select:none;box-sizing:border-box}.av__gutters{position:absolute;top:5px;left:-26px;opacity:0;padding-right:4px}.av__mask{position:fixed;z-index:320;top:0;bottom:0;right:0;left:0}.av__scroll{overflow:auto hidden;cursor:pointer}.av__row{display:flex;border-bottom:1px solid var(--b3-theme-surface-lighter);position:relative}.av__row:hover .av__gutters{opacity:1}.av__row--header .av__cell{display:flex;align-items:center}.av__row--header .av__cell svg{height:14px;width:14px;color:var(--b3-theme-on-surface);margin-right:5px}.av__row--select{background-color:var(--b3-theme-primary-lightest)}.av__row--select .av__firstcol svg{opacity:1}.av__row--header{z-index:1}.av__row--header,.av__row--footer{background-color:var(--b3-theme-background)}.av__cell{padding:5px;flex-shrink:0;border-right:1px solid var(--b3-theme-surface-lighter)}.av__firstcol svg{color:var(--b3-theme-on-surface);height:36px;width:24px;opacity:0;padding:5px;box-sizing:border-box;float:left}.av__firstcol:hover svg{opacity:1}html{position:fixed;top:0;right:0;left:0}.fullscreen{position:fixed;top:0;width:100% !important;left:0;height:100vh !important;z-index:90;border-radius:0}.fullscreen>.protyle-breadcrumb,.fullscreen>.block__icons{padding-left:var(--b3-toolbar-left-mac);height:32px;min-height:32px}.fullscreen .protyle-breadcrumb>.protyle-breadcrumb__space,.fullscreen>.block__icons>.fn__flex-1{-webkit-app-region:drag;min-width:32px}.fullscreen .protyle-breadcrumb>.protyle-breadcrumb__space:hover,.fullscreen>.block__icons>.fn__flex-1:hover{border-radius:16px;background-color:var(--b3-theme-surface-light)}.svg{fill:currentColor;display:inline-block;stroke-width:0;stroke:currentColor;width:14px;height:14px}.svg--mid{width:16px;height:16px}.svg--small{width:12px;height:12px}.toolbar{background-color:var(--b3-toolbar-background);box-sizing:border-box;height:32px;line-height:32px;padding:0 5px 0 var(--b3-toolbar-left-mac);border-bottom:.5px solid var(--b3-border-color)}.toolbar--browser{padding-left:0}.toolbar #windowControls{top:0;z-index:502;right:0;position:relative}.toolbar #windowControls .toolbar__item svg{width:13px}.toolbar #drag{-webkit-app-region:drag;color:var(--b3-toolbar-color);user-select:none;text-align:center;white-space:nowrap;align-self:center;font-size:12px;min-width:148px;box-sizing:border-box}.toolbar__item{flex-shrink:0;cursor:pointer;color:var(--b3-toolbar-color);padding:9px;box-sizing:border-box;transition:var(--b3-transition);display:flex;align-self:center;background-color:rgba(0,0,0,0);border:0;line-height:13.5px}.toolbar__item:not(.toolbar__item--disabled):not(.toolbar__item--close):hover,.toolbar__item--active{background-color:var(--b3-toolbar-hover)}.toolbar__item svg{height:13.5px;width:13.5px}.toolbar__item svg.toolbar__svg{width:8px;height:13.5px;margin-left:4px;opacity:.54}.toolbar__item--disabled{opacity:.54;cursor:not-allowed}.toolbar__item--close{padding:9px 16px}.toolbar__item--close svg{width:10px !important}.toolbar__item--close:hover{color:var(--b3-theme-on-error);background-color:var(--b3-theme-error)}.toolbar__window{position:fixed;top:0;right:0;display:flex;z-index:502}.toolbar__window .toolbar__item{padding:14.25px}.toolbar__window .toolbar__item:not(.toolbar__item--disabled):not(.toolbar__item--close):hover,.toolbar__window .toolbar__item--active{background-color:var(--b3-theme-background-light)}.toolbar__text{font-size:12px;max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:none;color:#ebecf0}.status{background-color:var(--b3-theme-surface);box-sizing:border-box;z-index:2;height:32px;line-height:32px;border-top:.5px solid var(--b3-border-color);padding:0 5px}.status .toolbar__item{color:var(--b3-theme-on-surface)}.status .toolbar__item:hover{color:var(--b3-theme-on-background);background-color:var(--b3-theme-background-light) !important}.status__msg{color:var(--b3-theme-on-surface);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-left:5px;font-size:12px}.status__counter{display:flex;flex-shrink:0;font-size:12px}.status__backgroundtask{display:flex;color:var(--b3-theme-on-surface);font-size:12px}.status__backgroundtask>div{height:4px;border-radius:4px;overflow:hidden;background-color:#fff;width:64px;align-self:center;margin:0 8px 0 4px;cursor:pointer}.status__backgroundtask>div>div{background-color:var(--b3-theme-primary-light);height:4px;background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);animation:stripMove 450ms linear infinite;background-size:50px 50px}.status .fn__space:last-child{width:5px}.asset{overflow:auto;box-sizing:border-box;margin:16px}.asset--pdf{margin:0;height:100%}.asset img,.asset video,.asset audio,.asset canvas{max-width:100%}.file-tree .dragover{background-color:var(--b3-theme-primary-lightest)}.file-tree .dragover__top{background-color:var(--b3-theme-primary-lightest);box-shadow:0 -2px 0 var(--b3-theme-primary-lighter),inset 0 2px 0 var(--b3-theme-primary-lighter)}.file-tree .dragover__bottom{background-color:var(--b3-theme-primary-lightest);box-shadow:0 2px 0 var(--b3-theme-primary-lighter),inset 0px -2px 0 var(--b3-theme-primary-lighter)}.file-tree:hover .block__icons .block__icon:not([disabled]){opacity:1}.file-tree:hover .block__icons .block__icon[disabled]{opacity:.38}.file-tree__close{min-height:auto;transition:var(--b3-transition)}.file-tree__sliderDown{height:0;overflow:hidden;transition:var(--b3-transition)}.counter{margin-left:4px;line-height:22px;padding:0 8px;color:var(--b3-theme-on-surface-light);border-radius:2px;font-size:12px;user-select:none;height:22px}.counter--right{width:32px;text-align:right}.reveal{font-family:var(--b3-font-family)}.backlink--more .b3-list-item__text{-webkit-line-clamp:initial}.backlink--more .b3-list-item__graphic.popover__block{align-self:flex-start;margin-top:7px}.switch-doc{max-height:70vh;max-width:100%;min-width:426px}.switch-doc .b3-list:last-child{border-left:1px solid var(--b3-theme-surface-lighter)}.switch-doc__path{padding:4px 8px;border-top:1px solid var(--b3-theme-surface-lighter);color:var(--b3-theme-on-surface);font-size:12px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;line-height:18px;min-height:18px}@media(max-width: 750px){.config__panel>.b3-tab-bar{width:auto}.config__panel>.b3-tab-bar .b3-list-item__text,.config__panel>.b3-tab-bar .b3-form__icon{display:none}.config__panel>.b3-tab-bar .b3-list-item__graphic{padding-right:5px}.config__panel .config-query label{width:100%;margin-top:8px}.config__panel .config-account{flex-direction:column;min-height:100%}.config__tab-container .b3-card__info--left{display:none}.config__item{flex-wrap:wrap}.config__item>.b3-text-field,.pcr-app .pcr-interaction .config__item>.pcr-result,.config__item>.b3-select,.config__item .b3-slider,.config__item>.b3-button,.config__item>.b3-tooltips,.config__item>.b3-form__icona,.config__item-line,.config__item .searchByKeyLabel{width:100%;margin-top:8px}.config-keymap label.b3-list-item{flex-wrap:wrap}.config-keymap .b3-list-item__action{display:flex}.config-keymap .config-keymap__key,.config-keymap .b3-text-field,.config-keymap .pcr-app .pcr-interaction .pcr-result,.pcr-app .pcr-interaction .config-keymap .pcr-result{width:100%;margin-left:0 !important;text-align:center}.history__panel{flex-direction:column}.history__panel>.b3-list,.history__panel>.history__diff{height:40%;overflow:auto;padding-bottom:8px;width:auto}} \ No newline at end of file diff --git a/public/resources/stage/build/app/version.txt b/public/resources/stage/build/app/version.txt new file mode 100644 index 00000000..5edc4eec --- /dev/null +++ b/public/resources/stage/build/app/version.txt @@ -0,0 +1 @@ +base.55870db539c2a1c02cb5.css \ No newline at end of file diff --git a/public/resources/stage/protyle/js/highlight.js/styles/vs.min.css b/public/resources/stage/protyle/js/highlight.js/styles/vs.min.css new file mode 100644 index 00000000..f9cc0787 --- /dev/null +++ b/public/resources/stage/protyle/js/highlight.js/styles/vs.min.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/public/resources/stage/protyle/js/highlight.js/styles/vs2015.min.css b/public/resources/stage/protyle/js/highlight.js/styles/vs2015.min.css new file mode 100644 index 00000000..ec049344 --- /dev/null +++ b/public/resources/stage/protyle/js/highlight.js/styles/vs2015.min.css @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta .hljs-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%} \ No newline at end of file diff --git a/siyuan/i18n/en_US.json b/siyuan/i18n/en_US.json index 24b15b1c..fe1adee8 100644 --- a/siyuan/i18n/en_US.json +++ b/siyuan/i18n/en_US.json @@ -3,5 +3,6 @@ "showHome": "Show home", "home": "Home", "setting": "Setting", - "shareOptions": "Share options" + "shareOptions": "Share options", + "browserOpen": "Open current page" } \ No newline at end of file diff --git a/siyuan/i18n/zh_CN.json b/siyuan/i18n/zh_CN.json index 44649892..ea4c9710 100644 --- a/siyuan/i18n/zh_CN.json +++ b/siyuan/i18n/zh_CN.json @@ -1,7 +1,8 @@ { "siyuanBlog": "在线分享", - "showHome": "显示主页", + "showHome": "打开主页", "home": "主页", "setting": "设置", - "shareOptions": "分享选项" + "shareOptions": "分享选项", + "browserOpen": "打开当前页" } \ No newline at end of file diff --git a/siyuan/topbar.ts b/siyuan/topbar.ts index 050e4286..81e1e8ab 100644 --- a/siyuan/topbar.ts +++ b/siyuan/topbar.ts @@ -25,6 +25,8 @@ import SiyuanBlog from "./index" import { icons } from "./utils/svg" import { Dialog, Menu } from "siyuan" +import PageUtil from "~/siyuan/utils/pageUtil" +import {getAvailableOrigin} from "~/siyuan/utils/utils"; /** * 顶栏按钮 @@ -75,7 +77,21 @@ const initContextMenu = async (pluginInstance: SiyuanBlog, rect: DOMRect) => { label: pluginInstance.i18n.showHome, click: () => { const blogIndex = "/plugins/siyuan-blog/#/" - showPage(pluginInstance, blogIndex, pluginInstance.i18n.home) + const origin = getAvailableOrigin() + // showPage(pluginInstance, blogIndex, pluginInstance.i18n.home) + window.open(`${origin}${blogIndex}`) + }, + }) + + menu.addSeparator() + menu.addItem({ + iconHTML: `${icons.iconBrowser}`, + label: pluginInstance.i18n.browserOpen, + click: () => { + const pageId = PageUtil.getPageId() + const blogIndex = `/plugins/siyuan-blog/#/s/${pageId}` + const origin = getAvailableOrigin() + window.open(`${origin}${blogIndex}`) }, }) diff --git a/siyuan/utils/svg.ts b/siyuan/utils/svg.ts index 98ea3388..da099205 100644 --- a/siyuan/utils/svg.ts +++ b/siyuan/utils/svg.ts @@ -26,4 +26,5 @@ export const icons = { iconTopbar: ``, iconSetting: ``, iconHome: ``, + iconBrowser: ``, } diff --git a/siyuan/utils/utils.ts b/siyuan/utils/utils.ts new file mode 100644 index 00000000..b3cd9346 --- /dev/null +++ b/siyuan/utils/utils.ts @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +const getAvailableIP = (ips: string[]): string | null => { + const localIPs = ips.filter((ip) => ip !== "127.0.0.1") + return localIPs.length > 0 ? localIPs[0] : null +} + +const getLocalIp = () => { + const win = window as any + const ips = win.siyuan.config.localIPs + return getAvailableIP(ips) +} + +export const getAvailableOrigin = () => { + const win = window as any + const origin = win.location.origin + const localIp = getLocalIp() + if (localIp) { + return origin.replace(/(127.0.0.1|localhost)/, localIp) + } + return origin +}