SpaceAge Theme System
Updated Aug 27, 2026 | 2.1 KB | docs/Spaceage_Theme_System.md
SpaceAge Theme System
This is the first pass at making the GUI palette maintainable, themeable, and safe for future skins.
Current Artifact
The current color audit workbook is:
outputs/reports/SpaceAge_GUI_Color_Audit_Theme_System.xlsx
It contains:
Theme Tokens: human-readable color roles intended for Google Sheets editing.Unique Colors: every unique hard-coded hex value found in the core source files, with occurrence counts.Raw Code Audit: file, line, hex value, inferred usage, and source expression.Google Sheet Workflow: the intended edit/export/generate process.
Intended Workflow
- Import the workbook into Google Sheets or edit it locally.
- Change only the
Current hexvalues inTheme Tokensunless creating a new approved token. - Export the
Theme Tokenssheet asSpaceAgeThemeTokens.csv. - Run a future palette generator that creates a C++ theme header from the CSV.
- Replace raw
juce::Colour(...)literals with named theme tokens over time.
Design Rules
- Token names should describe purpose, not visual taste. For example:
space.play, notspace.redButton. - Subscription theme packs should ship as signed theme files with version metadata, not as arbitrary loose art files.
- The default SpaceAge palette remains the brand source of truth.
- User-selectable skins should never break contrast, warning states, transport states, or selected/active states.
Current Visual Decisions
- Redshift GUI rotary direction: use Option A, the current moon-gradient dial, as the first implementation target. Keep the deep dark face, subtle lunar highlight, thin orange pointer, and existing SpaceAge control language rather than introducing a new knob family yet.
Next Implementation Step
Create a small generator that reads SpaceAgeThemeTokens.csv and emits something like:
struct SpaceAgeTheme
{
juce::Colour playTransport;
juce::Colour appBackground;
juce::Colour arrangementClip;
// ...
};
Then begin replacing the most repeated color literals first: background, text, transport, active blue, muted/unmuted states, arrangement clips, and navigation bands.