En gros, les règles CSS ont des priorités, ça marche comme ça :
(par ordre d'application)
universel (*)
balise (p, span...)
class
id
Si tu fais un selecteur "composé" par exemple div.msg ça sera supérieur à class mais toujours inférieur à un ID. Idem, pour les pseudo-tags (je crois que ça s'appelle comme ça ? genre .msg:nth-child(2n)) c'est supérieur à un simple .msg.
Je suis plus sûr pour les a[href="..."] je suppose que c'est après le a mais par rapport à un a:nth-child(2n)... j'aurais tendance à dire après aussi...
MAIS, si tu mets un !important la priorité sera encore supérieure, donc tu es sûr que ce sera affiché comme tu veux (attention, les règles que j'ai dit précedemment s'appliquent toujours donc une règle avec !important dans un #id qui vise la même chose qu'une règle avec !important dans un .class sera normalement celle qui prévaudra... c'est un bug particulièrement chiant à trouver).
Le truc c'est que stylish rajoute la feuille de style mais modifie evidemment pas celles déjà présentes donc faut mettre !important si tu veux pas que les règles déjà présentes interfèrent avec celles que tu veux rajouter.