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 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
+ * 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, ');
+}
+
+.theme-dark .markdown-preview-view .collapse-indicator::before,
+.theme-dark .CodeMirror-foldgutter-open::after {
+ content: url('data:image/svg+xml; utf8, ');
+}
+
+.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, ');
+}
+
+.theme-dark .markdown-preview-view .is-collapsed .collapse-indicator::before,
+.theme-dark .CodeMirror-foldgutter-folded::after {
+ content: url('data:image/svg+xml; utf8, ');
+}
+
+.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