Und [id^="submenu-"] fasst doch nur (#submenu-ucjs,#submenu-css,#submenu-CSSShadow,#submenu-cssweb) zusammen.
Und das ziemlich elegant sogar. Man könnte auch noch kaskadiertes CSS nutzen.

Einführung in den CSS-Cascade - CSS: Cascading Style Sheets | MDN
Der Cascade ist ein Algorithmus, der definiert, wie Benutzeragenten Eigenschaftswerte aus verschiedenen Quellen kombinieren. Die Cascade legt fest, welche…
developer.mozilla.org
Da ist jetzt noch nix mit hofer und after drin.
Aber ich selbst würde :hover und ::after nicht zusammelegen wollen, weil mWn ::after nur für das :hover gilt, aber nicht ohne :hover. Also braucht es schon wieder zwei Definition.
::after
:hover::after
oder
:hover {...::after} (kaskadiertes CSS)
Andersrum dürfte nicht funktionieren, weil after den Content nach einem Element stellt, wobei das Element ge:hover:t wird und ::after zum Element gehört.