Z-index with before pseudo-element
The ::before pseudo-element is placed inside the header element.
CSS Spec:
The :before and :after pseudo-elements interact with other boxes as if they were real elements inserted just inside their associated element.
Setting the z-index for the header element creates a new Stacking Context, so the new pseudo element you created can not float behind the header element, because it would have to go outside that Stacking Context.
I suggest that you simply precede the header element by another element, so it stacks correctly by default. Example.