NVIDIA GPU
NVIDIA Control Panel > Display > Change resolution > Output dynamic range = Full.
If 0 and 16 look identical, or 235 and 255 look identical, your chain is clipping a range - run the full test for a verdict.
Your result
Golden rule: both ends of the cable must match - Full on both, or Limited on both. "Auto" often guesses wrong, so set it manually.
NVIDIA Control Panel > Display > Change resolution > Output dynamic range = Full.
AMD Software > Display > Pixel Format / Color Range = Full RGB 4:4:4.
Intel Graphics Command Center > Display > General > Quantization Range = Full.
Settings > Screen and Video > RGB Range. Automatic usually works; if blacks look wrong, force Limited for a TV or Full for a PC monitor.
Settings > General > TV and display options > Video fidelity > Color space: Standard = Limited (TV), PC RGB = Full (monitor).
Picture settings > HDMI Black Level (or Video range). Match it to what the source actually sends.
Picture > Expert Settings > HDMI Black Level: Normal = Full, Low = Limited.
Picture > Additional settings > Black Level: High = Full, Low = Limited.
Set Full range on both ends. Monitors expect every value 0-255; Limited here causes grey blacks and dull whites.
Check the TV "HDMI Black Level" first, then match the GPU output range to it. A mismatch gives a crushed or washed-out picture.
Limited / Standard on both ends is the safe default for TVs. Only use Full / PC RGB on a PC monitor.
Video content is mastered in limited range by design. If only videos look washed out, the bug is in the video path - not your display range.
Pixel-exact canvas ramp. CSS gradients are dithered by the browser and hide real banding - this one is drawn value by value.
What your browser reports about this screen. Informational only - it cannot detect the cable range.
If the right square looks deeper and more saturated, your display and browser run a wide-gamut (P3) pipeline. Identical squares = sRGB pipeline.