Selection markers, tab panels, brand changes and theme changes no longer use
a view transition. The page snapshot could not blur what sits behind frosted
glass, so every frosted surface went clear for the length of the change.
nv.transition now measures the marker before and after, and animates the
marker itself (FLIP); arriving content animates on its own; colours fade on
their own surfaces. Verified in Firefox: no view transition is ever started.
Time picker: wheels take every pointer type (mouse, pen, touch) with
touch-action: none, so a phone, a browser's phone mode and a desktop behave
alike. The rubber-band is capped at about 40% of a row (a whole row made the
neighbour look selected). Each wheel has its own frame slot, so one wheel can
no longer swallow another's last scroll event. Switching 24H / AM / PM
happens when the wheel settles, and the hours animate into the new layout.
Carousel arrows are frosted glass, as anything floating over content should be.
At phone width the top bar keeps to one row and its link list scrolls.
GUIDELINES.md records the new cross-engine rules.
check.py, build.py and build.py --check pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found by driving Firefox 158 with real pointer, wheel and key input.
- Time picker wheels used padding to reach the last rows. Firefox leaves
bottom padding out of the scrollable area, so the last rows were
unreachable and the 24H/AM/PM wheel could not scroll at all. Spacer
pseudo-elements replace the padding.
- Wheels can now be dragged with a mouse or pen, with inertia, a rubber-band
at the ends and a spring back. Touch is left to the platform.
- Theme changes no longer use a page-wide view transition. The snapshot
could not blur what sits behind frosted glass, so every frosted surface
went clear for the length of the cross-fade.
- Dark shadows were invisible: black on a near-black canvas, with a deep
negative spread tucking the blur under the element. The dark canvas is
lifted, the shadows are stronger and the spreads milder.
- Same-page links now travel (scroll-behavior: smooth, motion permitting).
- data-nv-tristate: a checkbox that cycles unchecked, checked, partial; the
browser can display a partial state but a click can never choose it.
- Button groups show their pressed segment.
GUIDELINES.md gains the cross-engine rules these defects taught, and makes
Firefox the first browser to verify in.
check.py, build.py and build.py --check pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Glaze is glass with a dial: --nv-glass-frost (0 clear .. 1 heavy) moves
backdrop blur, tint and saturation together, read where the surface is
drawn so any subtree or slider can change it. A masked rim and a specular
bloom follow the pointer via niveus.js; without it the light sits at its
default and the material still reads. Falls back to the elevated solid
under reduced transparency or without backdrop-filter.
New components: .nv-slider (binds to a token with data-nv-var),
.nv-calendar, .nv-timepicker (24-hour by default, optional 24H / AM/PM
switch, value always HH:MM), and .nv-picker with .nv-menu--listbox (search,
type-ahead, keys). All render without niveus.js except where noted.
GUIDELINES.md is the normative rulebook for people and AI agents.
check.py, build.py and build.py --check pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Bevelled controls with light falling across them, fields as wells, solid
windows, and glass kept for the chrome that floats over everything else.
Warm graphite in dark, soft paper in light, one brand color driving both.
Ships its own fonts (Instrument Sans, JetBrains Mono; OFL).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>