Niri Plus / Contrast study

More definition, the same warmth

A design study for Neutral Slate: clearer desktop surfaces and states, with a separate pure-black terminal palette. Both use the existing Noto Sans UI and Meslo terminal fonts.

Selected · 26 October 2026. Crisper Neutral Slate is the desktop palette; Balanced+ on pure black is the terminal palette. The current design and downloadable appearance examples now use that selection. This comparison retains the earlier baseline and alternatives. The later pure-black workspace and charcoal overview surround are shown in the current design; the desktop specimens here compare UI surface palettes.

One identity. Two working surfaces. Warm charcoal for the desktop; pure black and stronger color separation for terminal work.

Illustrations · fictional data

01 / Desktop

Keep the warmth.
Give the structure more definition.

The same launcher, information cards, and file form. Only palette values change; Noto Sans, spacing, and geometry stay fixed.

Previous baseline

Current Neutral Slate

Warm charcoal, soft status colors, and the preceding Clear Blue accent.

niri / sample desktopFocused window
Open a windowRofi Plus
C
ChromeReading, browsing, everyday work
↵
›_
Kitty · niri-pluscarbon · local terminal
Open
D
DolphinDownloads
↵
Open New window Tab
InformationSwayNC
System
CPU12%
RAM8.4 GiB
Network
WIFIHome
Signal92%
ConnectedWi-Fi is ready
Save a fileFile-form illustration · Downloads
desktop-notes.md
CancelSave

Selected desktop

Crisper Neutral Slate

Deeper neutrals, clearer control edges, stronger color character, and quiet interior dividers.

niri / sample desktopFocused window
Open a windowRofi Plus
C
ChromeReading, browsing, everyday work
↵
›_
Kitty · niri-pluscarbon · local terminal
Open
D
DolphinDownloads
↵
Open New window Tab
InformationSwayNC
System
CPU12%
RAM8.4 GiB
Network
WIFIHome
Signal92%
ConnectedWi-Fi is ready
Save a fileFile-form illustration · Downloads
desktop-notes.md
CancelSave

HTML/CSS color specimens, not native application captures. Flat, opaque samples isolate color; live overlay opacity and native toolkit rendering still need review.

Clear boundaries, quieter separators. The proposal gives inputs and essential control edges a stronger outline. Interior dividers stay subdued.

Color carries state. Blue marks focus and selection. Green, amber, and red have more distinct color character; labels also state the result.

The base stays neutral. The charcoal becomes slightly deeper without a blue background wash. Main text and neutral login/lock colors remain unchanged.

02 / Terminal · color samples

A little closer
to vivid.

Balanced → Balanced+ → Rich → Vivid. Two intermediate samples add more color while keeping the normal/bright pairs distinct. Black, warm foreground, font size, and font weight stay fixed.

The earlier “Black background only” used the original muted ANSI colors, not the crisper desktop palette. All options here are sixteen-color ANSI palettes; “Vivid” names only the more saturated reference.

Balanced endpoint

Balanced

The preceding moderate palette, retained unchanged as the quieter endpoint.

Kitty / Zsh + tmuxSample output
Color familyNormalBright
Red01 Red09 Red
Green02 Green10 Green
Yellow03 Yellow11 Yellow
Blue04 Blue12 Blue
Magenta05 Magenta13 Magenta
Cyan06 Cyan14 Cyan
White07 White15 White

bryan@carbon ~/code/niri-plus

main !2 › git diff

diff --git a/theme.json b/theme.json

@@ -4,2 +4,2 @@

- "background": "#202326"

+ "background": "#000000"

- "palette": "desktop"

+ "palette": "terminal"

PASS 12 checks completed

WARN Visual review pending

ERROR Example disconnected host

agent Prepared a local preview.

2 files changed · no deploy

Selected text remains readable.

Bold blue / ANSI 4

Bright blue / ANSI 12

Explicit RGB #b4a8fa · unchanged

Latin 中文 · ✓ ⚠

00010203040506070809101112131415

Faint at 40%secondary output

Faint at 70%secondary output

BG #000000FG #efefec

Selected terminal / Balanced+

Balanced +

A little more color than Balanced, with deliberate normal/bright separation.

