From a24f28ce1181afb3938d79694fdc0416bc9d5073 Mon Sep 17 00:00:00 2001 From: Jesse James Isler Date: Mon, 27 Jun 2022 11:08:57 +0200 Subject: [PATCH] vault auto-backup: 27.06.2022 - 11:08:57 Affected files: .obsidian/appearance.json .obsidian/community-plugins.json .obsidian/graph.json .obsidian/plugins/obsidian-auto-link-title/main.js .obsidian/plugins/obsidian-auto-link-title/manifest.json .obsidian/plugins/obsidian-auto-link-title/styles.css .obsidian/plugins/obsidian-reading-time/main.js .obsidian/plugins/obsidian-reading-time/manifest.json .obsidian/plugins/obsidian-timestamper/data.json .obsidian/plugins/obsidian-timestamper/main.js .obsidian/plugins/obsidian-timestamper/manifest.json .obsidian/plugins/obsidian-timestamper/styles.css .obsidian/themes/Discordian.css .obsidian/workspace 2022-06-27.md Firmen/steinemann technology/Todos.md --- .obsidian/appearance.json | 3 +- .obsidian/community-plugins.json | 5 +- .obsidian/graph.json | 2 +- .../plugins/obsidian-auto-link-title/main.js | 440 ++ .../obsidian-auto-link-title/manifest.json | 10 + .../obsidian-auto-link-title/styles.css | 1 + .../plugins/obsidian-reading-time/main.js | 365 ++ .../obsidian-reading-time/manifest.json | 10 + .../plugins/obsidian-timestamper/data.json | 6 + .../plugins/obsidian-timestamper/main.js | 221 + .../obsidian-timestamper/manifest.json | 10 + .../plugins/obsidian-timestamper/styles.css | 33 + .obsidian/themes/Discordian.css | 4174 +++++++++++++++++ .obsidian/workspace | 67 +- 2022-06-27.md | 4 + Firmen/steinemann technology/Todos.md | 1 + 16 files changed, 5316 insertions(+), 36 deletions(-) create mode 100644 .obsidian/plugins/obsidian-auto-link-title/main.js create mode 100644 .obsidian/plugins/obsidian-auto-link-title/manifest.json create mode 100644 .obsidian/plugins/obsidian-auto-link-title/styles.css create mode 100644 .obsidian/plugins/obsidian-reading-time/main.js create mode 100644 .obsidian/plugins/obsidian-reading-time/manifest.json create mode 100644 .obsidian/plugins/obsidian-timestamper/data.json create mode 100644 .obsidian/plugins/obsidian-timestamper/main.js create mode 100644 .obsidian/plugins/obsidian-timestamper/manifest.json create mode 100644 .obsidian/plugins/obsidian-timestamper/styles.css create mode 100644 .obsidian/themes/Discordian.css diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index ad48a95..cbaa3e2 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1,3 +1,4 @@ { - "translucency": false + "translucency": false, + "cssTheme": "Discordian" } \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 31902b1..297fa8f 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -3,5 +3,8 @@ "table-editor-obsidian", "obsidian-image-toolkit", "calendar", - "meld-encrypt" + "meld-encrypt", + "obsidian-auto-link-title", + "obsidian-reading-time", + "obsidian-timestamper" ] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 356816f..003da19 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -25,6 +25,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.28165328146789403, + "scale": 0.28165328146789415, "close": true } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-auto-link-title/main.js b/.obsidian/plugins/obsidian-auto-link-title/main.js new file mode 100644 index 0000000..226554b --- /dev/null +++ b/.obsidian/plugins/obsidian-auto-link-title/main.js @@ -0,0 +1,440 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +const DEFAULT_SETTINGS = { + regex: /^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})$/i, + lineRegex: /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi, + linkRegex: /^\[([^\[\]]*)\]\((https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})\)$/i, + linkLineRegex: /\[([^\[\]]*)\]\((https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})\)/gi, + imageRegex: /\.(gif|jpe?g|tiff?|png|webp|bmp|tga|psd|ai)$/i, + shouldReplaceSelection: true, + enhanceDefaultPaste: true, +}; +class AutoLinkTitleSettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + new obsidian.Setting(containerEl) + .setName("Enhance Default Paste") + .setDesc("Fetch the link title when pasting a link in the editor with the default paste command") + .addToggle((val) => val + .setValue(this.plugin.settings.enhanceDefaultPaste) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + console.log(value); + this.plugin.settings.enhanceDefaultPaste = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Replace Selection") + .setDesc("Whether to replace a text selection with link and fetched title") + .addToggle((val) => val + .setValue(this.plugin.settings.shouldReplaceSelection) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + console.log(value); + this.plugin.settings.shouldReplaceSelection = value; + yield this.plugin.saveSettings(); + }))); + } +} + +class EditorExtensions { + static getSelectedText(editor) { + if (!editor.somethingSelected()) { + let wordBoundaries = this.getWordBoundaries(editor); + editor.setSelection(wordBoundaries.start, wordBoundaries.end); + } + return editor.getSelection(); + } + static cursorWithinBoundaries(cursor, match) { + let startIndex = match.index; + let endIndex = match.index + match[0].length; + return startIndex <= cursor.ch && cursor.ch <= endIndex; + } + static getWordBoundaries(editor) { + let cursor = editor.getCursor(); + // If its a normal URL token this is not a markdown link + // In this case we can simply overwrite the link boundaries as-is + let lineText = editor.getLine(cursor.line); + // First check if we're in a link + let linksInLine = lineText.matchAll(DEFAULT_SETTINGS.linkLineRegex); + for (let match of linksInLine) { + if (this.cursorWithinBoundaries(cursor, match)) { + return { + start: { line: cursor.line, ch: match.index }, + end: { line: cursor.line, ch: match.index + match[0].length }, + }; + } + } + // If not, check if we're in just a standard ol' URL. + let urlsInLine = lineText.matchAll(DEFAULT_SETTINGS.lineRegex); + for (let match of urlsInLine) { + if (this.cursorWithinBoundaries(cursor, match)) { + return { + start: { line: cursor.line, ch: match.index }, + end: { line: cursor.line, ch: match.index + match[0].length }, + }; + } + } + return { + start: cursor, + end: cursor, + }; + } + static getEditorPositionFromIndex(content, index) { + let substr = content.substr(0, index); + let l = 0; + let offset = -1; + let r = -1; + for (; (r = substr.indexOf("\n", r + 1)) !== -1; l++, offset = r) + ; + offset += 1; + let ch = content.substr(offset, index - offset).length; + return { line: l, ch: ch }; + } +} + +class CheckIf { + static isMarkdownLinkAlready(editor) { + let cursor = editor.getCursor(); + // Check if the characters before the url are ]( to indicate a markdown link + var titleEnd = editor.getRange({ ch: cursor.ch - 2, line: cursor.line }, { ch: cursor.ch, line: cursor.line }); + return titleEnd == "]("; + } + static isAfterQuote(editor) { + let cursor = editor.getCursor(); + // Check if the characters before the url are " or ' to indicate we want the url directly + // This is common in elements like + var beforeChar = editor.getRange({ ch: cursor.ch - 1, line: cursor.line }, { ch: cursor.ch, line: cursor.line }); + return beforeChar == "\"" || beforeChar == "'"; + } + static isUrl(text) { + let urlRegex = new RegExp(DEFAULT_SETTINGS.regex); + return urlRegex.test(text); + } + static isImage(text) { + let imageRegex = new RegExp(DEFAULT_SETTINGS.imageRegex); + return imageRegex.test(text); + } + static isLinkedUrl(text) { + let urlRegex = new RegExp(DEFAULT_SETTINGS.linkRegex); + return urlRegex.test(text); + } +} + +const electronPkg = require("electron"); +function blank(text) { + return text === undefined || text === null || text === ""; +} +function notBlank(text) { + return !blank(text); +} +// async wrapper to load a url and settle on load finish or fail +function load(window, url) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + window.webContents.on("did-finish-load", (event) => resolve(event)); + window.webContents.on("did-fail-load", (event) => reject(event)); + window.loadURL(url); + }); + }); +} +function electronGetPageTitle(url) { + return __awaiter(this, void 0, void 0, function* () { + const { remote } = electronPkg; + const { BrowserWindow } = remote; + try { + const window = new BrowserWindow({ + width: 1000, + height: 600, + webPreferences: { + webSecurity: false, + nodeIntegration: true, + images: false, + }, + show: false, + }); + yield load(window, url); + try { + const title = window.webContents.getTitle(); + window.destroy(); + if (notBlank(title)) { + return title; + } + else { + return url; + } + } + catch (ex) { + return url; + } + } + catch (ex) { + console.error(ex); + return "Site Unreachable"; + } + }); +} +function nonElectronGetPageTitle(url) { + return __awaiter(this, void 0, void 0, function* () { + try { + const html = yield obsidian.request({ url }); + const doc = new DOMParser().parseFromString(html, "text/html"); + const title = doc.querySelectorAll("title")[0]; + if (title == null || blank(title === null || title === void 0 ? void 0 : title.innerText)) { + // If site is javascript based and has a no-title attribute when unloaded, use it. + var noTitle = title === null || title === void 0 ? void 0 : title.getAttr("no-title"); + if (notBlank(noTitle)) { + return noTitle; + } + // Otherwise if the site has no title/requires javascript simply return Title Unknown + return url; + } + return title.innerText; + } + catch (ex) { + console.error(ex); + return "Site Unreachable"; + } + }); +} +function getPageTitle(url) { + return __awaiter(this, void 0, void 0, function* () { + // If we're on Desktop use the Electron scraper + if (electronPkg != null) { + return electronGetPageTitle(url); + } + else { + return nonElectronGetPageTitle(url); + } + }); +} + +class AutoLinkTitle extends obsidian.Plugin { + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log("loading obsidian-auto-link-title"); + yield this.loadSettings(); + // Listen to paste event + this.pasteFunction = this.pasteUrlWithTitle.bind(this); + this.addCommand({ + id: "auto-link-title-paste", + name: "Paste URL and auto fetch title", + callback: () => { + this.manualPasteUrlWithTitle(); + }, + hotkeys: [], + }); + this.registerEvent(this.app.workspace.on("editor-paste", this.pasteFunction)); + this.addCommand({ + id: "enhance-url-with-title", + name: "Enhance existing URL with link and title", + callback: () => this.addTitleToLink(), + hotkeys: [ + { + modifiers: ["Mod", "Shift"], + key: "e", + }, + ], + }); + this.addSettingTab(new AutoLinkTitleSettingTab(this.app, this)); + }); + } + addTitleToLink() { + // Only attempt fetch if online + if (!navigator.onLine) + return; + let editor = this.getEditor(); + if (editor == null) + return; + let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim(); + // If the cursor is on a raw html link, convert to a markdown link and fetch title + if (CheckIf.isUrl(selectedText)) { + this.convertUrlToTitledLink(editor, selectedText); + } + // If the cursor is on the URL part of a markdown link, fetch title and replace existing link title + else if (CheckIf.isLinkedUrl(selectedText)) { + var link = this.getUrlFromLink(selectedText); + this.convertUrlToTitledLink(editor, link); + } + } + // Simulate standard paste but using editor.replaceSelection with clipboard text since we can't seem to dispatch a paste event. + manualPasteUrlWithTitle() { + return __awaiter(this, void 0, void 0, function* () { + let editor = this.getEditor(); + // Only attempt fetch if online + if (!navigator.onLine) { + editor.replaceSelection(clipboardText); + return; + } + var clipboardText = yield navigator.clipboard.readText(); + if (clipboardText == null || clipboardText == "") + return; + // If its not a URL, we return false to allow the default paste handler to take care of it. + // Similarly, image urls don't have a meaningful attribute so downloading it + // to fetch the title is a waste of bandwidth. + if (!CheckIf.isUrl(clipboardText) || CheckIf.isImage(clipboardText)) { + editor.replaceSelection(clipboardText); + return; + } + let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim(); + if (selectedText && !this.settings.shouldReplaceSelection) { + // If there is selected text and shouldReplaceSelection is false, do not fetch title + editor.replaceSelection(clipboardText); + return; + } + // If it looks like we're pasting the url into a markdown link already, don't fetch title + // as the user has already probably put a meaningful title, also it would lead to the title + // being inside the link. + if (CheckIf.isMarkdownLinkAlready(editor) || CheckIf.isAfterQuote(editor)) { + editor.replaceSelection(clipboardText); + return; + } + // At this point we're just pasting a link in a normal fashion, fetch its title. + this.convertUrlToTitledLink(editor, clipboardText); + return; + }); + } + pasteUrlWithTitle(clipboard) { + return __awaiter(this, void 0, void 0, function* () { + if (!this.settings.enhanceDefaultPaste) { + return; + } + // Only attempt fetch if online + if (!navigator.onLine) + return; + let editor = this.getEditor(); + let clipboardText = clipboard.clipboardData.getData("text/plain"); + if (clipboardText == null || clipboardText == "") + return; + // If its not a URL, we return false to allow the default paste handler to take care of it. + // Similarly, image urls don't have a meaningful <title> attribute so downloading it + // to fetch the title is a waste of bandwidth. + if (!CheckIf.isUrl(clipboardText) || CheckIf.isImage(clipboardText)) { + return; + } + let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim(); + if (selectedText && !this.settings.shouldReplaceSelection) { + // If there is selected text and shouldReplaceSelection is false, do not fetch title + return; + } + // We've decided to handle the paste, stop propagation to the default handler. + clipboard.stopPropagation(); + clipboard.preventDefault(); + // If it looks like we're pasting the url into a markdown link already, don't fetch title + // as the user has already probably put a meaningful title, also it would lead to the title + // being inside the link. + if (CheckIf.isMarkdownLinkAlready(editor) || CheckIf.isAfterQuote(editor)) { + editor.replaceSelection(clipboardText); + return; + } + // At this point we're just pasting a link in a normal fashion, fetch its title. + this.convertUrlToTitledLink(editor, clipboardText); + return; + }); + } + convertUrlToTitledLink(editor, url) { + return __awaiter(this, void 0, void 0, function* () { + // Generate a unique id for find/replace operations for the title. + const pasteId = `Fetching Title#${this.createBlockHash()}`; + // Instantly paste so you don't wonder if paste is broken + editor.replaceSelection(`[${pasteId}](${url})`); + // Fetch title from site, replace Fetching Title with actual title + const title = yield this.fetchUrlTitle(url); + const text = editor.getValue(); + const start = text.indexOf(pasteId); + if (start < 0) { + console.log(`Unable to find text "${pasteId}" in current editor, bailing out; link ${url}`); + } + else { + const end = start + pasteId.length; + const startPos = EditorExtensions.getEditorPositionFromIndex(text, start); + const endPos = EditorExtensions.getEditorPositionFromIndex(text, end); + editor.replaceRange(title, startPos, endPos); + } + }); + } + fetchUrlTitle(url) { + return __awaiter(this, void 0, void 0, function* () { + try { + const title = yield getPageTitle(url); + return title.replace(/(\r\n|\n|\r)/gm, "").trim(); + } + catch (error) { + // console.error(error) + return "Site Unreachable"; + } + }); + } + getEditor() { + let activeLeaf = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeLeaf == null) + return; + return activeLeaf.editor; + } + getUrlFromLink(link) { + let urlRegex = new RegExp(DEFAULT_SETTINGS.linkRegex); + return urlRegex.exec(link)[2]; + } + // Custom hashid by @shabegom + createBlockHash() { + let result = ""; + var characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + var charactersLength = characters.length; + for (var i = 0; i < 4; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; + } + onunload() { + console.log("unloading obsidian-auto-link-title"); + this.app.workspace.containerEl.removeEventListener("paste", this.pasteFunction, true); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + yield this.saveData(this.settings); + }); + } +} + +module.exports = AutoLinkTitle; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNldHRpbmdzLnRzIiwiZWRpdG9yLWVuaGFuY2VtZW50cy50cyIsImNoZWNraWYudHMiLCJzY3JhcGVyLnRzIiwibWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciLCJyZXF1ZXN0IiwiUGx1Z2luIiwiTWFya2Rvd25WaWV3Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FB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 diff --git a/.obsidian/plugins/obsidian-auto-link-title/manifest.json b/.obsidian/plugins/obsidian-auto-link-title/manifest.json new file mode 100644 index 0000000..30bdcd3 --- /dev/null +++ b/.obsidian/plugins/obsidian-auto-link-title/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-auto-link-title", + "name": "Auto Link Title", + "version": "1.2.5", + "minAppVersion": "0.12.17", + "description": "This plugin automatically fetches the titles of links from the web", + "author": "Matt Furden", + "authorUrl": "https://github.com/zolrath", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-auto-link-title/styles.css b/.obsidian/plugins/obsidian-auto-link-title/styles.css new file mode 100644 index 0000000..ad3bb8f --- /dev/null +++ b/.obsidian/plugins/obsidian-auto-link-title/styles.css @@ -0,0 +1 @@ +/* no styles */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-reading-time/main.js b/.obsidian/plugins/obsidian-reading-time/main.js new file mode 100644 index 0000000..3b83115 --- /dev/null +++ b/.obsidian/plugins/obsidian-reading-time/main.js @@ -0,0 +1,365 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key of __getOwnPropNames(module2)) + if (!__hasOwnProp.call(target, key) && key !== "default") + __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); + } + return target; +}; +var __toModule = (module2) => { + return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); +}; +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// node_modules/parse-ms/index.js +var require_parse_ms = __commonJS({ + "node_modules/parse-ms/index.js"(exports, module2) { + "use strict"; + module2.exports = (milliseconds) => { + if (typeof milliseconds !== "number") { + throw new TypeError("Expected a number"); + } + const roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil; + return { + days: roundTowardsZero(milliseconds / 864e5), + hours: roundTowardsZero(milliseconds / 36e5) % 24, + minutes: roundTowardsZero(milliseconds / 6e4) % 60, + seconds: roundTowardsZero(milliseconds / 1e3) % 60, + milliseconds: roundTowardsZero(milliseconds) % 1e3, + microseconds: roundTowardsZero(milliseconds * 1e3) % 1e3, + nanoseconds: roundTowardsZero(milliseconds * 1e6) % 1e3 + }; + }; + } +}); + +// node_modules/pretty-ms/index.js +var require_pretty_ms = __commonJS({ + "node_modules/pretty-ms/index.js"(exports, module2) { + "use strict"; + var parseMilliseconds = require_parse_ms(); + var pluralize = (word, count) => count === 1 ? word : `${word}s`; + var SECOND_ROUNDING_EPSILON = 1e-7; + module2.exports = (milliseconds, options = {}) => { + if (!Number.isFinite(milliseconds)) { + throw new TypeError("Expected a finite number"); + } + if (options.colonNotation) { + options.compact = false; + options.formatSubMilliseconds = false; + options.separateMilliseconds = false; + options.verbose = false; + } + if (options.compact) { + options.secondsDecimalDigits = 0; + options.millisecondsDecimalDigits = 0; + } + const result = []; + const floorDecimals = (value, decimalDigits) => { + const flooredInterimValue = Math.floor(value * 10 ** decimalDigits + SECOND_ROUNDING_EPSILON); + const flooredValue = Math.round(flooredInterimValue) / 10 ** decimalDigits; + return flooredValue.toFixed(decimalDigits); + }; + const add = (value, long, short, valueString) => { + if ((result.length === 0 || !options.colonNotation) && value === 0 && !(options.colonNotation && short === "m")) { + return; + } + valueString = (valueString || value || "0").toString(); + let prefix; + let suffix; + if (options.colonNotation) { + prefix = result.length > 0 ? ":" : ""; + suffix = ""; + const wholeDigits = valueString.includes(".") ? valueString.split(".")[0].length : valueString.length; + const minLength = result.length > 0 ? 2 : 1; + valueString = "0".repeat(Math.max(0, minLength - wholeDigits)) + valueString; + } else { + prefix = ""; + suffix = options.verbose ? " " + pluralize(long, value) : short; + } + result.push(prefix + valueString + suffix); + }; + const parsed = parseMilliseconds(milliseconds); + add(Math.trunc(parsed.days / 365), "year", "y"); + add(parsed.days % 365, "day", "d"); + add(parsed.hours, "hour", "h"); + add(parsed.minutes, "minute", "m"); + if (options.separateMilliseconds || options.formatSubMilliseconds || !options.colonNotation && milliseconds < 1e3) { + add(parsed.seconds, "second", "s"); + if (options.formatSubMilliseconds) { + add(parsed.milliseconds, "millisecond", "ms"); + add(parsed.microseconds, "microsecond", "\xB5s"); + add(parsed.nanoseconds, "nanosecond", "ns"); + } else { + const millisecondsAndBelow = parsed.milliseconds + parsed.microseconds / 1e3 + parsed.nanoseconds / 1e6; + const millisecondsDecimalDigits = typeof options.millisecondsDecimalDigits === "number" ? options.millisecondsDecimalDigits : 0; + const roundedMiliseconds = millisecondsAndBelow >= 1 ? Math.round(millisecondsAndBelow) : Math.ceil(millisecondsAndBelow); + const millisecondsString = millisecondsDecimalDigits ? millisecondsAndBelow.toFixed(millisecondsDecimalDigits) : roundedMiliseconds; + add(Number.parseFloat(millisecondsString, 10), "millisecond", "ms", millisecondsString); + } + } else { + const seconds = milliseconds / 1e3 % 60; + const secondsDecimalDigits = typeof options.secondsDecimalDigits === "number" ? options.secondsDecimalDigits : 1; + const secondsFixed = floorDecimals(seconds, secondsDecimalDigits); + const secondsString = options.keepDecimalsOnWholeSeconds ? secondsFixed : secondsFixed.replace(/\.0+$/, ""); + add(Number.parseFloat(secondsString, 10), "second", "s", secondsString); + } + if (result.length === 0) { + return "0" + (options.verbose ? " milliseconds" : "ms"); + } + if (options.compact) { + return result[0]; + } + if (typeof options.unitCount === "number") { + const separator = options.colonNotation ? "" : " "; + return result.slice(0, Math.max(options.unitCount, 1)).join(separator); + } + return options.colonNotation ? result.join("") : result.join(" "); + }; + } +}); + +// node_modules/reading-time/lib/reading-time.js +var require_reading_time = __commonJS({ + "node_modules/reading-time/lib/reading-time.js"(exports, module2) { + "use strict"; + function codeIsInRanges(number, arrayOfRanges) { + return arrayOfRanges.some(([lowerBound, upperBound]) => lowerBound <= number && number <= upperBound); + } + function isCJK(c) { + if (typeof c !== "string") { + return false; + } + const charCode = c.charCodeAt(0); + return codeIsInRanges(charCode, [ + [12352, 12447], + [19968, 40959], + [44032, 55203], + [131072, 191456] + ]); + } + function isAnsiWordBound(c) { + return " \n\r ".includes(c); + } + function isPunctuation(c) { + if (typeof c !== "string") { + return false; + } + const charCode = c.charCodeAt(0); + return codeIsInRanges(charCode, [ + [33, 47], + [58, 64], + [91, 96], + [123, 126], + [12288, 12351], + [65280, 65519] + ]); + } + function readingTime2(text, options = {}) { + let words = 0, start = 0, end = text.length - 1; + const wordsPerMinute = options.wordsPerMinute || 200; + const isWordBound = options.wordBound || isAnsiWordBound; + while (isWordBound(text[start])) + start++; + while (isWordBound(text[end])) + end--; + const normalizedText = `${text} +`; + for (let i = start; i <= end; i++) { + if (isCJK(normalizedText[i]) || !isWordBound(normalizedText[i]) && (isWordBound(normalizedText[i + 1]) || isCJK(normalizedText[i + 1]))) { + words++; + } + if (isCJK(normalizedText[i])) { + while (i <= end && (isPunctuation(normalizedText[i + 1]) || isWordBound(normalizedText[i + 1]))) { + i++; + } + } + } + const minutes = words / wordsPerMinute; + const time = Math.round(minutes * 60 * 1e3); + const displayed = Math.ceil(minutes.toFixed(2)); + return { + text: displayed + " min read", + minutes, + time, + words + }; + } + module2.exports = readingTime2; + } +}); + +// src/main.ts +__export(exports, { + default: () => ReadingTime +}); +var import_obsidian2 = __toModule(require("obsidian")); + +// src/settings.ts +var import_obsidian = __toModule(require("obsidian")); +var RT_DEFAULT_SETTINGS = { + readingSpeed: 200, + format: "default", + appendText: "read" +}; +var ReadingTimeSettingsTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + new import_obsidian.Setting(containerEl).setName("Reading speed").setDesc("Words per minute used for reading speed (default: 200).").addText((text) => { + text.setPlaceholder("Example: 200").setValue(this.plugin.settings.readingSpeed.toString()).onChange((value) => __async(this, null, function* () { + this.plugin.settings.readingSpeed = parseInt(value.trim()); + yield this.plugin.saveSettings().then(this.plugin.calculateReadingTime); + })); + }); + new import_obsidian.Setting(this.containerEl).setName("Format").setDesc("Choose the output format").addDropdown((dropdown) => dropdown.addOption("default", "Default (10 min)").addOption("compact", "Compact (10m)").addOption("simple", "Simple (10m 4s)").addOption("verbose", "Verbose (10 minutes 4 seconds)").addOption("digital", "Colon Notation (10:04)").setValue(this.plugin.settings.format).onChange((value) => __async(this, null, function* () { + this.plugin.settings.format = value; + yield this.plugin.saveSettings().then(this.plugin.calculateReadingTime); + }))); + new import_obsidian.Setting(this.containerEl).setName("Append Text").setDesc("Append 'read' to formatted string.").addText((text) => text.setValue(this.plugin.settings.appendText).onChange((value) => __async(this, null, function* () { + this.plugin.settings.appendText = value.trim(); + yield this.plugin.saveSettings().then(this.plugin.calculateReadingTime); + }))); + } +}; + +// src/helpers.ts +var import_pretty_ms = __toModule(require_pretty_ms()); +var ReadTime = require_reading_time(); +function readingTimeText(text, plugin) { + const result = ReadTime(text, { + wordsPerMinute: plugin.settings.readingSpeed + }); + let options = { + secondsDecimalDigits: 0 + }; + switch (plugin.settings.format) { + case "simple": + break; + case "compact": + if (result.time > 36e5) { + options.unitCount = 2; + } else { + options.compact = true; + } + break; + case "verbose": + options.verbose = true; + break; + case "digital": + options.colonNotation = true; + break; + case "default": + return plugin.settings.appendText ? result.text : result.text.replace(" read", ""); + } + let output = (0, import_pretty_ms.default)(result.time, options); + return plugin.settings.appendText ? `${output} ${plugin.settings.appendText}` : output; +} + +// src/main.ts +var ReadingTime = class extends import_obsidian2.Plugin { + constructor() { + super(...arguments); + this.calculateReadingTime = () => { + const mdView = this.app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView); + if (mdView && mdView.getViewData()) { + const result = readingTimeText(mdView.getViewData(), this); + this.statusBar.setText(`${result}`); + } else { + this.statusBar.setText("0 min read"); + } + }; + } + onload() { + return __async(this, null, function* () { + yield this.loadSettings(); + this.statusBar = this.addStatusBarItem(); + this.statusBar.setText(""); + this.addSettingTab(new ReadingTimeSettingsTab(this.app, this)); + this.addCommand({ + id: "reading-time-editor-command", + name: "Selected Text", + editorCallback: (editor, view) => { + new ReadingTimeModal(this.app, editor, this).open(); + } + }); + this.registerEvent(this.app.workspace.on("file-open", this.calculateReadingTime)); + this.registerEvent(this.app.workspace.on("editor-change", (0, import_obsidian2.debounce)(this.calculateReadingTime, 1e3))); + }); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign({}, RT_DEFAULT_SETTINGS, yield this.loadData()); + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } +}; +var ReadingTimeModal = class extends import_obsidian2.Modal { + constructor(app, editor, plugin) { + super(app); + this.editor = editor; + this.plugin = plugin; + } + onOpen() { + const { contentEl, titleEl } = this; + titleEl.setText("Reading Time of Selected Text"); + const stats = readingTime(this.editor.getSelection(), this.plugin); + contentEl.setText(`${stats} (at ${this.plugin.settings.readingSpeed} wpm)`); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; +/*! + * reading-time + * Copyright (c) Nicolas Gryman <ngryman@gmail.com> + * MIT Licensed + */ diff --git a/.obsidian/plugins/obsidian-reading-time/manifest.json b/.obsidian/plugins/obsidian-reading-time/manifest.json new file mode 100644 index 0000000..d0dca6c --- /dev/null +++ b/.obsidian/plugins/obsidian-reading-time/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-reading-time", + "name": "Reading Time", + "description": "Add the current note's reading time to Obsidian's status bar.", + "version": "1.1.1", + "minAppVersion": "0.12.17", + "isDesktopOnly": false, + "author": "avr", + "authorUrl": "https://github.com/avr" +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-timestamper/data.json b/.obsidian/plugins/obsidian-timestamper/data.json new file mode 100644 index 0000000..18326c5 --- /dev/null +++ b/.obsidian/plugins/obsidian-timestamper/data.json @@ -0,0 +1,6 @@ +{ + "timeStampFormat": "HH:mm:ss", + "dateStampFormat": "DD.MM.YYY", + "lastFormat": "", + "newLine": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-timestamper/main.js b/.obsidian/plugins/obsidian-timestamper/main.js new file mode 100644 index 0000000..11363dc --- /dev/null +++ b/.obsidian/plugins/obsidian-timestamper/main.js @@ -0,0 +1,221 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +/* Changelog: + * + * V1.0.0 - Initial version + * V1.1.0 - Migrated from dateformat to moment.js + * V1.2.0 - Introduced option for linebreak after insert + * + */ +const DEFAULT_SETTINGS = { + timeStampFormat: 'hh:mm:ss', + dateStampFormat: 'YYYY-MM-DD', + lastFormat: '', + newLine: false +}; +// logThreshold: 0 ... only error messages +// 9 ... verbose output +const logThreshold = 9; +const logger = (logString, logLevel = 0) => { if (logLevel <= logThreshold) + console.log('TimeStamper: ' + logString); }; +const version = '1.2.0-0001'; +class TimeStamperPlugin extends obsidian.Plugin { + onload() { + return __awaiter(this, void 0, void 0, function* () { + logger('Loading Plugin v' + version, 9); + yield this.loadSettings(); + this.addSettingTab(new TimeStamperSettingTab(this.app, this)); + this.addCommand({ + id: 'obsidian-custom-timestamp', + name: 'Insert custom time/date stamp', + editorCallback: (editor) => { + new TimeStamperModal(this.app, editor, this.settings, this).open(); + }, + }); + this.addCommand({ + id: 'obsidian-fast-timestamp', + name: 'Insert preconfigured time stamp', + editorCallback: (editor) => { + const now = new Date(); + const stamp = obsidian.moment(now).format(this.settings.timeStampFormat); + if (this.settings.newLine) { + editor.replaceSelection(stamp + '\n'); + logger('new line', 9); + } + else { + editor.replaceSelection(stamp); + logger('no new line'); + } + } + }); + this.addCommand({ + id: 'obsidian-fast-datestamp', + name: 'Insert preconfigured date stamp', + editorCallback: (editor) => { + const now = new Date(); + const stamp = obsidian.moment(now).format(this.settings.dateStampFormat); + if (this.settings.newLine) { + editor.replaceSelection(stamp + '\n'); + logger('new line', 9); + } + else { + editor.replaceSelection(stamp); + logger('no new line'); + } + } + }); + }); + } + onunload() { + logger('Bye!', 9); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + logger('Loading Settings...', 6); + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + logger('timeStampFormat: ' + this.settings.timeStampFormat, 9); + logger('dateStampFormat: ' + this.settings.dateStampFormat, 9); + logger('lastFormat: ' + this.settings.lastFormat, 9); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + logger('Saving Settings...', 9); + yield this.saveData(this.settings); + }); + } +} +class TimeStamperModal extends obsidian.Modal { + constructor(app, editor, settings, plugin) { + super(app); + this.editor = editor; + this.settings = settings; + this.plugin = plugin; + } + onOpen() { + const { contentEl, editor, modalEl } = this; + const rowClass = 'row'; + const divClass = 'div'; + modalEl.addClass('timestamper-modal'); + // Create label and text field + const containerEl = document.createElement(divClass); + containerEl.addClass(rowClass); + const targetEl = document.createElement(divClass); + targetEl.addClass('input-wrapper'); + const labelEl = document.createElement(divClass); + labelEl.addClass('input-label'); + labelEl.setText('Format string:'); + const formatComponent = new obsidian.TextComponent(targetEl); + formatComponent.setPlaceholder('e.g. YYYY-MM-DD'); + formatComponent.setValue(this.settings.lastFormat); + // Create Button + const buttonContainerEl = document.createElement(divClass); + buttonContainerEl.addClass(rowClass); + const submitButtonTarget = document.createElement(divClass); + submitButtonTarget.addClass('button-wrapper'); + const submitButtonComponent = new obsidian.ButtonComponent(submitButtonTarget); + submitButtonComponent.setButtonText('Insert Date/Time Stamp'); + submitButtonComponent.setCta(); + submitButtonComponent.onClick(() => { + const now = new Date(); + const stampFormat = formatComponent.getValue(); + const stamp = obsidian.moment(now).format(stampFormat); + if (this.settings.newLine) { + editor.replaceSelection(stamp + '\n'); + logger('new line', 9); + } + else { + editor.replaceSelection(stamp); + logger('no new line'); + } + this.settings.lastFormat = stampFormat; + this.plugin.saveData(this.settings); + this.close(); + }); + // Add components to layout + containerEl.appendChild(labelEl); + containerEl.appendChild(targetEl); + buttonContainerEl.appendChild(submitButtonTarget); + contentEl.append(containerEl); + contentEl.append(buttonContainerEl); + submitButtonComponent.buttonEl.focus(); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +} +class TimeStamperSettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + new obsidian.Setting(containerEl) + .setName('Date Stamp Template') + .setDesc('Template String for inserting a date stamp') + .addText(text => text + .setValue(this.plugin.settings.dateStampFormat) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + logger('Settings update: ' + value, 9); + this.plugin.settings.dateStampFormat = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName('Time Stamp Template') + .setDesc('Template String for inserting a time stamp') + .addText(text => text + .setValue(this.plugin.settings.timeStampFormat) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + logger('Settings update: ' + value, 9); + this.plugin.settings.timeStampFormat = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName('Insert line break') + .setDesc('Add a line break after the time/date stamp') + .addToggle(toggle => toggle + .setValue(this.plugin.settings.newLine) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.newLine = value; + yield this.plugin.saveSettings(); + }))); + } +} + +module.exports = TimeStamperPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiLyogQ2hhbmdlbG9nOlxuICpcbiAqIFYxLjAuMCAtIEluaXRpYWwgdmVyc2lvblxuICogVjEuMS4wIC0gTWlncmF0ZWQgZnJvbSBkYXRlZm9ybWF0IHRvIG1vbWVudC5qc1xuICogVjEuMi4wIC0gSW50cm9kdWNlZCBvcHRpb24gZm9yIGxpbmVicmVhayBhZnRlciBpbnNlcnRcbiAqIFxuICovXG5cbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnY2x1c3Rlcic7XG5pbXBvcnQge1xuXHRBcHAsXG5cdEJ1dHRvbkNvbXBvbmVudCxcblx0RWRpdG9yLFxuXHRNb2RhbCxcblx0UGx1Z2luLFxuXHRUZXh0Q29tcG9uZW50LFxuXHRQbHVnaW5TZXR0aW5nVGFiLFxuXHRTZXR0aW5nLFxuXHRtb21lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbnRlcmZhY2UgT3RzUGx1Z2luU2V0dGluZ3Mge1xuXHR0aW1lU3RhbXBGb3JtYXQ6IHN0cmluZztcblx0ZGF0ZVN0YW1wRm9ybWF0OiBzdHJpbmc7XG5cdGxhc3RGb3JtYXQ6IHN0cmluZztcblx0bmV3TGluZTogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogT3RzUGx1Z2luU2V0dGluZ3MgPSB7XG5cdHRpbWVTdGFtcEZvcm1hdDogJ2hoOm1tOnNzJyxcblx0ZGF0ZVN0YW1wRm9ybWF0OiAnWVlZWS1NTS1ERCcsXG5cdGxhc3RGb3JtYXQ6ICcnLFxuXHRuZXdMaW5lOiBmYWxzZVxufVxuXG4vLyBsb2dUaHJlc2hvbGQ6IDAgLi4uIG9ubHkgZXJyb3IgbWVzc2FnZXNcbi8vICAgICAgICAgICAgICAgOSAuLi4gdmVyYm9zZSBvdXRwdXRcbmNvbnN0IGxvZ1RocmVzaG9sZCA9IDk7XG5jb25zdCBsb2dnZXIgPSAobG9nU3RyaW5nOiBzdHJpbmcsIGxvZ0xldmVsPTApOiB2b2lkID0+IHtpZiAobG9nTGV2ZWwgPD0gbG9nVGhyZXNob2xkKSBjb25zb2xlLmxvZyAoJ1RpbWVTdGFtcGVyOiAnICsgbG9nU3RyaW5nKX07XG5jb25zdCB2ZXJzaW9uID0gJzEuMi4wLTAwMDEnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWVTdGFtcGVyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IE90c1BsdWdpblNldHRpbmdzO1xuXG5cdGFzeW5jIG9ubG9hZCgpIHtcblx0XHRsb2dnZXIoJ0xvYWRpbmcgUGx1Z2luIHYnICsgdmVyc2lvbiwgOSk7XG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcblxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgVGltZVN0YW1wZXJTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdvYnNpZGlhbi1jdXN0b20tdGltZXN0YW1wJyxcblx0XHRcdG5hbWU6ICdJbnNlcnQgY3VzdG9tIHRpbWUvZGF0ZSBzdGFtcCcsXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRuZXcgVGltZVN0YW1wZXJNb2RhbCh0aGlzLmFwcCwgZWRpdG9yLCB0aGlzLnNldHRpbmdzLCB0aGlzKS5vcGVuKCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiAnb2JzaWRpYW4tZmFzdC10aW1lc3RhbXAnLFxuXHRcdFx0bmFtZTogJ0luc2VydCBwcmVjb25maWd1cmVkIHRpbWUgc3RhbXAnLFxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3IpID0+IHtcblx0XHRcdFx0Y29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblx0XHRcdFx0Y29uc3Qgc3RhbXAgPSBtb21lbnQobm93KS5mb3JtYXQodGhpcy5zZXR0aW5ncy50aW1lU3RhbXBGb3JtYXQpO1xuXHRcdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5uZXdMaW5lKSB7XG5cdFx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oc3RhbXAgKyAnXFxuJyk7XG5cdFx0XHRcdFx0bG9nZ2VyKCduZXcgbGluZScsIDkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHN0YW1wKTtcblx0XHRcdFx0XHRsb2dnZXIoJ25vIG5ldyBsaW5lJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XG5cdFx0XHRpZDogJ29ic2lkaWFuLWZhc3QtZGF0ZXN0YW1wJyxcblx0XHRcdG5hbWU6ICdJbnNlcnQgcHJlY29uZmlndXJlZCBkYXRlIHN0YW1wJyxcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdGNvbnN0IHN0YW1wID0gbW9tZW50KG5vdykuZm9ybWF0KHRoaXMuc2V0dGluZ3MuZGF0ZVN0YW1wRm9ybWF0KTtcblx0XHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MubmV3TGluZSkge1xuXHRcdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHN0YW1wICsgJ1xcbicpO1xuXHRcdFx0XHRcdGxvZ2dlcignbmV3IGxpbmUnLCA5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihzdGFtcCk7XG5cdFx0XHRcdFx0bG9nZ2VyKCdubyBuZXcgbGluZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0fVxuXG5cdG9udW5sb2FkKCkge1xuXHRcdGxvZ2dlcignQnllIScsIDkpO1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xuXHRcdGxvZ2dlcignTG9hZGluZyBTZXR0aW5ncy4uLicsIDYpO1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuXHRcdGxvZ2dlcigndGltZVN0YW1wRm9ybWF0OiAnICsgdGhpcy5zZXR0aW5ncy50aW1lU3RhbXBGb3JtYXQsIDkpO1xuXHRcdGxvZ2dlcignZGF0ZVN0YW1wRm9ybWF0OiAnICsgdGhpcy5zZXR0aW5ncy5kYXRlU3RhbXBGb3JtYXQsIDkpO1xuXHRcdGxvZ2dlcignbGFzdEZvcm1hdDogICAgICAnICsgdGhpcy5zZXR0aW5ncy5sYXN0Rm9ybWF0LCA5KTtcblx0fVxuXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcblx0XHRsb2dnZXIoJ1NhdmluZyBTZXR0aW5ncy4uLicsIDkpO1xuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cdH1cblxufVxuXG5jbGFzcyBUaW1lU3RhbXBlck1vZGFsIGV4dGVuZHMgTW9kYWwge1xuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZWRpdG9yOiBFZGl0b3IsIHNldHRpbmdzOiBPdHNQbHVnaW5TZXR0aW5ncywgcGx1Z2luOiBQbHVnaW4pIHtcblx0XHRzdXBlcihhcHApO1xuXHRcdHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuXG5cdHNldHRpbmdzOiBPdHNQbHVnaW5TZXR0aW5ncztcblx0ZWRpdG9yOiBFZGl0b3I7XG5cdHBsdWdpbjogUGx1Z2luO1xuXG5cdG9uT3BlbigpIHtcblx0XHRjb25zdCB7IGNvbnRlbnRFbCwgZWRpdG9yLCBtb2RhbEVsIH0gPSB0aGlzO1xuXHRcdGNvbnN0IHJvd0NsYXNzID0gJ3Jvdyc7XG5cdFx0Y29uc3QgZGl2Q2xhc3MgPSAnZGl2JztcblxuXHRcdG1vZGFsRWwuYWRkQ2xhc3MoJ3RpbWVzdGFtcGVyLW1vZGFsJyk7XG5cdFxuXHRcdC8vIENyZWF0ZSBsYWJlbCBhbmQgdGV4dCBmaWVsZFxuXHRcdGNvbnN0IGNvbnRhaW5lckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3Mocm93Q2xhc3MpO1xuXG5cdFx0Y29uc3QgdGFyZ2V0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRpdkNsYXNzKTtcblx0XHR0YXJnZXRFbC5hZGRDbGFzcygnaW5wdXQtd3JhcHBlcicpO1xuXG5cdFx0Y29uc3QgbGFiZWxFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZGl2Q2xhc3MpO1xuXHRcdGxhYmVsRWwuYWRkQ2xhc3MoJ2lucHV0LWxhYmVsJyk7XG5cdFx0bGFiZWxFbC5zZXRUZXh0KCdGb3JtYXQgc3RyaW5nOicpO1xuXG5cdFx0Y29uc3QgZm9ybWF0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGFyZ2V0RWwpO1xuXHRcdGZvcm1hdENvbXBvbmVudC5zZXRQbGFjZWhvbGRlcignZS5nLiBZWVlZLU1NLUREJyk7XG5cdFx0Zm9ybWF0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMuc2V0dGluZ3MubGFzdEZvcm1hdCk7XG5cdFx0XG5cdFx0Ly8gQ3JlYXRlIEJ1dHRvblxuXHRcdGNvbnN0IGJ1dHRvbkNvbnRhaW5lckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0YnV0dG9uQ29udGFpbmVyRWwuYWRkQ2xhc3Mocm93Q2xhc3MpO1xuXG5cdFx0Y29uc3Qgc3VibWl0QnV0dG9uVGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkaXZDbGFzcyk7XG5cdFx0c3VibWl0QnV0dG9uVGFyZ2V0LmFkZENsYXNzKCdidXR0b24td3JhcHBlcicpO1xuXG5cdFx0Y29uc3Qgc3VibWl0QnV0dG9uQ29tcG9uZW50ID0gbmV3IEJ1dHRvbkNvbXBvbmVudChzdWJtaXRCdXR0b25UYXJnZXQpO1xuXHRcblx0XHRzdWJtaXRCdXR0b25Db21wb25lbnQuc2V0QnV0dG9uVGV4dCgnSW5zZXJ0IERhdGUvVGltZSBTdGFtcCcpO1xuXHRcdHN1Ym1pdEJ1dHRvbkNvbXBvbmVudC5zZXRDdGEoKTtcblx0XHRzdWJtaXRCdXR0b25Db21wb25lbnQub25DbGljaygoKSA9PiB7XG5cdFx0XHRjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3Qgc3RhbXBGb3JtYXQgPSBmb3JtYXRDb21wb25lbnQuZ2V0VmFsdWUoKTtcblx0XHRcdGNvbnN0IHN0YW1wID0gbW9tZW50KG5vdykuZm9ybWF0KHN0YW1wRm9ybWF0KTtcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLm5ld0xpbmUpIHtcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oc3RhbXAgKyAnXFxuJyk7XG5cdFx0XHRcdGxvZ2dlcignbmV3IGxpbmUnLCA5KTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihzdGFtcCk7XG5cdFx0XHRcdGxvZ2dlcignbm8gbmV3IGxpbmUnKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0dGhpcy5zZXR0aW5ncy5sYXN0Rm9ybWF0ID0gc3RhbXBGb3JtYXQ7XG5cdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0XHRcdHRoaXMuY2xvc2UoKTtcdFx0XHRcblx0XHR9KTtcblx0XHRcblx0XHQvLyBBZGQgY29tcG9uZW50cyB0byBsYXlvdXRcblx0XHRjb250YWluZXJFbC5hcHBlbmRDaGlsZChsYWJlbEVsKTtcblx0XHRjb250YWluZXJFbC5hcHBlbmRDaGlsZCh0YXJnZXRFbCk7XG5cdFx0YnV0dG9uQ29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoc3VibWl0QnV0dG9uVGFyZ2V0KTtcblxuXHRcdGNvbnRlbnRFbC5hcHBlbmQoY29udGFpbmVyRWwpO1xuXHRcdGNvbnRlbnRFbC5hcHBlbmQoYnV0dG9uQ29udGFpbmVyRWwpO1xuXG5cdFx0c3VibWl0QnV0dG9uQ29tcG9uZW50LmJ1dHRvbkVsLmZvY3VzKCk7XG5cdH1cblx0XG5cdG9uQ2xvc2UoKSB7XG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cdH1cbn1cblxuY2xhc3MgVGltZVN0YW1wZXJTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHBsdWdpbjogVGltZVN0YW1wZXJQbHVnaW47XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogVGltZVN0YW1wZXJQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHtjb250YWluZXJFbH0gPSB0aGlzO1xuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKCdEYXRlIFN0YW1wIFRlbXBsYXRlJylcblx0XHRcdC5zZXREZXNjKCdUZW1wbGF0ZSBTdHJpbmcgZm9yIGluc2VydGluZyBhIGRhdGUgc3RhbXAnKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlU3RhbXBGb3JtYXQpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRsb2dnZXIoJ1NldHRpbmdzIHVwZGF0ZTogJyArIHZhbHVlLCA5KTtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlU3RhbXBGb3JtYXQgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnVGltZSBTdGFtcCBUZW1wbGF0ZScpXG5cdFx0XHQuc2V0RGVzYygnVGVtcGxhdGUgU3RyaW5nIGZvciBpbnNlcnRpbmcgYSB0aW1lIHN0YW1wJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZVN0YW1wRm9ybWF0KVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0bG9nZ2VyKCdTZXR0aW5ncyB1cGRhdGU6ICcgKyB2YWx1ZSwgOSk7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZVN0YW1wRm9ybWF0ID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdCAgICAuc2V0TmFtZSgnSW5zZXJ0IGxpbmUgYnJlYWsnKVxuXHRcdFx0LnNldERlc2MoJ0FkZCBhIGxpbmUgYnJlYWsgYWZ0ZXIgdGhlIHRpbWUvZGF0ZSBzdGFtcCcpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0xpbmUpXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdMaW5lID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRcblx0fVxufSJdLCJuYW1lcyI6WyJQbHVnaW4iLCJtb21lbnQiLCJNb2RhbCIsIlRleHRDb21wb25lbnQiLCJCdXR0b25Db21wb25lbnQiLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdEcsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsS0FBSyxDQUFDLENBQUM7QUFDUDs7QUM3RUE7Ozs7Ozs7QUE0QkEsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDM0MsZUFBZSxFQUFFLFVBQVU7SUFDM0IsZUFBZSxFQUFFLFlBQVk7SUFDN0IsVUFBVSxFQUFFLEVBQUU7SUFDZCxPQUFPLEVBQUUsS0FBSztDQUNkLENBQUE7QUFFRDtBQUNBO0FBQ0EsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0s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 diff --git a/.obsidian/plugins/obsidian-timestamper/manifest.json b/.obsidian/plugins/obsidian-timestamper/manifest.json new file mode 100644 index 0000000..81aa61d --- /dev/null +++ b/.obsidian/plugins/obsidian-timestamper/manifest.json @@ -0,0 +1,10 @@ +{ + "author": "Martin Eder", + "authorUrl": "https://www.gruware.org", + "description": "Insert customized time/date stamp.", + "id": "obsidian-timestamper", + "isDesktopOnly": false, + "minAppVersion": "0.12.17", + "name": "TimeStamper", + "version": "1.2.0" +} diff --git a/.obsidian/plugins/obsidian-timestamper/styles.css b/.obsidian/plugins/obsidian-timestamper/styles.css new file mode 100644 index 0000000..9173070 --- /dev/null +++ b/.obsidian/plugins/obsidian-timestamper/styles.css @@ -0,0 +1,33 @@ +.timestamper-modal .modal-content .row { + display: flex; + align-items: center; + width: 100%; +} + + +.timestamper-modal .modal-content .row .input-label { + display: flex; + justify-content: flex-end; + height: 100%; +} + +.timestamper-modal .modal-content .row .input-wrapper { + display: flex; + align-items: center; + height: 100%; + width: 100%; + margin: 0; +} + + +.timestamper-modal .modal-content .row .input-wrapper input { + width: 100%; +} + + +.timestamper-modal .modal-content .button-wrapper { + display: flex; + justify-content: center; + width: 100%; + margin-top: 24px; +} diff --git a/.obsidian/themes/Discordian.css b/.obsidian/themes/Discordian.css new file mode 100644 index 0000000..eb4c2d9 --- /dev/null +++ b/.obsidian/themes/Discordian.css @@ -0,0 +1,4174 @@ +/*---------------------------------------------------------------- +DISCORDIAN THEME version 0.8.6 +----------------------------------------------------------------*/ + +:root { + --default-font: Catamaran, Helvetica Neue, Helvetica, Arial, sans-serif; + --font-editor: Catamaran SSm, Helvetica Neue, Helvetica, Arial, sans-serif; + --font-monospace: Consolas, Andale Mono, Lucida Console, Source Code Pro, iA Writer Mono S, Jetbrains Mono, Menlo, SFMono-Regular, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Monaco, Courier New, Courier, monospace; + + /* discord palette */ + --discord-green: hsla(153, 46%, 49%, 1); + --discord-yellow: hsla(38, 96%, 54%, 1); + --discord-yellow-alt: hsla(37, 65%, 63%, 1); + --discord-yellow-light: hsla(50, 42%, 48%, 1); + --discord-yellow-bg: hsla(38, 96%, 54%, 0.1); + --discord-orange: hsla(20, 84%, 52%, 1); + --discord-orange-light: hsla(24, 90%, 61%, 1); + --discord-red: hsla(0, 85%, 61%, 1); + --discord-red-hover: hsla(0, 66%, 55%, 1); + --discord-blue: hsla(227, 58%, 65%, 1); + --discord-blue-hover: hsla(227, 44%, 59%, 1); + --discord-grey: hsla(214, 10%, 50%, 1); + --discord-grey-hover: hsla(214, 10%, 45%, 1); + --discord-grey-toggle: hsla(218, 5%, 47%, 1); + --discord-dark: hsla(216, 7%, 14%, 1); + --discord-dark-hover: hsla(216, 7%, 14%, 0.7); + + --elevation-stroke: 0 1px 0 1px hsla(240, 11%, 2%, 0.1); + --elevation-low: 0 1px 0 hsla(240, 11%, 2%, 0.2), 0 1.5px 0 hsla(240, 8%, 3%, 0.05), 0 2px 0 hsla(240, 11%, 2%, 0.05); + --elevation-medium: 0 4px 4px hsla(0, 0%, 0%, 0.16); + --elevation-high: 0 8px 16px hsla(0, 0%, 0%, 0.24); + + --readable-line-length: 45rem; + --font-size-notes: 0.875rem; + --font-size-file-explorer: 0.875rem; + --letter-spacing-notes: -0.2px; +} + +.theme-dark { + --background-primary: hsla(220, 8%, 23%, 1); + --background-primary-alt: hsla(232, 14%, 31%, 1); + --background-secondary: hsla(223, 7%, 20%, 1); + --background-secondary-alt: hsla(216, 7%, 14%, 1); + --background-tertiary: hsla(220, 7%, 17%, 1); + + --background-accent: hsla(217, 8%, 34%, 1); + + --background-code: hsla(204, 6%, 17%, 1); + --background-code-preview: hsla(204, 6%, 17%, 1); + --background-code-border: hsla(0, 0%, 16%, 1); + + --background-modifier-cover: hsla(220, 8%, 23%, 1); + --background-modifier-hover: hsla(217, 8%, 34%, 0.16); + --background-modifier-active: hsla(217, 8%, 34%, 0.24); + --background-modifier-selected: hsla(217, 8%, 34%, 0.32); + --background-modifier-accent: hsla(0, 0%, 100%, 0.06); + --background-modifier-error: var(--discord-red); + --background-modifier-error-hover: var(--discord-red-hover); + --background-modifier-form-field: hsla(0, 0%, 0%, 0.2); + --background-modifier-form-field-highlighted: hsla(0, 0%, 0%, 0.2); + --background-modifier-border: var(--background-secondary-alt); + + --text-normal: hsla(213, 3%, 82%, 1); + --text-muted: hsla(213, 4%, 57%, 1); + --text-faint: hsla(0, 0%, 61%, 1); + --text-link: hsla(197, 100%, 48%, 1); + --text-accent: hsla(265, 66%, 72%, 1); + --text-on-accent: hsla(210, 3%, 87%, 1); + --text-selection: hsla(212, 34%, 54%, 0.5); + --text-highlight-bg: hsla(212, 34%, 54%, 1); + --text-linenumber: hsla(216, 3%, 32%, 0.85); + --text-linenumber-active: hsla(0, 0%, 61%, 0.85); + + --text-strong: var(--discord-yellow-alt); + --text-em: hsla(62, 31%, 61%, 1); + --text-tag: hsla(27, 100%, 63%, 0.73); + --text-mark: hsla(37, 82%, 74%, 1); + + --markup-code: hsla(34, 89%, 61%, 1); + + --text-header: hsla(233, 45%, 69%, 1); + + --text-title-h1: hsla(243, 35%, 65%, 1); + --text-title-h2: var(--text-header); + --text-title-h3: var(--text-header); + --text-title-h4: var(--text-header); + --text-title-h5: var(--text-header); + --text-title-h6: hsla(192, 13%, 53%, 1); + + --text-a: hsla(322, 65%, 70%, 1); + --text-a-hover: hsla(327, 100%, 77%, 1); + + --interactive-accent: var(--discord-green); + --interactive-accent-hover: hsla(152, 60%, 43%, 1); + --interactive-accent-light: var(--discord-yellow-light); + + --interactive-accent-alt: hsla(220, 7%, 17%, 1); + --interactive-hover: hsla(210, 3%, 87%, 1); + --interactive-muted: hsla(217, 8%, 34%, 1); + --interactive-normal: hsla(216, 4%, 74%, 1); + --interactive-active: hsla(0, 100%, 100%, 1); + + --blockquote-border: hsla(286, 22%, 66%, 1); + --blockquote-bg: hsla(240, 11%, 2%, 0.07); + + --scrollbar-bg: transparent; + --scrollbar-thin-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-thin-track: transparent; + --scrollbar-auto-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-auto-track: hsla(210, 10%, 20%, 1); + --scrollbar-auto-scrollbar-color-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-auto-scrollbar-color-track: hsla(223, 7%, 20%, 1); + + --cursor: default; + --opacity-translucency: 1; + + --graph-line: hsla(191, 57%, 35%, 1); + --graph-line-highlight: hsla(191, 57%, 59%, 1); + --graph-circle-outline: transparent; + --graph-circle-fill: hsla(59, 99%, 50%, 1); + --graph-circle-fill-highlight: hsla(59, 99%, 50%, 1); + --graph-circle-fill-unresolved: hsla(206, 89%, 71%, 1); + --graph-fill-tag: hsla(250, 100%, 77%, 1); + --graph-fill-attachment: hsla(314, 57%, 63%, 1); + --graph-arrow: hsla(314, 57%, 63%, 1); +} + +/* HACK for settings panel if title bar is brought back by user */ +body.theme-dark:not(.hider-frameless):not(.discordian-writer):not(.discordian-theme) .modal-container { + top: -22px !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +HIDDEN (comment in/out to toggle things) +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Hide main title bar */ + +.titlebar { + display: none; +} + +body { + padding-top: 0 !important; +} + +body:not(.mod-windows):not(.discordian-theme) .mod-left-split .workspace-tab-header-container { + padding-left: 24px !important; +} + +body:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px; + transition: padding-left .15s ease; +} + +body.hider-ribbon:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 62px; + transition: padding-left .15s ease; +} + +body.theme-dark:not(.hider-frameless):not(.discordian-writer):not(.discordian-theme) .modal-container, +body.theme-dark:not(.hider-frameless) .modal-container, +body.theme-dark:not(.discordian-writer) .modal-container, +body.theme-dark:not(.discordian-theme) .modal-container { + top: 0 !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +Hide status bar */ + +.status-bar { + display: none; +} + +/*---------------------------------------------------------------- +Hide the name of the root folder (vault) */ + +.nav-folder.mod-root > .nav-folder-title { + display: none; +} + +/*---------------------------------------------------------------- +FOUNDATION +----------------------------------------------------------------*/ + +/* font for everything outside of editor/preview panes */ +body, +.app-container { + font-size: 16px; + line-height: 22px !important; + font-family: var(--default-font); + color: var(--text-normal); + word-wrap: break-word; + text-rendering: optimizeLegibility; + vertical-align: baseline; + -webkit-font-feature-settings: "tnum"; + -moz-font-feature-settings: "tnum"; + font-feature-settings: "tnum"; + -webkit-font-variant-numeric: tabular-nums; + -moz-font-variant-numeric: tabular-nums; + font-variant-numeric: tabular-nums; + margin: 0 !important; +} + +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code, +.cm-s-obsidian .cm-formatting-hashtag, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .CodeMirror-linewidget kbd, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); + font-weight: normal; + color: var(--text-muted); + font-size: 100%; + letter-spacing: 0; +} + +button, +input[type="text"], +input[type="email"], +input[type="password"], +input[type="number"], +input[type='search'], +.splash-brand-name, +.dropdown, +.setting-hotkey, +.suggestion-hotkey { + font-family: var(--default-font) !important; + border-color: var(--background-secondary-alt) !important; + letter-spacing: -0.01rem; +} + +button { + -webkit-transition: background-color .17s ease, color .17s ease; + transition: background-color .17s ease, color .17s ease; +} + +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + font-size: 0.875rem; + color: var(--text-muted); + border-radius: 4px; + background-color: var(--discord-dark) !important; +} + +input[type='text']:focus-within, +input[type='search']:focus-within, +input[type='email']:focus-within, +input[type='password']:focus-within, +input[type='number']:focus-within { + color: var(--text-normal); +} + +ul li { + margin: 4px 0; +} + +p { + margin-block-start: 1.4375rem; + margin-block-end: 1.4375rem; +} + +.markdown-preview-pusher + div > p { + margin-block-start: 0; +} + +p.mod-warning { + color: var(--discord-red); +} + +.search-result-file-match::after { + background-color: var(--background-tertiary); +} + +/* Discord-like tooltip */ +.tooltip { + font-size: 1rem; + padding: 10px; +} + +/* html tags in editor */ +.cm-tag, +.cm-attribute { /* .cm-string */ + color: var(--text-muted) !important; +} + +/* horizontal line in preview */ +.markdown-preview-view hr { + background-color: var(--text-muted); + border: none; + height: 1px; + margin: 1.4375rem 0; +} + +/* internal embedded link rendering in preview */ +.markdown-embed-title { + font-weight: 600; + color: var(--text-link); +} + +.markdown-embed { + padding-left: 8px !important; + padding-right: 4px !important; + margin-left: 8px !important; + margin-right: 4px !important; +} + +/* NO FILE OPEN page */ + +.empty-state-title { + color: var(--discord-yellow-alt) !important; +} + +.empty-state-action { + color: var(--text-muted) !important; +} + +.empty-state-action:hover { + color: var(--text-normal) !important; +} + +/*---------------------------------------------------------------- +BLOCKQUOTES */ + +.cm-s-obsidian span.cm-quote { + color: var(--interactive-accent); +} + +.cm-hmd-indent-in-quote { + padding-left: 4px; +} + +.markdown-preview-view blockquote { + color: var(--interactive-accent) !important; + border: none; + border-left: 3px solid var(--blockquote-border) !important; + border-radius: 4px !important; + margin: 1.5rem 1.5rem 1.5rem 3.5rem; + background-color: var(--blockquote-bg); + display: grid; +} + +/*---------------------------------------------------------------- +IMAGES */ + +img { + display: block; + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Normal text outside of headings and code */ + +/* preview */ +.markdown-preview-view { + font-family: var(--font-editor); + color: var(--text-normal); + font-weight: 400; + font-size: var(--font-size-notes); + letter-spacing: var(--letter-spacing-notes); + line-height: 1.65 !important; + overflow-x: hidden; +} + +/* editor */ +.cm-s-obsidian { + font-family: var(--font-editor); + color: var(--text-normal); + font-weight: 400; + font-size: var(--font-size-notes); + letter-spacing: var(--letter-spacing-notes); + line-height: 1.65 !important; + + /* Editor font: make it thicker so it is like in Preview */ + -webkit-font-smoothing: subpixel-antialiased !important; +} + +/*---------------------------------------------------------------- +Bold */ + +strong { + color: var(--discord-yellow-alt); + font-weight: 600; +} + +.cm-s-obsidian .cm-strong { + color: var(--discord-yellow-alt); + font-weight: 600; +} + +/*---------------------------------------------------------------- +Italics */ + +em { + color: var(--text-em); +} + +.cm-em { + color: var(--text-em); +} + +.cm-formatting-em { + font-style: normal; +} + +.cm-em:not(.cm-formatting-em) { + margin-left: -1px; +} + +/*---------------------------------------------------------------- +Highlights */ + +.markdown-preview-view mark { + background-color: transparent !important; + -webkit-box-shadow: inset 0 -2px var(--discord-yellow-alt); + box-shadow: inset 0 -2px var(--discord-yellow-alt); + padding-bottom: 4px; +} + +.cm-s-obsidian span.cm-formatting-highlight, +.cm-s-obsidian span.cm-highlight { + background-color: unset; + -webkit-box-shadow: var(--discord-yellow-alt) 0 -2px 0 0 inset; + box-shadow: var(--discord-yellow-alt) 0 -2px 0 0 inset; + margin: 4px 0; + padding-bottom: 4px; +} + +.cm-s-obsidian span.cm-formatting-highlight { + color: var(--text-muted); +} + +mark > strong { + color: var(--discord-yellow-alt) !important; + font-weight: 500; + padding: 0 2px; +} + +/*---------------------------------------------------------------- +Popup notifications */ + +.notice { + color: var(--text-on-accent) !important; + background-color: var(--background-primary-alt) !important; +} + +/*---------------------------------------------------------------- +Dropdown */ + +.dropdown { + background-color: rgba(0, 0, 0, 0.1); + border: 1px solid rgba(32, 34, 37, 0.5) !important; + border-radius: 6px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='20' width='20' viewBox='0 0 20 20' focusable='false' stroke-width='px' fill='%23B9BBBE' class='dropdown-svg'%3E%3Cpath d='M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z'%3E%3C/path%3E%3C/svg%3E"); + background-repeat: no-repeat, repeat; + background-position: right 0.7em top 50%, 0 0; + background-size: 1.2em auto, 100%; + -webkit-transition: background-color .17s ease, color .17s ease; + transition: background-color .17s ease, color .17s ease; + outline: 0 !important; + cursor: pointer; +} + +.dropdown:hover { + background-color: var(--background-modifier-form-field); +} + +.dropdown:focus { + background-color: var(--background-modifier-form-field-highlighted); +} + +/*---------------------------------------------------------------- +Selections */ + +.markdown-preview-view .mod-highlighted { + background-color: var(--text-selection); + color: inherit; +} + +/* flashing and selections when searching */ +.is-flashing { + background-color: var(--text-highlight-bg); + transition: all 0.7s ease-in !important; +} + +/*---------------------------------------------------------------- +WYSIWYG + +This make switching between Editor and Preview seamless +but mostly in terms of size / width / margins and visual shifts +----------------------------------------------------------------*/ + +.CodeMirror-lines { + padding: 0 0 20px 0; +} + +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0; +} + +.cm-s-obsidian .CodeMirror-code { + padding-right: 0; +} + +.markdown-source-view, +.markdown-preview-view, +.markdown-source-view.mod-cm5 { + padding: 1.5rem 1.5rem 0 1.5rem; +} + +.CodeMirror, +.markdown-source-view.is-readable-line-width .CodeMirror, +.markdown-preview-section { + padding-left: 0; + padding-right: 0; + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Editor */ + +/* to be concise between Editor and Preview we need to account for scrollbar */ +.markdown-source-view.is-readable-line-width .CodeMirror, +.CodeMirror { + max-width: 100%; +} + +.markdown-source-view.is-readable-line-width .CodeMirror { + width: calc(var(--readable-line-length) + 16px); +} + +.discordian-writer-mode .markdown-source-view.is-readable-line-width .CodeMirror { + width: calc(var(--readable-line-length) + 0px); +} + +.CodeMirror-scroll { + padding-left: 4rem; + padding-right: 3rem; + margin-right: 0; + margin-bottom: 0; +} + +.CodeMirror-sizer { + margin-left: 0 !important; + border-right: 0 !important; +} + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view.is-readable-line-width .markdown-preview-sizer { + max-width: 100%; +} + +.markdown-preview-section > div { + padding-left: 4rem; + padding-right: 2rem; + margin: 0 auto 0 auto; + max-width: 100%; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section { + max-width: 100%; + width: var(--readable-line-length); +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section > div { + width: var(--readable-line-length); +} + +/*---------------------------------------------------------------- +HEADINGS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view h1, +.markdown-preview-view h2, +.markdown-preview-view h3, +.markdown-preview-view h4, +.markdown-preview-view h5, +.markdown-preview-view h6 { + font-weight: 600; + margin-block-start: 1em; + margin-block-end: 1em; + line-height: 125% !important; +} + +.markdown-preview-view h1 { + font-size: 2rem; + color: var(--text-title-h1); + margin-block-start: 0; + margin-block-end: 0; + margin-top: 0; +} + +.markdown-preview-view h2 { + font-size: 1.625rem; + color: var(--text-title-h2); +} + +.markdown-preview-view h3 { + font-size: 1.375rem; + color: var(--text-title-h3); +} + +.markdown-preview-view h4 { + font-size: 1.125rem; + color: var(--text-title-h4); +} + +.markdown-preview-view h5 { + font-size: 1.125rem; + color: var(--text-title-h5); +} + +.markdown-preview-view h6 { + font-size: 1rem; + color: var(--text-title-h6); +} + +/*---------------------------------------------------------------- +Editor */ + +.cm-formatting.cm-formatting-header.cm-header { + font-weight: 400; +} + +.cm-header-1, +.cm-header-2, +.cm-header-3, +.cm-header-4, +.cm-header-5, +.cm-header-6 { + font-weight: 600; + margin-block-start: 1em; + line-height: 125% !important; +} + +.cm-header-1 { + font-size: 2rem; + color: var(--text-title-h1); + margin-block-start: 0; +} + +.cm-header-2 { + font-size: 1.625rem; + color: var(--text-title-h2); +} + +.cm-header-3 { + font-size: 1.375rem; + color: var(--text-title-h3); +} + +.cm-header-4 { + font-size: 1.125rem; + color: var(--text-title-h4); +} + +.cm-header-5 { + font-size: 1.125rem; + color: var(--text-title-h5); +} + +.cm-header-6 { + font-size: 1rem; + color: var(--text-title-h6); +} + +.cm-s-obsidian span.cm-header-1.cm-footref, +.cm-s-obsidian span.cm-header-1.cm-blockid, +.cm-s-obsidian span.cm-header-2.cm-footref, +.cm-s-obsidian span.cm-header-2.cm-blockid, +.cm-s-obsidian span.cm-header-3.cm-footref, +.cm-s-obsidian span.cm-header-3.cm-blockid { + font-size: 1rem; + vertical-align: text-top; + margin-top: -1rem; +} + +.cm-s-obsidian span.cm-header-4.cm-footref, +.cm-s-obsidian span.cm-header-4.cm-blockid, +.cm-s-obsidian span.cm-header-5.cm-footref, +.cm-s-obsidian span.cm-header-5.cm-blockid, +.cm-s-obsidian span.cm-header-6.cm-footref, +.cm-s-obsidian span.cm-header-6.cm-blockid { + font-size: 0.75rem; + vertical-align: text-top; + margin-top: -0.75rem; +} + +.cm-s-obsidian pre.HyperMD-header { + padding-bottom: 0; + padding-left: 0 !important; +} + +.vertical-tab-content h1:first-child, +.vertical-tab-content h2:first-child, +.vertical-tab-content h3:first-child { + margin-block-start: 0; +} + +/*---------------------------------------------------------------- +Links in headers should be visually the same as normal headers +This is purely for visual aesthetics but makes sense when using +Bryan Jenks (@tallguyjenks) idea of self-correcting titles +*/ + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view h1 a.internal-link { + color: var(--text-title-h1); +} + +.markdown-preview-view h2 a.internal-link { + color: var(--text-title-h2); +} + +.markdown-preview-view h3 a.internal-link { + color: var(--text-title-h3); +} + +.markdown-preview-view h4 a.internal-link { + color: var(--text-title-h4); +} + +.markdown-preview-view h5 a.internal-link { + color: var(--text-title-h5); +} + +/*---------------------------------------------------------------- +Editor */ + +.cm-s-obsidian span.cm-formatting-link.cm-header-1, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-1 { + color: var(--text-title-h1); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-1:hover { + color: var(--text-title-h1); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-2, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-2 { + color: var(--text-title-h2); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-2:hover { + color: var(--text-title-h2); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-3, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-3 { + color: var(--text-title-h3); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-3:hover { + color: var(--text-title-h3); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-4, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-4 { + color: var(--text-title-h4); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-4:hover { + color: var(--text-title-h4); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-5, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-5 { + color: var(--text-title-h5); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-5:hover { + color: var(--text-title-h5); +} + +/*---------------------------------------------------------------- +Inline code in headers should respect header size +*/ + +.cm-s-obsidian span.cm-inline-code.cm-header-1:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-1 { + font-size: 2rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-2:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-2 { + font-size: 1.625rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-3:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-3 { + font-size: 1.375rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-4:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-4, +.cm-s-obsidian span.cm-inline-code.cm-header-5:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-5 { + font-size: 1.125rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-6:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-6 { + font-size: 1rem; +} + +.cm-s-obsidian span.cm-inline-code { + padding-bottom: 0; +} + +/*---------------------------------------------------------------- +POPOVERS +----------------------------------------------------------------*/ + +.menu, +div.popover.hover-popover, +.suggestion-container { + background-color: var(--background-secondary); + border-radius: 4px; + border: none !important; + min-width: 15rem; + font-family: var(--font-editor); + font-size: 15px !important; + -webkit-box-shadow: var(--elevation-stroke), var(--elevation-high); + box-shadow: var(--elevation-stroke), var(--elevation-high); +} + +/* Bigger popovers */ +div.popover.hover-popover { + width: 35rem; + max-height: 25rem; +} + +div.popover.hover-popover .markdown-preview-view { + font-size: 13px !important; +} + +div.popover.hover-popover .markdown-embed-content .markdown-preview-section { + padding: 1.5rem; +} + +.popover.hover-popover .markdown-embed { + height: 25rem; +} + +div.popover.hover-popover .markdown-preview-view h1 { + font-size: 1.375rem; +} + +div.popover.hover-popover .markdown-preview-view h2 { + font-size: 1.25rem; +} + +div.popover.hover-popover .markdown-preview-view h3 { + font-size: 1.125rem; +} + +div.popover.hover-popover .markdown-preview-view h4 { + font-size: 1rem; +} + +div.popover.hover-popover .markdown-preview-view h5, +div.popover.hover-popover .markdown-preview-view h6 { + font-size: 0.875rem; +} + +/*---------------------------------------------------------------- +SUGGESTIONS +----------------------------------------------------------------*/ + +.suggestion-item, +.suggestion-empty { + font-size: 15px; +} + +.suggestion .suggestion-item.is-selected { + background-color: var(--background-modifier-form-field-highlighted); + color: var(--text-on-accent); +} + +.suggestion-highlight { + color: var(--interactive-accent) !important; +} + +/*---------------------------------------------------------------- +SCROLLBARS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +theme-default thin scrollbars */ + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + border-color: var(--scrollbar-thin-track); + background-color: var(--background-secondary); + border: 2px solid var(--scrollbar-thin-track); +} + +::-webkit-scrollbar-thumb { + background-clip: padding-box; + border: 2px solid transparent; + border-radius: 4px; + background-color: var(--scrollbar-thin-thumb); + min-height: 40px; +} + +::-webkit-scrollbar-corner { + background-color: transparent; +} + +/* Clean up secondary scrollbar*/ +.CodeMirror-scroll::-webkit-scrollbar { + display: none !important; +} + +/*---------------------------------------------------------------- +scrollbars in editor & preview */ + +.mod-root { + scrollbar-width: auto; + scrollbar-color: var(--scrollbar-auto-scrollbar-color-thumb) var(--scrollbar-auto-scrollbar-color-track); +} + +.mod-root ::-webkit-scrollbar { + width: 16px !important; + height: 16px !important; +} + +.mod-root ::-webkit-scrollbar-track { + background-color: var(--scrollbar-auto-track); + border: 4px solid var(--background-primary); +} + +.mod-root ::-webkit-scrollbar-thumb, +.mod-root ::-webkit-scrollbar-track { + border: 4px solid transparent; + background-clip: padding-box; + border-radius: 8px; +} + +.mod-root ::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-auto-thumb); + min-height: 40px; +} + +.mod-root ::-webkit-scrollbar-corner { + background-color: transparent; +} + +/*---------------------------------------------------------------- +graph controls scrollbars */ + +.mod-root .graph-controls::-webkit-scrollbar { + width: 8px !important; + height: 8px !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-track { + border-color: var(--background-secondary-alt) !important; + background-color: var(--background-primary) !important; + border: 0 solid var(--scrollbar-thin-track) !important; + border-radius: 0 !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-thumb { + background-clip: padding-box !important; + border: 2px solid transparent !important; + border-radius: 0 !important; + background-color: var(--scrollbar-thin-thumb); + min-height: 40px !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-corner { + background-color: transparent !important; +} + +/*---------------------------------------------------------------- +codeblocks - scrollable content without horizontal scrollbar */ + +.markdown-preview-section pre::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.markdown-preview-section pre::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +/*---------------------------------------------------------------- +tables - scrollable content without horizontal scrollbar */ + +.CodeMirror-hscrollbar::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.CodeMirror-hscrollbar::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section { + overflow-x: auto; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +/*---------------------------------------------------------------- +WORKSPACE +----------------------------------------------------------------*/ + +.app-container { + border-top: 1px solid var(--background-tertiary) !important; +} + +.view-content { + height: calc(100% - 32px); +} + +.titlebar-button-container { + top: 0; +} + +.nav-action-button.is-active { + background-color: var(--interactive-accent-alt); + color: var(--text-on-accent); +} + +/* straight corners */ +.workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +.workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +.workspace-leaf-content { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} + +/*---------------------------------------------------------------- +Collapsed Ribbons */ + +.workspace-ribbon.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-right.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-left.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +/*---------------------------------------------------------------- +Tabs */ + +.workspace-tabs { + background-color: var(--background-secondary); + overflow: hidden; + padding: 0 0 1rem 0; + position: relative; +} + +.workspace-tab-header { + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.workspace-tab-header:hover { + color: var(--text-normal) !important; +} + +.workspace-tags, +.tag-container { + padding: 0; +} + +/*---------------------------------------------------------------- +Resize Handlers */ + +body.is-translucent { + background-color: var(--background-primary); +} + +.workspace-leaf-resize-handle, +.is-translucent .workspace-leaf-resize-handle { + background-color: var(--background-secondary); /*--background-secondary-alt*/ + margin: 0; +} + +.workspace-leaf-resize-handle:hover, +.is-translucent .workspace-leaf-resize-handle:hover { + background-color: var(--interactive-accent-light); +} + +/*---------------------------------------------------------------- +Split Mode */ + +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + width: 2px !important; +} + +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { + height: 2px; +} + +.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content { + padding-right: 0; +} + +.workspace-split.mod-vertical > .workspace-leaf { + padding-right: 0; +} + +.workspace-split.mod-root { + background-color: transparent !important; +} + +/* no animation for panels - feels more snappier */ +.workspace-split.mod-left-split, +.workspace-split.mod-right-split { + transition: none; +} + +.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content .view-content { + padding-right: 0; +} + +/*---------------------------------------------------------------- +Side Dock */ + +.side-dock-ribbon-action { + color: var(--text-muted) !important; +} + +.side-dock-ribbon-action:hover { + color: var(--text-normal) !important; +} + +.side-dock-ribbon-tab.is-active { + color: var(--interactive-accent) !important; +} + +.side-dock-ribbon-tab.is-active .side-dock-ribbon-tab-inner:hover { + color: #6272a4 !important; + background-color: var(--background-secondary); +} + +.side-dock-panels-container { + font-size: 13px !important; + background-color: var(--background-secondary-alt) !important; + color: var(--background-secondary-alt); +} + +/* side dock titles at top */ +.side-dock-title { + font-size: 20px !important; + font-weight: 800 !important; +} + +.side-dock-collapsible-section-header { + font-size: 14px; +} + +/* hover actions on side dock navigation */ +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-tab-inner:hover, +.side-dock-ribbon-action:hover, +.side-dock-ribbon-action.is-active:hover, +.nav-action-button:hover, +.side-dock-collapse-btn:hover { + color: var(--text-normal); +} + +/*---------------------------------------------------------------- +Navigation & File Explorer */ + +.nav-action-button { + margin-bottom: 5px; +} + +.nav-action-button svg { + width: 15px; +} + +.nav-header { + padding: 8px 20px 4px 20px; +} + +.nav-file-title, +.nav-folder-title { + cursor: var(--cursor); + align-items: baseline; + width: 100%; + vertical-align: middle; + line-height: 1.25; + border: 1px solid var(--background-secondary); +} + +.nav-file-title { + padding: 8px 10px 6px 10px; + margin-left: 10px; + margin-right: 10px; + font-family: var(--font-editor); + font-variant-numeric: tabular-nums !important; + font-size: var(--font-size-file-explorer); + border-radius: 4px; + color: var(--text-muted) !important; + background-color: var(--background-secondary); + display: inline-flex; + -webkit-font-feature-settings: "tnum" !important; + -moz-font-feature-settings: "tnum" !important; + font-feature-settings: "tnum" !important; + -webkit-font-variant-numeric: tabular-nums !important; + -moz-font-variant-numeric: tabular-nums !important; +} + +.nav-file-title:hover, +.nav-folder-title:hover { + color: var(--text-normal) !important; +} + +.nav-folder-title { + font-size: calc(var(--font-size-file-explorer) + 0.125rem); + color: var(--interactive-active) !important; + background-color: var(--background-secondary); + padding: 2px 10px 2px 22px; +} + +/*---------------------------------------------------------------- +Condense line spacing on file explorer title list. +Avoid character-level word breaks */ + +.nav-file-title-content, +.search-result-file-title { + padding-top: 0 !important; + padding-bottom: 0 !important; + line-height: normal !important; + word-break: keep-all; +} + +.nav-file-title-content, +.nav-folder-title-content { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} + +.nav-folder-title-content { + padding: 1px 4px; +} + +.nav-file-title-content { + width: 100%; +} + +.nav-files-container { + overflow-x: hidden !important; + padding-bottom: 25px; +} + +/* smaller & bold vault title */ +.nav-folder.mod-root > .nav-folder-title { + padding-left: 6px; + font-size: 14px; + font-weight: 600; + top: 0; + text-transform: uppercase; + letter-spacing: 1px; + cursor: default; + color: var(--text-accent) !important; +} + +.nav-file { + margin-right: 10px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title { + padding: 6px 10px 6px 10px; + margin-left: 0 !important; + margin-right: 10px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title > .nav-file-title-content { + padding: 2px 0; +} + +/*---------------------------------------------------------------- +Files & folders: active & hover */ + +.nav-file.is-active .nav-file-tag { + color: var(--text-normal); +} + +.nav-file-title.is-active::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='8' width='8'%3E%3Ccircle cx='4' cy='4' r='4' stroke='white' stroke-width='0' fill='white'/%3E%3C/svg%3E"); + position: absolute; + left: -4px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title.is-active::before { + content: none; +} + +.nav-file-title.is-active, +.nav-folder-title.is-active, +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + border-radius: 4px; +} + +body:not(.is-grabbing) .nav-folder-title:hover { + color: var(--interactive-active) !important; +} + +.nav-folder.mod-root > .nav-folder-title:hover { + color: var(--text-accent) !important; +} + +.nav-file-title.is-active, +.nav-folder-title.is-active { + background-color: var(--background-primary); +} + +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + background-color: var(--background-modifier-hover); +} + +body:not(.is-grabbing) .nav-file-title.is-active, +body:not(.is-grabbing) .nav-file-title.is-active:hover { + background-color: var(--background-primary); + color: var(--text-normal) !important; +} + +.nav-folder-collapse-indicator { + background-color: transparent !important; +} + +.collapse-icon svg { + height: 12px; +} + +.nav-file-tag { + background-color: var(--background-secondary-alt); + top: -1px; + margin-left: 0; +} + +.nav-file-tag + .nav-file-title-content { + margin-left: 4px; +} + +/*---------------------------------------------------------------- +Search */ + +.search-result { + margin-bottom: 0; +} + +.search-result-file-title { + color: var(--text-a) !important; + background-color: var(--background-secondary); + font-weight: 400; +} + +.search-result-file-title:hover { + background-color: var(--background-secondary); +} + +.search-result-file-matches { + font-size: 13px; + line-height: 16px; + margin-right: 5px; + border-bottom: 0; +} + +.search-result-file-match::before { + display: none; +} + +.search-result-file-match:not(:first-child) { + margin-top: 0; +} + +.search-result-file-match { + line-height: normal !important; + word-break: keep-all; + left: 0; + width: 100%; + padding-top: 4px !important; + padding-bottom: 4px !important; +} + +.search-result-file-match:hover { + background-color: var(--background-tertiary); +} + +.search-result-file-matched-text { + background-color: var(--text-selection); +} + +.search-result-collapse-indicator { + top: -5px !important; +} + +.search-result-file-match-replace-button { + color: var(--text-on-accent); + top: 3px; + right: 8px; + opacity: 0.8; + font-size: .625rem; + text-transform: uppercase; + background-color: var(--interactive-accent) !important; + height: .9375rem; + padding: 0 .275rem; + margin-top: .075em; + border-radius: .1875rem; + letter-spacing: 1px; +} + +.tree-item-self .collapse-icon { + margin-top: -1px; +} + +.tree-item-flair { + background-color: unset; +} + +.tree-item-self .tree-item-flair { + font-family: var(--font-editor); + font-size: 0.6875rem; +} + +.tree-item-self:hover .tree-item-flair { + background-color: unset; + color: var(--text-a); +} + +.backlink-pane .tree-item-inner { + font-size: 0.875rem; +} + +.backlink-pane > .tree-item-self:hover .tree-item-flair { + color: var(--text-normal); +} + +.tag-container .tree-item-self:hover .tree-item-flair { + color: var(--text-normal); +} + +.tree-item-children { + margin-left: 15px; +} + +/* search count boxes */ +.search-result-count { + font-family: var(--font-monospace); + letter-spacing: 0; +} + +.search-result-file-title .pane-list-item-ending-flair { + position: absolute; + top: 1px; + font-size: 12px; + background-color: var(--background-secondary-alt); + line-height: 12px; + border-radius: 3px; +} + +/* clean up side bar empty state (e.g. unlinked mentions) */ +.search-empty-state { + width: auto; + padding-left: 15px; + padding-right: 15px; + line-height: normal; + font-size: 0.875rem; + color: var(--discord-red-hover); +} + +/*---------------------------------------------------------------- +Header */ + +.workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header { + border-bottom: 0; + background-color: var(--background-primary); +} + +.view-header { + height: 30px; + border-top: 0; + border-bottom: 0; + background-color: var(--background-primary); +} + +.view-header::before { + content: ""; + position: absolute; + display: block; + left: 0; + right: 0; + top: 28px; + height: 1px; + -webkit-box-shadow: var(--elevation-low) !important; + box-shadow: var(--elevation-low) !important; + z-index: 1; + pointer-events: none; +} + +.view-header-title { + font-size: 13px; + line-height: 32px; + font-family: var(--font-editor) !important; +} + +.view-header-title-container { + position: relative; +} + +.workspace-leaf.mod-active .view-header { + background-color: var(--background-primary); + border-bottom: 2px solid var(--discord-yellow-light); +} + +/* fix the long-title-obscuring shadows */ +.workspace-leaf.mod-active .view-header-title-container::after, +.view-header-title-container::after { + content: ' '; + position: absolute; + top: 0; + right: 0; + height: 28px; + background: linear-gradient(to right, transparent, var(--background-primary)) !important; /* rgb(51,53,59) */ +} + +.view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-primary)) !important; +} + +/* Change color of note title active pane */ +.workspace-leaf.mod-active .view-header-title { + color: var(--text-normal); +} + +.workspace-leaf-content .view-content, +.workspace-leaf-content[data-type='tag'] { + padding: 10px; +} + +.item-list { + overflow-x: hidden; +} + +.view-header-icon { + top: 0 !important; +} + +/*---------------------------------------------------------------- +View Actions */ + +.view-action { + top: 0; + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.view-action:hover, +.view-action.is-active { + color: var(--text-normal) !important; +} + +.view-actions { + padding: 5px 10px; + margin-left: auto; +} + +.view-action.mod-close-leaf > svg { + margin-top: 1px; +} + +.view-action.mod-pin-leaf > svg { + height: 15px; +} + +/* icons at top of panes */ +.file-view-actions a { + color: var(--text-muted) !important; +} + +.file-view-actions a:hover { + color: var(--text-muted) !important; +} + +/*---------------------------------------------------------------- +Top Window Frame */ + +.titlebar { + background: var(--background-primary); +} + +.titlebar-text { + display: none; + color: var(--text-faint); + letter-spacing: inherit; +} + +.titlebar-button { + opacity: 1; + cursor: var(--cursor); +} + +.titlebar-button svg path { + fill: var(--text-muted) !important; + stroke: var(--text-muted) !important; +} + +.titlebar-button:hover svg path { + fill: var(--text-normal) !important; + stroke: var(--text-normal) !important; +} + +/*---------------------------------------------------------------- +Status Bar */ + +.status-bar { + border-top: 0; + background-color: var(--background-secondary-alt) !important; + color: var(--text-faint); + padding: 0 4em 0 0; +} + +.status-bar-item { + padding: 0 5px; + font-size: 13px; +} + +.status-bar-item-segment { + margin-right: 1rem; +} + +/*---------------------------------------------------------------- +LISTS +----------------------------------------------------------------*/ + +ul { + padding-inline-start: 2em; + list-style: none; + list-style-type: none; +} + +ul ul, +ol ul, +ol ol ul, +ol ul ul, +ul ol ul, +ul ul ul { + list-style: none; + list-style-type: none; +} + +ul > li:not(.task-list-item)::before { + content: "\2022"; + color: var(--text-faint); + font-weight: 400; + display: inline-block; + width: 1em; + margin-left: -1em; +} + +ul li p, +ol li p { + display: inline; +} + +ol { + padding-inline-start: 1rem; + margin-left: 1rem; + list-style: none; + counter-reset: counter; + position: relative; +} + +ol > li { + counter-increment: counter; + margin: 0.3rem 0 0.3rem 0; +} + +ol > li::before { + content: counter(counter) ". "; + color: var(--text-faint); + position: absolute; + text-align: right; + left: -1.25rem; + width: 2rem; +} + +.markdown-preview-section > ul.contains-task-list { + margin-block-end: 2rem; +} + +/*---------------------------------------------------------------- +TASK LISTS +----------------------------------------------------------------*/ + +input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + padding: 0; + cursor: pointer; + background-color: var(--background-primary); + border: 1px solid var(--text-faint); + border-radius: 3px; +} + +input[type=checkbox]:focus, +input[type=checkbox]:hover { + outline: 0; + border-color: var(--text-faint); +} + +input[type=checkbox]:checked { + background-color: var(--discord-blue) !important; + border: 1px solid var(--discord-blue); + background-position: center; + background-size: 70%; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' aria-hidden='true' focusable='false' width='1em' height='1em' style='-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);' preserveAspectRatio='xMidYMid meet' viewBox='0 0 20 20'%3E%3Cpath d='M0 11l2-2l5 5L18 3l2 2L7 18z' fill='%23fff'/%3E%3C/svg%3E"); +} + +/*---------------------------------------------------------------- +Preview Mode */ + +.markdown-preview-view .task-list-item-checkbox { + top: 8px; + width: calc(var(--font-size-notes) + 0.375rem); + height: calc(var(--font-size-notes) + 0.375rem); + margin-left: -0.2rem; + margin-right: 0.5rem; + filter: none; +} + +ul.contains-task-list li > div.list-collapse-indicator { + margin-top: 0.5rem; + padding: 0; +} + +ul.contains-task-list li { + margin: 0; +} + +/*---------------------------------------------------------------- +Smart Visual Task Lists ALSO in Editor Mode ! (HACKISH) + +This works properly only with "Smart Indent List" setting enabled +as it produces checkboxes automatically when entering next line. +Best combined with "Toggle checklist status" command shortcut. + +FOR DEFAULT BEHAVIOUR PLEASE REMOVE THIS WHOLE SECTION TILL END */ + +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-list { + margin: 0; +} + +.discordian-pretty-tasks-editor .cm-s-obsidian pre.HyperMD-list-line { + padding-top: 0; +} + +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-task { + white-space: pre; + text-align: center; + color: transparent; + font-size: calc(0.7 * calc(var(--font-size-notes) + 0.125rem)); + line-height: 2rem; + background-color: var(--background-primary); + font-family: var(--default-font); + margin-left: -0.8rem; + padding-bottom: 0.1rem; +} + +.discordian-pretty-tasks-editor .cm-formatting-task { + border: 1px solid var(--text-faint); + border-radius: 3px; + padding: 0; +} + +/* HACK: makes unchecked task same size as checked one */ +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-task::after { + content: '\0020\0020\0020\0020'; + color: transparent; +} + +.discordian-pretty-tasks-editor input[type=checkbox]:checked, +.discordian-pretty-tasks-editor .cm-formatting-task.cm-property { + background-color: var(--discord-blue) !important; + border: 1px solid var(--discord-blue); +} + +.discordian-pretty-tasks-editor .cm-formatting-task.cm-property::after { + content: '\0020\0020\0020' !important; + color: transparent !important; +} + +.discordian-pretty-tasks-editor .cm-formatting-task + span { + padding-left: 0.3rem; + vertical-align: sub; +} + +.discordian-pretty-tasks-editor .cm-formatting-task ~ span { + vertical-align: sub !important; +} + +/*---------------------------------------------------------------- +Adjust nested level task lists when collapsed +Order matters here - from top level supported (7) down to first */ + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-7 { + padding-left: calc(12.25 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-6 { + padding-left: calc(10.5 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-5 { + padding-left: calc(8.75 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-4 { + padding-left: calc(7 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-3 { + padding-left: calc(5.25 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-2:not(.HyperMD-list-line-1) { + padding-left: calc(3.5 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +/*---------------------------------------------------------------- +LINKS & BRACKETS +----------------------------------------------------------------*/ + +a, +.internal-link, +.cm-hmd-internal-link, +.cm-link, +.cm-url, +.cm-formatting-link, +.cm-s-obsidian span.cm-link, +.cm-s-obsidian span.cm-hmd-internal-link { + color: var(--text-a); + text-decoration: none; +} + +a:hover, +.internal-link:hover, +.cm-hmd-internal-link:hover, +.cm-link:hover, +.cm-url:hover, +.cm-formatting-link:hover { + color: var(--text-a-hover); + text-decoration: none; +} + +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-a); + padding: 0 1px; +} + +.cm-s-obsidian span.cm-link:hover, +.cm-s-obsidian span.cm-hmd-internal-link:hover { + color: var(--text-a-hover); + text-decoration: none; +} + +/* regular urls in editor */ +.cm-s-obsidian span.cm-url { + /*text-decoration: none;*/ +} + +/* preview */ +.markdown-preview-view .internal-link { + text-decoration: none; +} + +.markdown-preview-view .internal-link.is-unresolved { + opacity: 1; +} + +.external-link { + background-image: unset; + padding-right: 0; +} + +.markdown-preview-view .external-link { + color: var(--text-link); +} + +a:not(.internal-link) { + color: var(--text-link); +} + +a:not(.internal-link):hover { + color: var(--text-link); + text-decoration: underline; +} + +a:not(.internal-link).footnote-link { + color: var(--text-a); + text-decoration: none; +} + +/*---------------------------------------------------------------- +TAGS +----------------------------------------------------------------*/ + +.cm-s-obsidian .cm-formatting-hashtag { + font-family: var(--font-editor); +} + +a.tag, +span:not(.cm-header).cm-hashtag { + font-weight: 400; + unicode-bidi: -moz-plaintext; + unicode-bidi: plaintext; + color: var(--discord-blue); + background: rgba(114, 137, 218, 0.1); + position: relative; + -webkit-transition: background-color .15s ease-out, color .15s ease-out; + transition: background-color .15s ease-out, color .15s ease-out; +} + +span:not(.cm-header).cm-hashtag-begin { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + padding-left: 4px; + padding-top: 3px; + padding-bottom: 1px; +} + +span:not(.cm-header).cm-hashtag-end { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + padding: 3px 3px 1px 0; + margin-right: 2px; +} + +a.tag { + padding: 3px 4px 1px 4px !important; + border-radius: 3px; + margin-right: 2px; +} + +span:not(.cm-header).cm-hashtag { + text-decoration: none !important; +} + +a.tag:hover { + text-decoration: none !important; + color: var(--discord-blue); + background-color: rgba(114, 137, 218, 0.2); +} + +h1 a.tag, +h2 a.tag, +h3 a.tag, +h4 a.tag, +h5 a.tag, +h6 a.tag { + background: unset; + font-style: italic; + color: unset; + filter: invert(30%); +} + +h1 a.tag:hover, +h2 a.tag:hover, +h3 a.tag:hover, +h4 a.tag:hover, +h5 a.tag:hover, +h6 a.tag:hover { + background: unset; + color: unset; +} + +span.cm-hashtag { + text-decoration: none !important; +} + +/*---------------------------------------------------------------- +FOOTNOTES +----------------------------------------------------------------*/ + +sup { + letter-spacing: 0; + padding-left: 0.2rem; +} + +.cm-s-obsidian span.cm-footref, +.cm-s-obsidian span.cm-blockid { + vertical-align: super; + margin-top: 0; + font-size: small; +} + +.cm-s-obsidian pre.HyperMD-footnote { + padding-left: 3rem; + padding-bottom: 0.5rem; + font-size: small; +} + +.footnotes { + font-size: small; +} + +.footnote-link { + color: var(--text-a); +} + +.footnote-link:hover { + text-decoration: none; +} + +.footnote-backref { + color: var(--text-muted); + margin-left: 0.2rem; +} + +/*---------------------------------------------------------------- +TOGGLE SWITCHES +----------------------------------------------------------------*/ + +.checkbox-container { + background-color: var(--discord-grey-toggle); + border: none; + box-shadow: none; + width: 40px; + height: 24px; + -webkit-transition: all .17s; + transition: all .17s ease; +} + +.checkbox-container.is-enabled { + background-color: var(--interactive-accent); +} + +.checkbox-container::before, +.checkbox-container::after { + color: var(--discord-grey-toggle); +} + +.checkbox-container::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 20' preserveAspectRatio='xMinYMid meet'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath fill='rgba(114, 118, 125, 1)' d='M5.13231 6.72963L6.7233 5.13864L14.855 13.2704L13.264 14.8614L5.13231 6.72963Z'%3E%3C/path%3E%3Cpath fill='rgba(114, 118, 125, 1)' d='M13.2704 5.13864L14.8614 6.72963L6.72963 14.8614L5.13864 13.2704L13.2704 5.13864Z'%3E%3C/path%3E%3C/svg%3E%3C/svg%3E"); + display: block; + position: absolute; + opacity: 1; + z-index: 1; + transform: translate3d(-7px, 3px, 0); +} + +.checkbox-container.is-enabled::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 20' preserveAspectRatio='xMinYMid meet'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath fill='rgba(67, 181, 129, 1)' d='M7.89561 14.8538L6.30462 13.2629L14.3099 5.25755L15.9009 6.84854L7.89561 14.8538Z'%3E%3C/path%3E%3Cpath fill='rgba(67, 181, 129, 1)' d='M4.08643 11.0903L5.67742 9.49929L9.4485 13.2704L7.85751 14.8614L4.08643 11.0903Z'%3E%3C/path%3E%3C/svg%3E%3C/svg%3E"); + transform: translate3d(7px, 3px, 0); +} + +.checkbox-container.is-enabled::after { + transform: translate3d(15px, 0, 0); +} + +.checkbox-container::after { + box-shadow: none !important; + width: 18px; + height: 18px; + transform: translate3d(1px, 0, 0); +} + +/*---------------------------------------------------------------- +TABLES +----------------------------------------------------------------*/ + +th { + font-weight: 800; +} + +thead { + border-top: 2px solid var(--discord-yellow-alt); +} + +table { + border-collapse: collapse; +} + +/*---------------------------------------------------------------- +Preview Mode */ + +.markdown-preview-view table { + margin: 2rem 0; +} + +.markdown-preview-view td, +.markdown-preview-view th { + border: none; +} + +.markdown-preview-view th { + font-family: var(--default-font); + font-weight: bold; +} + +.markdown-preview-view thead > tr { + border-top: 0 !important; +} + +.markdown-preview-view tr { + border-top: 1px solid var(--background-accent); +} + +.markdown-preview-view td, +.markdown-preview-view tr > th { + border-left: 1px solid var(--background-accent); +} + +.markdown-preview-view tr > td:first-of-type, +tr > th:first-of-type { + border-left: 0; +} + +/*---------------------------------------------------------------- +Editor Mode */ + +.CodeMirror pre.HyperMD-table-row { + font-family: var(--font-monospace); + font-size: 100%; + letter-spacing: 0; +} + +.CodeMirror pre.HyperMD-table-row span.cm-formatting-link { + padding: 0; +} + +.cm-s-obsidian pre.HyperMD-table-row.HyperMD-table-row-0 { + margin-top: 0.15rem; +} + +/*---------------------------------------------------------------- +CODEBLOCKS & INLINE CODE +----------------------------------------------------------------*/ + +code, +.cm-inline-code { + padding: 2px 1px; +} + +/*---------------------------------------------------------------- +editor */ + +.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + color: var(--markup-code); + font-size: 100%; + background-color: var(--discord-yellow-bg); +} + +.cm-s-obsidian span.cm-inline-code { + color: var(--markup-code); + font-size: 100%; + background-color: var(--discord-yellow-bg); + border-radius: 3px; + padding-top: 4px; + padding-bottom: 1px; +} + +.cm-s-obsidian span.cm-inline-code.cm-inline-code { + margin-left: 0; +} + +span.cm-inline-code.cm-hmd-indented-code, +.cm-s-obsidian span.cm-inline-code.cm-hmd-indented-code { + background-color: unset !important; + color: var(--text-normal); + padding: 0.2rem 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code { + border-right-width: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code + span.cm-inline-code { + border-right: none; + border-left: none; + border-radius: 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code + span.cm-inline-code + span.cm-formatting-code.cm-inline-code { + border-left-width: 0; + border-right-width: 1px; + border-radius: 0 3px 3px 0; +} + +.cm-s-obsidian pre.HyperMD-codeblock { + padding: 0 0.5rem; + color: var(--interactive-normal); + font-family: var(--font-monospace); + font-size: 100%; + white-space: pre-wrap; + background-clip: border-box; +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + background-color: var(--background-code-preview); +} + +.cm-s-obsidian pre.HyperMD-codeblock.HyperMD-codeblock-begin { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding-top: 0.5rem; +} + +.cm-s-obsidian pre.HyperMD-codeblock.HyperMD-codeblock-end { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +/*---------------------------------------------------------------- +preview */ + +.theme-dark :not(pre) > code[class*="language-"], +.theme-dark pre[class*="language-"] { + background: var(--background-code-preview); + text-shadow: unset !important; + padding: 6px 10px; + margin: 1.5rem 0; +} + +.markdown-preview-view pre { + background-color: var(--background-code-preview); + margin: 2rem 0; +} + +.markdown-preview-view code { + text-shadow: unset !important; + color: var(--markup-code) !important; + background-color: var(--discord-yellow-bg); + font-size: 100%; + padding-top: 4px; + padding-bottom: 1px; +} + +.markdown-preview-view pre code { + color: var(--text-normal) !important; + background-color: unset !important; + font-size: 100%; +} + +pre.frontmatter[class*="language-"] { + background-color: transparent; + text-shadow: unset !important; + color: var(--text-normal) !important; + padding: 0; + margin: 0 0 1.5rem 0; + line-height: 20px; +} + +/*---------------------------------------------------------------- +frontmatter */ + +.markdown-preview-view pre code.language-yaml, +.markdown-preview-view pre code.language-yaml span.token { + color: var(--text-muted) !important; +} + +.frontmatter-container { + background-color: var(--background-code-preview); + border: 0; + margin: 0 0 1.5rem 0; +} + +.frontmatter-container .frontmatter-section { + margin: 0; +} + +.frontmatter-container .frontmatter-container-header { + border-bottom: 0; +} + +.frontmatter-container .frontmatter-collapse-indicator { + margin-top: -1px; +} + +.frontmatter-container .frontmatter-section-label { + text-transform: lowercase; + display: inline-flex; + font-size: 0.8125rem; +} + +.frontmatter-container .frontmatter-section-label::after { + content: ':'; + display: inline-block; +} + +.frontmatter-container .tag, +.frontmatter-container .frontmatter-alias { + background-color: var(--background-code-preview); + border-radius: 3px !important; + margin: 0 4px; +} + +.frontmatter-container a.tag { + padding: 0 4px !important; +} + +.frontmatter-container .tag:hover { + border: 1px solid transparent; +} + +.frontmatter-container .frontmatter-alias { + padding: 1px 4px !important; +} + +.cm-s-obsidian .cm-hmd-frontmatter { + font-size: 0.8125rem; +} + +/*---------------------------------------------------------------- +MODALS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Settings Modal */ + +.modal.mod-settings { + width: 100vw; + max-width: 100%; +} + +.modal:not(.mod-settings) { + -webkit-box-shadow: var(--elevation-stroke), var(--elevation-high); + box-shadow: var(--elevation-stroke), var(--elevation-high); + padding: 0; + border: 0 !important; +} + +.modal:not(.mod-settings) .modal-content { + padding: 30px 50px; + margin-top: 0; +} + +.modal:not(.mod-settings) .modal-title { + font-size: 22px; + line-height: 36px; + padding: 1rem 2rem; + background-color: var(--background-secondary-alt); + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.modal.mod-settings, +.modal.mod-settings .vertical-tab-content-container, +.modal.mod-settings .vertical-tab-header { + height: 100vh; + max-height: 100%; +} + +.modal.mod-settings .modal-close-button { + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-flex: 0; + -ms-flex: 0 0 36px; + flex: 0 0 36px; + border-width: 2px; + border-style: solid; + border-radius: 50%; + width: 36px; + height: 36px; + padding-top: 2px; + top: 3.75rem; + right: 11vw; + content: none !important; +} + +.modal.mod-settings .modal-close-button:hover { + background-color: rgba(114, 118, 125, .3); +} + +.modal.mod-settings .modal-close-button::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='18' height='18' viewBox='0 0 24 24'%3E%3Cpath fill='%23dcddde' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.modal.mod-settings .modal-close-button::after { + position: absolute; + content: 'ESC'; + font-weight: 600; + font-size: 13px; + text-align: right; + width: 36px; + height: 36px; + margin-top: 4.75rem; + margin-left: -1rem; + cursor: default; + pointer-events: none; +} + +.horizontal-tab-content, +.vertical-tab-content { + background-color: var(--background-primary); + padding: 3.75rem 0 5rem 2.5rem; +} + +.vertical-tabs-container { + padding: 0; +} + +.modal.mod-settings .vertical-tab-header { + padding-top: 2.5rem; + + --scrollbar-thin-thumb: transparent; + + flex: 1 0 auto; + display: grid; + grid-template-rows: min-content; + -webkit-box-flex: 1; + -webkit-box-pack: end; + justify-content: flex-end; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-pack: end; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} + +.modal.mod-settings .vertical-tab-header:hover { + --scrollbar-thin-thumb: unset; +} + +.modal.mod-settings .setting-item { + margin-right: 17vw; +} + +.modal.mod-settings .vertical-tab-content > div:not(.setting-item):not(.plugin-list-plugins):not(.loader-cube):not(.hotkey-settings-container) { + margin-right: 17vw; +} + +.modal.mod-settings .setting-editor-extra-setting-button { + margin-right: 1rem; +} + +.modal.mod-settings .vertical-tab-content-container { + background-color: var(--background-primary); + padding: 0; + flex: 1 1 50rem; +} + +.vertical-tab-header { + background-color: var(--background-secondary); +} + +.horizontal-tab-nav-item.is-active, +.vertical-tab-nav-item.is-active { + color: var(--interactive-active); + background-color: var(--background-modifier-active); +} + +.horizontal-tab-nav-item:hover, +.vertical-tab-nav-item:hover { + color: var(--interactive-hover); + background-color: var(--background-modifier-hover); +} + +.horizontal-tab-nav-item, +.vertical-tab-nav-item { + background-color: var(--background-secondary); + letter-spacing: 0; + padding: 6px 6px 6px 24px; + margin: 0 10px; + color: var(--interactive-normal); + border-radius: 3px; +} + +.setting-item { + border-top: thin solid var(--background-modifier-accent); +} + +.setting-item-control button { + padding: 5px 16px; +} + +.setting-hotkey { + min-height: unset; + padding: 0 0 0 10px; +} + +.setting-delete-hotkey { + line-height: unset; + top: 0; + right: 0; + height: unset; + border-radius: 0; + margin-left: 5px; +} + +.setting-add-hotkey-button:hover, +.setting-restore-hotkey-button:hover { + background-color: unset; +} + +.hotkey-list-container { + padding-left: 2px; + padding-right: 0; +} + +.community-theme-filters-container, +.hotkey-search-container { + padding: 0 10px 30px 0; +} + +.modal.mod-settings button { + margin: 0; +} + +/*---------------------------------------------------------------- +Document Search */ + +.document-search-container { + background-color: var(--background-primary); + padding-top: 10px; + height: 50px; +} + +.document-search-button { + background-color: var(--discord-dark) !important; + color: var(--text-muted) !important; +} + +.document-search-button:hover { + background-color: var(--discord-dark-hover) !important; + color: var(--text-normal) !important; +} + +.document-search-close-button { + color: var(--discord-dark); +} + +.document-replace-input { + margin-right: 8px; +} + +.document-replace-buttons { + margin-right: 4px; +} + +.document-search-container.mod-replace-mode { + height: 90px; +} + +/*---------------------------------------------------------------- +Modal Confirmations */ + +.modal-button-container { + margin-top: 0; + margin-bottom: 1.5rem; +} + +/*---------------------------------------------------------------- +Prompts - Discord-like */ + +.prompt { + background-color: var(--background-secondary); + border-radius: 8px; + padding: 1.25rem 1.25rem 0.75rem 1.25rem; +} + +input.prompt-input::placeholder { + color: var(--text-normal); + font-weight: 400; +} + +input.prompt-input::-webkit-input-placeholder { + color: #ffffff4d; + font-weight: 400; +} + +input.prompt-input::-ms-input-placeholder { + color: var(--text-normal); + font-weight: 400; +} + +input.prompt-input { + position: relative; + z-index: 1; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + display: block; + padding: 0 12px; + font-size: 21px; + border-radius: 5px; + border: none; + height: 70px; + line-height: 70px; + background-color: var(--text-muted) !important; + color: var(--text-on-accent); + -webkit-box-shadow: var(--elevation-high); + box-shadow: var(--elevation-high); +} + +input.prompt-input:focus-within { + color: var(--text-on-accent); +} + +.prompt-results { + margin-right: -12px; +} + +.prompt-results .suggestion-item { + color: var(--interactive-normal); + padding: 0 10px; + line-height: 2rem; + font-weight: 500; + border-radius: 3px; + width: calc(100% - 12px); +} + +.prompt-results .suggestion-item.is-selected, +.prompt-results .suggestion-item:hover { + background-color: var(--background-modifier-selected); +} + +.prompt-results .suggestion-hotkey { + border-color: transparent; + background-color: transparent; + border-radius: 0; + padding-right: 20px; +} + +.prompt-results .suggestion-item.is-selected .suggestion-hotkey, +.prompt-results .suggestion-item:hover .suggestion-hotkey { + margin-right: -12px; +} + +.suggestion-container .prompt-instructions { + padding: 0.625rem; +} + +.prompt-instructions { + padding: 0.625rem 0.625rem 0 0.625rem; + border-top: 1px solid var(--background-modifier-accent); + opacity: 1; + color: var(--text-on-accent); + font-size: 11px; + line-height: 16px; +} + +.prompt-instruction span { + opacity: 0.6; +} + +.prompt-instruction:first-of-type::before { + content: 'tips:'; + text-transform: uppercase; + color: var(--interactive-accent); + margin-right: 0.5rem; + font-weight: 600; +} + +.prompt-instruction-command { + font-size: 11px; +} + +/*---------------------------------------------------------------- +Community plugins panel */ + +.community-plugin-details { + font-size: 0.875rem; + line-height: 1.65; +} + +.community-plugin-search { + background-color: var(--background-secondary); + padding: 20px 0 0 0; +} + +.modal-content.community-plugin { + padding: 0 0 50px 0 !important; +} + +.community-plugin-readme { + overflow-x: hidden; + padding: 40px 30px 20px 30px; +} + +.community-plugin-readme img { + margin: unset !important; +} + +.community-plugin-search .setting-item-info { + display: none; +} + +.community-plugin-search .search-input-container { + width: 70%; +} + +.flair { + padding: 0 4px; +} + +/*---------------------------------------------------------------- +Community themes panel */ + +.community-theme-filters-container { + padding: 10px 30px 30px 0; + width: fit-content !important; +} + +.community-theme { + padding: 10px 20px 20px 0; +} + +.community-theme-search-container { + display: inline-block; + margin-right: 2rem; +} + +.community-theme-list { + margin-top: 1rem; + justify-content: flex-start; +} + +.community-theme-mode-toggle-label { + bottom: 6px; +} + +.community-theme-container button { + margin-right: 8px; +} + +.community-theme a { + vertical-align: middle; +} + +.modal.mod-community-theme { + max-width: 56rem; +} + +/*---------------------------------------------------------------- +BUTTONS +----------------------------------------------------------------*/ + +button { +} + +button.mod-cta { + background-color: var(--discord-blue); + color: #fff; + font-size: 0.875rem; + font-weight: 400; +} + +button.mod-cta:hover { + background-color: var(--discord-blue-hover); +} + +button:not(.mod-cta):not(.mod-warning), +.modal button:not(.mod-cta):not(.mod-warning) { + background-color: var(--discord-grey); + color: white; +} + +button:not(.mod-cta):not(.mod-warning):hover { + background-color: var(--discord-grey-hover); +} + +button.mod-cta a { + font-family: var(--default-font); +} + +button.mod-cta a:hover { + text-decoration: none; + color: inherit; +} + +.modal.mod-settings a > button { + margin-right: 8px; +} + +.modal-close-button::before { + content: none; +} + +.modal-close-button { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='18' height='18' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.search-input-clear-button { + top: 6px; +} + +.search-input-clear-button::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.clickable-icon[aria-label="Delete workspace"] { + margin-top: 4px; +} + +/*---------------------------------------------------------------- +GRAPH +----------------------------------------------------------------*/ + +.theme-dark .graph-controls { + background-color: var(--background-tertiary); + border: none; +} + +.theme-dark .graph-view.color-line { + color: var(--graph-line); + opacity: 0.7; +} + +.theme-dark .graph-view.color-line-highlight { + color: var(--graph-line-highlight); +} + +.theme-dark .graph-view.color-fill { + color: var(--graph-circle-fill); + opacity: 0.9; +} + +.theme-dark .graph-view.color-fill-highlight { + color: var(--graph-circle-fill-highlight); +} + +.theme-dark .graph-view.color-circle { + color: var(--graph-circle-outline); +} + +/*---------------------------------------------------------------- +Graph filters */ + +.theme-dark .graph-view.color-fill-tag { + color: var(--graph-fill-tag); +} + +.theme-dark .graph-view.color-fill-attachment { + color: var(--graph-fill-attachment); +} + +.theme-dark .graph-view.color-fill-unresolved { + color: var(--graph-circle-fill-unresolved); + opacity: 1; +} + +.theme-dark .graph-view.color-arrow { + color: var(--graph-arrow); +} + +/*---------------------------------------------------------------- +Graph controls */ + +.graph-control-search-button { + background-color: transparent !important; + opacity: 0.7; +} + +.graph-control-search-button:hover { + opacity: 1; +} + +.mod-root .graph-controls { + top: 20px; + left: 30px; +} + +.graph-controls .setting-item { + border: 0; +} + +.graph-control-section:not(:last-child) .tree-item-children { + border-bottom: thin solid var(--background-modifier-accent); +} + +.graph-control-section:not(:last-child) .tree-item-children > .setting-item:last-child { + padding-bottom: 20px; +} + +.graph-controls .setting-item.mod-search-setting .setting-item-control .search-input-container { + width: 100%; +} + +.graph-controls .clickable-icon[aria-label="Delete group"] > svg { + margin-top: -2px; + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E") !important; +} + +.graph-controls .graph-color-button-container { + margin: 15px 0 20px 0; + text-align: center; +} + +.graph-controls .graph-color-button-container > button { + padding: 1px 6px; + font-size: 0.75rem; +} + +/*---------------------------------------------------------------- +FOLDING (credits to @mgmeyers for svg icons) +----------------------------------------------------------------*/ + +.markdown-preview-view .collapse-indicator { + position: relative; + cursor: pointer; + margin: 0; + float: none; + padding-left: 0; + display: inline-block; + line-height: inherit; + font-size: unset; + width: 0; + height: 0.5em; +} + +.markdown-preview-view .collapse-indicator > svg { + display: none; +} + +.markdown-preview-view .collapse-indicator::before { + position: absolute; + left: -2.5rem; + top: calc(-0.5em - 3px); +} + +.markdown-preview-view .heading-collapse-indicator { + margin-left: -2px; + padding: 0; +} + +.markdown-preview-view .heading-collapse-indicator::before { + left: -2rem; +} + +.markdown-preview-view .frontmatter-collapse-indicator::before { + left: -2.9rem; +} + +.markdown-preview-view .collapse-indicator::before, +.CodeMirror-foldgutter-open::after { + display: block; + width: 18px; + opacity: 0.3; + content: url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" style="fill:rgba(0, 0, 0);"><path d="M16.293 9.293L12 13.586 7.707 9.293 6.293 10.707 12 16.414 17.707 10.707z"></path></svg>'); +} + +.theme-dark .markdown-preview-view .collapse-indicator::before, +.theme-dark .CodeMirror-foldgutter-open::after { + content: url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" style="fill:rgba(204,204,204);"><path d="M16.293 9.293L12 13.586 7.707 9.293 6.293 10.707 12 16.414 17.707 10.707z"></path></svg>'); +} + +.theme-dark .markdown-preview-view .collapse-indicator::before { + margin-left: 2px; +} + +.theme-dark .markdown-preview-view ul li .collapse-indicator::before { + margin-left: calc(1rem - var(--font-size-notes) + 0.125rem); + margin-top: 2px; +} + +.theme-dark .markdown-preview-view ol li .collapse-indicator::before { + margin-left: calc(1rem - var(--font-size-notes)); + margin-top: 2px; +} + +.theme-dark .markdown-preview-view ul.contains-task-list li .collapse-indicator::before { + margin-left: 18px; + margin-top: 0; +} + +.markdown-preview-view .is-collapsed .collapse-indicator::before, +.CodeMirror-foldgutter-folded::after { + display: block; + width: 18px; + /*height: 18px;*/ + opacity: 0.3; + content: url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" style="fill:rgb(0, 0, 0);"><path d="M10.707 17.707L16.414 12 10.707 6.293 9.293 7.707 13.586 12 9.293 16.293z"></path></svg>'); +} + +.theme-dark .markdown-preview-view .is-collapsed .collapse-indicator::before, +.theme-dark .CodeMirror-foldgutter-folded::after { + content: url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" style="fill:rgb(204,204,204);"><path d="M10.707 17.707L16.414 12 10.707 6.293 9.293 7.707 13.586 12 9.293 16.293z"></path></svg>'); +} + +.CodeMirror-gutter-wrapper { + padding: 0; + width: 18px; + left: -2rem !important; + display: flex; +} + +.CodeMirror-gutter-elt { + width: unset !important; + position: static; + height: 100%; +} + +.CodeMirror-foldgutter-open, +.CodeMirror-foldgutter-folded { + color: var(--text-faint); + display: flex; + height: 100%; + align-items: center; + transition: color 100ms ease; +} + +.cm-s-obsidian .CodeMirror-gutters { + width: 18px; + left: 8px !important; + padding-right: 0; + transform: translateX(2rem); +} + +.CodeMirror-foldgutter { + width: 18px; +} + +/*---------------------------------------------------------------- +line numbers */ + +.CodeMirror-linenumbers { + margin-left: -26px; +} + +.cm-s-obsidian .CodeMirror-linenumber { + width: 18px !important; + min-width: 18px !important; + position: absolute; + padding: 0; + display: flex; + justify-content: flex-end; + font-feature-settings: normal; + font-size: 0.75rem; + font-weight: 500; + color: var(--text-linenumber); + margin-left: -1.5rem; + left: 0 !important; +} + +.cm-s-obsidian .CodeMirror-activeline-gutter > .CodeMirror-linenumber { + color: var(--text-linenumber-active); +} + +/*---------------------------------------------------------------- +EMBEDS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Seamless notes transclusions */ + +.markdown-preview-view .markdown-embed { + margin: 2rem 0 0 0 !important; + padding: 0 !important; + border-top: 0 !important; + border-bottom: 0 !important; +} + +.markdown-preview-view .markdown-embed-content { + max-height: none !important; +} + +.markdown-embed-content .markdown-preview-section { + min-height: unset !important; +} + +.markdown-embed-content .markdown-preview-section > div { + padding-left: 0; + padding-right: 0; +} + +/* Hide frontmatters in embeds */ +.markdown-preview-view .markdown-embed-content .frontmatter { + display: none; +} + +.markdown-embed-title, +.internal-embed .markdown-preview-section { + max-width: 100%; +} + +.markdown-embed-title { + display: none !important; +} + +.markdown-preview-view .markdown-embed-content > .markdown-preview-view { + max-height: none !important; +} + +.markdown-embed .markdown-preview-view { + padding: 0 !important; +} + +.file-embed-link svg, +.markdown-embed-link svg { + width: 16px; + opacity: 0; +} + +.markdown-embed:hover .file-embed-link svg, +.markdown-embed:hover .markdown-embed-link svg { + opacity: 1; +} + +/*---------------------------------------------------------------- +Audio embed */ + +audio, +.theme-dark audio { + filter: unset !important; +} + +.theme-dark audio::-webkit-media-controls-enclosure { + filter: sepia(10%) contrast(90%) invert(90%) !important; + opacity: 0.8; + border-radius: 6px; + height: 20px; +} + +audio::-webkit-media-controls-enclosure { + filter: sepia(10%) contrast(90%) invert(90%) !important; + opacity: 0.8; + border-radius: 6px; + height: 20px; +} + +.markdown-preview-view img:not([width]), +.markdown-preview-view audio, +.markdown-preview-view video { + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Internal Queries */ + +.markdown-preview-view .internal-query.is-embed { + border-top: 0; + border-bottom: 0; + background-color: var(--background-code-preview); + border-radius: 4px; + cursor: default !important; +} + +.markdown-preview-view .internal-query.is-embed .internal-query-header-title::before, +.markdown-preview-view .internal-query.is-embed .internal-query-header-title::after { + content: ""; +} + +/* Seamless internal queries - no scrollbar */ +.markdown-preview-view .internal-query.is-embed .search-results-children { + max-height: none !important; + padding: 0; +} + +.internal-query .search-result-file-matches { + margin-top: 10px; + margin-bottom: 0; + padding-bottom: 0; +} + +.internal-query .search-result-file-title { + background-color: transparent; + opacity: 1; +} + +.internal-query .search-result-file-title:hover { + color: var(--text-a-hover) !important; + opacity: 1; +} + +.internal-query .tree-item-self.is-clickable:hover { + background-color: transparent; +} + +.internal-query .tree-item.search-result { + padding: 10px; +} + +.internal-query .tree-item.search-result.is-collapsed:hover { + background-color: var(--background-modifier-border); + cursor: pointer; +} + +.internal-query .search-result-file-matched-text { + padding: 2px; + border-radius: 2px; +} + +.internal-query .search-result-file-match { + opacity: 1; + padding: 6px 0 6px 10px !important; +} + +.internal-query .search-result-file-match:hover { + background-color: var(--background-modifier-cover); +} + +.internal-query .search-result-file-match::after { + background-color: transparent; +} + +/*---------------------------------------------------------------- +RELATIONSHIP LINES +----------------------------------------------------------------*/ + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul ul, +body:not(.discordian-theme) .markdown-preview-view ul ul { + position: relative; +} + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul ul::before, +body:not(.discordian-theme) .markdown-preview-view ul ul::before { + content: ""; + border-left: 1px solid var(--text-muted); + opacity: 0.2; + position: absolute; + margin-left: -0.8em; + left: 0; + top: 0; + bottom: 0; +} + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul.contains-task-list ul::before, +body:not(.discordian-theme) .markdown-preview-view ul.contains-task-list ul::before { + left: -0.2em; + top: 0.3em; + bottom: -0.3em; +} + +/*---------------------------------------------------------------- +SYNTAX HIGHLIGHTER COLORS +----------------------------------------------------------------*/ + +.theme-dark { + --syntax-default: rgb(191, 193, 194); + --syntax-red: rgb(224, 108, 117); + --syntax-green: rgb(152, 195, 121); + --syntax-yellow: rgb(209, 154, 102); + --syntax-blue: rgb(86, 156, 214); + --syntax-teal: rgb(86, 182, 194); + --syntax-purple: rgb(198, 120, 221); + --syntax-grey: rgb(112, 128, 144); +} + +.theme-dark .token.property, +.theme-dark .token.tag, +.theme-dark .token.constant, +.theme-dark .token.symbol, +.theme-dark .token.deleted { + color: var(--syntax-red); +} + +.theme-dark .token.selector, +.theme-dark .token.attr-name, +.theme-dark .token.string, +.theme-dark .token.char, +.theme-dark .token.builtin, +.theme-dark .token.inserted { + color: var(--syntax-green); +} + +.theme-dark .token.atrule, +.theme-dark .token.attr-value, +.theme-dark .token.function, +.theme-dark .token.class-name { + color: var(--syntax-yellow); +} + +.theme-dark .token.punctuation { + color: var(--text-normal); +} + +.theme-dark .token.keyword { + color: var(--syntax-blue); +} + +.theme-dark .token.operator, +.theme-dark .token.entity, +.theme-dark .token.url, +.theme-dark .language-css .token.string, +.theme-dark .style .token.string, +.theme-dark .token.variable { + color: var(--syntax-teal); +} + +.theme-dark .token.boolean, +.theme-dark .token.number, +.theme-dark .language-css .token.unit { + color: var(--syntax-purple); +} + +.theme-dark .token.comment, +.theme-dark .token.prolog, +.theme-dark .token.doctype, +.theme-dark .token.cdata { + color: var(--syntax-grey); +} + +/*---------------------------------------------------------------- +IMAGES RELATED ADD-ONS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Floating images with captions by @radekkozak */ + +.markdown-preview-view .image-embed:not([src$="left"]):not([src$="right"]), +.markdown-preview-view .image-embed[src$="center"] { + clear: both; + margin: 1rem auto; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed:not([src$="left"]):not([src$="right"])::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: block; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +.markdown-preview-view .image-embed[src$="left"] { + position: relative; + float: left; + margin-right: 2rem; + margin-bottom: 1rem; + margin-top: 1rem; + clear: both; + display: table; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed[src$="left"]::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +.markdown-preview-view .image-embed[src$="right"] { + position: relative; + float: right; + margin-top: 1rem; + margin-left: 2rem; + margin-bottom: 2rem; + clear: both; + display: table; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed[src$="right"]::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +/*---------------------------------------------------------------- +Modified masonry-like gallery (image grids) +Original credits to @kepano */ + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."] { + padding: 0 0.75rem 0 0.75rem; +} + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."]:last-child { + padding-right: 0; +} + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."]:first-child { + padding-left: 0; +} + +.img-grid .markdown-preview-section > div hr { + width: 100%; +} + +/* Hotfix by @Lithou (due to Obsidian v0.11.3 changes for grouped images) + +Explanation is this: +When no alt pipe is used by the user, Obsidian will add alt text in the form of "filename.ext" by default. +This rule targets any image embeds with a period in it (BE AWARE) to make image grids possible */ + +.img-grid span.image-embed[alt*="."] { + display: table-cell; +} + +.img-grid img[alt*="."] { + max-height: 33vh; + object-fit: cover; +} + +/*---------------------------------------------------------------- +Image zooms. Credits to @kepano */ + +.view-content img { + max-width: 100%; + cursor: zoom-in; +} + +.view-content img:active { + cursor: zoom-out; + display: block; + z-index: 100; + position: fixed; + max-height: calc(100% + 1px); + max-width: calc(100% - 8rem); + height: calc(100% + 1px); + width: 100%; + object-fit: contain; + margin: -0.5px auto 0; + text-align: center; + top: 50%; + transform: translateY(-50%); + padding: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/*---------------------------------------------------------------- +HIDER PLUGIN v1.0.5 +----------------------------------------------------------------*/ + +.hider-ribbon .workspace-split.mod-left-split .nav-files-container { + margin-left: 0; +} + +.hider-frameless:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container, +.discordian-writer-mode:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +.discordian-writer-mode.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container, +.hider-frameless.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container, +.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container { + padding-left: 54px; +} + +body:not(.mod-windows):not(.discordian-theme).hider-ribbon .mod-left-split .workspace-tab-header-container { + padding-left: 54px !important; +} + +.discordian-writer-mode .workspace-split.mod-left-split > .workspace-tabs { + padding-top: 0 !important; +} + +.hider-frameless .workspace-split.mod-left-split > .workspace-tabs { + padding-top: 0 !important; +} + +body.discordian-theme:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .workspace-leaf:first-of-type:last-of-type .view-header, +body.discordian-theme:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +.discordian-writer-mode:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.discordian-writer-mode.hider-frameless:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.discordian-writer-mode.discordian-hide-titlebar:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows).discordian-theme .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; + transition: padding-left .15s ease; +} + +.discordian-writer-mode.hider-ribbon:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless.hider-ribbon:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-ribbon.discordian-hide-titlebar:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-ribbon.discordian-theme.discordian-hide-titlebar:not(.hider-frameless):not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 62px !important; + transition: padding-left .15s ease; +} + +.discordian-writer-mode .titlebar, +.hider-frameless .titlebar { + border-bottom: none; +} + +/*---------------------------------------------------------------- +Force-hide titlebar regardless of settings +This is required to make settings modal like in Discord */ + +body:not(.hider-frameless):not(.discordian-writer-mode) .modal-container { + top: 0 !important; + height: 100vh !important; +} + +body.discordian-theme.discordian-writer-mode .modal-container, +body.discordian-theme.hider-frameless .modal-container, +body.discordian-theme.discordian-hide-titlebar .modal-container { + top: 0 !important; + height: 100vh !important; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.hider-frameless):not(.discordian-writer-mode) .modal-container { + top: -22px !important; + height: 100vh !important; +} + +body.discordian-theme.is-fullscreen .modal-container { + top: 0 !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +CALENDAR PLUGIN v1.4.11 +----------------------------------------------------------------*/ + +.workspace-leaf-content[data-type='calendar'] .view-content { + padding: 5px 0 0 0; +} + +#calendar-container { + padding: 5px 15px; + font-family: var(--font-editor); + font-size: 15px; + + --color-background-day-empty: var(--background-secondary-alt); + --color-background-day-active: var(--background-tertiary); + --color-background-day-hover: var(--background-tertiary); + --color-dot: var(--text-faint); + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-muted); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + --color-arrow: var(--text-faint); + --color-arrow-hover: var(--text-normal); + --interactive-hover: var(--background-secondary-alt); + --interactive-accent: var(--discord-blue-hover); + --interactive-accent-hover: var(--discord-blue-hover); +} + +#calendar-container .table { + border-collapse: separate; + table-layout: fixed; +} + +#calendar-container h3 { + font-weight: 400; + font-size: 16px; +} + +.mod-root #calendar-container { + width: var(--line-width); + max-width: var(--max-width); + margin: 0 auto; + padding: 0; +} + +#calendar-container .arrow { + color: var(--text-faint); + cursor: var(--cursor); +} + +#calendar-container tr th { + padding: 4px 0; + font-weight: 500; +} + +#calendar-container tr td { + padding: 4px 0 4px; + border-radius: 4px; + border: 2px solid transparent; + transition: none; +} + +#calendar-container .year { + color: var(--discord-green) !important; +} + +#calendar-container .day { + transition: none !important; + cursor: var(--cursor); +} + +#calendar-container .arrow:hover > svg { + color: var(--color-arrow-hover) !important; +} + +#calendar-container .reset-button:hover { + color: var(--color-text-title) !important; +} + +/*---------------------------------------------------------------- +Andy's Mode Sliding Panes v3.2.1 (death_au's plugin) +----------------------------------------------------------------*/ + +/* fill title container for better visual separation */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header { + background-color: var(--background-secondary); + border-right: 0 !important; + border-left: 0 !important; +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .app-container { + border-top: solid 1px var(--background-tertiary) !important; +} + +body.plugin-sliding-panes .app-container::before { + content: none; +} + +body.plugin-sliding-panes .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header { + border-left: 0; + box-shadow: none !important; +} + +body.plugin-sliding-panes .view-header::before, +body.plugin-sliding-panes .workspace-leaf.mod-active .view-header::before { + display: none; +} + +/* remove long-title-obscuring gradient in normal mode */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header > .view-header-title-container::before, +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header > .view-header-title-container::before { + content: none; +} + +/* fix the long-title-obscuring gradient for andy mode */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header > .view-header-title-container::after, +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header > .view-header-title-container::after { + content: ' '; + position: absolute; + bottom: 100px !important; + top: unset; + right: 0; + width: 26px; + height: 26px; + background: linear-gradient(to bottom, transparent, var(--background-secondary)) !important; +} + +body.plugin-sliding-panes .mod-horizontal .workspace-leaf { + box-shadow: none !important; +} + +body.plugin-sliding-panes:not(.discordian-writer) .workspace-split.mod-left-split { + border-right: 1px solid var(--background-tertiary); +} + +body.plugin-sliding-panes:not(.discordian-writer) .workspace-split.mod-right-split { + border-left: 1px solid var(--background-tertiary); +} + +body.plugin-sliding-panes:not(.plugin-sliding-panes-rotate-header) .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header { + border-right: none; + border-bottom: 2px solid var(--discord-yellow-light); +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header { + border-right: 2px solid var(--discord-yellow-light) !important; +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active:first-of-type:last-of-type > .workspace-leaf-content > .view-header { + border-right: 0 !important; +} + +body.plugin-sliding-panes .view-header::after { + content: none; +} + +body.plugin-sliding-panes.hider-frameless .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-header-title-container, +body.plugin-sliding-panes-rotate-header.plugin-sliding-panes-header-alt .workspace > .mod-root .view-header-title { + margin-top: 0; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-header-title-container { + margin-left: 0; + padding-top: 0; +} + +body.plugin-sliding-panes-rotate-header .view-header-title-container { + position: static; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-actions { + padding-left: 0; + padding-bottom: 20px; + margin-left: 0; + bottom: 0; +} + +body.plugin-sliding-panes.is-fullscreen.plugin-sliding-panes-rotate-header .view-header-icon { + padding-top: 8px; +} + +body.plugin-sliding-panes.hider-frameless.hider-ribbon .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.plugin-sliding-panes.hider-ribbon .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +body.plugin-sliding-panes.hider-ribbon:not(.is-fullscreen):not(.hider-ribbon) .mod-left-split .workspace-tab-header-container { + padding-left: 54px !important; +} + +/* or workspace-leaf:first-of-type if only padding first header under OSX icons */ +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header:not(.is-fullscreen):not(.mod-windows).hider-frameless .mod-left-split.is-collapsed + div.mod-root > .workspace-leaf:first-of-type > .workspace-leaf-content > .view-header, +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header:not(.is-fullscreen):not(.mod-windows).discordian-hide-titlebar .mod-left-split.is-collapsed + div.mod-root > .workspace-leaf:first-of-type > .workspace-leaf-content > .view-header { + padding-top: 18px; + /* transition: padding .1s ease;*/ +} + +body.discordian-hide-titlebar:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.hider-frameless:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes):not(.mod-windows).discordian-theme .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.discordian-hide-titlebar:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes-rotate-header):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; + transition: padding .15s ease; +} + +body.plugin-sliding-panes.hider-frameless:not(.hider-ribbon):not(.plugin-sliding-panes-rotate-header):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; +} + +/*---------------------------------------------------------------- +ADVANCED TABLES v0.11.0 +----------------------------------------------------------------*/ + +.workspace-leaf-content[data-type="advanced-tables-toolbar"] .nav-action-button svg.widget-icon { + width: 20px; +} + +img.emoji { + display: inline-block; +} + +/*---------------------------------------------------------------- +HIDE VAULT */ + +body.discordian-hide-vault .nav-folder.mod-root > .nav-folder-title { + display: none !important; +} + +body.discordian-theme .nav-folder.mod-root > .nav-folder-title { + display: block; +} + +/*---------------------------------------------------------------- +HIDE STATUS BAR */ + +.discordian-hide-statusbar.theme-dark .status-bar { + display: none; +} + +.theme-dark:not(.hider-status):not(.discordian-hide-statusbar):not(.discordian-writer-mode) .status-bar { + display: flex; +} + +/*---------------------------------------------------------------- +HIDE TITLE BAR */ + +body.discordian-hide-titlebar .app-container { + border-top: 0; +} + +body.discordian-hide-titlebar .titlebar { + display: none !important; +} + +body.discordian-hide-titlebar { + padding-top: 0 !important; +} + +body.discordian-hide-titlebar:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +body.discordian-hide-titlebar .workspace-leaf:first-of-type:last-of-type .view-header { + padding-left: 0; +} + +/* unhide */ + +body:not(.discordian-hide-titlebar):not(.hider-frameless):not(.discordian-writer-mode) .titlebar { + display: flex !important; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.is-fullscreen):not(.hider-frameless):not(.discordian-writer-mode) { + padding-top: 22px !important; +} + +body.discordian-theme.is-fullscreen .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 0; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.hider-frameless) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +/*---------------------------------------------------------------- +PARAGRAPH FOCUS MODE */ + +body.discordian-paragraph-focus .CodeMirror-line { + opacity: var(--paragraph-focus-fade); +} + +body.discordian-paragraph-focus .CodeMirror-activeline .CodeMirror-line { + opacity: 1 !important; +} + +/*---------------------------------------------------------------- +DISCORD ORIGINAL MARKINGS */ + +/* bold */ + +.discordian-original-markings .cm-strong, +.discordian-original-markings strong { + color: var(--text-normal); + font-weight: 600; +} + +.discordian-original-markings .cm-formatting-strong { + color: var(--text-muted); +} + +/* italics */ + +.discordian-original-markings .cm-em, +.discordian-original-markings em { + color: var(--text-normal); + margin-right: 0.1rem; +} + +.discordian-original-markings .cm-formatting-em { + color: var(--text-muted); + font-weight: 600; +} + +/* blockquote */ + +.discordian-original-markings blockquote { + background-color: unset; + color: var(--text-normal) !important; + border-left: 4px solid var(--background-accent) !important; + border-radius: 0 !important; +} + +.discordian-original-markings blockquote::before { + content: none; +} + +.discordian-original-markings .cm-s-obsidian span.cm-formatting-quote.cm-quote { + color: var(--text-muted); +} + +.discordian-original-markings .cm-s-obsidian span.cm-quote { + color: var(--text-normal); +} + +/* inline code in Editor */ + +.discordian-original-markings .markdown-preview-view code, +.discordian-original-markings .cm-s-obsidian span.cm-formatting-code.cm-inline-code, +.discordian-original-markings .cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + color: var(--text-normal) !important; + background-color: var(--background-secondary); + padding: .3rem 0 0.1rem 0; + width: auto; + height: auto; + text-indent: 0; + white-space: pre-wrap; +} + +.discordian-original-markings .cm-s-obsidian span.cm-inline-code { + font-size: unset; +} + +.discordian-original-markings .cm-s-obsidian span.cm-formatting-code.cm-inline-code { + color: var(--text-muted) !important; + background-color: var(--background-secondary); + border-radius: 3px 0 0 3px; + font-weight: 600; +} + +/* inline code in Preview */ + +.discordian-original-markings .markdown-preview-view code { + border-radius: 3px; + font-size: 100%; + padding: .3rem .3rem .1rem .3rem !important; +} + +.discordian-original-markings .markdown-preview-view pre code { + font-size: 100%; +} + +/* codeblocks in Editor */ + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top: 1px solid var(--background-secondary-alt); +} + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-bg { + background-color: var(--background-secondary); + border-left: 1px solid var(--background-secondary-alt); + border-right: 1px solid var(--background-secondary-alt); +} + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom: 1px solid var(--background-secondary-alt); +} + +/* codeblocks in Preview */ + +.discordian-original-markings.theme-dark :not(pre) > code[class*="language-"], +.discordian-original-markings.theme-dark pre[class*="language-"] { + background-color: var(--background-secondary); + border: 1px solid var(--background-secondary-alt); +} + +/*---------------------------------------------------------------- +DARK NOTE HEADERS */ + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header::before { + -webkit-box-shadow: var(--elevation-stroke) !important; + box-shadow: var(--elevation-stroke) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header { + background-color: var(--background-secondary) !important; + height: 30px; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header { + background-color: var(--background-secondary) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-leaf.mod-active .view-header { + background-color: var(--background-secondary) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-leaf.mod-active .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +/*---------------------------------------------------------------- +FLAT ANDY MODE */ + +body.discordian-flat-andy-mode.plugin-sliding-panes .workspace > .mod-root > .workspace-leaf, +body.discordian-flat-andy-mode.plugin-sliding-panes .workspace-split.mod-vertical > .workspace-leaf { + box-shadow: var(--background-tertiary) -1px 0 !important; +} + +/*---------------------------------------------------------------- +WRITER MODE */ + +body.discordian-writer-mode .mod-left.is-collapsed ~ .mod-root .mod-active .view-header, +body.discordian-writer-mode .mod-right.is-collapsed ~ .mod-root .mod-active .view-header { + border-bottom: 0; +} + +body.discordian-writer-mode .titlebar { + display: none; +} + +body.discordian-writer-mode .workspace-ribbon.mod-right, +body.discordian-writer-mode .workspace-ribbon.mod-left { + transition: border-color 0s ease-in-out 0s, background-color 0s ease-in-out 0s; +} + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed { + border-color: transparent; + background-color: transparent !important; + transition: border-color 0s ease-in-out 0s, background-color 0s ease-in-out 0s; +} + +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-settings { + opacity: 1; + /*transition:opacity 0s ease-in-out;*/ +} + +body.discordian-writer-mode .view-action.is-active { + opacity: 1; +} + +/* view actions */ + +body.discordian-writer-mode .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-settings { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-actions, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-actions, +.mod-right.is-collapsed ~ .mod-root .view-header:hover .view-actions { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* scrollbar */ + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root ::-webkit-scrollbar, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root ::-webkit-scrollbar { + width: 0 !important; +} + +/* in Preview Mode - in contrast to Editor Mode - when hiding scrollbar we need to adjust view by its width */ +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root > .markdown-preview-view, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root > .markdown-preview-view { + margin-left: -8px !important; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root ::-webkit-scrollbar, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root ::-webkit-scrollbar, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root ::-webkit-scrollbar, +.mod-right.is-collapsed ~ .mod-root ::-webkit-scrollbar { + width: 16px; + /*transition:opacity 0.17s ease-in-out;*/ +} + +/* note icon */ + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header .view-header-icon { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .mod-right.is-collapsed ~ .mod-root .view-header:hover .view-header-icon { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* note title */ + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header .view-header-title { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .mod-right.is-collapsed ~ .mod-root .view-header:hover .view-header-title { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* note title bottom shadow */ + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header::before, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header::before { + box-shadow: none !important; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header::before, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header::before, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header::before, +.mod-right.is-collapsed ~ .mod-root .view-header::before { + -webkit-box-shadow: var(--elevation-low) !important; + box-shadow: var(--elevation-low) !important; +} + +/* no status bar in writer mode */ +body.discordian-writer-mode .status-bar { + display: none; +} + +/*---------------------------------------------------------------- +PLUGIN STYLES */ + +body.discordian-theme .modal.mod-settings .plugin-description { + margin-right: 17vw; + padding: 0 0 1rem 0; + color: var(--text-faint); +} + +body.discordian-theme .modal.mod-settings .plugin-description p { + margin: 0; + color: var(--text-faint); +} + +body.discordian-theme .modal.mod-settings .plugin-description h3 { + margin-block-start: 0; + margin-block-end: 1rem; + text-align: left; + color: var(--text-normal); +} + +body.discordian-theme .modal.mod-settings .plugin-description ~ h4 { + color: var(--text-header); +} + +body.discordian-theme .modal.mod-settings .plugin-description.separator { + font-size: 2rem; + text-align: center; +} + +.discordian-plugin-setting-disabled { + opacity: 0.5; + pointer-events: none; +} diff --git a/.obsidian/workspace b/.obsidian/workspace index 2df7eb8..773274e 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -9,7 +9,7 @@ "state": { "type": "markdown", "state": { - "file": "Firmen/Steinemann Technology/Ky2Help.md", + "file": "2022-06-27.md", "mode": "source", "source": false } @@ -25,6 +25,7 @@ { "id": "adbc8368949dd847", "type": "tabs", + "dimension": 56.47321428571429, "children": [ { "id": "e855d5b4728e8193", @@ -43,18 +44,11 @@ } } ] - } - ], - "direction": "horizontal", - "width": 300 - }, - "right": { - "id": "a54ca124d2689b37", - "type": "split", - "children": [ + }, { - "id": "36d1b5112e960052", + "id": "e8a9f7b2c28940f1", "type": "tabs", + "dimension": 43.526785714285715, "children": [ { "id": "39650d5b939ff18b", @@ -72,9 +66,16 @@ "state": {} } } - ], - "currentTab": 1 - }, + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "a54ca124d2689b37", + "type": "split", + "children": [ { "id": "156a5a111c133560", "type": "tabs", @@ -85,7 +86,7 @@ "state": { "type": "backlink", "state": { - "file": "Firmen/Steinemann Technology/Ky2Help.md", + "file": "2022-06-27.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,29 +103,19 @@ "state": { "type": "outgoing-link", "state": { - "file": "Firmen/Steinemann Technology/Ky2Help.md", + "file": "2022-06-27.md", "linksCollapsed": false, "unlinkedCollapsed": false } } }, - { - "id": "1a2599660c2f0844", - "type": "leaf", - "state": { - "type": "outline", - "state": { - "file": "Firmen/Steinemann Technology/Ky2Help.md" - } - } - }, { "id": "cf8612b561ea8d18", "type": "leaf", "state": { "type": "search", "state": { - "query": "tag:#in-arbeit", + "query": "", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -143,9 +134,19 @@ "useHierarchy": true } } + }, + { + "id": "1a2599660c2f0844", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "2022-06-27.md" + } + } } ], - "currentTab": 3 + "currentTab": 1 } ], "direction": "horizontal", @@ -153,15 +154,15 @@ }, "active": "5d18a27fbc9bfa7c", "lastOpenFiles": [ - "Firmen/Steinemann Technology/Ky2Help.md", - "Firmen/Steinemann Technology/Monitore.md", + "2022-06-27.md", "Firmen/Steinemann Technology/Todos.md", + "Firmen/Steinemann Technology/aufsetzen der ABPs.md", + "Firmen/Steinemann Technology/Monitore.md", + "Firmen/Steinemann Technology/Ky2Help.md", "Firmen/Steinemann Technology/adobe.md", "Firmen/Steinemann Technology/Auswertungen K2H.md", "Firmen/Bewerbungen/bewerbung 22/firm/bilfinger.md", "atom/atom.md", - "Firmen/Steinemann Technology/aufsetzen der ABPs.md", - "Firmen/Steinemann Technology/Penta/ticketMail.md", - "Rapha/refferat.md" + "Firmen/Steinemann Technology/Penta/ticketMail.md" ] } \ No newline at end of file diff --git a/2022-06-27.md b/2022-06-27.md index dc839f1..af15d20 100644 --- a/2022-06-27.md +++ b/2022-06-27.md @@ -6,3 +6,7 @@ somepass - Diese... "Fehlermeldung" hat ihm Probleme gemacht... ![[OneDrive nicht angemeldet.png]] --- # ADI + [INC-1716 Plotter 0019 findet 2. Rolle nicht](https://steinemann.ky2help.com/incident/1716?12&selectedTask=22659&f155b1b0=11) + +11:05:31 +Problem gelöst: Das Kabel wurde beim Umzug nicht \ No newline at end of file diff --git a/Firmen/steinemann technology/Todos.md b/Firmen/steinemann technology/Todos.md index 9e6ce50..56ec0d4 100644 --- a/Firmen/steinemann technology/Todos.md +++ b/Firmen/steinemann technology/Todos.md @@ -1 +1,2 @@ # [[Auswertungen K2H]] +# \ No newline at end of file