You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
new — a theme can be more than a palette. Seven optional fields on a theme give it a character beyond its thirteen colours: surfaceAlpha (how solid a raised surface is), surfaceBlur (the backdrop-filter behind it), surfaceGlow (how much accent bleeds around it), radiusScale, and labelTransform / labelSpacing / labelWeight for the category headings. Every one is a clamped number or a word from a fixed list, so no CSS crosses the boundary and the sanitising is a clamp rather than a parser. The zero value of each is exactly today's behaviour, so all 214 existing themes and every hand-made one render unchanged.
new — Glass, a fourth theme depth. Beside Flat, Soft and Rich, in Appearance → Theme. It turns raised surfaces translucent with the page showing through — in the classic layout as well as the modern one, the modals and the search overlay.
new — a theme glows without being told to. Four themes out of 222 declared surfaceGlow, so 218 were flat by omission rather than intent. It is now derived from the theme's own palette: how much colour the accent carries (chroma in OKLCH, not HSL saturation, which calls #58A6FF fully saturated on one channel touching 255), how light it is, and how dark the page behind it is. That gives 89 of the 222 a glow of their own — terminals and neons at the top, editor greys around 0.20, paper at nothing. A theme that names its own still gets exactly that.
fix — the two new spotlights carry their translations. They were added to the feature catalogue with locale keys but only English fallbacks, which the JSON validator catches: a key a catalogue references has to exist in every locale, or four languages quietly fall back to English.
new — the faint inks are derived from the surface they sit on. A theme picks three text colours against background-primary and never adjusts them, while the surface ladder rises above it — so every layer costs contrast that nobody sees coming. Measured across the 107 dark built-ins, tertiary text was under 3.0:1 on surface-3 for 33 of them. Secondary and tertiary are now derived per surface with oklch(from …), holding their distance wherever they land.
fix — the faint text meets WCAG AA on every theme again. The derived inks sit a fixed step off the surface they are on, and at 0.44 the dark theme fell short: its top surface (#1F2937) is a step lighter than the rest of its ladder, so tertiary text reached only 4.05:1 there — under the 4.5:1 floor for body text. The step is now 0.47, the smallest that clears the floor on every shipped theme and every surface (4.56:1 at worst). The stylesheet, the server default and the test that measures it move together; TestDerivedInkClearsContrastFloor checks the whole register.
Tests
fix — two specs that the theme work moved past. The widget readout compared a row's colour against --text-tertiary read off documentElement, which still holds the plain hex while the faint inks are now derived per surface — so it measured the root's colour rather than the tile's, and could only pass while the two happened to agree. It now reads the ink where the rows are, with the probe placed beside them. The v1.4.0 setting drawings asserted three theme depths; glass is a fourth the server accepts and the drop-down offers.