This should really be factored out into a tiny utility module. My instinct would be to take the small amount of time to do that now. What do you think @ianjorgensen?

Also, in developing tests for this in the viz unit tests, I discovered the fact that we're a little inconsistent (IMO) about what ranges are inclusive, and I think the better model will be:
< very-low boundary for very low
< low boundary for low
>= low and <= high for target (so target is the only inclusive range, and it's consistently inclusive at both ends)
> high for high
>= very-high for very high