Kitty / Zsh + tmuxSample output
Color familyNormalBright
Red01 Red09 Red
Green02 Green10 Green
Yellow03 Yellow11 Yellow
Blue04 Blue12 Blue
Magenta05 Magenta13 Magenta
Cyan06 Cyan14 Cyan
White07 White15 White

bryan@carbon ~/code/niri-plus

main !2 › git diff

diff --git a/theme.json b/theme.json

@@ -4,2 +4,2 @@

- "background": "#202326"

+ "background": "#000000"

- "palette": "desktop"

+ "palette": "terminal"

PASS 12 checks completed

WARN Visual review pending

ERROR Example disconnected host

agent Prepared a local preview.

2 files changed · no deploy

Selected text remains readable.

Bold blue / ANSI 4

Bright blue / ANSI 12

Explicit RGB #b4a8fa · unchanged

Latin 中文 · ✓ ⚠

00010203040506070809101112131415

Faint at 40%secondary output

Faint at 70%secondary output

BG #000000FG #efefec

Intermediate / 70% blend start

Rich

Closer to Vivid, with extra shade separation where the normal colors would become too bright.

Kitty / Zsh + tmuxSample output
Color familyNormalBright
Red01 Red09 Red
Green02 Green10 Green
Yellow03 Yellow11 Yellow
Blue04 Blue12 Blue
Magenta05 Magenta13 Magenta
Cyan06 Cyan14 Cyan
White07 White15 White

bryan@carbon ~/code/niri-plus

main !2 › git diff

diff --git a/theme.json b/theme.json

@@ -4,2 +4,2 @@

- "background": "#202326"

+ "background": "#000000"

- "palette": "desktop"

+ "palette": "terminal"

PASS 12 checks completed

WARN Visual review pending

ERROR Example disconnected host

agent Prepared a local preview.

2 files changed · no deploy

Selected text remains readable.

Bold blue / ANSI 4

Bright blue / ANSI 12

Explicit RGB #b4a8fa · unchanged

Latin 中文 · ✓ ⚠

00010203040506070809101112131415

Faint at 40%secondary output

Faint at 70%secondary output

BG #000000FG #efefec

Vivid endpoint

Vivid

The preceding saturated palette, retained unchanged as the stronger endpoint.

Kitty / Zsh + tmuxSample output
Color familyNormalBright
Red01 Red09 Red
Green02 Green10 Green
Yellow03 Yellow11 Yellow
Blue04 Blue12 Blue
Magenta05 Magenta13 Magenta
Cyan06 Cyan14 Cyan
White07 White15 White

bryan@carbon ~/code/niri-plus

main !2 › git diff

diff --git a/theme.json b/theme.json

@@ -4,2 +4,2 @@

- "background": "#202326"

+ "background": "#000000"

- "palette": "desktop"

+ "palette": "terminal"

PASS 12 checks completed

WARN Visual review pending

ERROR Example disconnected host

agent Prepared a local preview.

2 files changed · no deploy

Selected text remains readable.

Bold blue / ANSI 4

Bright blue / ANSI 12

Explicit RGB #b4a8fa · unchanged

Latin 中文 · ✓ ⚠

00010203040506070809101112131415

Faint at 40%secondary output

Faint at 70%secondary output

BG #000000FG #efefec

Illustrated shell, diff, and agent output. ANSI 0 (black) is shown as a background swatch; it naturally disappears as foreground text on black. The explicit RGB sample is intentionally identical in all three.

More color, with room between shades. Balanced+ and Rich start 40% and 70% toward Vivid. Normal entries are deepened where needed to preserve separation from their bright partners. The endpoints are unchanged.

Faint is a separate setting. Each card shows 40% and 70% faint-text illustrations side by side. These opacities are independent of the palette blend amounts; no new Kitty faint-text setting is selected.

Applications retain some colors. A TUI can use RGB, extended colors, or its own background. A black Kitty background alone does not force every application to be black.

03 / Values

The changes, precisely.

The crisper desktop and Balanced+ terminal are selected. Other samples remain references; the original baseline is retained for comparison.

