No meu trabalho estamos usando tailwind... sobre a quantidade de classes, estamos usando a lib tw-merge, passando um array de strings e segmentando grupos de classes em cada string +- assim:
merge([
'p-8 m-8',
'sm:p-10 sm:p-10',
'lg:etc...'
])
E você vai segmentando de acordo com sua necessidade como dark:
ou hover:
etc ...