Pure black is the correct color for text. Ink and paper manufacturers go to great lengths to make inks and papers with the darkest blacks and brightest whites, and there's no reason text on screen should be any different. Firefox's Reader View foolishly throws away contrast with gray text, but this can be fixed in chrome/userContent.css in the Firefox profile directory:

  @-moz-document url-prefix("about:reader") {
    body {
      background-color: #FFFFFF !important;
      color: #000000 !important;
    }
  }
toolkit.legacyUserProfileCustomizations.stylesheets needs to be set to true in about:config for recent versions of Firefox to load userContent.css

Some people complain about excessive brightness being hard on their eyes. They likely have their monitor brightness set too high. Most monitors can have their brightness set using DDC/CI (this sometimes needs to be enabled from the monitor's OSD). Most Linux distributions include "ddcutil". Install it and give the user who'll run it permissions to access I2C. In Debian, this can be accomplished by adding them to the i2c group.

Find out which I2C buses your monitors are attached too:

  ddcutil detect
Now you can change brightness from the command line:

  ddcutil --bus=6 setvcp 10 50
The first number after setvcp is the feature value to set. "10" is the standard feature value for brightness. The second number is the percentage brightness. I suggest picking values for low/medium/high brightness for each monitor, and binding a script that sets all them at once to the otherwise rarely used PrtScn/ScrLk/Pause keys. Presumably there is some way to do the same thing on other operating systems.
Looking to have easy control of monitor brightness?

For Mac users, look at https://lunar.fyi/. There are a bunch of other options as well.

For Windows, look at https://github.com/emoacht/Monitorian