I can say with very good certainty, then, that it’s almost undoubtedly a monitor contrast setting, rather than anything you’re doing on your end.
I designed a set of custom reports recently that used a similar gray as a background for zebra striping rows (we used #f2f2f2, and it looks like you’re using a slightly lighter #f5f5f5). This showed fine on my computer, but our QA tester wasn’t able to see the zebra striping at all, despite confirming it was coded correctly. We ended up adjusting her monitor contrast and the issue resolved.
So long as you’re using any sufficiently light shade of gray, you’ll run the risk of this happening. Whether or not it does depends entirely on the quality and settings of the individual display.
For us, it wasn’t a huge problem as these reports are meant to be printed, so we didn’t take any steps to fix the issue. The only realistic fix, unfortunately, would have been to darken the background color, which means adjusting the font color as well to satisfy contrast accessibility requirements, as well as (possibly extensive) cross-browser and device compatibility testing to determine the “minimum visible gray.” For us, it just wasn’t worth the effort.