Skip to content

gui: appearance settings menu (global font size) + n-mode recolor#71

Merged
logan-nc merged 3 commits into
developfrom
feature/gui-appearance-settings-menu
Jul 1, 2026
Merged

gui: appearance settings menu (global font size) + n-mode recolor#71
logan-nc merged 3 commits into
developfrom
feature/gui-appearance-settings-menu

Conversation

@logan-nc

@logan-nc logan-nc commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Two GUI/appearance improvements from #59.

1. Appearance settings menu + global font size

Adds a header gear-icon popover as the single home for global appearance preferences (keeps the header uncluttered; future prefs are a one-row add). It houses the existing light/dark toggle plus a new S / M / L / XL text-size control.

  • Text size is a persisted fontScale (mirrors the theme pattern) applied as a --font-scale multiplier on <html>.
  • The base font-size folds it in and chrome font-sizes are em-relative, so one value rescales the app's typography. The tabs' inline fontSize values are tied to the same variable so their labels/controls scale too.
  • Presets are evenly spaced from S (0.85) up to a boosted XL (1.6); default Medium (1.1).

2. n-mode palette recolor (warm → cool)

Reverses the |n|≥1 hues of the shared discrete mode-number palette so the lowest coherent modes read hottest: 1=red, 2=orange, 3=yellow, then green/blue/purple. Same hexes, reordered; 0=grey ("no mode") unchanged. Shared palette → the rotating spectrogram and any discrete n-map (modeColor/NodeView) stay consistent. The QS tab uses its own palette and is unaffected.

Addresses #59

  • General GUI — Larger GUI font size
  • Rotating modes — Match modespec colors for n modes

Cross-team note

Self-contained, but touches other teams' lanes for review awareness:

  • Tab fontSize conversions in RotatingTab / QuasiStationaryTab / SensorsTab (Rapid Rotators / Slow Rollers) — purely mechanical fontSize: Ncalc(Npx * var(--font-scale)).
  • Shared lib/colormaps.ts palette reorder (affects Rapid Rotators' rotating spectrogram).

Testing

  • tsc -b && vite build clean.
  • vitest34 passing (adds store.test.ts + SettingsMenu.test.tsx, plus a preset-spacing check).

🤖 Generated with Claude Code

logan-nc and others added 2 commits July 1, 2026 16:46
Introduce a header gear-icon popover as the single home for global
appearance preferences, so the header stays uncluttered and future
prefs are a one-row addition. It houses the existing light/dark toggle
plus a new S/M/L/XL text-size control.

Text size is a persisted `fontScale` (mirrors the theme pattern) applied
as a `--font-scale` multiplier on <html>. The base font-size folds it in
and the chrome font-sizes are em-relative, so one value rescales the
app's typography; the tabs' inline `fontSize` values are tied to the same
variable so their labels/controls scale too. Presets are evenly spaced
from S (0.85) up to a boosted XL (1.6), default Medium (1.1).

Addresses #59: "Larger GUI font size".
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Reverse the |n|≥1 hues of the shared discrete mode-number palette so the
lowest coherent modes read hottest: 1=red, 2=orange, 3=yellow, then
green/blue/purple. Same hexes as before, just reordered; 0=grey ("no
mode") is unchanged. Because the palette is shared, the rotating
spectrogram and any discrete n-map (modeColor / NodeView) stay
consistent. The QS tab uses its own palette and is unaffected.

Addresses #59: "Match modespec colors for n modes".
Co-Authored-By: Claude Opus 4.8 <[email protected]>
@logan-nc logan-nc self-assigned this Jul 1, 2026
@logan-nc logan-nc added the enhancement New feature or request label Jul 1, 2026
…ance-settings-menu

# Conflicts:
#	gui/web/src/components/tabs/RotatingTab.tsx
@logan-nc logan-nc merged commit 2c28cc0 into develop Jul 1, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant