Theme: hand-author a Proton-cohesive ColorScheme (light + dark) #6

Merged
raisondetredev merged 1 commit from refs/pull/6/head into main 2026-07-09 20:27:00 +02:00
raisondetredev commented 2026-07-09 20:20:10 +02:00 (Migrated from codeberg.org)

Reworks the app's Material 3 ColorScheme so the whole UI reads as one family with the picker-palette accent chips, instead of Material-generated grey with vivid chips sitting on top of it. (Companion to a ref-bump in halkyon-learn.)

What changes

HalkyonColorScheme.light() / .dark() are now hand-authored rather than raw ColorScheme.fromSeed output. Every chromatic role is a picker-palette member:

role light dark
primary cobalt #273EB2 (anchor) lightened cobalt #AEB9FF
secondary slateblue #415DF0 #B7C0F7
tertiary copper #C44800 lightened copper #FFB694
error cerise #BA1E55 #FF9EBB

The neutral ramp carries a deliberate cool, cobalt-tinted undertone — light mode is near-white blues (surface #F7F9FFsurfaceContainerHighest #CDD7EF), dark mode a deep navy-slate. That undertone is the piece that stops the background reading as generic Material grey.

How

Built as fromSeed(seedColor: cobalt, tertiary: copper).copyWith(...): fromSeed still fills the rarely-seen roles (shadow, scrim, the *Fixed set, inversePrimary) coherently off the cobalt seed, and copyWith overrides every role the UI actually shows.

Untouched: the 20-color HalkyonPickerPalette (names, hexes, AA-guarded foregrounds) and the HalkyonExtras status colors (success / warning / info). Those already cohere; this brings the chrome up to meet them.

Tests

The colour-scheme + theme tests are updated to lock the new anchors (primary = cobalt, secondary = slateblue, error = cerise, the cool surface values, and the dark lightened tertiary). Full halkyon_ui suite green (50), analyze clean.

Design was reviewed as a swatch/component preview before implementation; the values here match what was signed off.

Reworks the app's Material 3 `ColorScheme` so the whole UI reads as **one family with the picker-palette accent chips**, instead of Material-generated grey with vivid chips sitting on top of it. (Companion to a ref-bump in halkyon-learn.) ### What changes `HalkyonColorScheme.light()` / `.dark()` are now **hand-authored** rather than raw `ColorScheme.fromSeed` output. Every chromatic role is a picker-palette member: | role | light | dark | |---|---|---| | primary | cobalt `#273EB2` (anchor) | lightened cobalt `#AEB9FF` | | secondary | slateblue `#415DF0` | `#B7C0F7` | | tertiary | copper `#C44800` | lightened copper `#FFB694` | | error | cerise `#BA1E55` | `#FF9EBB` | The **neutral ramp** carries a deliberate cool, cobalt-tinted undertone — light mode is near-white blues (`surface #F7F9FF` … `surfaceContainerHighest #CDD7EF`), dark mode a deep navy-slate. That undertone is the piece that stops the background reading as generic Material grey. ### How Built as `fromSeed(seedColor: cobalt, tertiary: copper).copyWith(...)`: `fromSeed` still fills the rarely-seen roles (shadow, scrim, the `*Fixed` set, `inversePrimary`) coherently off the cobalt seed, and `copyWith` overrides every role the UI actually shows. **Untouched:** the 20-color `HalkyonPickerPalette` (names, hexes, AA-guarded foregrounds) and the `HalkyonExtras` status colors (success / warning / info). Those already cohere; this brings the chrome up to meet them. ### Tests The colour-scheme + theme tests are updated to lock the new anchors (primary = cobalt, secondary = slateblue, error = cerise, the cool surface values, and the dark lightened tertiary). Full `halkyon_ui` suite green (50), analyze clean. Design was reviewed as a swatch/component preview before implementation; the values here match what was signed off.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
project-halkyon/halkyon-shared!6
No description provided.