Sky-state control in the estate title bar; the state picks the theme #45

Merged
void merged 5 commits from void/sky-control into dev 2026-11-09 22:36:52 +00:00 AGit
Member

Stacked on #47 (edc6a9a8, which carries the corrected skyBackdrop): this PR's diff shows #47's commits until #47 merges. Calls only getSkyState / setSkyState / subscribe / skyBackdrop.

  • SkyStateControl: one menu button (role=menu, menuitemradio, aria-expanded, focus in/out) beside search in the estate title bar; fits 320 px.
  • skyTheme.ts: day and dusk -> Noonday Sky, night -> Midnight Sky, auto -> no override.
  • skyPlate.css.ts: one rule puts every region of text outside a bubble on the sign-in card's opaque --sky-bubble plate with its ink and link tokens, at all widths: headers, room list, list pages, typing and Following bars, non-bubble messages, room intro, composer, members drawer, call view, call status bar. Menus and dialogs keep their themed fill.

Ratios (WCAG, ink clamped into the sky range, from real tokens):

  • bare sky, union ranges: Night text 5.05 (Midnight ink) passes; Night link 2.36; Day 3.71 text / 2.56 link (Noonday); Dusk and Auto 1.00. So nothing rests on bare sky.
  • plate: Midnight 12.17 text / 5.68 link, Noonday 6.70 / 4.62, fallback themes 10.21 / 10.03.

Run: vitest features/scene (22 files, 360 tests), eslint, tsc on touched files (existing matrix-js-sdk type errors elsewhere), vite build. Not run: browser at 320 px, screen reader, GPU, reduced motion.

🤖 Generated with Claude Code

Stacked on #47 (edc6a9a8, which carries the corrected `skyBackdrop`): this PR's diff shows #47's commits until #47 merges. Calls only getSkyState / setSkyState / subscribe / skyBackdrop. - `SkyStateControl`: one menu button (role=menu, menuitemradio, aria-expanded, focus in/out) beside search in the estate title bar; fits 320 px. - `skyTheme.ts`: day and dusk -> Noonday Sky, night -> Midnight Sky, auto -> no override. - `skyPlate.css.ts`: one rule puts every region of text outside a bubble on the sign-in card's opaque `--sky-bubble` plate with its ink and link tokens, at all widths: headers, room list, list pages, typing and Following bars, non-bubble messages, room intro, composer, members drawer, call view, call status bar. Menus and dialogs keep their themed fill. Ratios (WCAG, ink clamped into the sky range, from real tokens): - bare sky, union ranges: Night text 5.05 (Midnight ink) passes; Night link 2.36; Day 3.71 text / 2.56 link (Noonday); Dusk and Auto 1.00. So nothing rests on bare sky. - plate: Midnight 12.17 text / 5.68 link, Noonday 6.70 / 4.62, fallback themes 10.21 / 10.03. Run: vitest features/scene (22 files, 360 tests), eslint, tsc on touched files (existing matrix-js-sdk type errors elsewhere), vite build. Not run: browser at 320 px, screen reader, GPU, reduced motion. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sky-state control in the estate title bar; the state picks the theme
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
36f43f788f
One button beside Find a room opens Auto / Day / Dusk / Night (fits a 320 px bar).
Day and Dusk take Noonday Sky's dark ink, Night Midnight Sky's light ink, Auto
keeps the theme the page would have had; signed-out pages follow the state too.
skyTheme.test.ts checks contrast from the baked tokens: day and night ink clear
AA on bare sky, every container carries its text, links clear AA on the surface,
and dusk text on bare sky does not, so it stays on surfaces.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
void force-pushed void/sky-control from 36f43f788f
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
to d3488f2348
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
2026-11-09 22:15:46 +00:00
Compare
void force-pushed void/sky-control from d3488f2348
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
to d9554470ba
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
2026-11-09 22:20:35 +00:00
Compare
Plate every region of bare-sky text under the scene with one rule
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
4af0e9e9c6
skyPlate.css.ts joins the room and page headers, the room list, list pages, the
typing and Following bars, non-bubble messages and the room intro to the sign-in
card's opaque --sky-bubble plate, with the plate's ink and link tokens, at all
widths. The estate title bar's own plate goes: the shared header rule covers it.
skyTheme.test.ts pins the link ratios on bare sky as well (day 5.25, night 2.36).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Plate the composer, members drawer, call view and call status bar
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
e34c87b1ed
They join the shared plate rule under the scene. The composer's own half-strength
blurred fill goes (its text fell below 4.5:1 in dusk and some auto themes); the
plate has the checked ink. skyTheme.test.ts pins which regions are on the plate.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
void force-pushed void/sky-control from e34c87b1ed
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
to 76daf7cdca
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
2026-11-09 22:32:56 +00:00
Compare
void merged commit 913a66ebf0 into dev 2026-11-09 22:36:52 +00:00
Sign in to join this conversation.
No reviewers
No labels
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
GameCult/Ratatoskr!45
No description provided.