I think that HSV::opposite() is probably too strong here. HSV::darker() might be better. Experimentation needed.