Значение z-index, отличное от auto, создает новый контекст укладки. Поэтому неверно: элемент UL со свойством z-index: 0 по-прежнему создает этот контекст. А вот элемент A теперь никак не повлияет на свои псевдоэлементы, они будут укладываться относительно UL. А тень в данном случае "исчезает" просто потому, что фон установлен на A (попробуйте убрать background-color у элемента A на UL). Порядок укладки внутри одного контекста следующий: корневой элемент;позиционированный (со своими потомками) с отрицательным значением z-index;не позиционированные элементы (появляются в том порядке, как определены в DOM);позиционированные (и потомки) с z-index: auto;позиционированные (и потомки) с положительным значением z-index.То есть в данном случае получается, если вы поставите не отрицательное значение, то тень будет выше предыдущего в DOM'е элемента A, фон которого перекрывал до этого box-shadow. Это значение по умолчанию.