Skip to content

feat(core): an on switch wears the theme's accent (#138) - #139

Merged
Maxaubert merged 1 commit into
mainfrom
feat/138-switch-accent
Oct 7, 2026
Merged

Maxaubert merged 1 commit into
mainfrom
feat/138-switch-accent

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #138

What

An ON settings switch now wears the theme's accent: the track is --p-sel-bg (the accent as a fill) and the knob is --p-on-accent (the ink chosen for that fill). Off is unchanged (grey track, white knob). A disabled on switch is dimmed to 50%, hover lifts it like Save (brightness-110), and keyboard focus stays the row's fill (Prism #272, never a ring). Row buttons, segments and every other neutral control stay grey.

Owner, 2026-10-07: "toggles differ in look i like the teal with black not the green and white", then "yes option 1 but it should depend on the theme so only teal on the teal theme".

Why these tokens

--p-sel-bg is the accent moved until --p-on-accent clears 4.5:1 on it, the pair the update chip already uses; the raw --p-accent is only held to 3:1 and, with a see-through accent, carries an alpha the ink was not chosen against. So the knob always reads on the track. A new unit test (switchAccent.test.ts) holds it for all 40 presets: knob 4.5:1 on the track, track 3:1 on the ground (lowest measured: knob 4.51 on Blossom, track 3.28 on Paper).

Knob ink per theme: near-black #0b0b0f on bright accents (PT Default orange #fe8f34, Pitch, Cinder, Volt, Paper blue, Dracula, Nord...), white on dark ones (Prism indigo #5b5bd6, Fawn, Blossom, Sage, Mint, Butter, Lavender, Mist, Catppuccin Latte).

This narrows the #42 rule ("SETTINGS CONTROLS ARE NEUTRAL; ONLY SAVE WEARS THE ACCENT") for switches only; CLAUDE.md says so.

Prism

This is a core change (core/renderer/settings/fields.tsx, core 0.25.0 -> 0.26.0): Prism's terminal settings pages get it through the automatic core bump after merge. Prism's own Settings.tsx keeps a local copy of SWITCH_ON / SWITCH_KNOB_ON, and its Win+E switch uses --p-accent with a white knob, so those need a Prism-side change to match.

Tests

  • npm run typecheck, npm run lint (0 errors), npx vitest run (1391 passed)
  • e2e accent (33/33): an on switch is the accent fill with the on-accent knob on PT Default, after a picked (see-through) accent and on Paper; row button and segment unchanged. Screenshots .e2e-shots/settings-switch-pt-default.png, settings-switch-light.png.
  • e2e options, edges, themeSwitch, colourPicker: all pass.

App 0.32.0 -> 0.33.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

@Maxaubert
Maxaubert merged commit 5a41164 into main Oct 7, 2026
2 checks passed
@Maxaubert
Maxaubert deleted the feat/138-switch-accent branch October 7, 2026 14:32
github-actions Bot pushed a commit that referenced this pull request Oct 7, 2026
Maxaubert added a commit that referenced this pull request Oct 11, 2026
…156, #157, #158) (#161)

* feat(core): Full reworked, Prompt on the theme's ground, the switch knob (#154)

Full: finished is the icon's rainbow flowing across the whole tab; a working
fill carries Minimal's mark on top, the run in the name's ink on Classic
(owner: black on Volt's yellow, not a faded yellow) and the growing edge in a
shade clearing 3:1 on fill and ground on Prompt. The badge and the ride go.

Prompt segments are the theme's own ground: idle paints nothing, the tab in
front is --p-tab-active; --p-seg and --p-seg-on are removed. The edge band
tucks only under a segment that paints.

Switches: the ON knob is --p-switch-knob, black on a dark theme and white on
a light one, flipped only under 2:1 on the track. Core falls back to
--p-on-accent, so Prism is unchanged.

Core 0.30.0, app 0.36.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* test(e2e): pick the opaque dark accent before the see-through one (#154)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: call the Prompt tab style Powerline (#154)

The owner's pick. The stored id stays 'prompt' so saved choices survive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): no pulsing arrow on a working Powerline tab you are not on (#154)

Owner: the pulsing edge belongs to the tab in front; a working Full fill on
Powerline is the fill alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* docs: spec and plan for the see-through window, theme order and Most recent (#156, #157, #158)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): the see-through window, like Prism's (#156)

The acrylic row is the see-through window. Where the terminal owns the
window acrylic (Prism Terminal) it reads "See-through window" / "The desktop
shows behind every surface.", sits right under the theme wall, and the
switch alone makes the window see-through: an opaque ground under it paints
Prism's own levels (0xb9 dark, 0xd1 light, light by luminance > 0.4). Before,
it changed the material and left every preset opaque, so it looked broken.

- core/renderer/lib/seeThrough.ts: SEE_THROUGH_ALPHA, SEE_THROUGH_MAX (95%),
  seeThroughAlpha.
- termLook: paintsAlpha (one rule for the window and the dirty check),
  termAcrylicInForce / seeThroughBlocked (High Contrast stays solid).
- The Background picker and the theme editor cap Alpha at 95% under the
  switch and show the alpha in force.
- Prism: unchanged (gated on acrylic.kind 'window'; its row keeps its label).
- opacityMigration tests: three asserted an opaque window under acrylic on;
  that is the bug fixed here, so they now expect the default see-through.
- Versions: core 0.31.0, app 0.37.0.
- e2e: new seeThrough scenario, settingsLook row order (not run here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): the theme wall runs neutral first, black to white (#157)

The owner, 2026-10-10: "first black to white then coloured". After the
leading cards (Custom, the host's default, Follow style in Prism) the
presets now come in one fixed, computed order: the neutral grounds black
to white, then the coloured ones black to white, by OKLab L. It replaces
the light-first flip, which ran the wall either way by the theme worn.

- core/renderer/lib/themeOrder.ts: oklch, NEUTRAL_CHROMA (0.0125, measured
  in the widest gap of the forty grounds: Monokai 0.0109, Sage 0.0147),
  orderTermThemes (stable on ties).
- themeOrder.test.ts: permutation, neutrals first, L non-decreasing per
  group, the twelve measured neutrals, no ground within 0.001 of the
  threshold, ties, and the whole order as a snapshot.
- Prism: its terminal theme wall takes the same order (the same forty
  themes); nothing else changes there.
- e2e: themeCards checks the wall's DOM order against the unit snapshot
  (not run here).
- Docs: two-apps.md (FORTY THEMES), core/README.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: Most recent tab switching (#158)

A Tab switching setting in Settings > Appearance > Window, after Tab style:
In order (the default, Ctrl+Tab along the strip as before) or Most recent.
In Most recent, Ctrl+Tab walks a snapshot of the most-recently-used list
taken at the hold's first press; the order changes only when Ctrl is
released, the window loses focus or another Ctrl chord is pressed, so one
press flips to the last tab and repeated presses walk further back instead
of ping-ponging. Closed tabs leave the list, new tabs enter at the front.

- lib/tabMru.ts (pure, tested) and lib/tabSwitchPrefs.ts (prism.window.tabSwitch)
- App.tsx holds the list and the walk in refs; keyup of Control and blur commit
- appOptions/settingsIndex/AppearancePage: the tab-switch row
- e2e: new tabSwitch scenario, PREF_PAGE and settingsLook rows (not run here)
- README keys row, docs/regression-rules.md "Most recent commits on Ctrl release"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: review of the see-through window and Most recent (#156, #158)

- Save changes judges and saves the see-through switch IN FORCE: under
  High Contrast a stored on (from before #156) no longer lights it, and a
  save stays solid instead of escaping into a see-through Custom. The
  colour editor's save goes through the same saveAsCustom.
- The dirty check measures the default level from the ground the window
  measures from, so an opaque picked Background does not light Save
  changes by its lightness; withGroundAlpha measures from the palette's
  own ground, so a save keeps the Custom's own level.
- Most recent: a click on another tab, or a tab opened or closed, while
  Ctrl is still held ends the walk (walkHolds), so it counts as a use.
- Save changes' tooltip and the theme switch question say "see-through
  window" in Prism Terminal, not "acrylic".
- The spec and comments no longer claim the stored switch survives a
  theme pick (a pick resets it, "the theme is the whole setup"); the
  spec's Tab switching wording matches what was built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* test(e2e): the gate follows the see-through row and the accent on switches (#156)

- accent: the see-through window sits between the theme wall and
  Background/Accent since #156 moved it there.
- settingsSearch: Prism Terminal names the row "See-through window"
  (acrylicLabel), so the gate searches by that; "acrylic" joins the row's
  keywords so the old name still finds it.
- settingsLook: an on switch wears the accent on purpose since #138/#139;
  the check failed on the base (#154) too, now it allows on switches and
  still catches any other accent-filled button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* refactor(core): drop the #154 rework's leftovers

shadeOn (the edge on a working Powerline fill, gone) and its tests, the
edge span's data-mark-overlay (always undefined), and the docs that still
spoke of a grow overlay or an edge on a Powerline fill.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix(core): Save changes saves the see-through the window paints

Under an opaque picked Background, Save changes stored the default
see-through measured from the theme's own ground (b9 for a dark Custom)
while the window and the dirty check measured from the pick (d1 for
white), so the setup was dirty again right after every save.
withGroundAlpha now carries termGroundAlpha(), the window's alpha.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix(core): the colour editor opens a preset at its own see-through

withGroundAlpha measured the default see-through from the window's ground,
which without a pick is the ACTIVE theme's. Every preset card has an edit
button, so a light preset edited under a dark active theme opened, and
saved as Custom, at b9 instead of d1. It now measures from the pick when
there is one (the window's alpha, as the last fix wants) and otherwise
from the palette's own ground.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: Powerline tabs get a visible border (owner, 2026-10-11)

The tabs sit on the theme's own ground, so the ground-coloured gap between
them was no border at all. With no mark, the band is now --p-tab-edge:
darker than the ground where it leaves room (dark grey gets black, white
gets light grey), lighter only on a ground too dark for that (black gets
grey), at least 1.5:1 off the ground.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: a dark grey ground's Powerline border is black

At the 1.5 floor a #2b2b2b ground (1.48:1 off black) went lighter. Black is
taken whenever it stands off at all visibly (1.3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border is the ground a bit darker

Owner, 2026-10-11: "all themes should have its bg color + a bit darker,
except black themes since that's not possible". Every ground's border steps
toward black (1.25:1, or black itself); only a true-black ground gets a
dark grey (1.2:1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: darker Powerline borders, stronger light edges, Classic's faint line, no High Contrast

Owner, 2026-10-11:
- The Powerline border is the ground a bit darker, a dark ground's stopping at
  a very dark grey short of black; a light ground's stands 1.45:1 off it
  ("white themes have too faint of borders").
- The light column of the Edges alphas is raised about half again (Hairline
  10/12 to 15/17, the DWM border 0.16 to 0.22), "the border edges in general
  are too faint".
- Classic tabs get a faint line between them again, in the divider's ink.
- High Contrast is removed; whoever wore it goes to Pitch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* docs: the light Edges alphas raised (2026-10-11)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: See-through reaches the tab strip and the settings rail

Every surface is one coat of the sheet. The tab strip in the top row
painted --p-tabs over the row's own --p-tabs, the Settings wrapper painted
--p-bg under the frame's, and the rail painted --p-side over that: two or
three coats of b9 (92%, 98%), solid to the eye. The strip in the top row
and the Settings wrapper now leave the paint to the box under them, and
--p-side is transparent on glass as --p-tab-active is. The seeThrough e2e
measures each surface's composited alpha, on and off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* refactor: drop "High Contrast stays solid" with the theme

The owner removed the High Contrast theme (2026-10-11: "remove the theme
called high contrast"); its id now maps to Pitch, so termThemeId() never
returns it and #156's rule that held it solid under the see-through switch
was dead code. Removed termAcrylicInForce, useTermAcrylicInForce,
seeThroughBlocked and useSeeThroughBlocked: the switch is read as stored
(termAcrylic) by the window, the Background row, the editor and Save
changes. The row loses its blocked state and "High contrast stays solid."
copy. Tests that only held the rule are gone; themeOrder's neutrals drop
high-contrast and its tie test keeps the made-up pair. Docs say the rule
went with the theme. Core stays 0.31.0 (unreleased in this PR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: Classic's line between tabs runs the strip's full height

Owner, 2026-10-11: they "should go down to the bottom" and "to the top".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border wears the divider's ink, following the Edges setting

Owner, 2026-10-11: "the chevron border should match the edge border colour.
maybe they can follow the thinner style too when you're on faint". tabEdge and
--p-tab-edge are gone; the plain band paints --p-divider, so it is fainter on
Faint, stronger on Solid and gone on None, like every other line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border stays under a growing working edge

Owner, 2026-10-11: "the border is gone when it's working, that edge border
should still be there". The working edge on the tab in front grows from
nothing each cycle; the plain border is now drawn under every mark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
github-actions Bot pushed a commit that referenced this pull request Oct 11, 2026
…156, #157, #158) (#161)

* feat(core): Full reworked, Prompt on the theme's ground, the switch knob (#154)

Full: finished is the icon's rainbow flowing across the whole tab; a working
fill carries Minimal's mark on top, the run in the name's ink on Classic
(owner: black on Volt's yellow, not a faded yellow) and the growing edge in a
shade clearing 3:1 on fill and ground on Prompt. The badge and the ride go.

Prompt segments are the theme's own ground: idle paints nothing, the tab in
front is --p-tab-active; --p-seg and --p-seg-on are removed. The edge band
tucks only under a segment that paints.

Switches: the ON knob is --p-switch-knob, black on a dark theme and white on
a light one, flipped only under 2:1 on the track. Core falls back to
--p-on-accent, so Prism is unchanged.

Core 0.30.0, app 0.36.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* test(e2e): pick the opaque dark accent before the see-through one (#154)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: call the Prompt tab style Powerline (#154)

The owner's pick. The stored id stays 'prompt' so saved choices survive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): no pulsing arrow on a working Powerline tab you are not on (#154)

Owner: the pulsing edge belongs to the tab in front; a working Full fill on
Powerline is the fill alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* docs: spec and plan for the see-through window, theme order and Most recent (#156, #157, #158)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): the see-through window, like Prism's (#156)

The acrylic row is the see-through window. Where the terminal owns the
window acrylic (Prism Terminal) it reads "See-through window" / "The desktop
shows behind every surface.", sits right under the theme wall, and the
switch alone makes the window see-through: an opaque ground under it paints
Prism's own levels (0xb9 dark, 0xd1 light, light by luminance > 0.4). Before,
it changed the material and left every preset opaque, so it looked broken.

- core/renderer/lib/seeThrough.ts: SEE_THROUGH_ALPHA, SEE_THROUGH_MAX (95%),
  seeThroughAlpha.
- termLook: paintsAlpha (one rule for the window and the dirty check),
  termAcrylicInForce / seeThroughBlocked (High Contrast stays solid).
- The Background picker and the theme editor cap Alpha at 95% under the
  switch and show the alpha in force.
- Prism: unchanged (gated on acrylic.kind 'window'; its row keeps its label).
- opacityMigration tests: three asserted an opaque window under acrylic on;
  that is the bug fixed here, so they now expect the default see-through.
- Versions: core 0.31.0, app 0.37.0.
- e2e: new seeThrough scenario, settingsLook row order (not run here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat(core): the theme wall runs neutral first, black to white (#157)

The owner, 2026-10-10: "first black to white then coloured". After the
leading cards (Custom, the host's default, Follow style in Prism) the
presets now come in one fixed, computed order: the neutral grounds black
to white, then the coloured ones black to white, by OKLab L. It replaces
the light-first flip, which ran the wall either way by the theme worn.

- core/renderer/lib/themeOrder.ts: oklch, NEUTRAL_CHROMA (0.0125, measured
  in the widest gap of the forty grounds: Monokai 0.0109, Sage 0.0147),
  orderTermThemes (stable on ties).
- themeOrder.test.ts: permutation, neutrals first, L non-decreasing per
  group, the twelve measured neutrals, no ground within 0.001 of the
  threshold, ties, and the whole order as a snapshot.
- Prism: its terminal theme wall takes the same order (the same forty
  themes); nothing else changes there.
- e2e: themeCards checks the wall's DOM order against the unit snapshot
  (not run here).
- Docs: two-apps.md (FORTY THEMES), core/README.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: Most recent tab switching (#158)

A Tab switching setting in Settings > Appearance > Window, after Tab style:
In order (the default, Ctrl+Tab along the strip as before) or Most recent.
In Most recent, Ctrl+Tab walks a snapshot of the most-recently-used list
taken at the hold's first press; the order changes only when Ctrl is
released, the window loses focus or another Ctrl chord is pressed, so one
press flips to the last tab and repeated presses walk further back instead
of ping-ponging. Closed tabs leave the list, new tabs enter at the front.

- lib/tabMru.ts (pure, tested) and lib/tabSwitchPrefs.ts (prism.window.tabSwitch)
- App.tsx holds the list and the walk in refs; keyup of Control and blur commit
- appOptions/settingsIndex/AppearancePage: the tab-switch row
- e2e: new tabSwitch scenario, PREF_PAGE and settingsLook rows (not run here)
- README keys row, docs/regression-rules.md "Most recent commits on Ctrl release"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: review of the see-through window and Most recent (#156, #158)

- Save changes judges and saves the see-through switch IN FORCE: under
  High Contrast a stored on (from before #156) no longer lights it, and a
  save stays solid instead of escaping into a see-through Custom. The
  colour editor's save goes through the same saveAsCustom.
- The dirty check measures the default level from the ground the window
  measures from, so an opaque picked Background does not light Save
  changes by its lightness; withGroundAlpha measures from the palette's
  own ground, so a save keeps the Custom's own level.
- Most recent: a click on another tab, or a tab opened or closed, while
  Ctrl is still held ends the walk (walkHolds), so it counts as a use.
- Save changes' tooltip and the theme switch question say "see-through
  window" in Prism Terminal, not "acrylic".
- The spec and comments no longer claim the stored switch survives a
  theme pick (a pick resets it, "the theme is the whole setup"); the
  spec's Tab switching wording matches what was built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* test(e2e): the gate follows the see-through row and the accent on switches (#156)

- accent: the see-through window sits between the theme wall and
  Background/Accent since #156 moved it there.
- settingsSearch: Prism Terminal names the row "See-through window"
  (acrylicLabel), so the gate searches by that; "acrylic" joins the row's
  keywords so the old name still finds it.
- settingsLook: an on switch wears the accent on purpose since #138/#139;
  the check failed on the base (#154) too, now it allows on switches and
  still catches any other accent-filled button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* refactor(core): drop the #154 rework's leftovers

shadeOn (the edge on a working Powerline fill, gone) and its tests, the
edge span's data-mark-overlay (always undefined), and the docs that still
spoke of a grow overlay or an edge on a Powerline fill.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix(core): Save changes saves the see-through the window paints

Under an opaque picked Background, Save changes stored the default
see-through measured from the theme's own ground (b9 for a dark Custom)
while the window and the dirty check measured from the pick (d1 for
white), so the setup was dirty again right after every save.
withGroundAlpha now carries termGroundAlpha(), the window's alpha.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix(core): the colour editor opens a preset at its own see-through

withGroundAlpha measured the default see-through from the window's ground,
which without a pick is the ACTIVE theme's. Every preset card has an edit
button, so a light preset edited under a dark active theme opened, and
saved as Custom, at b9 instead of d1. It now measures from the pick when
there is one (the window's alpha, as the last fix wants) and otherwise
from the palette's own ground.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: Powerline tabs get a visible border (owner, 2026-10-11)

The tabs sit on the theme's own ground, so the ground-coloured gap between
them was no border at all. With no mark, the band is now --p-tab-edge:
darker than the ground where it leaves room (dark grey gets black, white
gets light grey), lighter only on a ground too dark for that (black gets
grey), at least 1.5:1 off the ground.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: a dark grey ground's Powerline border is black

At the 1.5 floor a #2b2b2b ground (1.48:1 off black) went lighter. Black is
taken whenever it stands off at all visibly (1.3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border is the ground a bit darker

Owner, 2026-10-11: "all themes should have its bg color + a bit darker,
except black themes since that's not possible". Every ground's border steps
toward black (1.25:1, or black itself); only a true-black ground gets a
dark grey (1.2:1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* feat: darker Powerline borders, stronger light edges, Classic's faint line, no High Contrast

Owner, 2026-10-11:
- The Powerline border is the ground a bit darker, a dark ground's stopping at
  a very dark grey short of black; a light ground's stands 1.45:1 off it
  ("white themes have too faint of borders").
- The light column of the Edges alphas is raised about half again (Hairline
  10/12 to 15/17, the DWM border 0.16 to 0.22), "the border edges in general
  are too faint".
- Classic tabs get a faint line between them again, in the divider's ink.
- High Contrast is removed; whoever wore it goes to Pitch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* docs: the light Edges alphas raised (2026-10-11)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: See-through reaches the tab strip and the settings rail

Every surface is one coat of the sheet. The tab strip in the top row
painted --p-tabs over the row's own --p-tabs, the Settings wrapper painted
--p-bg under the frame's, and the rail painted --p-side over that: two or
three coats of b9 (92%, 98%), solid to the eye. The strip in the top row
and the Settings wrapper now leave the paint to the box under them, and
--p-side is transparent on glass as --p-tab-active is. The seeThrough e2e
measures each surface's composited alpha, on and off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* refactor: drop "High Contrast stays solid" with the theme

The owner removed the High Contrast theme (2026-10-11: "remove the theme
called high contrast"); its id now maps to Pitch, so termThemeId() never
returns it and #156's rule that held it solid under the see-through switch
was dead code. Removed termAcrylicInForce, useTermAcrylicInForce,
seeThroughBlocked and useSeeThroughBlocked: the switch is read as stored
(termAcrylic) by the window, the Background row, the editor and Save
changes. The row loses its blocked state and "High contrast stays solid."
copy. Tests that only held the rule are gone; themeOrder's neutrals drop
high-contrast and its tie test keeps the made-up pair. Docs say the rule
went with the theme. Core stays 0.31.0 (unreleased in this PR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: Classic's line between tabs runs the strip's full height

Owner, 2026-10-11: they "should go down to the bottom" and "to the top".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border wears the divider's ink, following the Edges setting

Owner, 2026-10-11: "the chevron border should match the edge border colour.
maybe they can follow the thinner style too when you're on faint". tabEdge and
--p-tab-edge are gone; the plain band paints --p-divider, so it is fainter on
Faint, stronger on Solid and gone on None, like every other line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

* fix: the Powerline border stays under a growing working edge

Owner, 2026-10-11: "the border is gone when it's working, that edge border
should still be there". The working edge on the tab in front grows from
nothing each cycle; the plain border is now drawn under every mark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Switches: on wears the theme's accent with the accent's ink as the knob, in both apps

1 participant