Ответ 1
Причина li:not(li > ul > li)
не работает, потому что li > ul > li
не является простым селектором (как отметил Феликс Клинг в комментариях к вашему вопросу).
Самый простой способ получить верхний уровень - дать класс или id внешнему самому ul
а затем сделать:
.ulClassNameOrID > li {}
Однако следующий получает то, что вы хотите также (см скрипки), поскольку она не выбирает любой ul
, которая является прямым потомком предыдущего li
(так не Подсписок внешнего списка):
:not(li) > ul > li {}