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:
kebl3541 2026-07-08 21:29:59 +01:00
commit 0c7e464904
6 changed files with 387 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.DS_Store

21
LICENSE Normal file
View 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
View file

@ -0,0 +1,29 @@
# Umbra
An Obsidian theme named for the darkest part of a shadow: **very dark, very quiet, one restrained accent**.
![Umbra](screenshot.png)
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&currency_code=EUR)
## License
MIT © [kebl3541](https://github.com/kebl3541)

8
manifest.json Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

328
theme.css Normal file
View 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;
}