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 ...

O tw-merge é sensacional! Mas quer melhorar?

Existe a lib tailwind-variants que transforma a forma como trabalhamos com Tailwind. E o melhor, ela usa o tw-merge por baixo dos panos. :)

É possível criar temas completos de componentes, que suporta slots (elementos), variantes, herança e por aí vai.

Docs: https://www.tailwind-variants.org/