2026-08-21 — Theme store and Nabla slot visibility

Summary

Custom themes now live in a searchable theme store on /theme (F/T/N light and dark letter previews, load into the editor, per-theme preview at /theme/<id>). On /dev/nabla, primer / shadowMiddle / topBottom / midTop wells are labeled low visibility — they are wired in CSS but nearly unused in Nabla’s shipped COLR paint trees. Color wells keep a local draft while dragging; COLR CSS is rAF-coalesced, the EDPT wave freezes for the drag, and split preview drops to one surface so the native picker does not hitch on glyph paint.

Highlights

  • Verdict (Nabla wells): Not a CSS/@font-palette-values bug. Live preview already writes override-colors for indices 0–9 and scopes font-palette onto accent letters. Upstream shear_and_extrude.py default side gradient is shadowBottom → shadow → top (1, 3, 8); front is frontBottom → frontTop (6, 7). Slot 0 (primer) is an undercoat almost fully covered; slots 2 / 4 / 5 only paint when designer layer stops name them (rare on F/T/N).

  • Live editor: high-visibility wells first; 0 / 2 / 4 / 5 behind a reveal; slot probe cards on the same page carry a Low visibility badge.

  • Non-blocking color pickers: SlotWell / theme color fields hold draft hex locally. Drag ticks only update a pending-palette ref and schedule one requestAnimationFrame COLR/<style> apply; idle flush + blur commit (not pointerup — OS dialogs fire that when the popup opens). While dragging Nabla wells, EDPT wave freezes to static base and split cream/asphalt collapses to cream only. Pausing EDPT materially helps — the wave sets fontVariationSettings every frame specifically to force COLR rebuilds, which stacks with palette invalidation. Browsers do not expose a Worker API to farm font-palette / COLR paint off the main thread; COLRv1 is not an SVG DOM you control.

  • Live editor demotes slots 0 / 2 / 4 / 5 in a dashed Low-visibility wells (not broken) panel with optional reveal; probe cards below still badge Low visibility.

  • Theme hub/editor color fields use the same draft + rAF preview pattern for chrome/lockup.

  • Public Convex themeSubmissions.listCatalog (optional name q, recent window).

  • /theme hub: store grid under the customizer. /theme/editor: search + Load. /theme/[id]: chrome + F/T/N preview and load links (editor / Nabla live).

Routes

  • /theme — customize + store

  • /theme/editor — store search/load + full tokens

  • /theme/<id> — individual preview

  • /dev/nabla — Nabla live (slot UX + non-blocking wells)

  • /dev/themes — gated review catalog (unchanged)