I have some bones to pick with the conventional way of thinking about morality where actions are either "okay" or "not okay". The first issue here is the hard divide. It requires you to find the exact point where an action goes from "okay" to "not okay". Usually something important depends on these hard divides (like whether something is a mortal sin or not, whether it's a crime or not).
Discontinuity is dangerous because it causes unnecessary conflict. If you're thinking about morality in this way, then you have to say in a binary whether something is "okay" or not, and so small disparities in judgement can lead to conflict between good people. Protagonists understand that being exact is impossible and that even earnest good people will often disagree on things like how much restitution is owed, et cetera. And yes, microscopic injustices inevitably result from this. But for a small grievance that probably doesn't come from malintent, it's better to let it slide. Protagonists can do that without feeling like it's a problem.
Besides that, the other thing that's very odd about the conventional framing is the asymmetry. There are deplorable actions and acceptable actions, but no easy way to describe an admirable action. This seems to explain our society's intensely negative framing of morality, where the only rule is "don't hurt others" and as long as you do that you're fine (albeit most people's ideas revolve around exceptions to that, but they avow the principle if asked directly) and the difference between innocent and guilty is far more important than the difference between innocent and heroic.
When I talk about morality, I try to use language that suggests a more symmetric spectrum. An action can be anywhere from praiseworthy through infinite shades of grey to despicable and punishable, and the precise point at which we draw the zero line in practice isn't really important because nothing that sensitive depends on it.