:root { --color-dracula-background: #282a36; --color-dracula-selection: #44475a; /* a.k.a. "Current line" */ --color-dracula-foreground: #f8f8f2; --color-dracula-comment: #6272a4; --color-dracula-cyan: #8be9fd; --color-dracula-green: #50fa7b; --color-dracula-orange: #ffb86c; --color-dracula-pink: #ff79c6; --color-dracula-purple: #bd93f9; --color-dracula-red: #ff5555; --color-dracula-yellow: #f1fa8c; --color-dracula-yellow-ish: #f4f9bf; /* 50/50 blend of -yellow and -foreground */ --empty-line-height: 1em; /* 1em = 16px = 2/3 of the height of the normal line, which is 24px */ --header-hanging-margin: 30px; /* extra margin for hanging ### (header formatting) in there */ } body { /* HSL components of --color-dracula-comment */ --accent-h: 225; --accent-s: 27%; --accent-l: 51%; /* Text editor layout */ --file-margins: var(--size-4-8) var(--size-4-12); /* wider left margin for hanging header prefixes (see below) */ } body.theme-dark { --color-base-00: var(--color-dracula-background); /* a.k.a. hsl(231, 15%, 18%) */ --color-base-10: hsl(231, 15%, 22%); --color-base-20: hsl(231, 15%, 24%); --color-base-25: hsl(231, 15%, 27%); --color-base-30: hsl(231, 15%, 30%); --color-base-35: hsl(231, 15%, 33%); --color-base-40: hsl(231, 15%, 40%); --color-base-50: hsl(231, 15%, 50%); --color-base-60: hsl(231, 15%, 65%); --color-base-70: hsl(231, 15%, 84%); --color-base-100: var(--color-dracula-foreground); /* a.k.a. hsl(60, 30%, 96%) */ --text-selection: var(--color-dracula-selection); --checklist-done-decoration: none; /* line-through */ --checklist-done-color: var(--text-faint); /* --text-muted */ } body.theme-dark.is-mobile { --color-base-00: hsl(231, 15%, 12%); /* 6pp lower than Desktop, default was #000000 */ --color-base-10: hsl(231, 15%, 17%); /* 5pp lower than Desktop, default was #121212 */ --color-base-20: hsl(231, 15%, 20%); /* 4pp lower than Desktop, default was #1e1e1e */ } /* ******************************************************************************************************************** * Block quotes */ body { --blockquote-border-thickness: 4px; --blockquote-border-color: var(--color-dracula-yellow); --blockquote-color: var(--color-dracula-yellow-ish); } .markdown-source-view .HyperMD-quote { text-indent: -0.875em !important; padding-inline-start: 2.375em !important; } /* Empty line inside the blockquote */ .markdown-source-view .HyperMD-quote:has(> .cm-formatting-quote:only-child) { height: var(--empty-line-height); line-height: var(--empty-line-height); /* to vertically align the lonely `>` in the otherwise empty blockquote line */ } .markdown-preview-view blockquote { margin: 0 0 var(--empty-line-height) 1em; /* like paragraphs, plus left margin */ padding: 0 0 0 1.125em; } .markdown-preview-view blockquote > :last-child { padding-bottom: 0; } /* ******************************************************************************************************************** * Bold and italic */ body { --bold-color: var(--color-dracula-orange); --italic-color: var(--color-dracula-yellow); } .markdown-source-view .cm-formatting-strong, .markdown-source-view .cm-formatting-em { opacity: 0.4; /* For bold text, make the formatting asterisks non-bold */ font-weight: normal; /* For italic text though, we still let the asterisks to be italic, so they align better with the text between them. */ } /* ******************************************************************************************************************** * Code: block code */ body { --code-size: var(--font-small); /* `small` is a bit bigger than code's default `smaller` */ --code-normal: var(--text-muted); /* --text-muted */ --code-comment: var(--color-dracula-comment); /* --text-faint */ --code-function: var(--color-dracula-green); /* --color-yellow */ --code-important: var(--color-dracula-red); /* --color-orange */ --code-keyword: var(--color-dracula-pink); /* --color-pink */ --code-operator: var(--color-dracula-foreground); /* --color-red */ --code-property: var(--color-dracula-orange); /* --color-cyan */ --code-punctuation: var(--text-muted); /* --text-muted */ --code-string: var(--color-dracula-yellow); /* --color-green */ --code-tag: var(--color-dracula-red); /* --color-red */ --code-value: var(--color-dracula-purple); /* --color-purple */ } .markdown-source-view .HyperMD-codeblock-begin, .markdown-source-view .HyperMD-codeblock-end { /* make backticks small */ font-size: 0.625em; /* limit "top padding" height of the block */ height: 0.75rem; /* 12px */ line-height: 1.2rem !important; /* move backticks a bit down */ } .markdown-source-view .HyperMD-codeblock-begin { z-index: 1; /* make overflow visible */ } .markdown-preview-view pre { padding: 0.75em 1em; /* 12px - to match Source's top and bottom backtick rows */ margin: 0 0 var(--empty-line-height) 0; /* like paragraphs */ } .markdown-source-view .HyperMD-codeblock, .markdown-preview-view pre code { line-height: 1.5rem; } /* ******************************************************************************************************************** * Code: inline code */ .markdown-source-view span.cm-inline-code, .markdown-preview-view :not(pre) > code { color: var(--color-dracula-green); padding-top: 0.1875em; /* 3px */ padding-bottom: 0.1875em; /* 3px */ } /* ******************************************************************************************************************** * Hashtags */ body { --tag-size: var(--font-text-size); --tag-color: var(--color-dracula-pink); --tag-color-hover: var(--color-dracula-pink); --tag-background: hsla(var(--interactive-accent-hsl), 0.2); --tag-background-hover: hsla(var(--interactive-accent-hsl), 0.4); --tag-padding-x: 0.25em; /* 4px */ --tag-padding-y: 0.125em; /* 2px */ --tag-radius: 0.1875em; /* 3px */ } /* ******************************************************************************************************************** * Headings * - Six Dracula colors (the "red" is not used) * - Sizes from 1em to 2em with 0.2em interval * - Same look in Source and Preview (except for ###) * - Formatting (###) is header's font-size * 0.6 */ body { --h1-color: var(--color-dracula-pink); --h2-color: var(--color-dracula-purple); --h3-color: var(--color-dracula-cyan); --h4-color: var(--color-dracula-green); --h5-color: var(--color-dracula-yellow); --h6-color: var(--color-dracula-orange); --h1-size: 2em; --h2-size: 1.8em; --h3-size: 1.6em; --h4-size: 1.4em; --h5-size: 1.2em; --h6-size: 1em; --h1-weight: 600; --h2-weight: 600; --h3-weight: 600; --h4-weight: 600; --h5-weight: 600; --h6-weight: 600; --h1-line-height: 1.3125; /* 41.6px → 42px */ --h2-line-height: 1.2847; /* 37.44px → 37px */ --h3-line-height: 1.2891; /* 33.28px → 33px */ --h4-line-height: 1.2946; /* 29.12px → 29px */ --h5-line-height: 1.3021; /* 24.96px → 25px */ --h6-line-height: 1.3125; /* 20.8px → 21px */ --heading-spacing: 0; } .markdown-source-view .HyperMD-header, .markdown-preview-view h1, .markdown-preview-view h2, .markdown-preview-view h3, .markdown-preview-view h4, .markdown-preview-view h5, .markdown-preview-view h6 { margin: 0; } /* Header formatting prefix (###) */ .markdown-source-view .cm-formatting-header { color: inherit; /* inherit color from header, instead of using --heading-formatting */ opacity: 0.4; font-size: 0.6em !important; } /* Hanging prefixes (### is outside in the text margin) */ .markdown-source-view:not(.is-live-preview) .HyperMD-header-1, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-1 { text-indent: -0.4884em; } .markdown-source-view:not(.is-live-preview) .HyperMD-header-2, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-2 { text-indent: -0.8562em; } .markdown-source-view:not(.is-live-preview) .HyperMD-header-3, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-3 { text-indent: -1.2402em; } .markdown-source-view:not(.is-live-preview) .HyperMD-header-4, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-4 { text-indent: -1.7866em; } .markdown-source-view:not(.is-live-preview) .HyperMD-header-5, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-5 { text-indent: -2.2291em; } .markdown-source-view:not(.is-live-preview) .HyperMD-header-6, .markdown-source-view.is-live-preview .cm-active.HyperMD-header-6 { text-indent: -2.6894em; } /* Empty line after headers, to align Preview with Source (sizing looks tricky, but it's just to make the padding the same size in pixels) */ .markdown-preview-view h1 { margin-bottom: calc(var(--empty-line-height) / 2); } .markdown-preview-view h2 { margin-bottom: calc(var(--empty-line-height) / 1.8); } .markdown-preview-view h3 { margin-bottom: calc(var(--empty-line-height) / 1.6); } .markdown-preview-view h4 { margin-bottom: calc(var(--empty-line-height) / 1.4); } .markdown-preview-view h5 { margin-bottom: calc(var(--empty-line-height) / 1.2); } .markdown-preview-view h6 { margin-bottom: calc(var(--empty-line-height) / 1); } /* ******************************************************************************************************************** * Links */ body { --link-color: var(--color-dracula-pink); --link-color-hover: var(--color-dracula-purple); --link-external-color: var(--color-dracula-pink); --link-external-color-hover: var(--color-dracula-purple); --link-unresolved-color: var(--color-dracula-pink); --link-unresolved-opacity: 0.5; --link-unresolved-decoration-color: var(--color-dracula-pink); } /* URL part in `[text](url)` */ .markdown-source-view .cm-string.cm-url { color: var(--color-dracula-cyan); } /* Parens around URL in `[text](url)`, since they don't use punctuation color by default */ .markdown-source-view .cm-string.cm-url.cm-formatting-link-string { color: var(--text-faint); } /* ******************************************************************************************************************** * Lists * - Because overriding `--list-spacing` is not enough */ body { /* Obsidian vars */ --list-spacing: 0; /* takes care of vertical padding on list items */ --list-indent: 1.172em; /* with the code below, this var only affects OL */ /* Custom vars */ --list-item-gap: 0.375em; /* bottom margin for a list item, to keep the items separated */ --list-ul-margin: 0.272em; /* left margin of ul list, before `- ` */ --list-ul-bullet-width: 0.75em; /* width of `- ` is 11.42px by default, we round it to 12px */ --list-ol-margin: 0.125em; /* left margin of ol list, before `1. ` */ --list-ol-bullet-width: 1.75em; /* width of `99. ` is 28.16px; we set it to 28px, even for `1. ` */ --list-task-checkbox-width: 2.0625em; /* width of `[ ] ` is 33px */ } /* Source OL+UL list items (vertical) */ .markdown-source-view .HyperMD-list-line + .HyperMD-list-line { padding-top: var(--list-item-gap) !important; padding-bottom: 0 !important; } /* Source UL indentation (non-task, top-level only) */ .markdown-source-view .HyperMD-list-line-1:has(> .cm-formatting-list-ul) { text-indent: calc(-1 * var(--list-ul-bullet-width)) !important; padding-inline-start: calc(var(--list-ul-margin) + var(--list-ul-bullet-width)) !important; } /* Source UL indentation (tasks, top level) */ .markdown-source-view .HyperMD-list-line-1.HyperMD-task-line:has(> .cm-formatting-list-ul) { text-indent: calc(-1 * var(--list-ul-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(var(--list-ul-margin) + var(--list-ul-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source UL indentation (tasks, 2nd level) */ .markdown-source-view .HyperMD-list-line-2.HyperMD-task-line:has(> .cm-formatting-list-ul) { text-indent: calc(-1 * var(--list-indent) - var(--list-ul-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(var(--list-indent) + var(--list-ul-margin) + var(--list-ul-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source UL indentation (tasks, 3rd level) */ .markdown-source-view .HyperMD-list-line-3.HyperMD-task-line:has(> .cm-formatting-list-ul) { text-indent: calc(-2 * var(--list-indent) - var(--list-ul-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(2 * var(--list-indent) + var(--list-ul-margin) + var(--list-ul-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source OL indentation (non-task, top-level only) */ .markdown-source-view .HyperMD-list-line-1:has(> .cm-formatting-list-ol) { text-indent: calc(-1 * var(--list-ol-bullet-width)) !important; padding-inline-start: calc(var(--list-ol-margin) + var(--list-ol-bullet-width)) !important; } /* Source OL indentation (tasks, top level) */ .markdown-source-view .HyperMD-list-line-1.HyperMD-task-line:has(> .cm-formatting-list-ol) { text-indent: calc(-1 * var(--list-ol-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(var(--list-ol-margin) + var(--list-ol-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source OL indentation (tasks, 2nd level) */ .markdown-source-view .HyperMD-list-line-2.HyperMD-task-line:has(> .cm-formatting-list-ol) { text-indent: calc(-1 * var(--list-indent) - var(--list-ol-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(var(--list-indent) + var(--list-ol-margin) + var(--list-ol-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source OL indentation (tasks, 3rd level) */ .markdown-source-view .HyperMD-list-line-3.HyperMD-task-line:has(> .cm-formatting-list-ol) { text-indent: calc(-2 * var(--list-indent) - var(--list-ol-bullet-width) - var(--list-task-checkbox-width)) !important; padding-inline-start: calc(2 * var(--list-indent) + var(--list-ol-margin) + var(--list-ol-bullet-width) + var(--list-task-checkbox-width)) !important; } /* Source UL bullet width (any-level) */ .markdown-source-view .HyperMD-list-line .cm-formatting-list-ul { display: inline-block; min-width: var(--list-ul-bullet-width); text-align: right; } /* Source OL bullet width (any-level) */ .markdown-source-view .HyperMD-list-line .cm-formatting-list-ol { display: inline-block; min-width: var(--list-ol-bullet-width); text-align: right; } /* Preview UL+OL list items (vertical) * - top-level ones get gaps, except for the first one * - nested ones get gaps, including the first one */ .markdown-preview-view li + li, .markdown-preview-view li li { margin: var(--list-item-gap) 0 0 0; } /* Preview UL+OL lists (vertical, top-level only) */ .markdown-preview-view :not(li) > ul, .markdown-preview-view :not(li) > ol { margin-top: 0; margin-bottom: var(--empty-line-height); /* like paragraphs */ } /* Preview UL indentation (any-level) */ .markdown-preview-view ul { margin-left: calc(var(--list-ul-margin) + var(--list-ul-bullet-width)); padding: 0; } /* Preview OL indentation (top-level only) */ .markdown-preview-view :not(li) > ol { margin-left: calc(var(--list-ol-margin) + var(--list-ol-bullet-width)); padding: 0; } /* Preview UL tasks */ .markdown-preview-view :not(li) > ul.contains-task-list { padding-left: calc(var(--checkbox-size) * 2.065); } .markdown-preview-view li > ul.contains-task-list { padding-left: calc(var(--checkbox-size) * 0.152); } .markdown-preview-view ul.contains-task-list .task-list-item-checkbox { margin-left: calc(var(--checkbox-size) * -1.65); margin-right: calc(var(--checkbox-size) * 0.65); } /* Preview OL tasks */ .markdown-preview-view ol li.task-list-item { padding-left: calc(var(--checkbox-size) * 2.065); } .markdown-preview-view li > ol.contains-task-list { margin-left: calc(var(--checkbox-size) * -2.065); } .markdown-preview-view ol.contains-task-list .task-list-item-checkbox { margin-left: calc(var(--checkbox-size) * -1.65); margin-right: calc(var(--checkbox-size) * 0.65); } /* Preview UL bullet: move down and right */ .markdown-preview-view .list-bullet { justify-content: initial; padding-top: 0.0625em; /* 1px */ margin-left: -0.75em; /* distance between bullet and text; default is -1em */ } /* Missing checked/done style for OL tasks (copied from the existing UL style in app.css) */ ol > li.task-list-item[data-task="x"], ol > li.task-list-item[data-task="X"] { text-decoration: var(--checklist-done-decoration); color: var(--checklist-done-color); } /* ******************************************************************************************************************** * Paragraphs & empty lines * - in Source, we'll have empty lines after each block (header, paragraph, list etc.) * - in Preview, we'll emulate empty lines with the equivalent padding-bottom / margin-bottom */ /* Empty line in Source is a separator, and should look smaller than a line with text */ .markdown-source-view .cm-line:has(> br:only-child) { height: var(--empty-line-height); line-height: var(--empty-line-height); /* to vertically align the text cursor in the empty line */ } /* Empty line after paragraphs, to align Preview with Source */ .markdown-preview-view p { margin: 0 0 var(--empty-line-height) 0; padding: 0; } /* ******************************************************************************************************************** * Tables */ body { --table-header-background: var(--color-base-20); } /* ******************************************************************************************************************** * Thematic breaks (horizontal rules,
) */ .markdown-source-view .cm-hr { /* Preview's color (--hr-color) is `--color-base-30`, but for Source's short `---` we need a brighter one */ color: var(--color-base-40); font-weight: bold; } .markdown-preview-view hr { /* to match Source's paragraphs, the height must be = 1.5, plus --empty-line-height on both sides */ --hr-required-size: 1.5em; /* normal text line height */ --hr-remainder: calc(var(--hr-required-size) - var(--hr-thickness)); --hr-margin: calc(var(--hr-remainder) / 2 + var(--empty-line-height)); margin: var(--hr-margin) 0; } /* ******************************************************************************************************************** * YAML front matter (metadata) * - Metadata is only visible if enabled in the settings * - We make it look very much like a code block */ /* All metadata rows (formatting + content) */ .markdown-source-view .cm-line:has(> .cm-hmd-frontmatter) { background-color: var(--code-background); padding-left: var(--size-4-4); } /* Text in metadata rows (formatting + content) */ .markdown-source-view .cm-line > .cm-hmd-frontmatter { color: var(--text-faint); } /* Formatting rows (top and bottom) */ .markdown-source-view .cm-line:has(> .cm-hmd-frontmatter.cm-def) { /* make "---" small */ font-size: 0.625em; /* limit "top padding" height of the block */ height: 0.75rem; /* 12px */ line-height: 0.75rem; /* 12px */ border-radius: var(--radius-s) var(--radius-s) 0 0; } /* Bottom formatting row */ .markdown-source-view .cm-line:has(> .cm-hmd-frontmatter) + .cm-line:has(> .cm-hmd-frontmatter.cm-def) { border-radius: 0 0 var(--radius-s) var(--radius-s); } /* Content rows */ .markdown-source-view .cm-line > .cm-hmd-frontmatter:not(.cm-def) { height: 1.5rem; line-height: 1.5rem; vertical-align: top; } /* The rest is for Preview */ .markdown-preview-view .frontmatter-container { color: var(--text-faint); background-color: var(--code-background); border-radius: var(--radius-s); padding: 0.75em 1em; /* 12px - to match Source's top and bottom backtick rows */ margin: 0 0 var(--empty-line-height) 0; /* like paragraphs */ } .markdown-preview-view .frontmatter-container-header { display: none; } .markdown-preview-view .frontmatter-section { line-height: 1.5em; margin: 0; } .markdown-preview-view .frontmatter-section-label, .markdown-preview-view .frontmatter-section-data { font-family: var(--font-monospace); font-size: var(--font-smaller); text-transform: none; }