Skip to content

Add an Appearance setting: follow the system, or pick a theme - #49

Merged
SorcRR merged 4 commits into
masterfrom
claude/appearance-setting
Oct 14, 2026
Merged

SorcRR merged 4 commits into
masterfrom
claude/appearance-setting

Conversation

@SorcRR

@SorcRR SorcRR commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

What

The popover and every window used to be forced dark. Settings › Appearance now has:

Control Options Default
Theme System · Dark · Light · Razer Green System
Glass effect On / Off On

The popover follows macOS by default and updates live, even while it's open. Settings, About and the other windows get the same look: glass or solid, light, dark or green. Only the popover gets the green edge. Razer Green is always dark.

Mockups (approved): https://claude.ai/artifact/RNsSMjXHQLcCE7QJf4KbKT

How

  • PopoverTheme.swift: the theme, PopoverLook.resolve(theme:glass:systemIsDark:) (one pure function for all 16 combinations), AppearanceSettings (UserDefaults, window tracking), PopoverBackdropView and WindowBackdrop (a glass view plus the tint, in each window's frame view).
  • Arrow: solid colours and the green tint are painted by a view in NSPopover's frame view, just under the content. That view clips to the popover's outline, so the arrow gets the same fill as the body. I checked this with a throwaway AppKit probe on macOS 26: the fill covered the body and the arrow, with rounded corners.
  • The popover's appearance is always set explicitly. A nil appearance would follow the menu bar, which macOS tints from the wallpaper.
  • Colours: razerGreen stays the fill. Green text and icons use razerGreenText (#23891A on light). Selected chips use onRazerGreen (#0D2B07) in every theme, because white on #44D62C is only about 1.9:1. The logo green and the Bluetooth blue adapt too.
  • Tests: PopoverThemeTests covers every combination, defaults, persistence, an unknown stored value, and window tracking. swift test passes locally (350 tests).

Please check on a real Mac (swift run MacRazer)

  • Each theme × glass combination (6 looks) matches the mockups
  • Switch macOS light ↔ dark with the popover open, on System: it follows straight away
  • Solid looks: the arrow is solid too, with no glass triangle and no square corners
  • Razer Green glass: the green edge sits on the rounded outline
  • Settings, About and Permissions windows get the same glass, solid colour or green tint as the popover, including the title bar, and change live when the setting changes
  • On macOS 14/15 if available: the solid backdrop still clips to the outline. This is only verified on macOS 26.

Not in this PR

Bordered-prominent buttons tinted green (Install Now, Permissions Grant/Relaunch/Done, Crash Report, Updated, What's New) still use the system's white label on green. Changing that means restyling those buttons, so it's left for a follow-up.

🤖 Generated with Claude Code

The popover and every window were forced dark. Settings > Appearance now has a
Theme (System, Dark, Light, Razer Green) and a Glass effect switch. The popover
follows the system by default and updates live; windows follow light or dark.
Solid backgrounds are painted in the popover's frame view so the arrow matches.
Green text and the Bluetooth blue adapt to light mode, and selected chips use
dark text on green, since white on #44D62C is only about 1.9:1.
The colour page's swatch and wheel outlines were white, which vanishes on a
light popover; they now use the primary colour. The backdrop colour is
returned as an NSColor from PopoverLook instead of an RGBA tuple.
Settings, About and the other windows only followed light or dark. They now
get the same glass, solid background or Razer Green tint as the popover. The
glass and tint sit in each window's frame view so the title bar matches.
The popover colours and PopoverLook had separate copies of the same hex to
NSColor conversion; both now use NSColor(hex:). The comment boxes in the crash
report and device test windows drew an opaque system background over the
themed window; they now use a faint fill like the cards.
@SorcRR
SorcRR merged commit 49dd6ea into master Oct 14, 2026
1 check passed
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.

1 participant