Two changes folded into one commit since they were developed
together:
1. Raise two-char label cap from 2*|L| to |L|^2. The cap was a
conservative guess against visual density; the gap+overlap-skip
logic makes density self-limiting regardless of pool size. Cost:
all 26 letters land in prefixes[] in two-char mode, so single-
char pattern extension doesn't work there. Acceptable since
you're in two-char mode precisely because you want to jump, not
extend further.
2. Fix: overlap check now compares a candidate label against ALL
labels already placed on the same line, not just the most recent
one. Previously line_end[line] tracked a single right edge,
which assumed left-to-right commit order. With cursor-proximity
sort, a right-of-cursor label can commit first and poison the
tracker, wrongly rejecting a left-of-it match whose label
wouldn't actually overlap. Now line_intervals[line] holds a list
of [start, end) intervals and the candidate is tested against
the whole list with a gap-aware interval-overlap check.