Whenever a line in the set runs out of quota, balancing is run again to take quota from lines that haven't yet run out and pass it to the lines that have run out.
From a user's perspective, this means that you don't
hit your "quota reached" action (block/slow/auto- bill) until you have completely run out of quota across your set of lines. However, there can be confusing states where (e.g.) you have a total of 25GB quota left, shown to you as line 1 having 20GB quota and line 2 having 5GB quota. Don't panic; when the line with 5GB quota runs out of quota completely, balancing will kick in and adjust the situation.
In our example case, if asymmetric speeds and/or per-line
[[IPv6 ]] routing means that you use 10GB on line 1, and 5GB on line 2, you'll hit the point where you have one line with 10GB quota and another line with 0GB quota. Balancing will detect this, and rearrange so that you have 5GB per line. If you then use 5GB on line 1 and 1 GB on line 2, balancing will kick in again, and give you 2GB per line. This will continue until you run out of quota, and your out-of-quota action (block/slow/auto-bill ) will kick in.
If you apply a top-up before you run out of quota, this is only applied to one line. The expectation is that balancing will spread the top-up among your lines as needed.