Fellow light theme user here. Forced terminal colors are the bane of my existence. I would kill for a contrast-aware terminal emulator that forces every character to have a minimum contrast with its background.
You can probably hack suckless' st terminal to do this without too much effort (just checking for \x1b[41m and \x1b[100m and the reverse attribute is probably enough, not many use the 256 colours or true colours to set the background, although you can make it as complex as you want).
For 99% of things it's not really an issue so I never bothered: you can either configure the colours or you can just disable them fairly easily.
iTerm2 on the Mac has this. It's a "minimum contrast" slider from 0 to 100% which does what you'd expect. It's nice that it's adjustable.
Windows Terminal has something like this, but finds a way to screw it up. I use Windows Terminal for development over SSH in my current job. It has a checkbox "Automatically adjust lightness of indistinguishable text" (non-adjustable), but it doesn't seem to change the cursor. Whatever colour I set the cursor to, whatever shape, and even with blinking, the cursor is nearly invisible in some of the terminal tools I use, when it is close to the background colour. Even ancient terminal emulators pick a contrasting colour for the cursor. It is an obvious requirement, and Windows Terminal does the opposite, so you can see text but not the cursor.