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 data01 / 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.
Selected desktop
Crisper Neutral Slate
Deeper neutrals, clearer control edges, stronger color character, and quiet interior dividers.
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.
01 Red09 Red02 Green10 Green03 Yellow11 Yellow04 Blue12 Blue05 Magenta13 Magenta06 Cyan14 Cyan07 White15 Whitebryan@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 中文 · ✓ ⚠
Faint at 40%secondary output
Faint at 70%secondary output
#000000FG #efefecSelected terminal / Balanced+
Balanced +
A little more color than Balanced, with deliberate normal/bright separation.
01 Red09 Red02 Green10 Green03 Yellow11 Yellow04 Blue12 Blue05 Magenta13 Magenta06 Cyan14 Cyan07 White15 Whitebryan@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 中文 · ✓ ⚠
Faint at 40%secondary output
Faint at 70%secondary output
#000000FG #efefecIntermediate / 70% blend start
Rich
Closer to Vivid, with extra shade separation where the normal colors would become too bright.
01 Red09 Red02 Green10 Green03 Yellow11 Yellow04 Blue12 Blue05 Magenta13 Magenta06 Cyan14 Cyan07 White15 Whitebryan@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 中文 · ✓ ⚠
Faint at 40%secondary output
Faint at 70%secondary output
#000000FG #efefecVivid endpoint
Vivid
The preceding saturated palette, retained unchanged as the stronger endpoint.
01 Red09 Red02 Green10 Green03 Yellow11 Yellow04 Blue12 Blue05 Magenta13 Magenta06 Cyan14 Cyan07 White15 Whitebryan@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 中文 · ✓ ⚠
Faint at 40%secondary output
Faint at 70%secondary output
#000000FG #efefecIllustrated 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
| Role | Current | Proposal |
|---|---|---|
| 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
| Slot | Balanced | Balanced + | Rich | Vivid |
|---|---|---|---|---|
| 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.
| Pair | Balanced | Balanced + | Rich | Vivid |
|---|---|---|---|---|
| 01/09 · Red | 1.69:1 | 1.55:1 | 1.46:1 | 1.33:1 |
| 02/10 · Green | 1.56:1 | 1.46:1 | 1.46:1 | 1.20:1 |
| 03/11 · Yellow | 1.54:1 | 1.46:1 | 1.46:1 | 1.28:1 |
| 04/12 · Blue | 1.54:1 | 1.49:1 | 1.45:1 | 1.40:1 |
| 05/13 · Magenta | 1.68:1 | 1.54:1 | 1.45:1 | 1.35:1 |
| 06/14 · Cyan | 1.55:1 | 1.46:1 | 1.46:1 | 1.25:1 |
| 07/15 · White | 1.57:1 | 1.53:1 | 1.51:1 | 1.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 pair | Current | Proposal |
|---|---|---|
| Main text / surface | 13.71:1 | 14.67:1 |
| Secondary text / surface | 8.43:1 | 10.35:1 |
| Muted text / surface | 6.24:1 | 7.53:1 |
| Control border / surface | 2.35:1 | 4.65:1 |
| Control border / raised | 1.98:1 | 3.50:1 |
| Raised / surface | 1.18:1 | 1.33:1 |
| Accent / surface | 7.62:1 | 7.44:1 |
| Text on accent / accent | 8.38:1 | 8.19:1 |
| Selection fill / surface | 1.53:1 | 1.97:1 |
| Selected text / selection | 8.97:1 | 7.47:1 |
| Focus marker / selection | 6.34:1 | 5.28:1 |
| Success / raised | 7.57:1 | 7.33:1 |
| Warning / raised | 7.30:1 | 6.80:1 |
| Error / raised | 6.24:1 | 4.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
- Study values and calculated contrast pairs.
- Current selected identity.
- Balanced terminal comparison: the original-on-black, Balanced, and Vivid specimens before the two intermediate samples.
- First desktop/terminal comparison: the preceding grey, black-only, and vivid specimens, before the balanced refinement.
- Earlier accent comparison: the preceding Clear Blue decision, before the desktop/terminal split.
- Font provenance and licenses.
- Control and state contrast guidance. The calculated pairs are design aids, not a native accessibility conformance result.