Атрибут CSS z-index относится только к элементам, которые существуют на одном уровне в иерархии DOM. Поэтому значение z-index, помещенное в красный цвет, не имеет значения. Только z-индекс по синему и зеленому веществу. Поскольку z-индекс синего выше, чем у зеленого, он появляется сверху. Несмотря на то, что он интуитивно понятен, он соответствует спецификациям.
У меня нет исправления, не связанного с изменением HTML, статически или во время выполнения с использованием JavaScript. Например. если красный появился на одном уровне с синим и зеленым, он должен работать нормально.