When sorting the table, the virtual scroll’s dataStream emits before the DOM has fully updated its body rows. The sticky header logic (handleColumnsUpdate$) is triggered too early, detects a mismatch between the number of header and body cells, and exits without updating column widths or the header placeholder. This is especially true for smaller screens.
Since there are no further resize/scroll/column-change events, the sticky header remains in a stale state until the next data refresh, which explains why the layout "self-fixes" after some time in seconds.
