v6.8.0: light theme
The palette lived as ~620 hex literals in inline styles plus a few hundred more in
the stylesheets, so there was no single thing to change. It is now 113 custom
properties in src/styles/theme.css, in two blocks.
src/scripts/theme-boot.js decides the theme before first paint — blocking, in <head>,
above the stylesheet, because a deferred script paints dark first and corrects itself.
It stores the mode ('system' | 'light' | 'dark'), never the colour it resolved to, and
stamps data-theme so an explicit choice can beat the media query. The switcher in the
header is a view onto it.
A filled accent stays the brand colour in both themes — the ink on it is near-black
either way — while an accent used as text darkens to clear 4.5:1 on white. A colour
reaches a fill by four routes (a style property, a constant, a helper argument, an SVG
source string), and tests/theme-switching.test.mjs covers all four.
The dark theme is unchanged: every colour declaration the previous build produced comes
out of this one identically once the properties are resolved.
Also: the roadmap drops its status chips on mobile, and Roadmap.jsx no longer splits a
colour with parseInt at runtime, which a var() reference cannot survive.
This commit is contained in:
@@ -218,19 +218,21 @@ function withTwoGroups() {
|
||||
|
||||
assert.equal(linkedCount(ready), 3);
|
||||
assert.equal(groupSub(ready), '3 members · P2P mesh');
|
||||
assert.equal(groupDot(ready), '#3ecf8e');
|
||||
// Custom properties rather than literals since the app gained a light theme: a dot is
|
||||
// a mark, so it takes the -solid accent, which is the brand colour in both themes.
|
||||
assert.equal(groupDot(ready), 'var(--sb-green-solid)');
|
||||
|
||||
const degraded = { ...ready, members: members(MEMBER_STATE.SELF, MEMBER_STATE.LOST, MEMBER_STATE.LINKED) };
|
||||
assert.equal(linkedCount(degraded), 2);
|
||||
assert.equal(groupSub(degraded), '2 of 3 connected', 'an unreachable member is a member not getting your messages');
|
||||
assert.equal(groupDot(degraded), '#e3b341', 'partial connectivity reads amber, not green');
|
||||
assert.equal(groupDot(degraded), 'var(--sb-yellow-2-solid)', 'partial connectivity reads amber, not green');
|
||||
|
||||
const forming = createGroupEntry({ id: 'h', name: 'New', members: members() });
|
||||
assert.equal(groupSub(forming), 'Forming…');
|
||||
assert.equal(groupDot(forming), '#e3b341');
|
||||
assert.equal(groupDot(forming), 'var(--sb-yellow-2-solid)');
|
||||
|
||||
const failed = { ...forming, phase: GROUP_PHASE.FAILED };
|
||||
assert.equal(groupDot(failed), '#e5727a');
|
||||
assert.equal(groupDot(failed), 'var(--sb-red-solid)');
|
||||
|
||||
const d = decorateGroup(ready, 'other');
|
||||
assert.equal(d.kind, 'group');
|
||||
|
||||
Reference in New Issue
Block a user