A theme was thirteen colours. It is now a palette and a character: one of
twelve archetypes that answers the nine surface fields a theme leaves blank.
218 of the 242 entries said nothing about how they were drawn, so most of the
collection rendered flat and matte whatever its palette was.
Themes
- new — every packaged theme names a character. Lacquer, Glass, Frost,
Aurora, Neon, Velvet, Enamel, Brushed, Carbon, Paper, Terminal, Ink. The
archetype scales what the palette derivations already work out rather than
replacing them, so glass on a pale slate and glass on a near-black terminal
are both glass and not equally transparent. A field a theme states for itself
still wins, so the 24 entries that already carried character are untouched. - new — one line per family, saying what it is like to sit in front of.
Shown on the card in the browser and searchable, so a word from a theme's own
line finds it. - new — a theme states the surfaces it was drawn for.
Depth,Glowand
Effectsare fields onThemeColorsnow; left empty they are derived from
the archetype.
Appearance
- new — Depth, Glow and Effects start on Follow the theme. A change made
while following belongs to the theme on screen: it is stored under
themeSurfacePrefskeyed by theme id, so switching away and back finds it
again and every other theme keeps its own. Every theme holds the three
across the install instead, which is how every version before this worked. - new — Effects (off / held back / full), emitted as
--theme-effects.
Every character token multiplies by it, so off is genuinely off. - new — Vivid, a rung above
richwhere the archetypes open all the way.
glassstays beside the ladder rather than on it. - new — Back to the theme's own resets Depth, Glow and Effects for the
theme on screen, whether they were stored against it or forced install-wide. - fix — the Surfaces panel lines up. Notes sat in the third column of the
.config-fieldgrid and pushed the ↺ onto a line of its own; they take the
full row now, which also straightens out Text contrast and the Backdrop
panel. - fix —
themeDepthandglowStrengthcarried stale defaults (glass,
soft) inFIELD_META, so the ↺ claimed every install differed from the
default. - fix — one button to the theme editor. Open the theme editor… and Make
your own theme… both ranswitchAppearanceTab('custom-themes'). - new — ℹ on Depth, Glow, Effects, Text contrast, both Backdrop rows and the
two favicon controls. None of them had one. - fix — Surfaces had grown to seven fields against a limit of five, and
stood four times taller than the shortest panel on the tab. The scope tick
and the reset are their own panel now — Whose surfaces these are — and the
notes under the four remaining rows are one line each, since the ℹ carries
the detail. - fix — the Every theme tick sat in a
.config-field, the one row shape
checkboxes do not use (config-checkbox-rows.spec.jspins it). - fix — the grid rule for the favicon slider was keyed on its affordances,
so it also caught the opacity slider and gave that row a fifth column with
nothing to put in it.
The theme browser
- new — a row of chips, one per archetype.
isGloss()testedsheen > 0,
which matches almost everything once every theme has a character; Gloss is
one chip of twelve now. - new — searching reaches the archetype and the written line, in the
reader's own language as well as the bare word. - new — every theme previews at its own intended surfaces while the browser
is open; what the reader had is restored on close, picked or not.
The dashboard
- new — an invitation to try the Widgets layout, through
NoticeCard.define(). It applies the preset and carries the undo itself: the
preset in use is stored before the switch and the follow-up names it. The
delay is random, two to six minutes, drawn per page load.
The theme editor
- new — a Character group: the archetype, the grain's angle and strength,
and the Depth, Glow and Effects the theme asks for. Every field starts at
Automatic and shows what the archetype gives it.
Under the hood
--surface-grain, two repeating gradients at right angles, for the brushed
and woven archetypes.--gloss-depthcaps the gloss at 1.15 of--theme-depth. Every other layer
is meant to grow with depth, but 15% white × a full sheen × a depth of 2 is
30% white over a whole panel.fillThemeCharacterlearned the new fields. Every built-in is written to
disk on first run, so without it an install that has been going a week would
keep 242 stored palettes with no character at all.clampFloattreats zero as "unset" and answers with its fallback, which is
right for a JSON field and wrong for arithmetic:papermultiplies the
derived blur by 0 and means it.clampComputedclamps a worked-out number.- fix —
--layout-radius-xs/sm/mdsat on fixed pixels, outside the radius
scale, so a theme's character moved one family of corners and not the other.
It never showed while no theme asked for a scale —--radius-5and
--layout-radius-smwere both 8px — and turned up as the search box in
Health staying at 8px while the same box in Config followed the theme. The
three follow the scale now, which is whattheme-character.cssalready
claimed. /api/themes/metaand/api/themes/defaults.
Development
- fix — five specs pinned rules this release changed. A fresh install no
longer storesglassandsoftbutfollow; the ↺ on the three surfaces is
one button now; andglass-and-glow.spec.jsturned out to depend on what ran
before it in the same file, so it asserts what is drawn and leaves the stored
words to Go. - fix —
TestGlowLiftIsOneOfTwoNumbersrequired the glow geometry to be a
function of page lightness alone;neonandvelvetnow insist. - fix — eight e2e specs pinned absolute corner radii (
8px,4px) or a
computed edge alpha. A theme may move its corners now, so they measure the
token on a probe element andtheme-edge-darkcompares the widget's lit line
with--edge-topitself rather than with 0.24. - fix —
config-field-grid-and-mobile-navread "the first slider on the
tab", which became the favicon intensity row once that gained an ℹ; it names
the opacity slider now. - fix — the gloss glow offer wrote
glowStrengthinstall-wide. It goes
through the same path as every other surface change, so it lands on the theme
that prompted it. - fix —
:depthin the command palette listed four choices and knew
nothing of follow or vivid, so on a fresh install the ✓ had nowhere to land.
It and:glowoffer the list Config does and write through the same path, so
a value picked there belongs to the theme on screen.
Docs
- Config → Help: the Themes page gained a Character section, Surfaces was
rewritten around Follow the theme, Effects and Vivid, and Gloss became one
archetype rather than a kind of its own. English in all six locale files;
translation belongs to a docs round. - Around forty new interface strings in all six locale files: the twelve
archetype labels, the Effects setting, Follow the theme, and the ℹ text for
the rows in Surfaces, Backdrop and Favicons that had none. English
everywhere; translation belongs to a docs round. asset_hashes_gen.goregenerated for the CSS and JS this release touches.CHANGELOG.md,static/data/whats-new/v1.13.3.json,index.json, both
tokens inwhats-new-stub.js,tests/whats-new-hidden-release.spec.js.