Box-drawing and related symbols render again. Box-drawing, block elements, braille, powerline separators, geometric shapes, and legacy computing symbols are now drawn as crisp, pixel-aligned atlas sprites that tile seamlessly at any font size and scale factor — they no longer fall back to the font's (often gappy) glyphs. These had been dropped during the v0.4.x grid rewrite.
Updated wgpu to 29.0.3 and the librashader filter chain to 0.11 (the wgpu path used for RetroArch shaders on Windows/WASM and behind the wgpu feature flag elsewhere).
Tab color picker now also opens on right-click (previously Control + left-click only).
New reset swatch in the tab color picker: a slashed box at the end of the swatch row clears the tab's custom color back to the default.
Fix clicks and cursor overrides being intercepted over the empty band at the top of the window when navigation.hide-if-single hides the tab strip on a single tab. New shared Navigation::island_visible(num_tabs) predicate keeps the renderer, click router, and cursor handler aligned — the empty band now passes through to the grid for selection and double-click maximize.
fix characters disappearing while typing on macOS — e.g. "agg" rendering as "ag", "355" as "35" (#1595). The text-run iterator now breaks the run around the cursor cell so speculative substitutions on later cells can't blank earlier ones.
fix panic on window resize / maximize (#1593, #1596 by @kronberger-droid). Grid dimensions are now sourced from the same snapshot that sized the row buffers, not from a live value that could race ahead.
macOS: text selection at the top of the window now works when navigation.hide-if-single is on with a single tab (#1512, #1516 by @0x0aa). Click routing and the cursor override now share a single gate that matches what the renderer paints.
reduce per-frame allocations in the rioterm renderer: per-cell styles are materialized once per snapshot, per-row dirty bits skip unchanged rows on partial damage, and visible-cell extras live in a per-frame map.
text-run shape cache key is now position-independent, and runs no longer break on space — adjacent words shape in a single call and cache hits stay high as the cursor walks a row.