e95f759cd8
The palette sized its scroll window by entry count (`popup_height - 7`) while the same fixed-height popup also rendered the 9-line header plus per-section labels and separators. Those uncounted rows pushed the selected entry past the bottom clip line, so pressing Down made the cursor vanish and the list appear frozen until the index finally exceeded the oversized budget. Size the window against the real rendered cost: subtract the actual header height and account for section labels/separators when choosing the visible range, guaranteeing the selection stays on screen and the list scrolls. Adds unit tests for the window helper. https://claude.ai/code/session_01MQrnh6wHfrEYN5BBdMarC1