I hate to over-simplify, but here's what I recommend for a #CSS architecture:
- use selectors for selecting (not for specificity)
- use data-attributes for grouped selector patterns
- use at-layer for layering selector priority (widely available)
- use at-scope for scoping selectors (newly available)
- use nesting for modifiers on a selector
Grouped selector patterns are things like "utility classes" where you might have several different ".size-something" all prefixed. Switch to [data-size=something] to group those in a unique namespace.
Scoping breaks up the 'block_element' part of BEM, and nesting breaks up the 'element-modifier' part.