Add Synthwave, Acid Terminal and Tokyo Rain themes - #451
Closed
parsakhaz wants to merge 1 commit into
Closed
Conversation
Three vivid dark themes with full token coverage (parity with terracotta plus terminal selection), high-contrast blocks, effects/spacing tokens, shell selectors, Monaco vars, and picker entries with descriptions. Every text-bearing pair clears WCAG AA; neon primaries carry dark text. Screenshots under screenshots/themes/.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
6 tasks
parsakhaz
added a commit
that referenced
this pull request
Aug 18, 2026
…families (#459) Consolidates #451, #453, #454, #456 and themes-a11y into one batch: synthwave, acid, tokyo-rain, folio, newsprint, walnut, amber-crt, teletype, dot-matrix, haar, abyss, understory, colorblind-safe, low-fatigue, high-legibility. Pickers read one grouped THEME_OPTIONS list; pnpm theme:contrast gates all 15; pnpm theme:screenshots regenerates screenshots/themes/batch/.
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three new dark themes in the neon / synth / high-energy direction:
synthwave,acid,tokyo-rain. One of five parallel theme PRs; ids, names and palettes don't overlap the existing twelve. Every text-bearing color pair is WCAG AA or better — the neon lives on interactive and accent surfaces, the greys carry body copy. Each theme is a complete token set (same tokens asterracotta, plus--color-terminal-selection-bg) and works with the additive High-contrast toggle from #362.Themes at a glance
synthwave#120b1f#1a1029#f1eafc#ff5fd7/#3de3ff#0b0714acid#111311#171a17#eaf2ea#b4ff3a/#ffb020#0a0b0atokyo-rain#0d1120#131a2c#e6ebf4#ff4f9a/#5cb3ff#080b16Full-size captures are in Screenshots below.
Shell treatment differs too: Synthwave is medium density, soft radii, magenta hairline glow; Acid Terminal is compact and flat, tight radii, lime hairline; Tokyo Rain is spacious, large radii, blue glow. Glow lives only in
effects.csstokens (see What changed).If you're cherry-picking across the five theme PRs
--syn-*/--acid-*/--rain-*primitives and the:root.<id>+:root.high-contrast.<id>blocks incolors.css; the per-theme radii/glow ineffects.css, density inspacing.css, and the border-tint / gradient / Monaco blocks inindex.css; the picker descriptions inAppearanceSettingsandHomePage.Themeunion,VALID_THEMES/THEME_CLASSES/ class-removal lists, both bootstrap scripts infrontend/index.html,AppConfig.themein bothconfig.tsfiles, and the shared selector groups inindex.css, and the theme-name regex intests/accessibility.spec.ts.SelectItemgains an optionaldescriptionprop (column layout only when a description is passed; existing callers unchanged). Needed by the picker descriptions — if another PR adds the same thing, keep one.Screenshots
Main view — sidebar, a session with the Review (diff) panel expanded, and a terminal showing ANSI output. Captured at 1440×900 with the repo's Playwright +
electronApiMockharness against the Vite dev server. The Playwright spec that produced them is a throwaway and isn't committed; say the word if you'd like it intests/.Synthwave

Acid Terminal

Tokyo Rain

Appearance picker — the three entries, each with a one-line description (the Home-page dropdown gets the same three):

Contrast
No pair fails. Thresholds: body-text pairs 4.5:1, UI/large-text pairs 3:1, high-contrast muted tokens 7:1. All 16 ANSI colors were checked against each theme's terminal background — the lowest is red at 6.70:1 (synthwave, tokyo-rain) and 6.78:1 (acid); the rest range 7.5:1 to 17.3:1.
Two decisions worth knowing about:
#ff5fd7is ~2.9:1), so all three themes set--color-text-on-interactive/--color-button-primary-textto a near-black from their own ramp — that pair clears 6.1:1 (tokyo-rain) to 16.3:1 (acid). Links, focus rings and cursors use the second accent (cyan / lime / blue), which sits at 8.4:1 to 15.9:1 on the chrome background.--color-status-info(#5ee0d0) so info and warning don't collapse into the same amber.How the numbers were produced: WCAG 2.x relative-luminance formula, run over the same palette data that generated the CSS. The repo has no committed contrast script (#362 hand-computed its ratios), so the checker lives in the author's scratchpad; its full output is below.
Synthwave (
synthwave) — measured ratios#f1eafc#120b1f#d5c9ea#120b1f#b5a5d6#120b1f#a08fc9#120b1f#bcaee0#120b1f#8d79b5#0b0714#3de3ff#120b1f#ff5fd7#120b1f#14081f#ff5fd7#d5c9ea#2e1d4a#b5a5d6#221538#b5a5d6#1a1029#5ee89a#120b1f#ffc857#120b1f#ff5c7a#120b1f#3de3ff#120b1f#f1eafc#0b0714#ff5c7a#0b0714#5ee89a#0b0714#ffd166#0b0714#7f9cff#0b0714#ff5fd7#0b0714#3de3ff#0b0714#ff8aa0#0b0714#8ff5b8#0b0714#ffe08a#0b0714#a6b8ff#0b0714#ff8ee6#0b0714#86efff#0b0714Acid Terminal (
acid) — measured ratios#eaf2ea#111311#cbd6cb#111311#a3b3a3#111311#8a9c8a#111311#a9b9a9#111311#778a77#0a0b0a#c6ff63#111311#b4ff3a#111311#0a0b0a#b4ff3a#cbd6cb#283028#a3b3a3#1e221e#a3b3a3#171a17#7ff26a#111311#ffb020#111311#ff6363#111311#5ee0d0#111311#eaf2ea#0a0b0a#ff6363#0a0b0a#7ff26a#0a0b0a#ffb020#0a0b0a#7fb2ff#0a0b0a#d99cff#0a0b0a#5ee0d0#0a0b0a#ff8f8f#0a0b0a#a8f797#0a0b0a#ffc95c#0a0b0a#a6c9ff#0a0b0a#e6bbff#0a0b0a#8fece0#0a0b0aTokyo Rain (
tokyo-rain) — measured ratios#e6ebf4#0d1120#c3ccdc#0d1120#9facc3#0d1120#8896b3#0d1120#a7b3cb#0d1120#74839f#080b16#5cb3ff#0d1120#ff4f9a#0d1120#0d1120#ff4f9a#c3ccdc#242e4a#9facc3#1a2238#9facc3#131a2c#4ee0a3#0d1120#ffc45c#0d1120#ff5f7a#0d1120#5cb3ff#0d1120#e6ebf4#080b16#ff5f7a#080b16#4ee0a3#080b16#ffc45c#080b16#5cb3ff#080b16#ff6fb0#080b16#4fe0e6#080b16#ff8da1#080b16#84ecbf#080b16#ffd68a#080b16#8ecbff#080b16#ff9bc9#080b16#8aecf0#080b16What changed, file by file
Themeunion (themeContextValue.ts),VALID_THEMES/THEME_CLASSES/ class-removal lists (ThemeProvider.tsx), both pre-React bootstrap scripts infrontend/index.html,AppConfig.themeinfrontend/src/types/config.tsandmain/src/types/config.ts(both sites).colors.css:--syn-*,--acid-*,--rain-*primitives; full:root.synthwave/:root.acid/:root.tokyo-rainblocks (every variable:root.terracottaoverrides, plus terminal selection);:root.high-contrast.<id>blocks lifting the muted family to ≥7:1.effects.css: per-theme radii and the glow. Glow is expressed only as--panel-shell-glow/--panel-shell-shadowtokens here; the theme-specific blocks inindex.cssset border tint only, nobox-shadowliterals.spacing.css: density per theme (synthwave medium, acid compact, tokyo-rain spacious).index.css: the three ids join the underline tab-indicator group and every shared shell selector group; border tint blocks; xterm radius; Monaco--vscode-editor-*vars; subtle body gradient for synthwave and tokyo-rain (existing ember/aurora pattern).monaco-overrides.cssmirrors the Monaco vars (that file isn't imported today;index.csscarries the live copy).SelectItemgains an optionaldescriptionprop (column layout only when a description is passed, so existing callers are unchanged); the three themes get descriptions inAppearanceSettingsand theHomePagedropdown.tests/accessibility.spec.ts: the theme-trigger name regex (two places) gainsSynthwave|Acid Terminal|Tokyo Rain— another shared site the other theme PRs will touch.screenshots/themes/:synthwave.png,acid.png,tokyo-rain.png,appearance-picker.png.Testing
pnpm lintandpnpm typecheckgreen.tests/settings.spec.ts+tests/accessibility.spec.ts— 27 pass; the one failure (discards remote subview drafts and rebaselines a completed host setup) fails identically onmainwith the changes stashed, so it's pre-existing and unrelated.highContrastand asserted--color-text-mutedresolves to the AA value normally and the ≥7:1 value under.high-contrast, and that--color-terminal-bg/ button text tokens resolve — all six combinations pass.Lane: light: simple-plan → prepare-pr