brightwav3_Coding-Agent-Theme/theme.css
Brightwav3 e8ef85fb27 Release 1.2.1: fix CSS lint !important and screenshot in release
- Remove all !important (bold/italic via specificity, cursor via --caret-color)
- Add screenshot field to manifest.json so the preview resolves at the tagged release
- Bump to 1.2.1
2026-06-14 13:32:40 +02:00

489 lines
18 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&display=swap');
/* ==========================================================================
coding agent — Obsidian theme
--------------------------------------------------------------------------
One theme, two coding-agent identities, switchable in Style Settings:
• Claude Code (default) — warm near-black + Anthropic coral
• OpenAI Codex — cool neutral black + OpenAI teal-green
The whole chrome (titlebar, tabs, sidebar, file tree, status bar,
scrollbars) is styled so the app reads as the chosen agent, not just the
note body. Every accent-derived token recomputes from a single --cc-accent,
so swapping looks repaints everything.
========================================================================== */
/* @settings
name: coding agent
id: coding-agent
settings:
-
id: cc-look
title: Look
description: Overall visual identity of the whole app.
type: class-select
allowEmpty: false
default: cc-look-claude
options:
-
label: Claude Code
value: cc-look-claude
-
label: OpenAI Codex
value: cc-look-codex
-
id: cc-bg-depth
title: Background depth
description: How dark the main surface sits. Higher = deeper black.
type: variable-number-slider
default: 24.5
min: 16
max: 32
step: 0.5
format: '%'
-
id: cc-radius
title: Corner radius
description: Softness of panels, chips and buttons.
type: variable-number
default: 9
min: 0
max: 16
step: 1
format: px
-
id: cc-font-size
title: Font size
description: Base text size across notes.
type: variable-number-slider
default: 16
min: 12
max: 24
step: 0.5
format: px
-
id: cc-mono-ui
title: Monospace everything
description: Use the mono font across the whole UI for a terminal feel.
type: class-toggle
default: false
-
id: cc-heading-prompt
title: ✳ glyph before H1
description: Prefix top-level headings with the accent prompt glyph.
type: class-toggle
default: false
*/
/* --------------------------------------------------------------------------
Shared knobs
-------------------------------------------------------------------------- */
.theme-dark,
.theme-light {
--cc-bg-depth: 24.5%;
--cc-radius: 9px;
--radius-s: calc(var(--cc-radius) - 3px);
--radius-m: var(--cc-radius);
--radius-l: calc(var(--cc-radius) + 3px);
--caret-color: var(--cc-coral);
}
/* --------------------------------------------------------------------------
DARK — base = Claude Code look (applies when no/other look class present)
-------------------------------------------------------------------------- */
.theme-dark {
--cc-accent: #d97757; /* Anthropic coral */
--accent-h: 15; --accent-s: 63%; --accent-l: 60%;
/* Derived accent siblings — recompute automatically when --cc-accent changes */
--cc-coral: var(--cc-accent);
--cc-coral-hover: oklch(from var(--cc-accent) calc(l + 0.05) c h);
--cc-coral-soft: oklch(from var(--cc-accent) l 0.07 h / 0.16);
/* Warm neutral ramp (hue ~70°) */
--background-primary: oklch(var(--cc-bg-depth) 0.006 70);
--background-primary-alt: oklch(calc(var(--cc-bg-depth) + 2.5%) 0.006 70);
--background-secondary: oklch(calc(var(--cc-bg-depth) - 3.5%) 0.006 65);
--background-secondary-alt: oklch(calc(var(--cc-bg-depth) - 5.5%) 0.006 65);
--background-modifier-border: oklch(0.33 0.006 70);
--background-modifier-border-hover: oklch(0.40 0.006 70);
--background-modifier-border-focus: var(--cc-coral);
--background-modifier-hover: oklch(1 0 0 / 0.045);
--background-modifier-active-hover: var(--cc-coral-soft);
--background-modifier-form-field: oklch(calc(var(--cc-bg-depth) - 6%) 0.006 65);
--text-normal: oklch(0.905 0.008 80);
--text-muted: oklch(0.705 0.008 78);
--text-faint: oklch(0.525 0.008 76);
--text-on-accent: oklch(0.20 0.01 70);
--text-accent: var(--cc-coral);
--text-accent-hover: var(--cc-coral-hover);
--text-selection: var(--cc-coral-soft);
--interactive-normal: oklch(calc(var(--cc-bg-depth) + 4%) 0.006 70);
--interactive-hover: oklch(calc(var(--cc-bg-depth) + 7%) 0.006 70);
--interactive-accent: var(--cc-coral);
--interactive-accent-hover: var(--cc-coral-hover);
--titlebar-background: oklch(calc(var(--cc-bg-depth) - 5.5%) 0.006 65);
--titlebar-background-focused: oklch(calc(var(--cc-bg-depth) - 3.5%) 0.006 65);
--titlebar-text-color: var(--text-muted);
--tab-background-active: var(--background-primary);
/* Heading ladder — each level its own hue, readable on dark */
--h1-color: oklch(0.80 0.125 35); /* coral-red */
--h2-color: oklch(0.82 0.105 70); /* amber */
--h3-color: oklch(0.83 0.100 130); /* green */
--h4-color: oklch(0.82 0.085 200); /* teal */
--h5-color: oklch(0.80 0.090 255); /* blue */
--h6-color: oklch(0.78 0.095 310); /* violet */
--inline-title-color: oklch(0.95 0.008 80);
--code-background: oklch(calc(var(--cc-bg-depth) - 6%) 0.006 65);
--code-normal: oklch(0.86 0.01 80);
--code-comment: var(--text-faint);
--code-string: oklch(0.80 0.07 95);
--code-keyword: var(--cc-coral);
--code-function: oklch(0.80 0.06 60);
--code-property: oklch(0.82 0.04 230);
--code-value: oklch(0.80 0.07 95);
--blockquote-border-color: var(--background-modifier-border-hover);
--hr-color: var(--background-modifier-border);
--checkbox-color: var(--cc-coral);
--checkbox-color-hover: var(--cc-coral-hover);
--list-marker-color: var(--text-faint);
--tag-background: var(--cc-coral-soft);
--tag-color: var(--cc-coral);
--scrollbar-thumb-bg: oklch(1 0 0 / 0.08);
--scrollbar-active-thumb-bg: oklch(1 0 0 / 0.16);
--scrollbar-bg: transparent;
}
/* --------------------------------------------------------------------------
DARK — OpenAI Codex override (cool neutral black + teal-green)
Only the differences from the Claude base. Accent-derived tokens repaint
themselves because they reference --cc-accent.
-------------------------------------------------------------------------- */
.cc-look-codex.theme-dark {
--cc-accent: #1ba884; /* OpenAI teal-green */
--accent-h: 165; --accent-s: 64%; --accent-l: 45%;
/* Cool, near-neutral ramp (hue ~255°, lower chroma) */
--background-primary: oklch(var(--cc-bg-depth) 0.004 255);
--background-primary-alt: oklch(calc(var(--cc-bg-depth) + 2.5%) 0.004 255);
--background-secondary: oklch(calc(var(--cc-bg-depth) - 3.5%) 0.004 255);
--background-secondary-alt: oklch(calc(var(--cc-bg-depth) - 5.5%) 0.004 255);
--background-modifier-border: oklch(0.33 0.004 255);
--background-modifier-border-hover: oklch(0.40 0.004 255);
--background-modifier-form-field: oklch(calc(var(--cc-bg-depth) - 6%) 0.004 255);
--text-normal: oklch(0.920 0.004 250);
--text-muted: oklch(0.710 0.005 250);
--text-faint: oklch(0.530 0.005 250);
--text-on-accent: oklch(0.18 0.02 255);
--titlebar-background: oklch(calc(var(--cc-bg-depth) - 5.5%) 0.004 255);
--titlebar-background-focused: oklch(calc(var(--cc-bg-depth) - 3.5%) 0.004 255);
--inline-title-color: oklch(0.96 0.004 250);
--code-background: oklch(calc(var(--cc-bg-depth) - 6%) 0.004 255);
--code-normal: oklch(0.86 0.006 250);
--code-string: oklch(0.80 0.10 168); /* greenish strings */
--code-function: oklch(0.82 0.05 230);
--code-property: oklch(0.82 0.05 200);
}
/* --------------------------------------------------------------------------
LIGHT — base = Claude Code (paper); Codex override below
-------------------------------------------------------------------------- */
.theme-light {
--cc-accent: #c5613f;
--accent-h: 15; --accent-s: 58%; --accent-l: 50%;
--cc-coral: var(--cc-accent);
--cc-coral-hover: oklch(from var(--cc-accent) calc(l - 0.05) c h);
--cc-coral-soft: oklch(from var(--cc-accent) 0.55 0.08 h / 0.14);
--background-primary: oklch(0.985 0.004 85);
--background-primary-alt: oklch(0.965 0.005 85);
--background-secondary: oklch(0.955 0.006 85);
--background-secondary-alt: oklch(0.93 0.006 85);
--background-modifier-border: oklch(0.90 0.006 85);
--background-modifier-border-hover: oklch(0.84 0.006 85);
--background-modifier-hover: oklch(0 0 0 / 0.04);
--background-modifier-form-field: oklch(1 0 0);
--text-normal: oklch(0.30 0.012 70);
--text-muted: oklch(0.50 0.010 72);
--text-faint: oklch(0.66 0.008 74);
--text-on-accent: oklch(0.99 0 0);
--text-accent: var(--cc-coral);
--interactive-accent: var(--cc-coral);
--interactive-accent-hover: var(--cc-coral-hover);
/* Heading ladder — darker for contrast on paper */
--h1-color: oklch(0.52 0.16 35);
--h2-color: oklch(0.55 0.13 70);
--h3-color: oklch(0.50 0.12 140);
--h4-color: oklch(0.52 0.10 210);
--h5-color: oklch(0.50 0.12 260);
--h6-color: oklch(0.50 0.13 315);
--checkbox-color: var(--cc-coral);
--tag-background: var(--cc-coral-soft);
--tag-color: var(--cc-coral);
}
.cc-look-codex.theme-light {
--cc-accent: #0f9f7a;
--accent-h: 165; --accent-s: 62%; --accent-l: 38%;
--background-primary: oklch(0.985 0.003 250);
--background-primary-alt: oklch(0.965 0.004 250);
--background-secondary: oklch(0.955 0.005 250);
--background-secondary-alt: oklch(0.93 0.005 250);
--background-modifier-border: oklch(0.90 0.005 250);
--background-modifier-border-hover: oklch(0.84 0.005 250);
--text-normal: oklch(0.28 0.008 250);
--text-muted: oklch(0.49 0.007 250);
--text-faint: oklch(0.66 0.006 250);
}
/* --------------------------------------------------------------------------
Typography
-------------------------------------------------------------------------- */
body {
--font-text-theme: "Inter", ui-sans-serif, -apple-system, "Segoe UI", system-ui, sans-serif;
--font-interface-theme: "Inter", ui-sans-serif, -apple-system, "Segoe UI", system-ui, sans-serif;
--font-monospace-theme: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Consolas, monospace;
--cc-font-size: 16px;
--font-text-size: var(--cc-font-size);
--line-height-normal: 1.6;
--h1-weight: 620;
--h2-weight: 600;
--h3-weight: 600;
--bold-weight: 640;
}
.markdown-preview-sizer,
.markdown-source-view.mod-cm6 .cm-sizer { max-width: 72ch; }
body.cc-mono-ui {
--font-text-theme: var(--font-monospace-theme);
--font-interface-theme: var(--font-monospace-theme);
}
/* --------------------------------------------------------------------------
App chrome — shared, driven entirely by the tokens above
-------------------------------------------------------------------------- */
.workspace-ribbon.side-dock-ribbon { background: var(--background-secondary-alt); border: none; }
.workspace-ribbon.side-dock-ribbon::before { display: none; }
.side-dock-ribbon-action { color: var(--text-faint); border-radius: var(--radius-s); }
.side-dock-ribbon-action:hover { color: var(--cc-coral); background: var(--background-modifier-hover); }
.workspace-split.mod-left-split,
.workspace-split.mod-right-split { background: var(--background-secondary); }
.workspace-split.mod-left-split .workspace-tabs { background: var(--background-secondary); }
.workspace-tab-header { border-radius: var(--radius-s); color: var(--text-faint); }
.workspace-tab-header.is-active { color: var(--text-normal); }
.workspace-tab-header.is-active .workspace-tab-header-inner {
background: var(--background-modifier-hover);
border-radius: var(--radius-s);
}
.workspace-tab-header-container { border-bottom: 1px solid var(--background-modifier-border); }
/* ── File explorer reskinned like the Claude Code "Recents" sidebar ────── */
body { --nav-indentation-guide-color: transparent; }
.workspace-leaf-content[data-type="file-explorer"] .nav-files-container { padding: 2px 4px 8px; }
/* rows: airy, rounded, quiet */
.nav-file-title,
.nav-folder-title {
border-radius: var(--radius-s);
margin: 1px 4px;
padding: 5px 9px;
color: var(--text-muted);
font-size: 0.86em;
line-height: 1.35;
}
.tree-item-self:hover {
background: color-mix(in oklab, var(--text-normal) 5%, transparent);
color: var(--text-normal);
}
/* leading status dot before each file (hollow), like Claude's recents */
.nav-file-title-content::before {
content: "";
display: inline-block;
width: 5px;
height: 5px;
margin-right: 9px;
border-radius: 50%;
border: 1.5px solid var(--text-faint);
vertical-align: middle;
transition: background-color 140ms ease, border-color 140ms ease;
}
.nav-file-title:hover .nav-file-title-content::before { border-color: var(--text-muted); }
/* active file: neutral rounded fill + filled accent dot + brighter text */
.nav-file-title.is-active,
.nav-file-title.has-focus {
background: color-mix(in oklab, var(--text-normal) 9%, transparent);
color: var(--text-normal);
font-weight: 560;
}
.nav-file-title.is-active .nav-file-title-content::before,
.nav-file-title.has-focus .nav-file-title-content::before {
background: var(--cc-coral);
border-color: var(--cc-coral);
}
/* folders: quiet section-header feel */
.nav-folder-title {
color: var(--text-normal);
font-weight: 580;
}
.nav-folder-title .nav-folder-collapse-indicator { color: var(--text-faint); }
.nav-folder.mod-root > .nav-folder-title { display: none; }
.inline-title { letter-spacing: -0.01em; }
/* Bold & italic carry the accent color */
body { --bold-color: var(--cc-coral); --italic-color: var(--cc-coral); }
.markdown-rendered strong,
.markdown-rendered b,
.markdown-preview-view strong,
.cm-s-obsidian .cm-strong { color: var(--cc-coral); }
.markdown-rendered em,
.markdown-rendered i,
.markdown-preview-view em,
.cm-s-obsidian .cm-em { color: var(--cc-coral); }
/* Color-coded heading ladder in both reading view and Live Preview */
.markdown-rendered h1, .cm-s-obsidian .HyperMD-header-1, .cm-s-obsidian .cm-header-1 { color: var(--h1-color); }
.markdown-rendered h2, .cm-s-obsidian .HyperMD-header-2, .cm-s-obsidian .cm-header-2 { color: var(--h2-color); }
.markdown-rendered h3, .cm-s-obsidian .HyperMD-header-3, .cm-s-obsidian .cm-header-3 { color: var(--h3-color); }
.markdown-rendered h4, .cm-s-obsidian .HyperMD-header-4, .cm-s-obsidian .cm-header-4 { color: var(--h4-color); }
.markdown-rendered h5, .cm-s-obsidian .HyperMD-header-5, .cm-s-obsidian .cm-header-5 { color: var(--h5-color); }
.markdown-rendered h6, .cm-s-obsidian .HyperMD-header-6, .cm-s-obsidian .cm-header-6 { color: var(--h6-color); }
.cc-heading-prompt .markdown-rendered h1::before,
.cc-heading-prompt .HyperMD-header-1::before {
content: "✳ ";
color: var(--cc-coral);
font-weight: 600;
}
.markdown-rendered code,
:not(pre) > code {
background: var(--code-background);
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
padding: 0.08em 0.4em;
font-size: 0.88em;
}
.markdown-rendered pre {
background: var(--code-background);
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-m);
}
.cm-s-obsidian .cm-link,
.cm-s-obsidian .cm-url,
.markdown-rendered a { color: var(--cc-coral); text-decoration: none; }
.markdown-rendered a:hover { text-decoration: underline; text-underline-offset: 3px; }
.markdown-rendered a.tag,
.cm-s-obsidian .cm-hashtag {
background: var(--tag-background);
color: var(--tag-color);
border: none;
border-radius: 999px;
padding: 0.05em 0.55em;
font-size: 0.82em;
font-weight: 540;
}
.markdown-rendered blockquote {
border-left: 2px solid var(--background-modifier-border-hover);
color: var(--text-muted);
font-style: normal;
}
button.mod-cta, .mod-cta {
background: var(--cc-coral);
color: var(--text-on-accent);
font-weight: 600;
border-radius: var(--radius-s);
}
button.mod-cta:hover, .mod-cta:hover { background: var(--cc-coral-hover); }
button:not(.mod-cta), .clickable-icon { border-radius: var(--radius-s); }
.prompt {
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-l);
}
.prompt-input { background: transparent; }
.suggestion-item.is-selected { background: var(--cc-coral-soft); border-radius: var(--radius-s); }
.search-input-container input { border-radius: var(--radius-s); }
.status-bar {
background: var(--background-secondary-alt);
border-top: 1px solid var(--background-modifier-border);
color: var(--text-faint);
}
.titlebar { border-bottom: 1px solid var(--background-modifier-border); }
input[type="checkbox"]:checked { background-color: var(--cc-coral); border-color: var(--cc-coral); }
.markdown-rendered th { color: var(--text-muted); font-weight: 600; }
.markdown-rendered table { border-radius: var(--radius-s); overflow: hidden; }
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb-bg);
border: 3px solid transparent;
background-clip: padding-box;
border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-active-thumb-bg); background-clip: padding-box; }
::selection { background: var(--cc-coral-soft); }
/* Plugins in Settings shown as cards */
.installed-plugins-container .setting-item,
.community-modal-search-results .community-item {
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-m);
margin-bottom: 8px;
padding: 13px 15px;
background: var(--background-primary-alt);
transition: border-color 140ms ease, background-color 140ms ease;
}
.installed-plugins-container .setting-item:hover,
.community-modal-search-results .community-item:hover {
border-color: var(--background-modifier-border-hover);
background: var(--background-secondary);
}
.installed-plugins-container .setting-item-name { font-weight: 600; }
.tree-item-self, .workspace-tab-header, .side-dock-ribbon-action, button, .clickable-icon {
transition: background-color 160ms cubic-bezier(0.22, 1, 0.36, 1),
color 160ms cubic-bezier(0.22, 1, 0.36, 1);
}