Follow-up to the desktop Compose port and the shared theme work.
Goal
Theme should be a first-class, extensible layer — not hardcoded to Material 3. M3 is the default family today (light/dark + accent swatches + Android Material You). Later families should plug in without rewriting screens.
Proposed shape
ThemeFamily enum / registry in :components (or a dedicated :theme module later).
- Each family supplies light + dark palettes, shape language, and optional chrome (window controls, sidebar treatment).
- Screens consume
ColorScheme + shapes through a thin YuriTheme API so they don't import M3 tokens directly where we can help it.
- Playback chrome (now playing, mini player) still tints from cover art on top of the family.
Families to add
- Jewel (desktop-first) — faceted / gem-cut surfaces, high-contrast metals, decorative corners. Not M3.
- macOS / iOS — system-adjacent: vibrancy, sidebar, liquid-glass-ish chrome where the OS allows it. Use platform APIs instead of faking Aqua.
- Windows — Mica / Acrylic / WinUI-adjacent when running on Windows.
Out of scope for the first pass (already shipping)
- Built-in light + dark
- Accent color picker (M3 primary)
- Desktop appearance: manual dark, manual light, follow system
- Android 12+ Material You for the main chrome
Notes
Desktop should keep ThemeMode.SYSTEM wired to OS dark/light even after Jewel lands — Jewel still has a light and a dark cut.
Follow-up to the desktop Compose port and the shared theme work.
Goal
Theme should be a first-class, extensible layer — not hardcoded to Material 3. M3 is the default family today (light/dark + accent swatches + Android Material You). Later families should plug in without rewriting screens.
Proposed shape
ThemeFamilyenum / registry in:components(or a dedicated:thememodule later).ColorScheme+ shapes through a thinYuriThemeAPI so they don't import M3 tokens directly where we can help it.Families to add
Out of scope for the first pass (already shipping)
Notes
Desktop should keep
ThemeMode.SYSTEMwired to OS dark/light even after Jewel lands — Jewel still has a light and a dark cut.