Split a total across rows with largest-remainder rebalancing, per-row locks and min/max limits — the shares always add up to the target exactly.
npx shadcn@latest add @zyeon/percent-allocatorZyeon UI limits how often it can be asked, and Percent Allocator hasn't had its turn. Its source will show here once it has.