Desktop color roles · current and proposed
RoleCurrentProposal
canvas#151719#111213
surface#202326#1b1d1f
raised#2b3034#303336
input#191c1f#111315
border#535d66#81878c
separator#535d66#454b50
text#efefec#efefec
secondary#b9bec3#c9cbc8
muted#9ba4ab#aaaeac
accent#83b8f5#6eafff
accent ink#151b20#111315
focus#a6ceff#a6ceff
selection#2b425b#294e75
selection text#efefec#efefec
warning#ddbb80#e9b55f
error#e5a09b#f27d78
success#b8c9a4#a9d180
secure surface#202020#202020
secure input#303030#303030
secure button#d0d0d0#d0d0d0
All sixteen terminal ANSI colors
SlotBalancedBalanced +RichVivid
00 · Black#000000#000000#000000#000000
01 · Red#d77c78#e76c75#f25f72#ff5370
02 · Green#94b775#99c070#99c269#a9d86e
03 · Yellow#d6aa5f#deb05c#e1b058#f2bd5b
04 · Blue#78a7da#74aae9#71acf3#6eafff
05 · Magenta#b292c5#ba92d4#c091de#c792ea
06 · Cyan#79b6b0#6ec0c3#64c3ce#62d6e8
07 · White#c2c6c3#c8ccc9#cdd0cd#d2d4d1
08 · Bright black#7e8888#838c8f#878f94#8b9299
09 · Bright red#f2b4ad#f7a0a4#fb929d#ff8396
10 · Bright green#c5dfa7#c4e39d#c4e595#c3e88d
11 · Bright yellow#f3d79c#f8d895#fbd98f#ffda8a
12 · Bright blue#a8cefa#a7cefc#a7cefe#a6ceff
13 · Bright magenta#dcc4eb#ddbcf3#ddb6f9#deb0ff
14 · Bright cyan#b5dcd5#abe1e1#a3e5e9#9be9f2
15 · Bright white#f4f4f0#f8f8f6#fcfcfa#ffffff
Normal / bright separation within each color family

Luminance contrast between the two entries, shown with equal-weight text above. The intermediates start from sRGB-channel blends; their normal colored entries are lowered only where needed to retain at least 1.45:1 pair separation. This is a design guard for these samples, not an accessibility target or a complete measure of perceived color difference.

PairBalancedBalanced +RichVivid
01/09 · Red1.69:11.55:11.46:11.33:1
02/10 · Green1.56:11.46:11.46:11.20:1
03/11 · Yellow1.54:11.46:11.46:11.28:1
04/12 · Blue1.54:11.49:11.45:11.40:1
05/13 · Magenta1.68:11.54:11.45:11.35:1
06/14 · Cyan1.55:11.46:11.46:11.25:1
07/15 · White1.57:11.53:11.51:11.49:1
Calculated color-pair contrast

Opaque sRGB values, rounded to two decimals. Surface separation and hue character are different from text contrast; a higher number is not the goal for every pair.

Desktop pairCurrentProposal
Main text / surface13.71:114.67:1
Secondary text / surface8.43:110.35:1
Muted text / surface6.24:17.53:1
Control border / surface2.35:14.65:1
Control border / raised1.98:13.50:1
Raised / surface1.18:11.33:1
Accent / surface7.62:17.44:1
Text on accent / accent8.38:18.19:1
Selection fill / surface1.53:11.97:1
Selected text / selection8.97:17.47:1
Focus marker / selection6.34:15.28:1
Success / raised7.57:17.33:1
Warning / raised7.30:16.80:1
Error / raised6.24:14.83:1

Important boundaries are measured against both ordinary and raised surfaces. Selection also has a separate focus-colored marker. These measurements do not establish native rendering or accessibility conformance.

Review in daily use

Judge the desktop's selected row, keyboard focus, input boundary, secondary labels, and success/warning/error states together. The proposal uses opaque panels; the specimens use a flat background so desktop content behind them does not bias the comparison. A native translucent-overlay comparison remains useful.

For the terminal, compare Balanced+ and Rich against the unchanged endpoints. The original muted-on-black palette remains in the preceding reports and source baseline. Check Zsh, Git diffs, tmux, SSH, agent output, and full-screen tools. Faint attributes, entries 16–255, explicit RGB, and application-owned backgrounds need their own checks. Browser font rendering and screenshots cannot settle how this feels on Carbon and Starship's OLED monitors.

The selected values are promoted into the canonical identity and appearance adapters. Chezmoi delivery and native/physical acceptance are recorded separately; comparison controls never apply a desktop theme.

Source and earlier comparisons