Rebuild renumber() so gutter numbers are placed by measured geometry: each .gutline block is one visual row and each number is assigned to the row whose top matches its .codeline's top, instead of counting rows per line. This keeps numbers aligned with wrapped line starts regardless of how many visual rows a line occupies. Wrap OFF path unchanged.