How do you prevent CSS stylesheets (or preprocessed LESS or SASS...) from becoming an incomprehensible mess, where it's impossible to predict anymore what styles will affect each elements and you have to do all further tweaks to you CSS based design by painstaking and endless trial and error?
Context: every time I start working on a website, I start with a clean and well organizes set of stylesheets, a framework (usually Bootstrap), then a layout stylesheet, a typography one, for some sites a color scheme stylesheet, and then a general "looks" one where styles are grouped by regions and subregions and so on. And it's all nice and clean until by slowly adding stuff, things reach a "breaking point": I can no longer "run in my head" the style rules, the selector have become so complicated that I cannot easily anticipate what elements a new rule will apply to, so I start breaking the hierarchy and add a "tweaks1.css" tweaks layer, then a "tweaks2.css" and then all it's downhill, the styling has become utterly incomprehensible!
...and the same thing happens whether I use LESS or SASS too. CSS's cascading nature always gets the best of me. So... is there any way to force CSS into submission? are there any "design patterns" here?
Note: I'm a programmer, I have experience in more than one paradigm and programming language, and I have no problem wrangling large codebases, but when I get to frontend work, somehow the "cascading rules" logic of CSS simply breaks my mind at a point... I used to get the same "incomprehensibility" problem with Javascript spaghetti, but for code there are patterns and best-practices and I find ways to refactor things into submission...