I don't think it's much harder to follow that logic. You just replace `input:invalid` with `input:invalid:not(:focus)`.
My point is that this should be the exception, not the rule. I certainly don't think this level of abstracted complexity is necessary, or even better, in most scenarios. I'm talking at a design or implementation level.
So in fact I think it is the rule, not the exception.
Unfortunately you have to do a dumb JS dance to get these reasonable affordances. Hard to blame people for not reimplementing all this shit even if it’s critically useful for many folks.