kulysocc_obsidian-bumblebee/theme.css
KulySocc 198a3c231d Align header-flash and Outline+ active fills to the neutral Surface
Two highlights still painted an accent/amber fill instead of the neutral
mono Surface used by active nav items (ADR-0007):

- Heading/block navigation flash (.is-flashing) used --text-highlight-bg
  (the amber ==mark== colour); move it to --bb-surface-selected and drop
  the `lighten` blend so it matches a selected nav row.
- Outline+ fills its active item with --interactive-accent; keep the accent
  text but swap the fill for --bb-surface-selected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 20:38:52 +02:00

1559 lines
No EOL
55 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* @settings
name: Bumblebee theme settings
id: bumblebee
settings:
-
# Headers underline
id: headers-underline
title: Headers underline
type: heading
level: 1
collapsed: true
-
id: h1-underline
title: H1 header underline
type: class-toggle
-
id: h2-underline
title: H2 header underline
type: class-toggle
-
# Headers Settings
id: headers
title: Headers colors
type: heading
level: 1
collapsed: true
-
# All Headers
id: all-headers
title: All headers
type: heading
level: 3
collapsed: true
-
id: headers-one-color
title: All headers are the same color
type: class-toggle
default: true
-
id: h-color-theme
title: Header color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
# Particular Headers
id: particular-headers
title: Particular headers
description: These settings won't work if `All headers are the same color` is ON
type: heading
level: 3
collapsed: true
-
id: h1-color-theme
title: H1 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
id: h2-color-theme
title: H2 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
id: h3-color-theme
title: H3 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
id: h4-color-theme
title: H4 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
id: h5-color-theme
title: H5 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
id: h6-color-theme
title: H6 color
type: variable-themed-color
opacity: false
format: hex
default-light: '#000000'
default-dark: '#FFFFFF'
-
# Kanban Settings
id: kanban
title: Kanban
type: heading
level: 1
collapsed: true
-
id: kanban-variant
title: Kanban variant
description: Variations of Kanban styles
type: class-select
allowEmpty: false
default: kanban-full
options:
-
label: Full style
value: kanban-full
-
label: Minimal style
value: kanban-on
-
label: Disable styles
value: kanban-off
-
id: kanban-same-height-cards
title: Minimal height for cards
description: All cards will have the same initial height
type: class-toggle
default: true
-
id: kanban-full-height-column
title: Full height lists
type: class-toggle
default: true
*/
body {
/* Animations */
--anim-duration-none: 0;
--anim-duration-superfast: 70ms;
--anim-duration-fast: 140ms;
--anim-duration-moderate: 300ms;
--anim-duration-slow: 560ms;
--anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95);
--anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1);
--anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55);
--anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1);
/* Blockquotes */
--blockquote-border-thickness: 2px;
--blockquote-border-color: var(--interactive-accent);
--blockquote-font-style: normal;
--blockquote-color: inherit;
--blockquote-background-color: transparent;
/* Bold — overridden per mode below */
--bold-weight: var(--font-semibold);
--bold-color: inherit;
/* Borders */
--border-width: 1px;
/* Buttons */
--button-radius: var(--bb-radius-pill);
/* Callouts — tinted title row over outlined transparent body (see ADR-0005) */
--callout-border-width: 1px;
--callout-border-opacity: 0.40;
--callout-padding: 0;
--callout-radius: var(--bb-radius-soft);
--callout-blend-mode: normal;
--callout-title-color: inherit;
--callout-title-padding: var(--size-4-2) var(--size-4-3);
--callout-title-size: inherit;
--callout-content-padding: var(--size-4-3);
--callout-content-background: transparent;
--callout-bug: var(--color-red-rgb);
--callout-default: var(--color-blue-rgb);
--callout-error: var(--color-red-rgb);
--callout-example: var(--color-purple-rgb);
--callout-fail: var(--color-red-rgb);
--callout-important: var(--color-cyan-rgb);
--callout-info: var(--color-blue-rgb);
--callout-question: var(--color-yellow-rgb);
--callout-success: var(--color-green-rgb);
--callout-summary: var(--color-cyan-rgb);
--callout-tip: var(--color-cyan-rgb);
--callout-todo: var(--color-blue-rgb);
--callout-warning: var(--color-orange-rgb);
--callout-quote: 158, 158, 158;
/* Canvas */
--canvas-background: var(--background-primary);
--canvas-card-label-color: var(--text-faint);
--canvas-color-1: var(--color-red-rgb);
--canvas-color-2: var(--color-orange-rgb);
--canvas-color-3: var(--color-yellow-rgb);
--canvas-color-4: var(--color-green-rgb);
--canvas-color-5: var(--color-cyan-rgb);
--canvas-color-6: var(--color-purple-rgb);
--canvas-dot-pattern: var(--color-base-30);
/* Checkboxes */
--checkbox-radius: var(--radius-s);
--checkbox-size: var(--font-text-size);
--checkbox-marker-color: var(--background-primary);
--checkbox-color: var(--interactive-accent);
--checkbox-color-hover: var(--interactive-accent-hover);
--checkbox-border-color: var(--text-faint);
--checkbox-border-color-hover: var(--text-muted);
--checklist-done-decoration: line-through;
--checklist-done-color: var(--text-muted);
/* Code — tokens map to palette colors defined per mode */
--code-white-space: pre-wrap;
--code-size: var(--font-smaller);
--code-background: var(--background-primary-alt);
--code-normal: var(--text-muted);
--code-comment: var(--text-faint);
--code-function: var(--color-orange);
--code-important: var(--color-orange);
--code-keyword: var(--color-red);
--code-property: var(--color-blue);
--code-punctuation: var(--text-muted);
--code-string: var(--color-green);
--code-tag: var(--color-red);
--code-value: var(--color-purple);
/* Collapse icons */
--collapse-icon-color: var(--text-faint);
--collapse-icon-color-collapsed: var(--text-accent);
/* Cursor — pointer on interactive chrome for IDE-feel; see ADR 0006 */
--cursor: pointer;
--cursor-link: pointer;
/* Dialogs */
--dialog-width: 560px;
--dialog-max-width: 80vw;
--dialog-max-height: 85vh;
/* Dividers */
--divider-color: var(--background-modifier-border);
--divider-color-hover: var(--interactive-accent);
--divider-width: 1px;
--divider-width-hover: 3px;
--divider-vertical-height: calc(100% - var(--header-height));
/* Dragging */
--drag-ghost-background: rgba(0, 0, 0, 0.85);
--drag-ghost-text-color: #fff;
/* Embeds */
--embed-max-height: 4000px;
--embed-canvas-max-height: 400px;
--embed-background: inherit;
--embed-border-left: 2px solid var(--interactive-accent);
--embed-border-right: none;
--embed-border-top: none;
--embed-border-bottom: none;
--embed-padding: 0 0 0 var(--size-4-6);
--embed-font-style: inherit;
--embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border),
inset 0 0 0 1px var(--background-modifier-border);
/* File layout */
--file-line-width: 700px;
--file-folding-offset: 24px;
--file-margins: var(--size-4-8);
--file-header-font-size: var(--font-ui-small);
--file-header-font-weight: 400;
--file-header-border: var(--border-width) solid transparent;
--file-header-justify: center;
/* Relative font sizes */
--font-smallest: 0.8em;
--font-smaller: 0.875em;
--font-small: 0.933em;
/* UI font sizes */
--font-ui-smaller: 12px;
--font-ui-small: 13px;
--font-ui-medium: 15px;
--font-ui-large: 20px;
/* Font weights */
--font-thin: 100;
--font-extralight: 200;
--font-light: 300;
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
--font-extrabold: 800;
--font-black: 900;
/* Footnotes */
--footnote-size: var(--font-smaller);
/* Graphs */
--graph-controls-width: 240px;
--graph-text: var(--text-normal);
--graph-line: var(--color-base-35, var(--background-modifier-border-focus));
--graph-node: var(--text-muted);
--graph-node-unresolved: var(--text-faint);
--graph-node-focused: var(--text-accent);
--graph-node-tag: var(--color-green);
--graph-node-attachment: var(--color-yellow);
/* Headings */
--heading-formatting: var(--text-faint);
--h1-color: var(--h1-color-theme);
--h2-color: var(--h2-color-theme);
--h3-color: var(--h3-color-theme);
--h4-color: var(--h4-color-theme);
--h5-color: var(--h5-color-theme);
--h6-color: var(--h6-color-theme);
--h1-font: inherit;
--h2-font: inherit;
--h3-font: inherit;
--h4-font: inherit;
--h5-font: inherit;
--h6-font: inherit;
--h1-line-height: 1.2;
--h2-line-height: 1.2;
--h3-line-height: 1.3;
--h4-line-height: 1.4;
--h5-line-height: var(--line-height-normal);
--h6-line-height: var(--line-height-normal);
--h1-size: 2em;
--h2-size: 1.6em;
--h3-size: 1.37em;
--h4-size: 1.25em;
--h5-size: 1.12em;
--h6-size: 1.12em;
--h1-style: normal;
--h2-style: normal;
--h3-style: normal;
--h4-style: normal;
--h5-style: normal;
--h6-style: normal;
--h1-variant: normal;
--h2-variant: normal;
--h3-variant: normal;
--h4-variant: normal;
--h5-variant: normal;
--h6-variant: normal;
--h1-weight: 700;
--h2-weight: 600;
--h3-weight: 600;
--h4-weight: 600;
--h5-weight: 600;
--h6-weight: 600;
/* View header */
--header-height: 40px;
/* Horizontal rules */
--hr-color: var(--background-modifier-border);
--hr-thickness: 2px;
/* Icons */
--icon-size: var(--icon-m);
--icon-stroke: var(--icon-m-stroke-width);
--icon-xs: 14px;
--icon-s: 16px;
--icon-m: 18px;
--icon-l: 18px;
--icon-xl: 32px;
--icon-xs-stroke-width: 2px;
--icon-s-stroke-width: 2px;
--icon-m-stroke-width: 1.75px;
--icon-l-stroke-width: 1.75px;
--icon-xl-stroke-width: 1.25px;
--icon-color: var(--text-muted);
--icon-color-hover: var(--text-muted);
--icon-color-active: var(--text-accent);
--icon-color-focused: var(--text-normal);
--icon-opacity: 0.85;
--icon-opacity-hover: 1;
--icon-opacity-active: 1;
--clickable-icon-radius: var(--bb-radius-chrome);
/* Indentation guide */
--indentation-guide-width: 1px;
--indentation-guide-color: rgba(var(--mono-rgb-100), 0.12);
--indentation-guide-color-active: rgba(var(--mono-rgb-100), 0.3);
/* Inline title */
--inline-title-color: var(--h1-color);
--inline-title-font: var(--h1-font);
--inline-title-line-height: var(--h1-line-height);
--inline-title-size: var(--h1-size);
--inline-title-style: var(--h1-style);
--inline-title-variant: var(--h1-variant);
--inline-title-weight: var(--h1-weight);
--inline-title-margin-bottom: 0.5em;
/* Inputs */
--input-height: 30px;
--input-radius: var(--bb-radius-chrome);
--input-font-weight: var(--font-normal);
--input-border-width: 1px;
/* Italic */
--italic-color: inherit;
--italic-weight: inherit;
/* Z-index */
--layer-cover: 5;
--layer-sidedock: 10;
--layer-status-bar: 15;
--layer-popover: 30;
--layer-slides: 45;
--layer-modal: 50;
--layer-notice: 60;
--layer-menu: 65;
--layer-tooltip: 70;
--layer-dragged-item: 80;
/* Line heights */
--line-height-normal: 1.5;
--line-height-tight: 1.3;
/* Links */
--link-color: var(--text-accent);
--link-color-hover: var(--text-accent-hover);
--link-decoration: none;
--link-decoration-hover: underline;
--link-decoration-thickness: auto;
--link-external-color: var(--text-accent);
--link-external-color-hover: var(--text-accent-hover);
--link-external-decoration: none;
--link-external-decoration-hover: underline;
--link-external-filter: none;
--link-unresolved-color: var(--text-accent);
--link-unresolved-opacity: 0.7;
--link-unresolved-filter: none;
--link-unresolved-decoration-style: solid;
--link-unresolved-decoration-color: hsla(var(--interactive-accent-hsl), 0.3);
/* Lists */
--list-indent: 2em;
--list-spacing: 0.075em;
--list-marker-color: var(--text-accent);
--list-marker-color-hover: var(--text-muted);
--list-marker-color-collapsed: var(--text-accent);
--list-bullet-border: none;
--list-bullet-radius: 50%;
--list-bullet-size: 5px;
--list-bullet-transform: none;
--list-numbered-style: decimal;
/* File navigator */
--nav-item-size: var(--font-ui-smaller);
--nav-item-radius: var(--bb-radius-chrome);
--nav-item-color: var(--text-muted);
--nav-item-color-hover: var(--text-normal);
--nav-item-color-active: var(--text-normal);
--nav-item-color-selected: var(--text-accent);
--nav-item-color-highlighted: var(--text-accent-hover);
--nav-item-background-hover: var(--background-modifier-hover);
--nav-item-background-active: var(--bb-surface-active);
--nav-item-background-selected: var(--bb-surface-selected);
--nav-item-padding: var(--size-2-1) var(--size-4-2) var(--size-2-1) var(--size-4-6);
--nav-item-parent-padding: var(--nav-item-padding);
--nav-item-children-padding-left: var(--size-2-2);
--nav-item-children-margin-left: var(--size-4-3);
--nav-item-weight: inherit;
--nav-item-weight-hover: inherit;
--nav-item-weight-active: inherit;
--nav-item-white-space: nowrap;
--nav-indentation-guide-width: var(--indentation-guide-width);
--nav-indentation-guide-color: var(--indentation-guide-color);
--nav-collapse-icon-color: var(--collapse-icon-color);
--nav-collapse-icon-color-collapsed: var(--text-faint);
/* Modals */
--modal-background: var(--background-primary);
--modal-width: 90vw;
--modal-height: 85vh;
--modal-max-width: 1100px;
--modal-max-height: 1000px;
--modal-max-width-narrow: 800px;
--modal-border-width: var(--border-width);
--modal-border-color: var(--color-base-30, var(--background-modifier-border-focus));
--modal-radius: var(--bb-radius-modal);
--modal-community-sidebar-width: 280px;
--bb-modal-backdrop-blur: 2px;
--bb-modal-backdrop-dim: 0.42;
/* PDF view */
--pdf-background: var(--background-primary);
--pdf-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 2px 8px rgba(0, 0, 0, 0.1);
--pdf-spread-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05);
--pdf-sidebar-background: var(--background-primary);
--pdf-thumbnail-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.2);
/* Popovers */
--popover-width: 450px;
--popover-height: 400px;
--popover-max-height: 70vh;
--popover-pdf-width: 600px;
--popover-pdf-height: 800px;
--popover-font-size: var(--font-text-size);
/* Prompts */
--prompt-width: 700px;
--prompt-max-width: 80vw;
--prompt-max-height: 70vh;
--prompt-border-width: var(--border-width);
--prompt-border-color: var(--color-base-40, var(--background-modifier-border-focus));
/* Radiuses */
--radius-s: 4px;
--radius-m: 8px;
--radius-l: 12px;
--radius-xl: 16px;
/* Radius roles — "Chrome vs. Content" (ADR-0008).
The rule: does the element dock to a window edge, or float above it?
· Docked chrome (tabs, nav rows, inputs, status bar) → sharp 0px.
· Floating content (callouts, code, embeds, menus) → soft.
· Overlays (modals) keep the strongest rounding.
· Single-line controls (tags, buttons, toggles) → full pill.
New elements pick a role, never a raw px value — that keeps the set
coherent as it grows. */
--bb-radius-chrome: 0;
--bb-radius-soft: var(--radius-l);
--bb-radius-modal: var(--radius-xl);
--bb-radius-pill: 999px;
/* Ribbon */
--ribbon-background: var(--background-secondary);
--ribbon-background-collapsed: var(--background-primary);
--ribbon-width: 44px;
--ribbon-padding: var(--size-4-2) var(--size-4-1) var(--size-4-3);
/* Scrollbars */
--scrollbar-active-thumb-bg: rgba(var(--mono-rgb-100), 0.2);
--scrollbar-bg: rgba(var(--mono-rgb-100), 0.05);
--scrollbar-thumb-bg: rgba(var(--mono-rgb-100), 0.1);
/* Search */
--search-clear-button-color: var(--text-muted);
--search-clear-button-size: 13px;
--search-icon-color: var(--text-muted);
--search-icon-size: 18px;
--search-result-background: var(--background-primary);
/* Layout sizing */
--size-2-1: 2px;
--size-2-2: 4px;
--size-2-3: 6px;
--size-4-1: 4px;
--size-4-2: 8px;
--size-4-3: 12px;
--size-4-4: 16px;
--size-4-5: 20px;
--size-4-6: 24px;
--size-4-8: 32px;
--size-4-9: 36px;
--size-4-12: 48px;
--size-4-16: 64px;
--size-4-18: 72px;
/* Sidebar */
--sidebar-markdown-font-size: calc(var(--font-text-size) * 0.9);
--sidebar-tab-text-display: none;
/* Sliders */
--slider-thumb-border-width: 1px;
--slider-thumb-border-color: var(--background-modifier-border-hover);
--slider-thumb-height: 18px;
--slider-thumb-width: 18px;
--slider-thumb-y: -6px;
--slider-thumb-radius: 50%;
--slider-s-thumb-size: 15px;
--slider-s-thumb-position: -5px;
--slider-track-background: var(--background-modifier-border);
--slider-track-height: 3px;
/* Status bar */
--status-bar-background: var(--background-secondary);
--status-bar-border-color: var(--divider-color);
--status-bar-border-width: 1px 0 0 1px;
--status-bar-font-size: var(--font-ui-smaller);
--status-bar-text-color: var(--text-muted);
--status-bar-position: fixed;
--status-bar-radius: var(--bb-radius-chrome);
--status-bar-scroll-padding: calc(var(--status-bar-font-size) + 18px);
/* Swatch */
--swatch-radius: 14px;
--swatch-height: 24px;
--swatch-width: 24px;
--swatch-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15);
/* Tabs */
--tab-background-active: var(--background-primary);
--tab-text-color: var(--text-faint);
--tab-text-color-active: var(--text-muted);
--tab-text-color-focused: var(--text-muted);
--tab-text-color-focused-active: var(--text-muted);
--tab-text-color-focused-highlighted: var(--text-accent);
--tab-text-color-focused-active-current: var(--text-normal);
--tab-font-size: var(--font-ui-small);
--tab-font-weight: inherit;
--tab-container-background: var(--background-secondary);
--tab-divider-color: var(--background-modifier-border-hover);
--tab-outline-color: var(--divider-color);
--tab-outline-width: 1px;
--tab-curve: 0;
--tab-radius: var(--bb-radius-chrome);
--tab-radius-active: var(--bb-radius-chrome);
--tab-width: 200px;
--tab-max-width: 320px;
--tab-stacked-pane-width: 700px;
--tab-stacked-header-width: var(--header-height);
--tab-stacked-font-size: var(--font-ui-small);
--tab-stacked-font-weight: 400;
--tab-stacked-text-align: left;
--tab-stacked-text-transform: rotate(0deg);
--tab-stacked-text-writing-mode: vertical-lr;
--tab-stacked-shadow: -8px 0 8px 0 rgba(0, 0, 0, 0.05);
/* Tables */
--table-background: transparent;
--table-border-width: 1px;
--table-border-color: var(--background-modifier-border);
--table-white-space: normal;
--table-header-background: var(--table-background);
--table-header-background-hover: inherit;
--table-header-border-width: var(--table-border-width);
--table-header-border-color: var(--table-border-color);
--table-header-font: inherit;
--table-header-size: var(--font-text-size);
--table-header-weight: var(--bold-weight);
--table-header-color: var(--text-normal);
--table-text-size: inherit;
--table-text-color: inherit;
--table-column-max-width: none;
--table-column-alt-background: var(--table-background);
--table-column-first-border-width: var(--table-border-width);
--table-column-last-border-width: var(--table-border-width);
--table-row-background-hover: var(--table-background);
--table-row-alt-background: var(--table-background);
--table-row-last-border-width: var(--table-border-width);
/* Tags */
--tag-size: var(--font-smaller);
--tag-color: var(--text-accent);
--tag-color-hover: var(--text-accent);
--tag-decoration: none;
--tag-decoration-hover: none;
--tag-background: hsla(var(--interactive-accent-hsl), 0.1);
--tag-background-hover: hsla(var(--interactive-accent-hsl), 0.2);
--tag-border-color: hsla(var(--interactive-accent-hsl), 0.15);
--tag-border-color-hover: hsla(var(--interactive-accent-hsl), 0.15);
--tag-border-width: 0px;
--tag-padding-x: 0.65em;
--tag-padding-y: 0.25em;
--tag-radius: 2em;
/* Window frame */
--titlebar-background: var(--background-secondary);
--titlebar-background-focused: var(--background-secondary-alt);
--titlebar-border-width: 0px;
--titlebar-border-color: var(--background-modifier-border);
--titlebar-text-color: var(--text-muted);
--titlebar-text-color-focused: var(--text-normal);
--titlebar-text-weight: var(--font-bold);
/* Toggles */
--toggle-border-width: 2px;
--toggle-width: 40px;
--toggle-radius: 18px;
--toggle-thumb-color: white;
--toggle-thumb-radius: 18px;
--toggle-thumb-height: 18px;
--toggle-thumb-width: 18px;
--toggle-s-border-width: 2px;
--toggle-s-width: 34px;
--toggle-s-thumb-height: 15px;
--toggle-s-thumb-width: 15px;
/* Vault name */
--vault-name-font-size: var(--font-ui-small);
--vault-name-font-weight: var(--font-medium);
--vault-name-color: var(--text-normal);
/* Workspace */
--workspace-background-translucent: rgba(var(--mono-rgb-0), 0.6);
/* Color mappings */
--accent-h: var(--accent-h-theme);
--accent-s: var(--accent-s-theme);
--accent-l: var(--accent-l-theme);
--background-primary: var(--color-base-00);
--background-primary-alt: var(--color-base-10);
--background-secondary: var(--color-base-20);
/* Surface — the neutral interaction overlay (see CONTEXT.md → Surface).
Keyed off --mono-rgb-100 so it flips white↔black per mode automatically.
Accent is reserved for interactive *foreground* (text/icons/borders),
never fills — see ADR-0007. */
--bb-surface-hover: rgba(var(--mono-rgb-100), 0.045);
--bb-surface-active: rgba(var(--mono-rgb-100), 0.07);
--bb-surface-selected: rgba(var(--mono-rgb-100), 0.11);
--background-modifier-hover: var(--bb-surface-hover);
--background-modifier-active-hover: var(--bb-surface-active);
--background-modifier-border: var(--color-base-30);
--background-modifier-border-hover: var(--color-base-30);
--background-modifier-border-focus: var(--color-accent);
--background-modifier-error-rgb: var(--color-red-rgb);
--background-modifier-error: var(--color-red);
--background-modifier-error-hover: var(--color-red);
--background-modifier-success-rgb: var(--color-green-rgb);
--background-modifier-success: var(--color-green);
--background-modifier-message: rgba(0, 0, 0, 0.9);
--background-modifier-form-field: var(--color-base-25);
--text-normal: var(--color-base-100);
--text-muted: var(--color-base-70);
--text-faint: var(--color-base-50);
--text-on-accent: #000000;
--text-on-accent-inverted: #ffffff;
--text-error: var(--color-red);
--text-success: var(--color-green);
--text-selection: hsla(var(--color-accent-hsl), 0.2);
--text-highlight-bg: rgba(255, 208, 0, 0.4);
--text-accent: var(--color-accent);
--text-accent-hover: var(--color-accent-2);
--interactive-normal: var(--color-base-00);
--interactive-hover: var(--color-base-10);
--interactive-accent-hsl: var(--color-accent-hsl);
--interactive-accent: var(--color-accent-1);
--interactive-accent-hover: var(--color-accent-2);
}
/* ── Dark mode ────────────────────────────────────────────────────── */
.theme-dark {
color-scheme: dark;
--highlight-mix-blend-mode: lighten;
--mono-rgb-0: 0, 0, 0;
--mono-rgb-100: 255, 255, 255;
/* Semantic colors */
--color-red-rgb: 255, 87, 87;
--color-red: #FF5757;
--color-green-rgb: 126, 231, 135;
--color-green: #7EE787;
--color-orange-rgb: 255, 193, 74;
--color-orange: #FFC14A;
--color-yellow-rgb: 255, 193, 74;
--color-yellow: #FFC14A;
--color-cyan-rgb: 121, 192, 255;
--color-cyan: #79C0FF;
--color-blue-rgb: 121, 192, 255;
--color-blue: #79C0FF;
--color-purple-rgb: 210, 168, 255;
--color-purple: #D2A8FF;
--color-pink-rgb: 255, 143, 163;
--color-pink: #FF8FA3;
/* Base scale — #0B0B0B → #DEDEDE */
--color-base-00: #0B0B0B;
--color-base-10: #141414;
--color-base-20: #1A1A1A;
--color-base-25: #1F1F1F;
--color-base-30: #2A2A2A;
--color-base-35: #242424;
--color-base-40: #333333;
--color-base-50: #555555;
--color-base-60: #666666;
--color-base-70: #888888;
--color-base-100: #DEDEDE;
/* Accent — #FFC14A ≈ hsl(39, 100%, 64%) */
--accent-h-theme: 39;
--accent-s-theme: 100%;
--accent-l-theme: 64%;
--color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l);
--color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l));
--color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 4%));
--color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 4%));
/* Bold — vivid red (ADR 0002) */
--bold-color: #FF5757;
/* Heading colors — white, no hue (by design) */
--h-color-theme: #FFFFFF;
--h1-color-theme: #FFFFFF;
--h2-color-theme: #FFFFFF;
--h3-color-theme: #FFFFFF;
--h4-color-theme: #FFFFFF;
--h5-color-theme: #FFFFFF;
--h6-color-theme: #FFFFFF;
/* Selection — full opacity amber, black text (ADR — matches aihero.dev) */
--text-selection: var(--color-accent);
/* Misc */
--background-secondary-alt: var(--color-base-25);
--background-modifier-box-shadow: rgba(0, 0, 0, 0.4);
--background-modifier-cover: rgba(0, 0, 0, 0.5);
--text-highlight-bg: rgba(255, 208, 0, 0.4);
--text-highlight-bg-active: rgba(255, 128, 0, 0.4);
--input-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
--input-shadow-hover: inset 0 0 0 1px var(--color-base-70);
--shadow-s: none;
--shadow-l: none;
--inline-code-background: rgba(255, 255, 255, 0.06);
--inline-code-color: #B0B0B0;
--inline-code-border-color: rgba(255, 255, 255, 0.12);
/* Primary button */
--color-btn-primary-bg: #B8860B;
--color-btn-primary-hover-bg: #CC9A0D;
/* Kanban */
--kanban-background: var(--background-primary);
--kanban-lane-background: var(--background-secondary-alt);
--kanban-item-background: var(--background-primary-alt);
--kanban-lane-border: var(--color-base-35);
--kanban-lane-count: var(--color-base-35);
--kanban-options-btn: var(--color-base-30);
}
.is-mobile.theme-dark {
--color-base-00: #0B0B0B;
--color-base-10: #141414;
--color-base-20: #1A1A1A;
--tag-background: hsla(var(--interactive-accent-hsl), 0.2);
--modal-background: var(--background-secondary);
--search-result-background: var(--background-secondary);
--background-modifier-form-field: var(--background-modifier-border);
--background-modifier-cover: rgba(0, 0, 0, 0.6);
--background-modifier-hover: rgba(var(--mono-rgb-100), 0.15);
--settings-home-background: var(--background-primary);
}
/* ── Light mode ───────────────────────────────────────────────────── */
.theme-light {
color-scheme: light;
--highlight-mix-blend-mode: darken;
--mono-rgb-0: 255, 255, 255;
--mono-rgb-100: 0, 0, 0;
/* Semantic colors — darkened for WCAG AA on white (ADR 0001) */
--color-red-rgb: 200, 48, 48;
--color-red: #C83030;
--color-green-rgb: 42, 122, 59;
--color-green: #2A7A3B;
--color-orange-rgb: 184, 134, 11;
--color-orange: #B8860B;
--color-yellow-rgb: 184, 134, 11;
--color-yellow: #B8860B;
--color-cyan-rgb: 26, 95, 170;
--color-cyan: #1A5FAA;
--color-blue-rgb: 26, 95, 170;
--color-blue: #1A5FAA;
--color-purple-rgb: 123, 77, 170;
--color-purple: #7B4DAA;
--color-pink-rgb: 180, 40, 80;
--color-pink: #B42850;
/* Base scale — #FFFFFF → #1A1A1A */
--color-base-00: #FFFFFF;
--color-base-05: #FAFAFA;
--color-base-10: #F5F5F5;
--color-base-20: #EFEFEF;
--color-base-25: #F5F5F5;
--color-base-30: #DEDEDE;
--color-base-35: #D0D0D0;
--color-base-40: #BBBBBB;
--color-base-50: #888888;
--color-base-60: #707070;
--color-base-70: #555555;
--color-base-100: #1A1A1A;
/* Accent — #B8860B ≈ hsl(43, 89%, 38%) */
--accent-h-theme: 43;
--accent-s-theme: 89%;
--accent-l-theme: 38%;
--color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l);
--color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l));
--color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 3%));
--color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 6%));
/* Bold — darker red for light bg (ADR 0001) */
--bold-color: #C83030;
/* Heading colors — black, no hue */
--h-color-theme: #000000;
--h1-color-theme: #000000;
--h2-color-theme: #000000;
--h3-color-theme: #000000;
--h4-color-theme: #000000;
--h5-color-theme: #000000;
--h6-color-theme: #000000;
/* Selection — full opacity dark amber, black text */
--text-selection: var(--color-accent);
/* Misc */
--background-secondary-alt: var(--color-base-05);
--background-modifier-box-shadow: rgba(0, 0, 0, 0.1);
--background-modifier-cover: rgba(220, 220, 220, 0.4);
--text-highlight-bg: rgba(255, 208, 0, 0.4);
--text-highlight-bg-active: rgba(255, 128, 0, 0.4);
--input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
--input-shadow-hover: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
--shadow-s: none;
--shadow-l: none;
--inline-code-background: rgba(0, 0, 0, 0.04);
--inline-code-color: var(--text-muted);
--inline-code-border-color: rgba(0, 0, 0, 0.10);
/* Primary button */
--color-btn-primary-bg: #B8860B;
--color-btn-primary-hover-bg: #CC9A0D;
/* Kanban */
--kanban-background: var(--background-primary);
--kanban-lane-background: var(--background-primary-alt);
--kanban-item-background: var(--background-primary);
--kanban-lane-border: var(--color-base-30);
--kanban-lane-count: rgba(0, 0, 0, 0.08);
--kanban-options-btn: var(--background-primary-alt);
}
/* ── Selection color ─────────────────────────────────────────────── */
/* Forces black text on full-opacity amber selection background */
::selection {
background-color: var(--color-accent);
color: #000000;
}
/* ── Tables ──────────────────────────────────────────────────────── */
.markdown-rendered td,
.markdown-rendered th {
padding: var(--size-2-3) var(--size-4-3);
}
.markdown-rendered th {
text-align: left;
}
.markdown-rendered tbody tr:nth-child(2n) {
background-color: var(--background-secondary);
}
/* ── Cursor ──────────────────────────────────────────────────────── */
/* Interactive elements that don't read var(--cursor); see ADR 0006. */
.workspace-tab-header,
.workspace-tab-header-new-tab,
.task-list-item-checkbox {
cursor: pointer;
}
/* ── Tabs — flush & square (ADR-0008 "Chrome vs. Content") ───────── */
/* Tabs are docked chrome: perfectly square, no inset, no gap between
them, in every split (root + sidebars). Obsidian core scopes the tab
radius and the inner inset under .mod-left-split / .mod-right-split /
.mod-root (specificity 0,3,0), so the flush overrides are pinned at
the same reach. --tab-curve:0 already collapses the curve pseudo. */
.mod-root .workspace-tab-header-container .workspace-tab-header,
.mod-left-split .workspace-tab-header-container .workspace-tab-header,
.mod-right-split .workspace-tab-header-container .workspace-tab-header {
border-radius: var(--bb-radius-chrome);
/* Drop core's 1px/3px/3.5px inset so the hover/active fill (which sits
on .workspace-tab-header-inner) reaches every edge of the tab. */
padding: 0;
}
/* The interactive fill lives on the inner, not the header. Core rounds it
to var(--tab-radius); square it so hover fills the tab as one clean block. */
.mod-root .workspace-tab-header-container .workspace-tab-header-inner,
.mod-left-split .workspace-tab-header-container .workspace-tab-header-inner,
.mod-right-split .workspace-tab-header-container .workspace-tab-header-inner {
border-radius: var(--bb-radius-chrome);
}
.mod-root .workspace-tab-header-container .workspace-tab-header-container-inner,
.mod-left-split .workspace-tab-header-container .workspace-tab-header-container-inner,
.mod-right-split .workspace-tab-header-container .workspace-tab-header-container-inner {
margin: 0;
padding: 0;
gap: 0;
}
/* First tab sits flush against the sidebar/window edge (core pads 8px left). */
.mod-root .workspace-tab-header-container {
padding-left: 0;
}
/* When the left sidebar is collapsed, its toggle button moves into the root
tab strip and butts right up against the first tab. Give it the same gap
the tabs have from the new-tab (+). Only present while collapsed, so the
flush open-state is unaffected. */
.mod-root .workspace-tab-header-container .sidebar-toggle-button.mod-left {
margin-right: var(--size-4-2);
}
/* The new-tab (+) button clings to the last tab (core margin-left: -4px);
give it a normal gap instead. */
.mod-root .workspace-tab-header-container .workspace-tab-header-new-tab,
.mod-left-split .workspace-tab-header-container .workspace-tab-header-new-tab,
.mod-right-split .workspace-tab-header-container .workspace-tab-header-new-tab {
margin-left: var(--size-4-2);
}
/* Active tab belongs to the content, so it merges into the pane below.
Core draws a full 1px outline box (box-shadow) whose bottom edge cuts the
active tab off from the content, and the strip carries a bottom rule on top
of that. Drop both: the active tab is already the content colour
(--tab-background-active = --background-primary), so with no line it flows
straight into the pane. The distinction is the value step alone — active =
content dark, inactive tabs sit on the lighter strip. No accent marker. */
.mod-root .workspace-tab-header-container .workspace-tab-header.mod-active,
.mod-left-split .workspace-tab-header-container .workspace-tab-header.mod-active,
.mod-right-split .workspace-tab-header-container .workspace-tab-header.mod-active {
box-shadow: none;
}
.mod-root .workspace-tab-header-container {
border-bottom: none;
}
/* Give the tab label + close button the same breathing room horizontally that
they have vertically (centred in a 39px tab ≈ 10px). Core's 6px/3px inner
padding let them cling to the edges. Root tabs only — sidebar tabs are
icon-only and lay out differently. */
.mod-root .workspace-tab-header-container .workspace-tab-header-inner {
padding-left: 10px;
padding-right: 10px;
}
/* Inter-tab divider spans the full tab height instead of core's centred 20px
stub, so flush square tabs read as clean segments. */
.workspace .mod-root .workspace-tab-header-container .workspace-tab-header-inner::after {
top: 0;
height: 100%;
}
/* Inputs are docked chrome → square. Obsidian core re-pins --input-radius
to --radius-m per platform (.mod-macos / .mod-windows / .mod-linux),
tying our body-level token; re-assert the chrome role above it. */
body.mod-macos,
body.mod-windows,
body.mod-linux {
--input-radius: var(--bb-radius-chrome);
}
/* ── Home-tab search — concentric radius (ADR-0008, Strategy-E rule) ─ */
/* This search is floating content, not docked chrome, so it may be soft — and
it's a nested case: the outer box wraps inner rows with ~6px padding, so the
outer radius is derived, outer = inner + padding, for parallel (concentric)
corners.
The Home-tab plugin already wires BOTH halves of the expanded box to
--input-radius: the .home-tab-searchbar corners and the
.home-tab-suggestion-container's bottom corners (with .is-active zeroing the
searchbar's bottom so input-top meets results-bottom as one shape). Our chrome
system sets --input-radius: 0, which squared that bottom. Rather than fight the
plugin's boosted-specificity rules per element, re-point --input-radius scoped
to .home-tab at the derived outer radius — both halves follow it, in collapsed
and expanded states. Inner suggestion rows get the smaller inner radius. */
.home-tab {
--bb-r-inner: 8px;
/* inner suggestion-row radius */
--bb-r-gap: 6px;
/* visual gap inner→outer = padding + border */
--input-radius: calc(var(--bb-r-inner) + var(--bb-r-gap));
/* outer = 14px */
}
/* Inset the rows by the gap (minus the 1px container border) so their inner
corners sit concentric inside the container's outer corners: item edge lands
--bb-r-gap in from the border-box edge, and Rinner = Router gap. */
.home-tab .home-tab-suggestion-container {
padding: calc(var(--bb-r-gap) - var(--input-border-width, 1px));
}
.home-tab .home-tab-suggestion-container .suggestion {
border-radius: var(--bb-r-inner);
}
/* Join phantom: the plugin updates .is-active and the suggestion container's
contents on different ticks. On clearing the query, .is-active drops at once
but the container keeps rendering the PREVIOUS query's results for ~200ms
before removing them — so the container is a stale signal, and keying the bar
shape off it flashes a mismatched frame (squared/open bar above a stale or
blank result box). Treat .is-active as the single source of truth: the instant
it drops, hide the lagging container and round/close the bar together. And open
the bar only when active AND real results already follow, so the reverse lag
(active before results populate) can't flash a squared bar above nothing. */
.home-tab .home-tab-suggestion-container:empty {
display: none;
}
.home-tab .home-tab-searchbar:not(.is-active)+.home-tab-suggestion-container {
display: none;
}
.home-tab .home-tab-searchbar:not(.is-active:has(+ .home-tab-suggestion-container:not(:empty))) {
border-bottom-left-radius: var(--input-radius) !important;
border-bottom-right-radius: var(--input-radius) !important;
border-bottom: var(--input-border-width, 1px) solid var(--background-modifier-border) !important;
}
/* ── Buttons ─────────────────────────────────────────────────────── */
button {
transition: 80ms cubic-bezier(0.33, 1, 0.68, 1);
}
button:hover {
cursor: var(--cursor-link);
}
button.mod-cta {
background-color: var(--color-btn-primary-bg);
color: #000000;
}
button.mod-cta:hover {
background-color: var(--color-btn-primary-hover-bg);
}
/* ── Callouts — tinted title row over outlined transparent body ─── */
/* See ADR-0005. The title's tint band reads as a status banner; the
1px outline holds the shape. The hairline divider below the title is
rendered as a border-top on .callout-content, so it vanishes for free
when Obsidian omits .callout-content (title-only) or hides it
(collapsed) — leaving a clean tinted banner in either state. */
.callout {
background-color: transparent;
/* Obsidian's default .callout border-color is a neutral grey that ignores
--callout-color, so the tinted outline must be set explicitly here. */
border-color: rgba(var(--callout-color), 0.40);
overflow: hidden;
}
.callout-title {
background-color: rgba(var(--callout-color), 0.12);
color: rgb(var(--callout-color));
}
/* Let the title text grow so the fold chevron is pushed to the outer edge. */
.callout-title-inner {
flex: 1;
}
.callout-content {
border-top: 1px solid rgba(var(--callout-color), 0.22);
}
/* The content padding controls the body's inner spacing — drop the stacked
first/last paragraph margins Obsidian would otherwise add on top of it. */
.callout-content> :first-child {
margin-top: 0;
}
.callout-content> :last-child {
margin-bottom: 0;
}
/* ── Headers — one-color toggle ─────────────────────────────────── */
body.headers-one-color {
--h1-color: var(--h-color-theme);
--h2-color: var(--h-color-theme);
--h3-color: var(--h-color-theme);
--h4-color: var(--h-color-theme);
--h5-color: var(--h-color-theme);
--h6-color: var(--h-color-theme);
}
/* ── Code blocks — subtle bordered panel, same in every mode ─────── */
/* The elevated --code-background (base-10) is already applied by Obsidian, as
are the top/bottom corner radii; only the border WIDTH is missing (the border
colour already resolves to --background-modifier-border). Add it so the block
reads as a softly outlined, slightly-raised panel — matching in reading view
(<pre>) and in Live Preview / Source (CodeMirror .HyperMD-codeblock lines,
where the box is assembled from per-line edges: sides on every line, top on
the opening fence, bottom on the closing fence). */
.markdown-rendered pre {
border: 1px solid var(--background-modifier-border);
}
.markdown-source-view.mod-cm6 .HyperMD-codeblock {
border-left: 1px solid var(--background-modifier-border);
border-right: 1px solid var(--background-modifier-border);
}
.markdown-source-view.mod-cm6 .HyperMD-codeblock-begin {
border-top: 1px solid var(--background-modifier-border);
}
.markdown-source-view.mod-cm6 .HyperMD-codeblock-end {
border-bottom: 1px solid var(--background-modifier-border);
}
/* ── Inline code ─────────────────────────────────────────────────── */
/* Reading view (<code>), legacy CM5 (.cm-s-obsidian) AND the current CM6 live
preview (.markdown-source-view.mod-cm6). The cm6 selector is what keeps inline
code identical in edit view — without it Obsidian's editor defaults win
(solid --code-background fill, muted colour, no border). */
.markdown-rendered :not(pre)>code,
.cm-s-obsidian .cm-inline-code,
.markdown-source-view.mod-cm6 .cm-inline-code {
background-color: var(--inline-code-background);
padding: 0.08em 0.36em;
border-radius: 4px;
border: 1px solid var(--inline-code-border-color);
color: var(--inline-code-color);
font-weight: 400;
}
/* ── Mermaid diagrams ────────────────────────────────────────────── */
.markdown-rendered .mermaid {
overflow-x: auto;
}
/* ── Header underlines ───────────────────────────────────────────── */
body.h1-underline h1,
body.h1-underline .markdown-rendered h1 {
padding-bottom: 0.3em;
border-bottom: 1px solid var(--color-base-40);
}
body.h2-underline h2,
body.h2-underline .markdown-rendered h2 {
padding-bottom: 0.3em;
border-bottom: 1px solid var(--color-base-40);
}
/* ── Input focus rings ───────────────────────────────────────────── */
textarea:active,
input[type='text']:active,
input[type='search']:active,
input[type='email']:active,
input[type='password']:active,
input[type='number']:active,
textarea:focus,
input[type='text']:focus,
input[type='search']:focus,
input[type='email']:focus,
input[type='password']:focus,
input[type='number']:focus,
textarea:focus-visible,
input[type='text']:focus-visible,
input[type='search']:focus-visible,
input[type='email']:focus-visible,
input[type='password']:focus-visible,
input[type='number']:focus-visible {
box-shadow: 0 0 0 1px var(--background-modifier-border-focus);
}
select:focus,
.dropdown:focus {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
}
/* ── Modal backdrop — frosted dimmer ─────────────────────────────── */
/* When a dialog is open (Settings, Command Palette, Quick Switcher, …)
the shared .modal-bg dimmer blurs the app behind it.
Two Obsidian/Chromium quirks have to be defused for the blur to render:
1. Obsidian ships .modal-bg with opacity < 1. Chromium silently DISABLES
backdrop-filter on any element whose own opacity is < 1, so we force
opacity: 1 and bake the dim into the background colour instead.
2. On macOS Obsidian sets `body { contain: strict }`. The `paint`
containment turns <body> into an isolated backdrop root, so the filter
samples an empty backdrop and renders black. We drop paint containment
(keep layout/style/size) only while a dimmed modal is open. */
body:has(.modal-container.mod-dim) {
contain: layout style size;
}
.modal-container.mod-dim .modal-bg {
/* !important: Obsidian animates opacity to 0.85; any value < 1 makes
Chromium drop the backdrop-filter entirely (see note above). */
opacity: 1 !important;
background-color: rgba(0, 0, 0, var(--bb-modal-backdrop-dim));
backdrop-filter: blur(var(--bb-modal-backdrop-blur));
-webkit-backdrop-filter: blur(var(--bb-modal-backdrop-blur));
}
@media (prefers-reduced-transparency: reduce) {
body:has(.modal-container.mod-dim) {
contain: strict;
}
.modal-container.mod-dim .modal-bg {
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
}
/* ── Selection surfaces — align stray highlights to the neutral Surface ─ */
/* Accent is a foreground role (text/icons/borders); fills use the neutral
mono Surface (ADR-0007). A few highlights outside the nav still paint an
accent/amber FILL — pull them onto --bb-surface-selected so they read the
same as an active file-tree item. */
/* Heading/block navigation flash (clicking a heading, following a link).
Core sets background to --text-highlight-bg (the amber ==mark== colour)
with !important; override to the neutral surface. Also drop the `lighten`
blend so it renders identically to a selected nav row. */
.is-flashing {
background-color: var(--bb-surface-selected) !important;
mix-blend-mode: normal;
}
/* Outline+ (community plugin) fills its active item with the accent colour.
Keep the accent TEXT (matches --nav-item-color-selected) but swap the
accent fill for the neutral surface. `body` prefix wins over the plugin
rule regardless of stylesheet load order. */
body .outline-plus-floating-outline .outline-plus-floating-outline__link.is-active {
color: var(--text-accent);
background: var(--bb-surface-selected);
}
/* ── File navigator — snappy expand/collapse ─────────────────────── */
/* Obsidian's folder expand/collapse runs a ~100ms CSS height transition
and, after collapse, reconciles its virtualised row list (rewriting the
min-height spacer) — which makes folders feel sluggish and flickers on
close for medium folders. We snap instantly and hide collapsed children
so the post-collapse row shuffle never paints. See ADR 0003. */
.nav-files-container .tree-item-children {
transition: none !important;
}
.nav-files-container .tree-item.is-collapsed>.tree-item-children {
display: none !important;
}
/* Right-align the file-explorer action buttons (Obsidian centres them by
default) and shrink their icons to --icon-xs (14px). */
.nav-buttons-container {
justify-content: flex-end;
}
.nav-buttons-container .clickable-icon {
--icon-size: var(--icon-xs);
}
/* ── Hover Editor plugin ─────────────────────────────────────────── */
.popover.hover-editor>.popover-content {
border: var(--border-width) var(--color-base-30) solid;
box-shadow: 0 0 10px 3px var(--background-modifier-box-shadow);
}
/* ── Kanban — common ─────────────────────────────────────────────── */
.kanban-plugin {
--lane-width: 348px;
}
body.theme-light .kanban-plugin__lane-items>div {
box-shadow: rgba(140, 149, 159, 0.15) 0px 3px 6px;
}
/* Kanban — same height cards */
body.kanban-same-height-cards .kanban-plugin__item-content-wrapper,
body.kanban-same-height-cards .kanban-plugin__item-title-wrapper {
min-height: 68px;
}
/* Kanban — full height column */
body.kanban-full-height-column button.kanban-plugin__new-item-button {
align-self: flex-end;
}
body.kanban-full-height-column .kanban-plugin__item-button-wrapper {
flex-grow: 1;
display: flex;
}
body.kanban-full-height-column .kanban-plugin__lane-wrapper {
min-height: 100%;
}
/* ── Kanban — Minimal ────────────────────────────────────────────── */
body.kanban-on .kanban-plugin {
background-color: var(--kanban-background);
}
body.kanban-on .kanban-plugin__lane {
background-color: var(--kanban-lane-background);
border: 1px solid var(--kanban-lane-border);
}
body.kanban-on .kanban-plugin__lane-title {
flex-grow: 0;
width: fit-content;
}
body.kanban-on .kanban-plugin__item-content-wrapper,
body.kanban-on .kanban-plugin__item-title-wrapper,
body.kanban-on .kanban-plugin__item-metadata-wrapper:not(:empty) {
background: var(--kanban-item-background);
}
body.kanban-on .kanban-plugin__icon>svg {
transform: rotate(90deg);
}
body.kanban-on .kanban-plugin__lane-settings-button-wrapper {
margin-left: auto;
}
body.kanban-on div.kanban-plugin__lane-title-count {
background-color: var(--kanban-lane-count);
border-radius: 1em;
padding: 2px 5px;
}
body.kanban-on .kanban-plugin__item button.kanban-plugin__item-prefix-button,
body.kanban-on .kanban-plugin__item button.kanban-plugin__item-postfix-button,
body.kanban-on .kanban-plugin__lane button.kanban-plugin__lane-settings-button {
padding: 0 5px;
height: 24px;
box-shadow: none;
}
body.kanban-on .kanban-plugin__item button.kanban-plugin__item-prefix-button:hover,
body.kanban-on .kanban-plugin__item button.kanban-plugin__item-postfix-button:hover,
body.kanban-on .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover {
background-color: var(--kanban-options-btn);
cursor: pointer;
}
body.kanban-on button.kanban-plugin__new-item-button {
border: none;
justify-content: flex-start;
}
body.kanban-on .kanban-plugin__new-item-button:hover {
color: var(--text-normal);
background-color: inherit;
box-shadow: none;
}
body.kanban-on .kanban-plugin__lane-items {
padding: 8px 15px;
}
body.kanban-on .kanban-plugin__item-prefix-button-wrapper input[type=checkbox] {
filter: none;
}
/* ── Kanban — Full ───────────────────────────────────────────────── */
body.kanban-full .kanban-plugin {
background-color: var(--kanban-background);
}
body.kanban-full .kanban-plugin__lane {
background-color: var(--kanban-lane-background);
border: 1px solid var(--kanban-lane-border);
}
body.kanban-full .kanban-plugin__lane-grip {
position: absolute;
opacity: 0;
width: calc(var(--lane-width) - 1em);
height: 3em;
z-index: 0;
margin: 0;
cursor: default;
}
body.kanban-full .kanban-plugin__lane-header-wrapper div {
z-index: 1;
}
body.kanban-full .kanban-plugin__lane-header-wrapper {
padding-left: 14px;
}
body.kanban-full .kanban-plugin__markdown-preview-view {
font-size: inherit;
}
body.kanban-full .kanban-plugin__lane-title {
flex-grow: 0;
width: fit-content;
font-size: 1em;
}
body.kanban-full div.kanban-plugin__lane-title-count {
background-color: var(--kanban-lane-count);
border-radius: 1em;
padding: 2px 5px;
}
body.kanban-full .kanban-plugin__lane-settings-button-wrapper {
margin-left: auto;
}
body.kanban-full .kanban-plugin__lane-items {
padding: 2px 6px;
}
body.kanban-full .kanban-plugin__item-content-wrapper,
body.kanban-full .kanban-plugin__item-title-wrapper,
body.kanban-full .kanban-plugin__item-metadata-wrapper:not(:empty) {
background: var(--kanban-item-background);
}
body.kanban-full .kanban-plugin__item {
border-color: var(--kanban-lane-border);
}
body.kanban-full .kanban-plugin__lane-items>div {
margin-bottom: 8px;
margin-top: 0;
}
body.kanban-full .kanban-plugin__lane-header-wrapper,
body.kanban-full .kanban-plugin__item-button-wrapper,
body.kanban-full .kanban-plugin__item-form {
border: none;
}
body.kanban-full .kanban-plugin__item-title-wrapper {
padding: 12px 12px 12px 0;
}
body.kanban-full .kanban-plugin__item-title,
body.kanban-full .kanban-plugin__item-input-wrapper {
padding-left: 12px;
}
body.kanban-full .kanban-plugin__item-prefix-button-wrapper {
align-self: center;
margin-left: 5px;
}
body.kanban-full .kanban-plugin__item-metadata .is-button:hover {
cursor: var(--cursor-link);
color: var(--text-normal);
}
body.kanban-full .kanban-plugin__icon>svg {
transform: rotate(90deg);
}
body.kanban-full .kanban-plugin__icon {
font-size: 1.4em;
}
body.kanban-full .kanban-plugin__item-postfix-button.clickable-icon {
opacity: 0;
}
body.kanban-full .kanban-plugin__item:hover .kanban-plugin__item-postfix-button.clickable-icon {
opacity: 1;
}
body.kanban-full .kanban-plugin__new-item-button {
border: none;
justify-content: flex-start;
box-shadow: none;
padding-left: 0;
}
body.kanban-full .kanban-plugin__item-button-plus {
margin-right: 8px;
font-size: 1.9em;
height: inherit;
}
body.kanban-full .kanban-plugin__new-item-button:hover {
background-color: inherit;
box-shadow: none;
color: var(--text-muted);
}
body.kanban-full .kanban-plugin__item-prefix-button-wrapper input[type=checkbox] {
filter: none;
margin: 3px;
}
body.kanban-full .kanban-plugin__markdown-preview-view>div>* {
overflow-x: unset;
}