mirror of
https://github.com/kebl3541/Obsidian-Umbra.git
synced 2026-07-22 05:00:28 +00:00
Umbra 1.0.0
A very dark, minimalist theme: near black surfaces, hairline borders, quiet grays, one restrained violet accent. Dark mode only.
This commit is contained in:
commit
0c7e464904
6 changed files with 387 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.DS_Store
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 kebl3541
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
29
README.md
Normal file
29
README.md
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# Umbra
|
||||
|
||||
An Obsidian theme named for the darkest part of a shadow: **very dark, very quiet, one restrained accent**.
|
||||
|
||||

|
||||
|
||||
Near black surfaces, hairline borders in place of visible chrome, muted grays for everything that is not your text, and a single desaturated violet for links, tags, and the caret. Headings differ by weight, not by color. The interface recedes; the note is the interface.
|
||||
|
||||
## Design choices
|
||||
|
||||
- The editor sits on near black (#09090c); sidebars are one shade away, separated by hairlines rather than panels.
|
||||
- Your fonts are respected. Umbra sets weights and rhythm, never typefaces.
|
||||
- Inactive tabs, the ribbon, the status bar, and frontmatter properties stay dim until you interact with them.
|
||||
- Completed tasks fade and strike through; list markers and indentation guides are barely there.
|
||||
- Shadows are gone except under popovers, where depth is information.
|
||||
- Dark mode only, by design.
|
||||
|
||||
## Install
|
||||
|
||||
From the community theme store: Settings, Appearance, Themes, Manage, search for Umbra. Or manually: copy `manifest.json` and `theme.css` into `<your vault>/.obsidian/themes/Umbra/`, then pick Umbra under Settings, Appearance, Themes.
|
||||
|
||||
## Support
|
||||
|
||||
[<img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-support-yellow?logo=buymeacoffee" height="28">](https://buymeacoffee.com/philosophizer)
|
||||
[<img src="https://img.shields.io/badge/PayPal-donate-blue?logo=paypal" height="28">](https://www.paypal.com/donate/?business=berlin.philosophy%40gmail.com&no_recurring=0¤cy_code=EUR)
|
||||
|
||||
## License
|
||||
|
||||
MIT © [kebl3541](https://github.com/kebl3541)
|
||||
8
manifest.json
Normal file
8
manifest.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "Umbra",
|
||||
"version": "1.0.0",
|
||||
"minAppVersion": "1.0.0",
|
||||
"author": "kebl3541",
|
||||
"authorUrl": "https://github.com/kebl3541",
|
||||
"fundingUrl": "https://buymeacoffee.com/philosophizer"
|
||||
}
|
||||
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 144 KiB |
328
theme.css
Normal file
328
theme.css
Normal file
|
|
@ -0,0 +1,328 @@
|
|||
/* Umbra: a very dark, minimalist theme for Obsidian.
|
||||
The darkest part of a shadow. Near black surfaces, hairline borders,
|
||||
quiet grays, and a single restrained violet accent. Dark mode only. */
|
||||
|
||||
.theme-dark {
|
||||
color-scheme: dark;
|
||||
|
||||
/* ---- Surfaces ------------------------------------------------------- */
|
||||
--background-primary: #09090c;
|
||||
--background-primary-alt: #0d0d11;
|
||||
--background-secondary: #0c0c10;
|
||||
--background-secondary-alt: #0f0f14;
|
||||
--titlebar-background: #09090c;
|
||||
--titlebar-background-focused: #09090c;
|
||||
|
||||
/* Hairlines instead of visible chrome */
|
||||
--background-modifier-border: rgba(255, 255, 255, 0.06);
|
||||
--background-modifier-border-hover: rgba(255, 255, 255, 0.1);
|
||||
--background-modifier-border-focus: rgba(148, 142, 240, 0.35);
|
||||
--divider-color: rgba(255, 255, 255, 0.05);
|
||||
--tab-outline-color: transparent;
|
||||
|
||||
--background-modifier-hover: rgba(255, 255, 255, 0.04);
|
||||
--background-modifier-active-hover: rgba(125, 118, 232, 0.1);
|
||||
--background-modifier-form-field: #0e0e13;
|
||||
--background-modifier-message: #16161c;
|
||||
|
||||
/* ---- Text ----------------------------------------------------------- */
|
||||
--text-normal: #c7c7cf;
|
||||
--text-muted: #82828c;
|
||||
--text-faint: #55555e;
|
||||
--text-on-accent: #0b0b0e;
|
||||
--text-on-accent-inverted: #e9e9f0;
|
||||
|
||||
--bold-color: #e4e4ec;
|
||||
--italic-color: #d6d6de;
|
||||
|
||||
/* ---- The one accent -------------------------------------------------- */
|
||||
--interactive-accent: #7d76e8;
|
||||
--interactive-accent-hover: #948ef0;
|
||||
--text-accent: #a29bf2;
|
||||
--text-accent-hover: #bab4f7;
|
||||
--link-color: #a29bf2;
|
||||
--link-color-hover: #bab4f7;
|
||||
--link-external-color: #a29bf2;
|
||||
--link-external-color-hover: #bab4f7;
|
||||
--link-decoration: none;
|
||||
--link-external-decoration: none;
|
||||
--link-decoration-hover: underline;
|
||||
|
||||
--text-selection: rgba(125, 118, 232, 0.22);
|
||||
--text-highlight-bg: rgba(125, 118, 232, 0.16);
|
||||
--caret-color: #948ef0;
|
||||
|
||||
/* ---- Headings: same ink, different weight only ----------------------- */
|
||||
--heading-formatting: var(--text-faint);
|
||||
--h1-color: #e4e4ec;
|
||||
--h2-color: #e4e4ec;
|
||||
--h3-color: #dcdce4;
|
||||
--h4-color: #d2d2da;
|
||||
--h5-color: #c7c7cf;
|
||||
--h6-color: #82828c;
|
||||
--h1-weight: 650;
|
||||
--h2-weight: 650;
|
||||
--h3-weight: 600;
|
||||
--h4-weight: 600;
|
||||
--h5-weight: 600;
|
||||
--h6-weight: 600;
|
||||
--h1-size: 1.6em;
|
||||
--h2-size: 1.35em;
|
||||
--h3-size: 1.18em;
|
||||
--h4-size: 1.05em;
|
||||
--h5-size: 1em;
|
||||
--h6-size: 0.92em;
|
||||
--inline-title-weight: 650;
|
||||
--inline-title-color: #e4e4ec;
|
||||
|
||||
/* ---- Editor comfort --------------------------------------------------- */
|
||||
--line-height-normal: 1.6;
|
||||
--p-spacing: 0.9em;
|
||||
|
||||
/* ---- Code ------------------------------------------------------------- */
|
||||
--code-background: #0f0f15;
|
||||
--code-normal: #b9b9c4;
|
||||
--code-comment: #5f5f6a;
|
||||
--code-function: #a29bf2;
|
||||
--code-keyword: #8d86ec;
|
||||
--code-string: #9aa88a;
|
||||
--code-value: #c2a889;
|
||||
--code-property: #b9b9c4;
|
||||
--code-punctuation: #82828c;
|
||||
--code-tag: #8d86ec;
|
||||
--code-radius: 6px;
|
||||
|
||||
/* ---- Blockquotes, rules, tables --------------------------------------- */
|
||||
--blockquote-border-color: rgba(255, 255, 255, 0.14);
|
||||
--blockquote-border-thickness: 1px;
|
||||
--blockquote-color: #a2a2ac;
|
||||
--hr-color: rgba(255, 255, 255, 0.08);
|
||||
--hr-thickness: 1px;
|
||||
--table-border-color: rgba(255, 255, 255, 0.07);
|
||||
--table-header-weight: 600;
|
||||
--table-header-color: #a2a2ac;
|
||||
--table-row-even-background: transparent;
|
||||
--table-row-alt-background: rgba(255, 255, 255, 0.015);
|
||||
|
||||
/* ---- Lists and checkboxes ---------------------------------------------- */
|
||||
--checkbox-radius: 4px;
|
||||
--checkbox-color: #7d76e8;
|
||||
--checkbox-color-hover: #948ef0;
|
||||
--checkbox-border-color: rgba(255, 255, 255, 0.22);
|
||||
--checkbox-border-color-hover: rgba(255, 255, 255, 0.35);
|
||||
--checklist-done-color: #55555e;
|
||||
--checklist-done-decoration: line-through;
|
||||
--list-marker-color: #55555e;
|
||||
|
||||
/* ---- Tags -------------------------------------------------------------- */
|
||||
--tag-background: rgba(125, 118, 232, 0.09);
|
||||
--tag-background-hover: rgba(125, 118, 232, 0.16);
|
||||
--tag-color: #a29bf2;
|
||||
--tag-color-hover: #bab4f7;
|
||||
--tag-decoration: none;
|
||||
--tag-decoration-hover: none;
|
||||
--tag-radius: 4px;
|
||||
|
||||
/* ---- App chrome: quiet until needed ------------------------------------- */
|
||||
--ribbon-background: #09090c;
|
||||
--ribbon-background-collapsed: #09090c;
|
||||
--tab-background-active: #0d0d11;
|
||||
--tab-text-color: #74747e;
|
||||
--tab-text-color-focused: #a2a2ac;
|
||||
--tab-text-color-focused-active: #e4e4ec;
|
||||
--tab-text-color-focused-active-current: #e4e4ec;
|
||||
--icon-color: #6b6b75;
|
||||
--icon-color-hover: #c7c7cf;
|
||||
--icon-color-active: #a29bf2;
|
||||
--icon-color-focused: #c7c7cf;
|
||||
--nav-item-color: #82828c;
|
||||
--nav-item-color-hover: #c7c7cf;
|
||||
--nav-item-color-active: #e4e4ec;
|
||||
--nav-item-background-active: rgba(255, 255, 255, 0.045);
|
||||
--nav-item-background-hover: rgba(255, 255, 255, 0.03);
|
||||
--nav-item-weight-active: 500;
|
||||
--nav-indentation-guide-color: rgba(255, 255, 255, 0.04);
|
||||
--status-bar-background: transparent;
|
||||
--status-bar-border-color: transparent;
|
||||
--status-bar-text-color: #55555e;
|
||||
--status-bar-border-width: 0;
|
||||
--prompt-border-color: rgba(255, 255, 255, 0.08);
|
||||
--modal-border-color: rgba(255, 255, 255, 0.08);
|
||||
|
||||
/* ---- Scrollbars: hairline ------------------------------------------------ */
|
||||
--scrollbar-bg: transparent;
|
||||
--scrollbar-thumb-bg: rgba(255, 255, 255, 0.08);
|
||||
--scrollbar-active-thumb-bg: rgba(255, 255, 255, 0.16);
|
||||
|
||||
/* ---- Graph ---------------------------------------------------------------- */
|
||||
--graph-line: rgba(255, 255, 255, 0.08);
|
||||
--graph-node: #82828c;
|
||||
--graph-node-unresolved: #454550;
|
||||
--graph-node-tag: #7d76e8;
|
||||
--graph-node-attachment: #9aa88a;
|
||||
--graph-node-focused: #a29bf2;
|
||||
--graph-text: #82828c;
|
||||
|
||||
/* ---- Misc ------------------------------------------------------------------- */
|
||||
--embed-border-left: 1px solid rgba(255, 255, 255, 0.14);
|
||||
--collapse-icon-color: #55555e;
|
||||
--collapse-icon-color-collapsed: #82828c;
|
||||
--indentation-guide-color: rgba(255, 255, 255, 0.04);
|
||||
--indentation-guide-color-active: rgba(255, 255, 255, 0.09);
|
||||
--shadow-s: none;
|
||||
--shadow-l: 0 4px 28px rgba(0, 0, 0, 0.5);
|
||||
--input-shadow: none;
|
||||
--input-shadow-hover: none;
|
||||
}
|
||||
|
||||
/* ---- Signature details ---------------------------------------------- */
|
||||
|
||||
/* Titles carry a hint of display tightening */
|
||||
.theme-dark .inline-title,
|
||||
.theme-dark .markdown-rendered h1,
|
||||
.theme-dark .cm-header-1 {
|
||||
letter-spacing: -0.015em;
|
||||
}
|
||||
|
||||
/* The active tab earns a hairline of accent */
|
||||
.theme-dark .workspace-tab-header.is-active.mod-active::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 12px;
|
||||
right: 12px;
|
||||
bottom: 0;
|
||||
height: 2px;
|
||||
border-radius: 2px;
|
||||
background: var(--interactive-accent);
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
/* Callouts: monochrome surfaces, the type color survives only as a
|
||||
left hairline and the icon, so twelve callout types stop shouting */
|
||||
.theme-dark .callout {
|
||||
background: rgba(255, 255, 255, 0.022);
|
||||
border: none;
|
||||
border-left: 2px solid rgba(var(--callout-color), 0.55);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.theme-dark .callout .callout-title {
|
||||
color: rgb(var(--callout-color));
|
||||
opacity: 0.9;
|
||||
}
|
||||
.theme-dark .callout .callout-content {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
/* Tables: horizontal rules only, like a book */
|
||||
.theme-dark .markdown-rendered table th,
|
||||
.theme-dark .markdown-rendered table td,
|
||||
.theme-dark .markdown-source-view.mod-cm6 .cm-table-widget th,
|
||||
.theme-dark .markdown-source-view.mod-cm6 .cm-table-widget td {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
.theme-dark .markdown-rendered table,
|
||||
.theme-dark .markdown-source-view.mod-cm6 .cm-table-widget table {
|
||||
border: none;
|
||||
border-top: 1px solid var(--table-border-color);
|
||||
border-bottom: 1px solid var(--table-border-color);
|
||||
}
|
||||
|
||||
/* Tags become quiet pills */
|
||||
.theme-dark .tag,
|
||||
.theme-dark .cm-hashtag {
|
||||
border-radius: 999px;
|
||||
padding: 0.05em 0.65em;
|
||||
font-size: 0.85em;
|
||||
border: none;
|
||||
}
|
||||
.theme-dark .cm-hashtag-begin {
|
||||
padding-right: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
.theme-dark .cm-hashtag-end {
|
||||
padding-left: 0.1em;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
/* Code blocks get a hairline so they hold their shape on any background */
|
||||
.theme-dark .markdown-rendered pre,
|
||||
.theme-dark .markdown-source-view.mod-cm6 .HyperMD-codeblock {
|
||||
border: none;
|
||||
}
|
||||
.theme-dark .markdown-rendered pre {
|
||||
border: 1px solid rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
/* The status bar sleeps until you look at it */
|
||||
.theme-dark .status-bar {
|
||||
opacity: 0.55;
|
||||
transition: opacity 150ms ease;
|
||||
}
|
||||
.theme-dark .status-bar:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Interactions ease instead of snapping */
|
||||
.theme-dark .nav-file-title,
|
||||
.theme-dark .nav-folder-title,
|
||||
.theme-dark .workspace-tab-header,
|
||||
.theme-dark .clickable-icon,
|
||||
.theme-dark .checkbox-container,
|
||||
.theme-dark a,
|
||||
.theme-dark .tag,
|
||||
.theme-dark .cm-hashtag {
|
||||
transition: color 120ms ease, background-color 120ms ease,
|
||||
border-color 120ms ease, opacity 120ms ease;
|
||||
}
|
||||
.theme-dark input[type="checkbox"] {
|
||||
transition: background-color 120ms ease, border-color 120ms ease;
|
||||
}
|
||||
|
||||
/* Popovers and menus float on true depth, the one place shadows remain */
|
||||
.theme-dark .menu,
|
||||
.theme-dark .popover,
|
||||
.theme-dark .prompt,
|
||||
.theme-dark .modal {
|
||||
border: 1px solid rgba(255, 255, 255, 0.07);
|
||||
}
|
||||
|
||||
/* Footnote references take the accent quietly */
|
||||
.theme-dark .markdown-rendered sup.footnote-ref a,
|
||||
.theme-dark .cm-footref {
|
||||
color: var(--text-accent);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Frontmatter properties: recede unless you look at them */
|
||||
.theme-dark .metadata-container {
|
||||
--metadata-label-text-color: #55555e;
|
||||
--metadata-input-text-color: #82828c;
|
||||
--metadata-divider-color: transparent;
|
||||
}
|
||||
|
||||
/* The active line breathes, barely */
|
||||
.theme-dark .markdown-source-view.mod-cm6 .cm-active.cm-line {
|
||||
background-color: rgba(255, 255, 255, 0.014);
|
||||
}
|
||||
|
||||
/* Hairline under the tab bar only when a note is open */
|
||||
.theme-dark .workspace-tab-header-container {
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
/* Quiet the view header until hovered */
|
||||
.theme-dark .view-header-title {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
.theme-dark .workspace-leaf.mod-active .view-header-title {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
/* Search matches use the accent softly */
|
||||
.theme-dark .search-result-file-matched-text {
|
||||
background-color: rgba(125, 118, 232, 0.18);
|
||||
color: inherit;
|
||||
}
|
||||
Loading…
Reference in a new issue